Lệnh JOIN trong PostgreSQL

Lệnh JOIN trong PostgreSQL (cũng như trong các hệ quản trị cơ sở dữ liệu khác) được sử dụng để kết hợp dữ liệu từ hai hoặc nhiều bảng dựa trên một điều kiện liên kết cụ thể. JOIN cho phép người dùng lấy thông tin từ nhiều bảng một cách đồng thời, điều này rất hữu ích trong việc xử lý và phân tích dữ liệu phức tạp.

1. INNER JOIN

  • Mô tả: Trả về các hàng khi có sự khớp giữa các bảng. Chỉ những hàng có giá trị phù hợp trong cả hai bảng sẽ được đưa vào kết quả.
SELECT columns
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;

2. LEFT JOIN (hoặc LEFT OUTER JOIN)

  • Mô tả: Trả về tất cả các hàng từ bảng bên trái (table1), và các hàng phù hợp từ bảng bên phải (table2). Nếu không có sự khớp, các giá trị từ bảng bên phải sẽ là NULL.
SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;

3. RIGHT JOIN (hoặc RIGHT OUTER JOIN)

  • Mô tả: Trả về tất cả các hàng từ bảng bên phải (table2), và các hàng phù hợp từ bảng bên trái (table1). Nếu không có sự khớp, các giá trị từ bảng bên trái sẽ là NULL.
SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;

4. FULL JOIN (hoặc FULL OUTER JOIN)

  • Mô tả: Trả về tất cả các hàng khi có sự khớp giữa hai bảng, và các hàng không khớp từ cả hai bảng. Nếu không có sự khớp, giá trị sẽ là NULL từ bảng không có hàng khớp.
SELECT columns
FROM table1
FULL JOIN table2 ON table1.column_name = table2.column_name;

5. CROSS JOIN

  • Mô tả: Trả về tích Descartes (Cartesian product) của hai bảng, nghĩa là kết hợp tất cả các hàng của bảng đầu tiên với tất cả các hàng của bảng thứ hai.
SELECT columns
FROM table1
CROSS JOIN table2;

6. SELF JOIN

  • Mô tả: Kết nối bảng với chính nó. Điều này thường được sử dụng khi bạn cần so sánh hàng trong cùng một bảng.
SELECT a.columns, b.columns
FROM table a, table b
WHERE a.common_field = b.common_field;

Ví Dụ Cụ Thể

Giả sử bạn có hai bảng: employeesdepartments.

-- INNER JOIN
SELECT e.name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;

-- LEFT JOIN
SELECT e.name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.id;

-- RIGHT JOIN
SELECT e.name, d.department_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.id;

-- FULL JOIN
SELECT e.name, d.department_name
FROM employees e
FULL JOIN departments d ON e.department_id = d.id;

-- CROSS JOIN
SELECT e.name, d.department_name
FROM employees e
CROSS JOIN departments d;

Kết Luận

Các lệnh JOIN rất mạnh mẽ và linh hoạt trong PostgreSQL, cho phép bạn khai thác mối quan hệ giữa các bảng để lấy dữ liệu phức tạp một cách dễ dàng. Việc hiểu rõ các loại JOIN và cách sử dụng chúng là rất quan trọng để tối ưu hóa các truy vấn trong cơ sở dữ liệu.