文章目錄
- LEFT JOIN 關鍵字文法
- RIGHT JOIN 關鍵字文法
四:聯結查詢
1.聯結
1.1內聯結(inner join)
1.2外聯結(outer join)
1.2.1左聯結(left join)
1.2.2右聯結(right join)
1.3交叉聯結(cross join)
2.內聯結與自我聯結
內聯結:作用於兩個表,一般通過兩個表中相同的欄位的關係(=/<>)建立聯絡
自我聯結:作用於自身表的兩個執行個體
3.外聯結
1.左聯結
SQL LEFT JOIN 關鍵字
LEFT JOIN 關鍵字會從左表 (table_name1) 那裡返回所有的行,即使在右表 (table_name2) 中沒有匹配的行。
LEFT JOIN 關鍵字文法
SELECT column_name(s)FROM table_name1LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
注釋:在某些資料庫中, LEFT JOIN 稱為 LEFT OUTER JOIN。
原始的表 (用在例子中的):
"Persons" 表:
Id_P |
LastName |
FirstName |
Address |
City |
1 |
Adams |
John |
Oxford Street |
London |
2 |
Bush |
George |
Fifth Avenue |
New York |
3 |
Carter |
Thomas |
Changan Street |
Beijing |
"Orders" 表:
Id_O |
OrderNo |
Id_P |
1 |
77895 |
3 |
2 |
44678 |
3 |
3 |
22456 |
1 |
4 |
24562 |
1 |
5 |
34764 |
65 |
左串連(LEFT JOIN)執行個體
現在,我們希望列出所有的人,以及他們的定購 - 如果有的話。
您可以使用下面的 SELECT 語句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsLEFT JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
結果集:
LastName |
FirstName |
OrderNo |
Adams |
John |
22456 |
Adams |
John |
24562 |
Carter |
Thomas |
77895 |
Carter |
Thomas |
44678 |
Bush |
George |
|
LEFT JOIN 關鍵字會從左表 (Persons) 那裡返回所有的行,即使在右表 (Orders) 中沒有匹配的
2.右聯結
SQL RIGHT JOIN 關鍵字
RIGHT JOIN 關鍵字會右表 (table_name2) 那裡返回所有的行,即使在左表 (table_name1) 中沒有匹配的行。
RIGHT JOIN 關鍵字文法
SELECT column_name(s)FROM table_name1RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
注釋:在某些資料庫中, RIGHT JOIN 稱為 RIGHT OUTER JOIN。
原始的表 (用在例子中的):
"Persons" 表:
Id_P |
LastName |
FirstName |
Address |
City |
1 |
Adams |
John |
Oxford Street |
London |
2 |
Bush |
George |
Fifth Avenue |
New York |
3 |
Carter |
Thomas |
Changan Street |
Beijing |
"Orders" 表:
Id_O |
OrderNo |
Id_P |
1 |
77895 |
3 |
2 |
44678 |
3 |
3 |
22456 |
1 |
4 |
24562 |
1 |
5 |
34764 |
65 |
右串連(RIGHT JOIN)執行個體
現在,我們希望列出所有的定單,以及定購它們的人 - 如果有的話。
您可以使用下面的 SELECT 語句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsRIGHT JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
結果集:
LastName |
FirstName |
OrderNo |
Adams |
John |
22456 |
Adams |
John |
24562 |
Carter |
Thomas |
77895 |
Carter |
Thomas |
44678 |
|
|
34764 |
RIGHT JOIN 關鍵字會從右表 (Orders) 那裡返回所有的行,即使在左表 (Persons) 中沒有匹配的行。
3.交叉聯結(cross join)