Join là mệnh đề trong SQL, được dùng để kết nối dữ liệu từ hai hay nhiều bảng lại với nhau. JOIN cho phép truy vấn các cột dữ liệu từ nhiều bảng khác nhau để trả về trong cùng một tập kết quả. Show
JOIN thường được sử dụng để kết hợp dữ liệu trong cơ sở dữ liệu có quan hệ (Relational Database). Khóa chính và khóa ngoạiKhóa chính (Primary Key – PK)Khóa chính được sử dụng để định danh từng dòng dữ liệu trong bảng. Đặc điểm:
Khoá ngoại (Foreign Key – FK)Khóa ngoại chứa giá trị tham chiếu dùng để liên kết với khóa chính của bảng khác. Đặc điểm:
Ví dụ: Nhìn vào lược đồ (Schema) SaleLT:
Các loại JOINKết hợp điểm chung (Inner join)INNER JOIN trả về kết quả là các bản ghi mà trường được join ở hai bảng khớp nhau, các bản ghi chỉ xuất hiện ở một trong hai bảng sẽ bị loại. Cú pháp của INNER JOIN:
Ta có:Bảng Customer gồm 847 hàng. Giải thích câu lệnh truy vấn:
Bảng CustomerAddress gồm 417 hàng. Giải thích câu lệnh truy vấn:
Ví dụ: INNER JOIN bảng Customer và CustomerAddress để truy vấn dữ liệu từ cột AddressType. Giải thích câu lệnh truy vấn:
Kết hợp trái (Left join)Nếu bảng A LEFT JOIN với bảng B thì kết quả gồm các bản ghi có trong bảng A, với các bản ghi không có mặt trong bảng B thì các cột từ B được điền NULL. Các bản ghi chỉ có trong B mà không có trong A sẽ không được trả về. Bảng được xác định là left trong phép JOIN là bảng được viết trước. Cú pháp của LEFT JOIN:
Ví dụ: Chọn bảng dữ liệu adventureworks, kết hợp trái giữa bảng Customer và Customer Address Giải thích câu lệnh truy vấn:
Kết hợp phải (Right join)Nếu bảng được kết hợp phải với bảng B thì kết quả gồm các bản ghi có trong bảng B. Với các bản ghi không có mặt trong bảng A thì các cột từ bảng A được trả về NULL. Các bản ghi chỉ có trong bảng A mà không có trong bảng B sẽ không được trả về. Cú pháp của RIGHT JOIN:
Ví dụ: Chọn bảng dữ liệu adventureworks, kết hợp phải giữa bảng Customer và Customer Address. Giải thích câu lệnh truy vấn:
Kết hợp chéo (Cross join)Kết hợp chéo (Cross join) là kết hợp giữa các hàng của hai bảng với nhau, mỗi hàng trong bảng thứ nhất sẽ kết hợp với N hàng của bảng thứ hai. Kết quả của kết hợp chéo (Cross join) sẽ có số hàng bằng tích số của hai bảng. Do kết quả trả ra của Cross join có thể rất lớn là tích số của hai bảng, cần cân nhắc sự cần thiết khi sử dụng kết hợp chéo (Cross join). Cú pháp của CROSS JOIN:
Ví dụ: Kết hợp bảng Customer (gồm 847 hàng) và CustomerAddress (gồm 417 hàng) bằng kết hợp chéo (Cross join).Kết quả trả về là tích của 2 bảng là 353.199 hàng. Giải thích câu lệnh truy vấn:
Kết hợp tất cả (Outer join/Full Outer Join)Kết hợp chung (Outer join/Full Outer Join/FULL Join) là kết hợp tất cả các hàng với nhau. Nếu không có sự trùng khớp giữa hai bảng với nhau, giá trị không xác định (NULL) sẽ được trả về cho các cột của bảng chứa các giá trị thiếu. Cú pháp của FULL JOIN:
Ví dụ: Kết hợp chung giữa bảng Customer và bảng (Table) CustomerAddress. Truy vấn các cột CustomerID, FirstNam, LastName, AddressID, AddressType. Giải thích câu lệnh truy vấn:
Kết hợp với nhiều hơn 2 bảngJOIN nhiều hơn 2 bảng được phát triển từ phép JOIN thông thường. Thay vì chỉ JOIN 2 bảng thì chúng ta JOIN nhiều hơn 2 bảng. Cú pháp của JOIN nhiều hơn 2 bảng: ON t1.Key2 = t3.Key2
Ví dụ: Từ 3 bảng trong bộ dữ liệu FactInternetSales, DimProduct, DimCustomer thuộc bộ dữ liệu AdventureWorksDW2019, truy vấn các cột ProductKey, FirstName, Color, SalesAmount. Với điều kiện, các đơn hàng có bán sản phẩm có Color = ‘Red’ và Customer FirstName bắt đầu bằng chữ A. Giải thích câu lệnh truy vấn:
Kết hợp với chính nó (Self Join)Self Join về bản chất vẫn là phép Join thông thường, tuy nhiên thay vì kết hợp với một bảng khác thì sẽ sử dụng mối quan hệ về dữ liệu có sẵn ở trong bảng để Join với chính nó. Self Join thường được sử dụng với dữ liệu có mối quan hệ phân cấp và phân tầng. Ví dụ như dữ liệu mô hình tổ chức (Khối – Phòng ban), dữ liệu nhân sự (Cấp quản lý – Cấp trực thuộc),… Cú pháp của Self Join:
Ví dụ: Ta có bảng dữ liệu dbo.DimEmployee thuộc bộ dữ liệu AdventureWorksDW2020. Thực hiện truy vấn tên người quản lý tương ứng với từng nhân viên (Sử dụng Self Join).![A screenshot of a computer Description automatically generated](https://datapot.vn/wp-content/uploads/2023/12/a-screenshot-of-a-computer-description-automatica-21.png) Giải thích câu lệnh truy vấn:
Các lưu ý khi viết JOINLưu ý 1: Về Alias tên bảngKhi thực hiện JOIN, ngầm định sẽ phải cần Alias tên bảng đem kết hợp. Khi Alias, hãy sử dụng các tên viết tắt và mang tính gợi nhớ đến bảng gốc. ![A screenshot of a computer Description automatically generated](https://datapot.vn/wp-content/uploads/2023/12/a-screenshot-of-a-computer-description-automatica-22.png) Lưu ý 2: Lỗi Ambigous column nameĐây là một lỗi thường xuyên gặp khi mới thực hành viết phép JOIN. Nguyên nhân lỗi này từ việc gọi tên cột CustomerID nhưng tên cột này xuất hiện ở cả 2 bảng Customer và CustomerAddress. Vậy nên cần khai báo rõ ràng cột CustomerID đến từ bảng nào bằng cách khai báo tên bảng Alias đằng trước tên cột (Ví dụ: CST.CustomerID). Sau khi viết lại thành CST.CustomerID thì không còn lỗi như trước. Ngoài ra, đối với cột FirstName tuy không có tên Alias của bảng đằng trước nhưng không bị lỗi Ambigous là vì cột FirstName chỉ tồn tại duy nhất ở bảng Customer (CST). Mặc dù vậy, vẫn khuyến khích sử dụng tên Alias bảng kèm đằng trước các cột để câu lệnh rõ ràng và mạch lạc hơn. Kết hợp bảng sử dụng UNIONUNION và UNION ALLUNIONUNION kết hợp các cột từ hai hay nhiều mệnh đề SELECT theo chiều dọc và không bao gồm các dòng trùng lặp. Đặc điểm:
Cú pháp của UNION:
Ví dụ: Kết hợp các đơn hàng từ Purchasing sources (Gồm 4.012 hàng) và Sales sources (Gồm 31.465 hàng) và loại bỏ giá trị trùng lặp.Tổng số hàng trả về 29.224. Giải thích câu lệnh truy vấn:
UNION ALLTương tự như UNION, UNION ALL kết hợp cột từ hai hay nhiều mệnh đề SELECT theo chiều dọc. Tuy nhiên, không loại bỏ các dòng trùng lặp nếu có. Đặc điểm:
Cú pháp của UNION ALL:
Ví dụ: Kết hợp các đơn hàng từ Purchasing sources và Sales sources, sử dụng gộp tất cả (UNION ALL).Tổng số hàng trả về 35.477. Giải thích câu lệnh truy vấn:
Các bạn có thể đọc thêm để phân biệt rõ ràng hơn giữa JOIN và UNION. Một số lý thuyết tập hợp (Set theory) khácBên cạnh UNION và UNION ALL được giới thiệu chính, bạn có thể tham khảo thêm các lý thuyết tập hợp khác là INTERSECT và EXCEPT. IntersectINTERSECT truy vấn các bản ghi đồng thời xuất hiện trong 2 câu truy vấn đã chọn. Đặc điểm
Lưu ý: Tên cột và kiểu dữ liệu phải giống nhau trong 2 câu lệnh SELECT. Cú pháp của INTERSECT:
0Ví dụ: Bạn cần truy vấn những SalesOrderID đồng thời xuất hiện trong 2 bảng là bảng (Table) SalesOrderDetail và bảng (Table) SalesOrderID. Ta dùng INTERSECT để truy vấn dữ liệu đề bài yêu cầu: ![A screenshot of a computer screen Description automatically generated](https://datapot.vn/wp-content/uploads/2023/12/a-screenshot-of-a-computer-screen-description-aut.png) Giải thích câu lệnh truy vấn:
ExceptionException dùng để truy vấn ra các giá trị trong kết quả câu truy vấn bảng 1 và loại trừ kết quả trùng khớp với câu truy vấn bảng 2. ![A diagram of a table Description automatically generated](https://datapot.vn/wp-content/uploads/2023/12/a-diagram-of-a-table-description-automatically-ge-1.png) Cú pháp của EXCEPT:
1Để hiểu rõ hơn ta cùng xem ví dụ sau: Từ bảng (Table) Product gồm 295 hàng và bảng ProductAndDescription gồm 1.764 hàng bạn phải truy vấn ProductID chung của 2 bảng, ngoại trừ ProductID xuất hiện trong bảng vProductAnDescription. Ta dùng từ khóa (Key Word) EXCEPT để thực hiện: Do giá trị “907” là giá trị duy nhất có trong bảng ProductID nên sau khi thực hiện truy vấn ta có kết quả nhận được là 1 hàng với giá trị “907”. Sự khác biệt giữa inner và outer JOIN là gì?Sự khác biệt lớn nhất giữa INNER JOIN và OUTER JOIN là phép nối bên trong sẽ chỉ giữ thông tin từ cả hai bảng có liên quan với nhau (trong bảng kết quả). Mặt khác, Outer Join cũng sẽ giữ thông tin không liên quan đến bảng khác trong bảng kết quả. JOIN SQL là gì?Join là mệnh đề trong SQL, được dùng để kết nối dữ liệu từ hai hay nhiều bảng lại với nhau. Inner JOIN là gì tin 11?INNER JOIN là mệnh đề truy vấn với kết quả trả về là tập hợp các dữ liệu thỏa mãn điều kiện chung từ 2 hay nhiều Table. Điều kiện chung thường phụ thuộc liên kết khóa ngoại giữa hai Table. Lệnh JOIN dùng để làm gì?Lệnh Join: Khi nhập lệnh chỉ cần nhập J được sử dụng để nối đoạn thẳng, cung tròn nối tiếp thành một đường Polyline. Lệnh PEDIT: Viết tắt lệnh là PE. Đây là lệnh có nhiều chức năng, trong đó có chức năng Join để nối đoạn thẳng, đường thẳng thành một đường Polyline. |