JOIN – Mệnh đề

Mô tả

  • Mệnh đề JOIN dùng để truy vấn dữ liệu trên nhiều bảng.
  • Sử dụng biểu thức điều kiện (WHERE) trong truy vấn.

Kết bằng (Equi Join)

Cú pháp

SELECT <Bảng_1>.<Cột>, <Bảng_2>.<Cột>
FROM <Bảng_1>, <Bảng_2>
WHERE <Bảng_1>.<Cột> = <Bảng_2>.<Cột>

Ví dụ

  • Sử dụng điều kiện kết bằng trong mệnh đề WHERE:
SELECT Employee_id, Last_name, EMPLOYEES.Department_id, DEPARTMENTS.Department_id, Department_name
FROM EMPLOYEES, DEPARTMENTS
WHERE EMPLOYEES.Department_id = DEPARTMENTS.Department_id

  • Sử dụng bí danh cho bảng, đơn giản hóa các câu truy vấn khi cần sử dụng tên bảng cho việc truy xuất các cột:
SELECT Employee_id, Last_name, E.Department_id, D.Department_id, Department_name
FROM EMPLOYEES E, DEPARTMENTS D
WHERE E.Department_id = D.Department_id

  • Kết nhiều hơn hai bảng: để kết n bảng, ta cần tối thiểu n-1 phép kết. Ví dụ để kết 3 bảng, ta cần tối thiểu 2 phép kết bảng:

SELECT E.Employee_id, E.Last_name, E.Department_id, D.Department_id, D.LOCATION_ID, L.LOCATION_ID, D.DEPARTMENT_NAME, L.CITY
FROM EMPLOYEES E, DEPARTMENTS D, LOCATIONS L
WHERE E.Department_id = D.Department_id AND L.Location_id = D.Location_id

Kết không bằng (Non Equi Join)

Ví dụ

SELECT E.Employee_id, E.Last_name, E.Salary, J.Grade_level
FROM EMPLOYEES E , JOB_GRADES J
WHERE E.Salary BETWEEN J.Lowest_sal AND J.Highest_sal

Kết với chính mình (Self Join)

Ví dụ

SELECT W.Last_name + N' làm việc cho ' + M.Last_name AS "NHÂN VIÊN VÀ NGƯỜI QUẢN LÝ"
FROM EMPLOYEES W, EMPLOYEES M
WHERE W.Manager_id = M.Employee_id

Kết bằng mệnh đề JOIN

Mệnh đề CROSS JOIN

Mô tả

  • Mệnh đề CROSS JOIN sẽ kết mỗi dòng của bảng 1 với tất cả các dòng của bảng 2.

Cú pháp

SELECT <Bảng_1>.<Cột>, <Bảng_2>.<Cột>
FROM <Bảng_1> CROSS JOIN <Bảng_2>

Ví dụ

SELECT E.Employee_id, E.Last_name, E.Department_id, D.Department_id, D.Department_name
FROM EMPLOYEES E CROSS JOIN DEPARTMENTS D

Sử dụng mệnh đề [INNER] JOIN… ON…

Mô tả

  • Tách biệt đều kiện kết với các điều kiện chọn lọc dữ liệu khác.
  • Các câu truy vấn trở nên dễ đọc hơn.

Cú pháp

SELECT <Bảng_1>.<Cột>, <Bảng_2>.<Cột>
FROM <Bảng_1> [INNER] JOIN <Bảng_2> ON <Bảng_1>.<Cột> = <Bảng_2>.<Cột>

Ví dụ

  • Kết hai bảng:
SELECT E.Employee_id, E.Last_name, E.Department_id, D.Department_id, D.Department_name
FROM EMPLOYEES E JOIN DEPARTMENTS D ON E.Department_id = D.Department_id

  • Kết nhiều hơn hai bảng:
SELECT E.Employee_id, E.Last_name, E.Department_id, D.Department_id, D.Location_id, L.Location_id, D.Department_name, L.City
FROM EMPLOYEES E JOIN DEPARTMENTS D ON E.Department_id = D.Department_id JOIN LOCATIONS L ON L.Location_id = D.Location_id

  • Dùng mệnh đề WHERE lọc dữ liệu:
SELECT E.Employee_id, E.Last_name, E.Department_id, D.Department_id, D.Location_id, L.Location_id, D.Department_name, L.City
FROM EMPLOYEES E JOIN DEPARTMENTS D ON E.Department_id = D.Department_id JOIN LOCATIONS L ON L.Location_id = D.Location_id
WHERE E.Department_id = 90

Phép kết trái LEFT [OUTER] JOIN

Mô tả

  • LEFT JOIN trả về tất cả giá trị từ bảng bên trái và các giá trị được so khớp từ bảng bên phải hoặc NULL trong trường hợp không có so khớp nào.

Cú pháp

SELECT <Bảng_1>.<Cột>, <Bảng_2>.<Cột>
FROM <Bảng_1> LEFT [OUTER] JOIN <Bảng_2> ON <Bảng_1>.<Cột> = <Bảng_2>.<Cột>

Ví dụ

SELECT E.Employee_id, E.Last_name, E.Department_id, D.Department_id, D.Department_name
FROM EMPLOYEES E LEFT JOIN DEPARTMENTS D ON E.Department_id = D.Department_id

Phép kết phải RIGHT [OUTER] JOIN

Mô tả

  • RIGHT JOIN trả về tất cả giá trị từ bảng bên phải và các giá trị được so khớp từ bảng bên trái hoặc NULL trong trường hợp không có so khớp nào.

Cú pháp

SELECT <Bảng_1>.<Cột>, <Bảng_2>.<Cột>
FROM <Bảng_1> RIGHT [OUTER] JOIN <Bảng_2> ON <Bảng_1>.<Cột> = <Bảng_2>.<Cột>

Ví dụ

SELECT E.Employee_id, E.Last_name, E.Department_id, D.Department_id, D.Department_name
FROM EMPLOYEES E RIGHT JOIN DEPARTMENTS D ON E.Department_id = D.Department_id

Phép kết đầy đủ FULL [OUTER] JOIN

Mô tả

  • FULL JOIN kết hợp kết quả của cả LEFT JOIN và RIGHT JOIN.
  • Bảng được kết hợp sẽ chứa tất cả bản ghi từ cả hai bảng và điền vào giá trị NULL cho các giá trị không so khớp nhau.

Cú pháp

SELECT <Bảng_1>.<Cột>, <Bảng_2>.<Cột>
FROM <Bảng_1> FULL [OUTER] JOIN <Bảng_2> ON <Bảng_1>.<Cột> = <Bảng_2>.<Cột>

Ví dụ

SELECT E.Employee_id, E.Last_name, E.Department_id, D.Department_id, D.Department_name
FROM EMPLOYEES E FULL JOIN DEPARTMENTS D ON E.Department_id = D.Department_id