在數據庫中會遇到子查詢也會遇到多表連接,但是有的時候多表查詢和子連接可以相互的轉換(主要還是看情況,有的時候轉換容易,而有的時候轉換是非常困難的。
###個人的理解是只用什么方便就用哪個查詢,使用哪個順手就用哪個查詢。不要因為這兩個方法可以相互轉換寫出來一個就要想破腦袋的將另一個方法也寫出來,雖然可以轉換,但有的時候真的可能轉換不聊,尤其是對剛接觸SQL子查詢的新手,對什么都充滿了好奇,想出一種方法就想用另一種方法將其求解出來。)
###首先先說一下使用這兩個方法的條件(說錯了,請大家指點) ###使用連接的時候。 假設要顯示兩個列,其中一個列來至一張表,另一個列來至令一張表。需要將這兩張表都顯示出來的話,需要將這兩張表進行關聯之后再顯示出來。例如:常用的有員工表和部門表  員工表  部門表 要將這從這兩個部門中的分別抽取一個值(員工表中取一個:員工的姓名,部門表中從中抽取一個:部門的名稱)寫出的結果如下表: ``` SELECT a.last_name,b.department_name FROM HR.EMPLOYEES a JOIN HR.DEPARTMENTS b ON a.department_id = b.department_id; ```  ###使用子查詢的時候。 假如要顯示一個表中的重要數據。需要跟另一個表中的數據進行對比之后才能顯示出來(或者是與本表中的某個數據進行對比才能顯示出來),但是不需要顯示對比的表的內容。所以可以使用子查詢的方式進行挑選。 ###使用的例子:假設要查詢員工號等於某一個員工,工資比某一員工高的員工。如下: ``` //使用子查詢的方式進行寫 SELECT last_name, job_id, salary FROM HR.employees WHERE job_id = ( SELECT job_id FROM HR.employees WHERE last_name = 'Abel' ) AND salary > ( SELECT salary FROM HR.employees WHERE last_name = 'Abel' );
//使用多表連接
SELECT a.last_name
FROM HR.EMPLOYEES a
JOIN HR.EMPLOYEES b ON(a.job_id = b.job_id) //使用等值的方式進行連接
JOIN HR.EMPLOYEES c ON(a.salary > c.salary) //使用非等值的方式進行連接
WHERE B.LAST_NAME = 'Abel' AND c.last_name = 'Abel' //個人的理解:將各各表中的內容進行篩選
