SQL多表聯合查詢(交叉連線,內連線,外連線)
連線查詢:
交叉連線:
交叉連線返回的結果是被連線的兩個表中所有資料行的笛卡爾積,也就是返回第一個表中符合查詢條件的資料航數乘以第二個表中符合,查詢條件的資料行數,例如department表中有4個部門,employee表中有4個員工,那麼交叉連線的結果就有4 * 4 = 16條資料
SELECT * FROM 表1 CROSS JOIN 表2;
SELECT * FROM 表1,表2;
從上述描述情況可以看出,交叉連線的結果就是兩個表中所有資料的組合。需要注意的是,在實際開發中這種業務需求是很少見的,一般不會使用交叉連線,而是使用具體的條件對資料進行有目的的查詢
內連線:
內連線(INNER JOIN)又稱簡單連線或自然連線,是一種常見的連線查詢。內連線使用比較運算子對兩個表中的資料進行比較,並列出與連線條件匹配的資料航,組合成新的記錄,也就是說在內連線查詢中,只有滿足條件的記錄才能出現在查詢結果中。
SELECT 查詢欄位 FROM 表1 [INNER] JOIN 表2 ON 表1.關係欄位 = 表2.關係欄位;
在上述語法格式中,INNER JOIN用於連線兩個表,ON來指定連線條件,其中INNER可以省略。內連線其實還可以細分為如下兩類:
1.隱式內連線:顧名思義隱式的就是我們看不到inner join的關鍵字。而使用where關鍵字替代。
SELECT * FROM 表1,表2 where 表1.關係欄位 = 表2.關係欄位;
2.顯示內連線
SELECT * FROM 表1 inner join 表2 on 表1.關係欄位 = 表2.關係欄位;
SELECT * FROM 表1 join 表2 on 表1.關係欄位 = 表2.關係欄位;
外連線:
前面講解的內連線查詢中,返回的結果只包含符合查詢條件和連線條件的資料,然而有時還需要包含沒有關聯的資料,即返回查詢結果中不僅包含符合條件的資料,而且還包括左表(左連線或做外連線)、右表(右連線或右外連線)
或兩個表(全連線)中的所有資料,此時就需要使用外連線查詢,外連線分為左連線和右連線。
語法格式:
SELECT 所查欄位 FROM 表1 LEFT|RIGHT [OUTER] JOIN 表2 ON 表1.關係欄位 = 表2.關係欄位 WHERE 條件;
外連線的語法格式和內連線類似,只不過使用的是LEFT JOIN、RIGHT JOIN關鍵字,其中關鍵字左邊的表被稱為左表,關鍵字右邊的表被稱為右表。