關於多表查詢sql常用的連線語句:左外連線、右外連線、內連線
1)內聯接:
內聯接使用比較運算子(使用像
= 或 <> 之類的比較運算子)根據每個表共有的列的值匹配兩個表中的行,根據這兩張表中相同列的條件,得出其 交集。例如: 檢索 students和courses表中學生標識號相同的所有行。
有兩種,顯式的和隱式的,返回連線表中符合連線條件和查詢條件的資料行(連結表就是資料庫在做查詢形成的中間表)。
隱式的內連線:
沒有INNER JOIN,形成的中間表為兩個表的笛卡爾積。
顯示的內連線:SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAME FROM CUSTOMERS C,ORDERS O WHERE C.ID=O.CUSTOMER_ID;
一般稱為內連線,有INNER
JOIN,形成的中間表為兩個表經過ON條件過濾後的笛卡爾積。
SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAME
FROM CUSTOMERS C INNER JOIN ORDERS O ON C.ID=O.CUSTOMER_ID;
但是,這兩個查詢的結果是一樣的。
2)左向外聯:
是用的是LEFT JOIN或LEFT OUTER JOIN 連線語句。
根據兩張表的關係(外來鍵關聯),笛卡爾過濾,也就是求出兩張表的交集, 如果交集中,左邊表的行, 在右邊表中沒有匹配,則該條記錄左邊表有資料, 右邊表所有的欄位都為null。
左外連線時,寫where語句的獨立查詢條件: 規則, on後面寫連線條件, where後寫查詢條件
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID
WHERE O.ORDER_NUMBER<>'MIKE_ORDER001';
3)右外連線:
RIGHT JOIN 或 RIGHT OUTER JOIN 連線語句
和左外連線是相反的,查出的兩張表的交集, 如果這條記錄,右邊表有資料,左邊表沒有, 則把左邊表的欄位都設定為null。
案例:
a表 id name b表 id job parent_id
1 張3 1 23 1
2 李四 2 34 2
3 王武 3 34 4
a.id同parent_id 存在關係
內連線查詢:
select a.*,b.* from a inner join b on a.id=b.parent_id
結果是
1 張3 1 23 1
2 李四 2 34 2
左連線 :
select a.*,b.* from a left join b on a.id=b.parent_id
結果是
1 張3 1 23 1
2 李四 2 34 2
3 王武 null
右連線 :
select a.*,b.* from a right join b on a.id=b.parent_id
結果是
1 張3 1 23 1
2 李四 2 34 2
null 3 34 4
對於SQL查詢的基本原理:
1)單表查詢:根據WHERE條件過濾表中的記錄,然後根據SELECT的選擇列選擇相應的列進行返回最終結果。
2)兩表連線查詢: 在on後面寫連線條件, 在where後面寫過濾的查詢條件,然後再根據SELECT指定的列返回查詢結果。
3)多表連線查詢:先對第一個和第二個表按照兩表連線做查詢,然後用查詢結果和第三個表做連線查詢,以此類推,直到所有的表都連線上為止,最終形成一箇中間的結果表,然後根據WHERE條件過濾中間表的記錄,並根據SELECT指定的列返回查詢結果。
關於on條件和where條件的區別:
ON條件:是過濾兩個連結表笛卡爾積形成中間表的約束條件。
WHERE條件:ON只進行連線操作,WHERE只過濾中間表的記錄。
對於連線型別的選擇: 在實際運用中如果連線型別選擇不當, 不但出現效率低並且可能還會出現邏輯的錯誤
1、
查兩表關聯列相等的資料用內連線
2、
Col_L是Col_R的子集時用右外連線。(左邊表是右邊表的子集,用右外)
3、
Col_R是Col_L的子集時用左外連線。(右邊表是左邊表的子集, 用左外)
4、 求差操作的時候用聯合查詢。
並且,多個表查詢的時候,這些不同的連線型別可以寫到一塊
例如:
SELECT T1.C1,T2.CX,T3.CY
FROM TAB1 T1
INNER JOIN TAB2 T2 ON (T1.C1=T2.C2)
INNER JOIN TAB3 T3 ON (T1.C1=T2.C3)
LEFT OUTER JOIN TAB4 ON(T2.C2=T3.C3);
WHERE T1.X >T3.Y;
參考:http://blog.csdn.net/nieson2012/article/details/45789461