1. 程式人生 > >Mysql Join語法解析與效能分析

Mysql Join語法解析與效能分析

table1:左表;table2:右表。

JOIN 按照功能大致分為如下三類:

INNER JOIN(內連線,或等值連線):取得兩個表中存在連線匹配關係的記錄。

LEFT JOIN(左連線):取得左表(table1)完全記錄,即是右表(table2)並無對應匹配記錄。

RIGHT JOIN(右連線):與 LEFT JOIN 相反,取得右表(table2)完全記錄,即是左表(table1)並無匹配對應記錄。

注意:mysql不支援Full join,不過可以通過UNION 關鍵字來合併 LEFT JOIN 與 RIGHT JOIN來模擬FULL join.

二.Inner join(交集)

內連線,也叫等值連線,inner join產生同時符合A和B的一組資料

select * from A inner join B on A.name = B.name;

二.Left join

select * from A left join B on A.name = B.name;

左連線從左表(A)產生一套完整的記錄,與匹配的記錄(右表(B)) .如果沒有匹配,右側將包含null。

三.求差集:

SELECT * FROM A LEFT JOIN B ON A.name = B.name WHERE B.id IS NULL

union

SELECT * FROM A right JOIN B ON A.name = B.name WHERE A.id IS NULL;

四.Right join

select * from A right join B on A.name = B.name;

同left join.

五.Cross join

交叉連線,得到的結果是兩個表的乘積,即笛卡爾積

笛卡爾(Descartes)乘積又叫直積。假設集合A={a,b},集合B={0,1,2},則兩個集合的笛卡爾積為{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。可以擴充套件到多個集合的情況。類似的例子有,如果A表示某學校學生的集合,B表示該學校所有課程的集合,則A與B的笛卡爾積表示所有可能的選課情況。

實際上,在 MySQL 中(僅限於 MySQL) CROSS JOIN 與 INNER JOIN 的表現是一樣的

,在不指定 ON 條件得到的結果都是笛卡爾積,反之取得兩個表完全匹配的結果。 INNER JOIN 與 CROSS JOIN 可以省略 INNER 或 CROSS 關鍵字,因此下面的 SQL 效果是一樣的:

FROM table1 INNER JOIN table2 

FROM table1 CROSS JOIN table2 

FROM table1 JOIN table2

五.Full join

select * from A left join B on B.name = A.name

union

select * from A right join B on B.name = A.name;