一、定義
1、內聯接
典型的聯接運算,使用像 = 或 <> 之類的比較運算符。包括相等聯接和自然聯接。 內聯接使用比較運算符根據每個表共有的列的值匹配兩個表中的行。例如,檢索 students 和 courses 表中學生標識號相同的所有行。
2、外聯接
外聯接可以是左向外聯接、右向外聯接或完整外部聯接。 在 FROM 子句中指定外聯接時,可以由下列幾組關鍵字中的一組指定:
-
1)LEFT JOIN 或 LEFT OUTER JOIN 左向外聯接的結果集包括 LEFT OUTER 子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均爲空值。
-
2)RIGHT JOIN 或 RIGHT OUTER JOIN 右向外聯接是左向外聯接的反向聯接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將爲左表返回空值。
-
3)FULL JOIN 或 FULL OUTER JOIN 完整外部聯接返回左表和右表中的所有行。當某行在另一個表中沒有匹配行時,則另一個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的數據值。
3、交叉聯接
交叉聯接返回左表中的所有行,左表中的每一行與右表中的所有行組合。交叉聯接也稱作笛卡爾積。 FROM 子句中的表或視圖可通過內聯接或完整外部聯接按任意順序指定;但是,用左或右向外聯接指定表或視圖時,表或視圖的順序很重要。有關使用左或右向外聯接排列表的更多信息,請參見使用外聯接。
二、示例
建立一個 student 和 clazz 表
clazz
id name
1 一班
2 二班
3 三班
student
id name clazz_id
1 小明 2
2 小紅 3
3 小張
內連接查詢:select* from student inner join clazz on clazz.id=student.clazz_id;
查詢結果,兩個表相同條件的的部分顯示出來。
左連接查詢:select* from student left outer join clazz
on clazz.id=student.clazz_id;
student 表中內容全部顯示,clazz 表顯示符合的條件,clazz 中沒有的地方顯示爲 null。
查詢結果
右連接查詢:select* from student right outer join clazz
on clazz.id=student.clazz_id;
clazz 表中內容全部顯示,student 表顯示符合的條件,student 中沒有的地方顯示爲 null。
查詢結果