MySQL(join,left join,right join,cross join)
join 用於多表中欄位之間的聯絡,語法為:... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona
student表:即table1
student_class表:即table2
(inner) join(內連線,或等值連線):取得兩個表中存在連線匹配關係的記錄。
left (outer) join(左連線):取得左表(table1)完全記錄,即是右表(table2)並無對應匹配記錄。
right join(右連線):與 LEFT JOIN 相反,取得右表(table2)完全記錄,即是左表(table1)並無匹配對應記錄。
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的笛卡爾積表示所有可能的選課情況。
ps:實際上,在 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
MySQL本身不支援full join(全連線),但可以通過union來實現。