範例資料表:
Department(部門)
Employee(員工)
Department Id 3 的內容沒有被 Employee 的任何資料關聯,而 Employee Id 4 的資料也缺少 DepartmentId ,沒有對應的 Department。
語法如下:
上面有提到 Department Id 3 和 Employee Id 4 的資料都沒有和對方有關聯資料,所以這兩筆都不會顯示
查詢後可以發現 Department 表沒有對應到的資料出現了,而 Employee 沒有對應到的資料還是沒有出現
這裡就可以看到換成 Employee 沒有關聯到的資料有出現了
Department 和 Employee 所有資料都出現了,沒有的部分會填入 NULL
參考資料:
Microsoft.Learn - Joins (SQL Server)
Department(部門)
Department:
+--+----+
|Id|Name|
+--+----+
|1 |開發|
|2 |人資|
|3 |維運|
+--+----+
Employee(員工)
+--+----+------------+
|Id|Name|DepartmentId|
+--+----+------------+
|1 |美美 |1 |
|2 |大頭 |1 |
|3 |小明 |2 |
|4 |阿花 |null |
+--+----+------------+
Department Id 3 的內容沒有被 Employee 的任何資料關聯,而 Employee Id 4 的資料也缺少 DepartmentId ,沒有對應的 Department。
INNER JOIN (合併查詢)
通常在語法中使用 JOIN 就是指 INNER JOIN ,意思是兩個表有交集的部分,語法可以使用 JOIN 或是 INNER JOIN 兩個都可以。語法如下:
SELECT *
FROM Department
JOIN Employee ON Department.Id = Employee.DepartmentId;
上面有提到 Department Id 3 和 Employee Id 4 的資料都沒有和對方有關聯資料,所以這兩筆都不會顯示
+--+----+--+----+------------+
|Id|Name|Id|Name|DepartmentId|
+--+----+--+----+------------+
|1 |開發 |1 |美美|1 |
|1 |開發 |2 |大頭|1 |
|2 |人資 |3 |小明|2 |
+--+----+--+----+------------+
LEFT JOIN (左外部查詢)
這裡的 LEFT 並不是指 ON 後面的條件等於的左邊,而是指左表(主表),是指 FROM 條件後的第一個表:
SELECT *
FROM Department
LEFT JOIN Employee ON Department.Id = Employee.DepartmentId;
查詢後可以發現 Department 表沒有對應到的資料出現了,而 Employee 沒有對應到的資料還是沒有出現
+--+----+----+----+------------+
|Id|Name|Id |Name|DepartmentId|
+--+----+----+----+------------+
|1 |開發 |1 |美美|1 |
|1 |開發 |2 |大頭|1 |
|2 |人資 |3 |小明|2 |
|3 |維運 |null|null|null |
+--+----+----+----+------------+
RIGHT JOIN (右外部查詢)
RIGHT 就是語法中比較右側,JOIN 語法後面的那個表為主
SELECT *
FROM Department
RIGHT JOIN Employee ON Department.Id = Employee.DepartmentId;
這裡就可以看到換成 Employee 沒有關聯到的資料有出現了
+----+----+--+----+------------+
|Id |Name|Id|Name|DepartmentId|
+----+----+--+----+------------+
|1 |開發 |1 |美美|1 |
|1 |開發 |2 |大頭|1 |
|2 |人資 |3 |小明|2 |
|null|null|4 |阿花|null |
+----+----+--+----+------------+
FULL JOIN (全部外部查詢)
可以使用 FULL JOIN 或是 FULL OUTER JOIN ,兩個指令結果相同,都是取到兩張表的聯級
SELECT *
FROM Department
FULL JOIN Employee ON Department.Id = Employee.DepartmentId;
Department 和 Employee 所有資料都出現了,沒有的部分會填入 NULL
+----+----+----+----+------------+
|Id |Name|Id |Name|DepartmentId|
+----+----+----+----+------------+
|1 |開發|1 |美美|1 |
|1 |開發|2 |大頭|1 |
|2 |人資|3 |小明|2 |
|3 |維運|null|null|null |
|null|null|4 |阿花|null |
+----+----+----+----+------------+
參考資料:
Microsoft.Learn - Joins (SQL Server)
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com