Trong SQL, một non-equijoin là một loại join trong đó các hàng từ hai bảng được kết hợp dựa trên một điều kiện không phải là dấu bằng (=). Các điều kiện này có thể bao gồm dấu lớn hơn (>), nhỏ hơn (<), lớn hơn hoặc bằng (>=), nhỏ hơn hoặc bằng (<=), hoặc các điều kiện khác như BETWEEN.
Non-equijoin thường được sử dụng khi bạn cần kết hợp các bảng dựa trên các khoảng giá trị hoặc các điều kiện khác không liên quan đến sự bằng nhau của các giá trị.
Using Non equijoins – Sử dụng Join Non equijoins Join không bằng
Ví dụ về Non-Equijoin
1. Sử dụng Non-Equijoin với BETWEEN
Giả sử bạn có hai bảng: Employees và SalaryGrades. Bảng Employees chứa thông tin về nhân viên và mức lương của họ, trong khi bảng SalaryGrades chứa thông tin về các bậc lương khác nhau và các khoảng lương tương ứng.
Bảng Employees:
employee_id | employee_name | salary |
---|---|---|
1 | John | 3500 |
2 | Jane | 4200 |
3 | Jack | 5500 |
Bảng SalaryGrades:
grade | min_salary | max_salary |
---|---|---|
A | 3000 | 3999 |
B | 4000 | 4999 |
C | 5000 | 5999 |
Bạn muốn kết hợp các bảng này để xác định bậc lương của mỗi nhân viên. Bạn có thể sử dụng một non-equijoin với điều kiện BETWEEN như sau:
SELECT e.employee_id, e.employee_name, e.salary, s.grade FROM Employees e JOIN SalaryGrades s ON e.salary BETWEEN s.min_salary AND s.max_salary;
Kết quả sẽ là:
employee_id | employee_name | salary | grade |
---|---|---|---|
1 | John | 3500 | A |
2 | Jane | 4200 | B |
3 | Jack | 5500 | C |
2. Sử dụng Non-Equijoin với điều kiện khác
Giả sử bạn có hai bảng: Orders và Discounts. Bảng Orders chứa thông tin về các đơn hàng, và bảng Discounts chứa thông tin về các mức giảm giá dựa trên số lượng sản phẩm.
Bảng Orders:
order_id | product_id | quantity |
---|---|---|
1 | 101 | 5 |
2 | 102 | 15 |
3 | 103 | 25 |
Bảng Discounts:
discount_id | min_quantity | max_quantity | discount_rate |
---|---|---|---|
1 | 1 | 10 | 5% |
2 | 11 | 20 | 10% |
3 | 21 | 30 | 15% |
Bạn muốn kết hợp các bảng này để xác định mức giảm giá cho mỗi đơn hàng. Bạn có thể sử dụng một non-equijoin với điều kiện lớn hơn hoặc bằng và nhỏ hơn hoặc bằng như sau:
SELECT o.order_id, o.product_id, o.quantity, d.discount_rate FROM Orders o JOIN Discounts d ON o.quantity >= d.min_quantity AND o.quantity <= d.max_quantity;
Kết quả sẽ là:
order_id | product_id | quantity | discount_rate |
---|---|---|---|
1 | 101 | 5 | 5% |
2 | 102 | 15 | 10% |
3 | 103 | 25 | 15% |
Túm lại
Non-equijoin cho phép bạn kết hợp các bảng dựa trên các điều kiện khác ngoài sự bằng nhau của các giá trị. Điều này rất hữu ích khi làm việc với các khoảng giá trị, mức giảm giá, hoặc các điều kiện phức tạp khác. Hiểu và sử dụng non-equijoin đúng cách giúp bạn thực hiện các truy vấn phức tạp và thu được dữ liệu chính xác và có ý nghĩa hơn từ cơ sở dữ liệu của mình.