Hiển thị dữ liệu từ nhiều table bằng cách sử dụng join (tiếp theo)

251

Trong bài viết trước, SysVN đã giới thiệu cách sử dụng join sử dụng các mệnh đề: NATURAL JOIN, USING, ON để join 2 hay nhiều table lại với nhau, các bạn có thể xem lại tại đây. Bài viết này SysVN tiếp tục giới thiệu bài viết liên quan đến join. Mời các bạn theo dõi.

  1. Mục tiêu

Hiểu rõ bài viết này, các bạn có thể biết cách sử dụng Self-join, Nonequijoins, LEFT OUTER, RIGHT OUTER,  FULL OUTER.
2. Cách sử dụng Self-join

Thỉnh thoảng cần join 1 table với chính nó.

Ví dụ: tìm tên manager của những nhân viên trong công ty

Trong database có 1 table employees chứa thông tin tất cả nhân viên trong công ty, manager cũng được gọi là nhân viên của công ty. Bài toán đặt ra là tìm tên manager của những nhân viên trong công ty? Vậy thực hiện bằng cách nào? Ta chia table employees thành 2 table logic nhỏ hơn là WORKER và MANAGER. MANAGER_ID trong table WORKER cũng chính là EMPLOYEE_ID trong table MANAGER

SELECT worker.last_name emp, manager.last_name mgr
FROM employees worker JOIN employees manager
ON (worker.manager_id = manager.employee_id);

3. Cách sử dụng Outer join

Sự khác nhau INNER và OUTER join

  • Join 2 table mà kết quả chỉ trả về những hàng được match gọi là INNER join
  • Join 2 table mà kết quả trả về INNER join cùng với những hàng unmatch của table bên trái gọi là LEFT OUTER JOIN
  • Join 2 table mà kết quả trả về INNER join cùng với những hàng unmatch của table bên phải gọi là RIGHT OUTER JOIN
  • Join 2 table mà kết quả trả về INNER join, LEFT OUTER JOIN, RIGHT OUTER JOIN gọi là FULL OUTER JOIN

a. LEFT OUTER JOIN

Ví dụ:

SELECT e.last_name, e.department_id, d.department_name
FROM employees e LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;

Kết quả sẽ hiển thị tất cả những hàng của tabel employees (table bên trái)

b. RIGHT OUTER JOIN

SELECT e.last_name, d.department_id, d.department_name
FROM employees e RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;

Kết quả hiển thị tất cả những hàng của table departments (table bên phải)

c. FULL OUTER JOIN

SELECT e.last_name, d.department_id, d.department_name
FROM employees e FULL OUTER JOIN departments d
ON (e.department_id = d.department_id) ;

Kết quả hiển tất cả những hàng của table employees (table bên trái) và tất cả những hàng table departments (table bên phải)

4.  Cartesian Products

Cartesian Products được hình thành khi:

  • Một điều kiện join bị bỏ qua hoặc không có giá trị
  • Tất cả những hàng ở table đầu join với tất cả những hàng ở table thứ 2

Cartesian product tạo ra kết quả có số hàng rất lớn và hiếm khi hữu ích. Do đó, để tránh Cartesian Products phải tồn tại một điều kiện!!! Cartesian product chỉ có tác dụng kiểm tra kết quả nhằm tạo ra số lượng lớn các hàng nhằm để mô phỏng kết quả.

Mệnh đề CROSS JOIN cũng được gọi là Cartesian product giữa 2 table
Ví dụ:

SELECT last_name, department_name
FROM employees
CROSS JOIN departments ;