Học SQL: Non-Equi Joins trong SQL định nghĩa, ứng dụng

Ngày đăng: 13/03/2022
Lệnh Joins trong SQL được sử dụng để có thể truy vấn các dữ liệu từ những bảng khác nhau. Và để có thể kết nối giữa các bảng khác nhau, điều kiện trong lệnh Joins là một phần không thể thiếu. Thông thường, chúng ta thường sử dụng toán tử bằng “=” để so sánh hai điều kiện. Tuy nhiên, các điều kiện ấy cũng có thể được thiết lập bởi các toán tử so sánh khác và lệnh Joins có các điều kiện được thiết lập như thế được gọi là Non-Equi Joins trong SQL.

Định nghĩa Non-equi Joins trong SQL

Non-Equi Joins là lệnh Joins trong SQL có điều kiện được thiết lập bằng cách sử dụng tất cả các toán tử so sánh trừ toán tử bằng “=”. Các toán tử so sánh ngoài toán tử “=” có thể là “> =”, “<=” , ”><”, “>”, “<”.

Ứng dụng Non-equi Joins trong SQL – Học SQL cơ bản

  • Cú pháp câu lệnh Non-equi Joins trong SQL
SELECT bảng1.ᴄột&amp;lt;/em&amp;gt;

&amp;lt;em&amp;gt;, bảng2.ᴄột &amp;lt;/em&amp;gt;

&amp;lt;em&amp;gt;FROM bảng1&amp;lt;/em&amp;gt;

&amp;lt;em&amp;gt;JOIN bảng2&amp;lt;/em&amp;gt;

&amp;lt;em&amp;gt;WHERE bảng1.ᴄột1 &amp;lt;/em&amp;gt;&amp;lt;em&amp;gt;[ &amp;gt; | &amp;lt; | &amp;gt;= | &amp;lt;= ]&amp;lt;/em&amp;gt;&amp;lt;em&amp;gt; bảng2.ᴄột2
  • Ví dụ
Đếm các đơn hàng có sản phẩm thường được mua cùng nhau trong cùng một đơn hàng. Sử dụng bộ dữ liệu AdventureWorks2019. Câu lệnh được sử dụng trong SQL:
SELECT Product1.ProductAlternateKey as ProductA

, Product2.ProductAlternateKey as ProductB

, COUNT(Sales1.SalesOrderNumber) as CountofOrders

FROM FactInternetSales as Sales1

JOIN FactInternetSales as Sales2

ON Sales1.SalesOrderNumber = Sales2.SalesOrderNumber

AND Sales1.SalesOrderLineNumber &amp;gt; Sales2.SalesOrderLineNumber

JOIN DimProduct as Product1 on Product1.ProductKey = Sales1.ProductKey

JOIN DimProduct as Product2 on Product2.ProductKey = Sales2.ProductKey

GROUP BY Product1.ProductAlternateKey, Product2.ProductAlternateKey

ORDER BY CountofOrders DESC
Trong ví dụ này, khi hai bảng Sales1Sales 2 kết nối với nhau, ngoài điều kiện Sales1.SalesOrderNumber = Sales2.SalesOrderNumber còn có thêm một điều kiện khác được nối bằng chữ AND là Sales1.SalesOrderLineNumber > Sales2.SalesOrderLineNumber. Đây chính là lệnh Non-equi Joins trong SQL. Việc có thêm điều kiện này giúp kết quả trả về hai sản phẩm là hai sản phẩm khác nhau, tránh trường hợp sản phẩm trong cùng một giỏ hàng bị trùng lặp. Non-equi-Joins-trong-sql  

Ảnh 1: Câu lệnh truy vấn và kết quả trả về khi không sử dụng Non-equi Joins

Từ ảnh 1, chúng ta có thể nhận thấy nếu không sử dụng Non-equi Joins thì sẽ có những hàng có kết quả trả về mà sản phẩm trong ProductA giống với sản phẩm trong ProductB. Hay sẽ có những kết quả bị trả về thành hai bản giống nhau, chỉ đổi chỗ ProductAProductB. Tuy nhiên, sang đến ảnh 2, việc sử dụng Non-equi Joins đã khắc phục được những lỗi đó. non-equi-joins-trong-sql

Ảnh 2: Câu lệnh truy vấn và kết quả trả về khi sử dụng Non-equi Joins

  • Ứng dụng
Ví dụ ở trên đã chỉ ra ứng dụng của lệnh Non-equi Joins trong SQL. Đó chính là tránh cho kết quả truy vấn bị trả về trùng lặp nhau. Ngoài ra, việc sử dụng Non-equi Joins cũng giúp kiểm tra và loại bỏ những kết quả bị nhân lên thành nhiều bản ghi giống nhau. Việc sử dụng Self Join và truy vấn kết quả từ cùng một cột sẽ không tránh khỏi các kết quả trả về sẽ có những giá trị bị giống nhau trong hai cột khác nhau hay chỉ có sự đổi chỗ giữa hai cột. Do vậy, cần sử dụng Non-equi Joins để khắc phục những lỗi đó.

Kết luận về Non-equi Joins trong SQL

Hầu hết các phép join được sử dụng trong SQL là Equi Joins. Tuy nhiên, đôi lúc Non-equi Joins trong SQL được sử dụng để giúp việc truy vấn dữ liệu trở nên chính xác hơn. Những ví dụ và ứng dụng ở trên đã phần nào giúp chúng ta biết thêm về Non-equi Joins và có thể vận dụng nó khi viết các câu lệnh truy vấn trong SQL. Tài liệu tham khảo https://www.sqlshack.com/learn-sql-non-equi-joins-in-sql-server/
Chia sẻ bài viết này

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *