1.1 實驗內容
SQL 中最常用的 SELECT 語句,用來在表中選取數據,本節實驗中將通過一系列的動手操作詳細學習 SELECT 語句多表查詢。
1.2 實驗知識點
- 交叉連接(cross join)
- 內連接(inner join)
- 外連接(left join ,right join)
- 聯合查詢(union ,union all)
- 全連接(full join )
1.3 示例表
1.4 多表連接查詢
-
交叉查詢:cross join
上圖中只是單純的將兩張表使用同一條select語句查詢出來,並沒有添加任何額外的過濾條件,得出的爲兩張表的“笛卡爾積”
下圖爲交叉連接的官方建議的標準寫法:
由上圖可知兩種查詢結果相同。
-
內連接: inner join
上圖中第一種方式爲標準的內連接查詢方式
-
外連接:left join,right join
“外連接”分爲兩種,“左外連接”和“右外連接”,我們只需要弄明白其中任何一個,就能明白另外一個是什麼意思。
左外連接(left outer join )簡稱左連接(left join)
對比內連接查詢
通過對比,發現在同樣的連接條件下“左外連接”查詢出的數據多一些,多出的一行由a表中a_id爲1的記錄和一條“空記錄”組成。
可是在b表中並不存在b_id爲2的記錄啊,爲什麼不符合連接查詢條件的記錄也會出現在查詢結果中呢?這就是左連接的特性。
左外連接“左側的表”中所有的記錄都會被展示出來,左側表中符合條件的記錄將會與由表中符合條件的記錄相互組合連接,左側中不符合的記錄將會與右側表中的“空記錄”進行連接
簡而言之: a表所有顯示,如果b中無對應關係,則值爲null.
右連接與左連接同理
b表所有顯示,如果a中無對應關係,則值爲null.
-
聯合查詢(union ,union all)
簡單理解成把多個查詢語句的查詢結果集中在一起顯示,語法示例如下:
從圖中可以看出,默認情況下,結果集以關鍵字union前的a表爲準,若需以b表爲準,更換相應語句順序即可。
注:
- 當使用union 連接兩個查詢語句時,兩個語句查詢出的字段數量必須相同,否則無法使用union進行聯合查詢
- 使用union時,重複的數據會被合併爲一條
我們能不能讓重複的數據展示出來?答案是肯定的,使用 union all
解決該問題。