JOIN – Mệnh đề

1. 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.

2. Kết bằng (Equi Join)

2.1 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>

2.2 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

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

3.1 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

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

4.1 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

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

5.1 Mệnh đề CROSS JOIN

5.1.1 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.

5.1.2 Cú pháp

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

5.1.3 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

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

5.2.1 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.

5.2.2 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>

5.2.3 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

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

5.3.1 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.

5.3.2 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>

5.3.3 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

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

5.4.1 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.

5.4.2 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>

5.4.3 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

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

5.5.1 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.

5.5.2 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>

5.5.3 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

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *