SQL Joins

=> Câu lệnh SQL Joins dùng để kết hợp các hàng từ 2 hay nhiều bảng  dựa trên các cột liên  quan giữa chúng .

VD :
Cho 2 bảng Customers , Orders








2 bảng trên liên kết với nhau bởi trường CustomersID bây giờ ta sẽ kết hợp dữ liệu 2 bảng :

với CustomersID tương ứng ta sẽ truy vấn đến CustomerName tương ứng.

Có thể hiểu :

Ứng vs 1 OrderID  - 1 CustomerID - 1 CustomerName. (bạn truy vấn trường của bảng này thông qua một trường khác liên kết vs nó có mặt ở cả 2 bảng)




Cú pháp tổng hợp :

SELECT   Customers.CustomerID , Orders,OrderID , Oders.OrderDate
FROM Orders
INNER JOIN Customers ON  Orders.CustomerID = Orders.CustomerID;


SELECT Customers.City , Order.OderID , Order.OrderDate
FROM Orders
INNER JOIN Customers ON  Orders.CutomerID = Orders.CustomerID;

Kết quả :

=> Bây giờ chắc các bạn đã hiểu sơ bộ về câu lệnh Join rồi mình sẽ đi vào từng từ khóa của câu lệnh này.

1. INNER JOIN.

JOIN 2 Table

SELECT table_name1.Colum_name1 , table_name1.Colum_name1 ...
FROM tabel_name1
INNER table_name2 ON table_name1.Colum_name = table_name2.Colum_name

Chọn tất cả các trường phù hợp miễn là có sự kết hợp giữa 2 bảng như mình trình bày sơ bộ bên trên.



JOIN 3 Table

Ta có 3 bảng : Orders ,   Shipper , Customer


Orders :




Shipper :




Customers :



Bạn có thể thấy bảng Order có 2 trường ShipperID và CustomerID liên kết với 2 bảng còn lại và chúng ta sẽ truy xuất , kết hợp các dữ liệu thông qua 2 trường này ở bảng Orders

SELECT Customers.CustomerID , Customers.Name , Orders.OrderID , Shippers.ShipperID
FROM (( Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID)

Hiển thị bản các bản ghi tương ứng thông qua các trường được liên kết với nhau.


=> Có thể nói một cách dễ hiểu rằng câu lệnh này liệt kê tất các bản ghi cùng có mặt ở cả 3 bảng...nó sẽ liệt kê một bộ...chỉ bản ghi nào có 3 trường CustomersID  , OrdersID và ShipperID => một số bản ghi có trường CustomersID nhưng không có 2 trường còn lại






2.SQL LEFT JOIN


=> Để cho dễ hiển mình sẽ trình bày qua một ví dụ
Cho 2 bảng Customers và Orders :


Customers



Orders

Khi sử dụng từ khóa INNER chúng ta sẽ có một cặp
OrderID - CustomerID và từ đó chúng ta truy xuất giá trị trong bảng Customers

=> Vấn đề phát sinh khi chỉ có CustomerID xuất hiện trong bảng Orders mới được hiển thị những giá trị CusomerID trong bảng Customers mà không xuất hiện trong bảng Orders sẽ không được hiển thị
nếu chúng ta vẫn muốn chúng xuất hiện thì sao ? nếu chúng ta muốn liệt kế tất cả các bản ghi CustomerID xuất hiện ở cả 2 bảng những CustomerID nào không xuất hiện ở Orders sẽ bị ghi null.

SELECT  Customers.CustomerID , Orders.OrderID , Customers.City
FROM Customers
LEFT  JOIN Orders ON Customers.CustomerID = Orders.CustomerID;



=> Rõ ràng câu lệnh trên liệt kế tất cả các bản ghi của bảng Customers thế thì tại sao không dùng Select * FROM Customers cho nhanh , sự khác biệt với câu lệnh Select là nó cho chúng ta biết CustomerID nào không có OrderID tương ứng.(bản ghi này sẽ bị báo null).

Kết quả :



3. SQL RIGHT JOIN

Nhận xét

Bài đăng phổ biến