R
- 簡單多表查詢
from A, B:只要不符合主外鍵關係的數據,都不會顯示。 - 內連接
inner join:只要不符合主外鍵關係的數據,都不會顯示。 - 外連接-左外連
left join:以左表為主,只要不符合主外鍵關係的數據,null顯示。 - 外連接-右外連
right join:以右表為主,只要不符合主外鍵關係的數據,null顯示。 - 全外連
full join:兩張的數據,無論是否符合外鍵關係的數據,都會全部顯示。
簡單多表查詢(from A,B)和內連接(inner join)共同的特點:
不符合主外鍵關係的數據,不會被顯示出來。
笛卡爾乘積
查詢結果將Department所有記錄和Employee表所有記錄依次排列組合型成新的結果
1
2
3
--笛卡爾乘積
select * from Employee, Department
--查詢結果將Department所有記錄和Employee表所有記錄依次排列組合型成新的結果
簡單多表查詢
from A表, B表
只要不符合主外鍵關係的數據,都不會顯示。
1
2
3
4
5
6
7
8
9
10
11
12
13
--簡單多表查詢
--查詢員工資料,顯示部門名稱
select * from Employee, Department
where Employee.DepartmentId = Department.DepartmentId
--查詢員工資料顯示職級名稱
select * from Employee, [Rank]
where Employee.RankId = [Rank].RankId
--查詢員工資料顯示部門名稱,職級名稱
select * from Employee, Department, [Rank]
where Employee.DepartmentId = Department.DepartmentId
and Employee.RankId = [Rank].RankId
內連接查詢 Inner Join
只要不符合主外鍵關係的數據,都不會被顯示。
第一張表 inner join(內連接) 第二張表 on 兩張表的關係
很多張表的話,就繼續 inner join 下去:
select * from 第一張表
inner join(內連接) 第二張表 on 第一張表和兩張表的關係
inner join(內連接) 第三張表 on 第一張表和三張表的關係
1
2
3
4
5
6
7
8
9
10
11
12
--查詢員工資料,顯示部門名稱(inner join)
select * from Employee
inner join Department on Employee.DepartmentId = Department.DepartmentId
--查詢員工資料,顯示職級名稱
select * from Employee
inner join [Rank] on Employee.RankId = [Rank].RankId
--查詢員工資料,顯示部門名稱,職級名稱
select * from Employee
inner join Department on Employee.DepartmentId = Department.DepartmentId
inner join [Rank] on Employee.RankId = [Rank].RankId
簡單多表查詢(from A,B)和內連接(inner join)共同的特點:
不符合主外鍵關係的數據,不會被顯示出來
外連接(左、右、全)
左外連 Left Join
left join誰在左邊,誰為主。
以左表為主表進行數據顯示,主外鍵關係找不到的數據null取代。
例如:
1
2
3
4
5
select * from Department
left join Employee on Employee.DepartmentId = Department.DepartmentId
--結果
--1 摸魚部 test... 28 8 1 王五 男 1999-09-09 00:00:00 50000.00 098899900 2023-05-08 00:11:00
--2 人事部 ... NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
以部門Department為主表,但部門底下沒有員工的話,數據就會以NULL取代
範例
1
2
3
4
5
6
7
8
9
10
--查詢員工資料,顯示部門名稱
select * from Employee
left join Department on Employee.DepartmentId = Department.DepartmentId
--查詢員工資料,顯示職級名稱
select * from Employee
left join [Rank] on Employee.RankId = [Rank].RankId
--查詢員工資料,顯示部門名稱,職級名稱
select * from Employee
left join Department on Employee.DepartmentId = Department.DepartmentId
left join [Rank] on Employee.RankId = [Rank].RankId
右外連 Right Join
A left join B = B right join A
1
2
3
4
5
6
7
--右外連:A left join B = B right join A
--下面兩個查詢含義相同
select * from Employee
left join Department on Employee.DepartmentId = Department.DepartmentId
select * from Department
left join Employee on Employee.DepartmentId = Department.DepartmentId
全外連 Full Join
兩張表的數據,無論是否符合關係,都要顯示
1
2
3
--全外連:兩張表的數據,無論是否符合關係,都要顯示
select * from Employee
full join Department on Employee.DepartmentId = Department.DepartmentId