MySQL聯表查詢可以說是使用MySQL必須面對的問題,而且在實際的工作中,使用比較多的查詢大概也是聯表查詢。雖然,經常使用聯表查詢,但是你真的清楚其中的機制嗎?
帶著這個問題,下面讓我們進入本文的主題——圖說MySQL的幾種join連接。
基本概念
連接(join)就是將多個表中的字段根據匹配條件進行橫向的拼接。
左表:在語法上位於join左邊的表,叫左表。
右表:在語法上位於join右邊的表,叫右表。
圖說join連接
1、交差連接(cross join)
用左表中的每一行數據去匹配右表中的每一行數據,且認為全部匹配成功。最終的結果集是迪卡爾積。
語法:
select * from 左表 cross join 右表;
示例:
2、內連接(inner join)
使用左表中的每一條記錄去匹配右表的所有的記錄,根據匹配的條件,如果成立,保留整條記錄,如果不成立則丟棄。
用文氏圖表示,則如下:
語法:
select * from 左表 【inner】 join 右表 【on 條件】
示例:
3、左連接(left join)
將左表作為主表,用主表中的每一條記錄,去匹配從表(右表)中的所有記錄,根據匹配的條件,如果成功則將主表的記錄中的字段與從表的記錄中的記錄,拼接成一條完整的記錄,放到結果集;如果不成功則將從表中的記錄中的字段全部置為null,保留主表中的字段。
用文氏圖表示,如下:
語法:
select * from 左表 left join 右表【on條件】
示例:
4、右連接(right join)
將右表作為主表,用主表中的每一條記錄,匹配從表中的所有記錄,根據匹配的條件,如果成功則將主表的記錄中的字段與從表的記錄中的記錄,拼接成一條完整的記錄,放到結果集。如果不成功則將從表中的記錄中的字段全部置為null,保留主表中的字段。
用文氏圖表示,如下:
語法:
select * from 左表 right join 右表【on條件】
示例:
5、自然連接(natural join)
對兩表進行連接查詢時,系統會盲目的用同名字段為匹配條件。會合並同名字段,並且將匹配字段放到結果集的前面。
然自然連接分為左自連接和右自然連接。
直接使用natural join連接主表和從表,相當於內連接
當使用natural left join時,相當於左連接
當使用natural right join時,相當於右連接
自然鏈接(natural join)
語法:
select * from 左表 natural join 右表
示例:
左自然連接(natural left join)
語法:
select * from 左表 natural left join 右表
示例:
右自然連接(natural right join)
語法:
select * from 左表 natural right join 右表
示例:
閱讀更多 編碼之道 的文章