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