Kết hợp dữ liệu sử dụng (SET OPERATORS) UNION, INTERSECT và EXCEPT trong SQL Server
- 29-05-2022
- Toanngo92
- 0 Comments
các toán tử tập hợp được SQL Server cung cấp:
- UNION
- INTERSECT
- EXCEPT
Mục lục
Toán tử Union (hợp nhất)
Kết quả từ hai câu lệnh truy vấn khác nhau có thể được kết hợp thành một tập kết quả duy nhất bằng cách sử dụng toán tử UNION. Các câu lệnh truy vấn phải có kiểu cột tương thích và số cột bằng nhau. Các tên cột có thể khác nhau trong mỗi câu lệnh, nhưng các kiểu dữ liệu phải tương thích. Bằng các kiểu dữ liệu tương thích, điều đó có nghĩa là có thể chuyển đổi nội dung của một trong các cột thành một cột khác. Ví dụ, nếu một câu lệnh truy vấn có kiểu dữ liệu là int và một câu lệnh truy vấn khác có kiểu dữ liệu là money, chúng tương thích với nhau và sự kết hợp có thể diễn ra giữa chúng vì dữ liệu int có thể được chuyển đổi thành dữ liệu money
Cú pháp:
Query_Statement1 UNION [ALL] Query Statment_2
Ví dụ:
SELECT Product.ProductId FROM Production.Product UNION SELECT ProductId FROM Sales.SalesOrderDetail
Câu lệnh trên sẽ lấy ra toàn bộ dữ liệu cột ProductId của cả 2 bảng mà khớp nhau. Nếu bạn sử dụng mệnh đề ALL, tất cả các bảng sẽ xuất hiện trong tập kết quả bao gồm cả các bản ghi bị trùng nhau (Trong orer detail có nhiều Order bán cùng một Product).
Ví dụ UNION ALL:
SELECT Product.ProductId FROM Production.Product UNION ALL SELECT ProductId FROM Sales.SalesOrderDetail
Mặc định, toán tử UNION xóa các bản ghi thừa trong tập kết quả. Tuy nhiene, nếu bổ sung mệnh đề ALL vào toán tử UNION, tất cả bản ghi sẽ được trả ra.
Khác biệt giữa UNION và JOIN:
Các phép JOIN và UNION có thể được sử dụng để kết hợp dữ liệu từ một hoặc nhiều bảng. Sự khác biệt nằm ở cách dữ liệu được kết hợp.
Nói một cách dễ hiểu, nối kết hợp dữ liệu vào các cột mới. Nếu hai bảng được nối với nhau, thì dữ liệu từ bảng đầu tiên được hiển thị trong một tập hợp cột cùng với cột của bảng thứ hai trong cùng một hàng.
Các liên hiệp kết hợp dữ liệu thành các hàng mới. Nếu hai bảng được “hợp nhất” với nhau, thì dữ liệu từ bảng đầu tiên nằm trong một tập hợp các hàng và dữ liệu từ bảng thứ hai trong một tập hợp khác. Các hàng có cùng kết quả.
Toán tử INTERSECT ( giao điểm)
Giả sử tình huống có 2 bảng Product và SalesOrderDetail và muốn hiển thị tất cả các hàng chung trong cả 2 bảng. Để làm việc này, bạn có thể sử dụng toán tử INTERSECT. Toán tử INTERSECT được sử dụng với 2 câu lệnh truy vấn đề trả ra 1 tập kết quả riêng biệt với các hàng chung cho cả hai câu lệnh truy vấn.
Cú pháp:
Query_statement1 INTERSECT Query_statement2
Ví dụ:
SELECT Product.ProductId FROM Production.Product INTERSECT SELECT ProductId FROM Sales.SalesOrderDetail
Kết quả của giao điểm giữa bảng Production.Product và Sales.SalesOrderDetail sẽ chỉ có các productid mà khớp bản ghi ở trong bảng product. Trong một doanh nghiệp lớn, sẽ có số lượng lớn các bản ghi dữ liệu được lưu trữ trong database. Thay bằng việc lưu trữ toàn bộ dữ liệu trong một bảng đơn, nó có thể được chia thành vài bảng khác nhau. Khi dữ liệu được lưu trong các bảng riêng biệt, SQL Server có nhiều cách để kết hợp dữ liệu từ bảng như JOIN,UNION,INTERSECT .
Các quy tắc sử dụng INTERSECT:
- Số lượng cột và thứ tự chúng được đưa ra phải giống nhau trong cả hai truy vấn
- Kiểu dữ liệu của các cột đang được sử dụng phải tương thích
Toán tử EXCEPT (ngoại trừ)
Toán tử EXCEPT trả ra toàn bộ các hảng riêng biệt từ caua truy vấn bên trái toán tử này và loại bỏ toàn bộ các bản ghi khỏi tập kết quả nếu chúng so khớp với điều kiện bên phải toán tử EXCEPT
Cú pháp:
Query_statement1 EXCEPT Query_statement2
Hai quy tắc áp dụng cho toán tử INTERSECT cũng áp dụng cho toán tử EXCEPT:
- Số lượng cột và thứ tự chúng được đưa ra phải giống nhau trong cả hai truy vấn
- Kiểu dữ liệu của các cột đang được sử dụng phải tương thích
Ví dụ:
SELECT Product.ProductId FROM Production.Product EXCEPT SELECT ProductId FROM Sales.SalesOrderDetail
Với ví dụ phía trên, chỉ những bản ghi từ bảng Production.Product mà không xuất hiện trong bảng Sales.SalesOrderDetail được trả ra, ta có thể thấy mệnh đề này có thể được sử dụng trong nghiệp vụ phân tích, tìm kiếm sản phẩm chưa bán được hàng.
Chúng ta thấy toán tử EXCEPT lấy ra toàn bộ các bản ghi từ bảng đầu tiên loại trừ những kết quả so khớp ở bảng số 2, vì vậy, khi sử dụng EXCEPT, thứ tự của 2 bảng trong truy vấn là quan trọng, còn với INTERSECT, không quan trọng bảng nào được xác định trước.