JOIN trong SQL

Join SQL được sử dụng để từ các bảng hai hoặc nhiều cột, từ các bảng đó lấy dữ liệu dựa trên mối quan hệ giữa các cột.

Join và Key

Đôi khi để có được kết quả đầy đủ, chúng ta cần lấy kết quả từ hai hoặc nhiều bảng. Chúng ta cần thực hiện join.

Các bảng trong cơ sở dữ liệu có thể được liên kết với nhau thông qua khóa. Khóa chính (Primary Key) là một cột, trong đó mỗi giá trị của hàng trong cột này là duy nhất. Trong bảng, giá trị của mỗi khóa chính là duy nhất. Mục đích của việc này là liên kết dữ liệu giữa các bảng mà không cần lặp lại tất cả dữ liệu trong mỗi bảng.

Hãy xem bảng "Persons":

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

Vui lòng chú ý, cột "Id_P" là khóa chính của bảng Persons. Điều này có nghĩa là không có hai hàng nào có thể có cùng một Id_P. Dù hai người có tên hoàn toàn giống nhau, Id_P vẫn có thể phân biệt họ.

Tiếp theo, hãy xem bảng "Orders":

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

Vui lòng chú ý, cột "Id_O" là khóa chính của bảng Orders, đồng thời, cột "Id_P" trong bảng "Orders" được sử dụng để tham chiếu đến bảng "Persons" mà không cần sử dụng tên chính xác của họ.

Chú ý, cột "Id_P" liên kết hai bảng trên lại với nhau.

Tham chiếu hai bảng

Chúng ta có thể lấy dữ liệu từ hai bảng bằng cách tham chiếu đến hai bảng:

Ai đã đặt hàng và họ đã đặt hàng gì?

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 

Kết quả tập hợp:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

SQL JOIN - Sử dụng JOIN

Ngoài phương pháp trên, chúng ta cũng có thể sử dụng từ khóa JOIN để lấy dữ liệu từ hai bảng.

Nếu chúng ta muốn liệt kê tất cả các đơn đặt hàng của mọi người, có thể sử dụng câu lệnh SELECT dưới đây:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

Kết quả tập hợp:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

Các loại JOIN khác nhau trong SQL

Ngoài INNER JOIN (kết nối trong) mà chúng ta đã sử dụng trong ví dụ trên, chúng ta còn có thể sử dụng một số loại kết nối khác.

Dưới đây là danh sách các loại JOIN mà bạn có thể sử dụng và sự khác biệt giữa chúng.

  • JOIN: Nếu có ít nhất một khớp trong bảng, sẽ trả về dòng
  • LEFT JOIN: Thậm chí không có khớp trong bảng bên phải, cũng trả về tất cả các dòng từ bảng bên trái
  • RIGHT JOIN: Thậm chí không có khớp trong bảng bên trái, cũng trả về tất cả các dòng từ bảng bên phải
  • FULL JOIN: Nếu có khớp trong một trong hai bảng, sẽ trả về dòng