首頁 > mysql教程 閱讀:0更新時間:2020-03-28 04:07:21

MySQL LEFT/RIGHT JOIN:外連接查詢

mysql 中內連接是在交叉連接的結果集上返回滿足條件的記錄;而外連接先將連接的表分為基表和參考表,再以基表為依據返回滿足和不滿足條件的記錄。

外連接更加注重兩張表之間的關系。按照連接表的順序,可以分為左外連接和右外連接。

左外連接又稱為左連接,在 FROM 子句中使用關鍵字 LEFT OUTER JOIN 或者 LEFT JOIN,用于接收該關鍵字左表(基表)的所有行,并用這些行與該關鍵字右表(參考表)中的行進行匹配,即匹配左表中的每一行及右表中符合條件的行。

在左外連接的結果集中,除了匹配的行之外,還包括左表中有但在右表中不匹配的行,對于這樣的行,從右表中選擇的列的值被設置為 NULL,即左外連接的結果集中的 NULL 值表示右表中沒有找到與左表相符的記錄。

【實例 1】在 tb_students_info 表和 tb_departments 表中查詢所有學生,包括沒有學院的學生,輸入的 SQL 語句和執行結果如下所示。
mysql> SELECT name,dept_name
    -> FROM tb_students_info s
    -> LEFT OUTER JOIN tb_departments d
    -> ON s.dept_id = d.dept_id;
+--------+-----------+
| name   | dept_name |
+--------+-----------+
| Dany   | Computer  |
| Jane   | Computer  |
| Jim    | Computer  |
| Henry  | Math      |
| John   | Math      |
| Green  | Chinese   |
| Thomas | Chinese   |
| Susan  | Economy   |
| Tom    | Economy   |
| Lily   | NULL      |
+--------+-----------+
10 rows in set (0.03 sec)
結果顯示了 10 條記錄,name 為 Lily 的學生目前沒有學院,因為對應的 tb_departments 表中并沒有該學生的學院信息,所以該條記錄只取出了 tb_students_info 表中相應的值,而從 tb_departments 表中取出的值為 NULL。

右外連接又稱為右連接,在 FROM 子句中使用 RIGHT OUTER JOIN 或者 RIGHT JOIN。與左外連接相反,右外連接以右表為基表,連接方法和左外連接相同。在右外連接的結果集中,除了匹配的行外,還包括右表中有但在左表中不匹配的行,對于這樣的行,從左表中選擇的值被設置為 NULL。

【實例 2】在 tb_students_info 表和 tb_departments 表中查詢所有學院,包括沒有學生的學院,輸入的 SQL 語句和執行結果如下所示。
mysql> SELECT name,dept_name
    -> FROM tb_students_info s
    -> RIGHT OUTER JOIN tb_departments d
    -> ON s.dept_id = d.dept_id;
+--------+-----------+
| name   | dept_name |
+--------+-----------+
| Dany   | Computer  |
| Green  | Chinese   |
| Henry  | Math      |
| Jane   | Computer  |
| Jim    | Computer  |
| John   | Math      |
| Susan  | Economy   |
| Thomas | Chinese   |
| Tom    | Economy   |
| NULL   | History   |
+--------+-----------+
10 rows in set (0.00 sec)
可以看到,結果只顯示了 10 條記錄,名稱為 History 的學院目前沒有學生,對應的 tb_students_info 表中并沒有該學院的信息,所以該條記錄只取出了 tb_departments 表中相應的值,而從 tb_students_info 表中取出的值為 NULL。

beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。

通俗易懂,深入淺出,一篇文章只講一個知識點。

文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。

文章不涉及代碼,不燒腦細胞,人人都可以學習。

當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!

相關文章

国产亚洲欧美日韩