徹底搞懂數據庫內連接、外連接

一、定義

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。

查詢結果







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章