Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

SQL ngoại trừ

Trong SQL, chúng ta có thể sử dụng mệnh đề JOIN để nhận kết quả kết hợp từ một hoặc nhiều bảng. Nhưng đôi khi, chúng tôi muốn một kết quả chứa dữ liệu từ một bảng và bản ghi không có sẵn trong bảng kia. Trong trường hợp đó, SQL có tên khái niệm là SQL Ngoại trừ.

Để làm sạch dữ liệu từ nhiều hơn một bảng, chúng tôi đã sử dụng SQL Ngoại trừ. SQL Ngoại trừ giống như toán tử trừ mà chúng ta làm trong toán học. SQL Ngoại trừ đầu tiên hợp nhất hai hoặc nhiều hơn hai câu lệnh SELECT trong truy vấn và trả về dữ liệu từ câu lệnh SELECT đầu tiên. Chúng tôi không có sẵn kết quả câu lệnh SELECT khác.

Quy tắc NGOẠI TRỪ SQL

Chúng ta nên hiểu tất cả các quy tắc và quy định trước khi sử dụng truy vấn EXCEPT trong SQL:

  • Số lượng và thứ tự các cột trong bảng nhất định phải giống nhau trong toàn bộ truy vấn SELECT.
  • Kiểu dữ liệu của cột phải giống nhau hoặc tương thích.

Cú pháp cho SQL EXCEPT

SELECT * FROM table1 EXCEPT SELECT * FROM table2;

Table1 và Table2 sẽ là tên của các bảng.

Ví dụ:

Giả sử chúng ta có hai bảng có cùng số cột và thứ tự các cột.

  • Bảng 1:T1, Số cột:3, Dữ liệu:A, B, C, D
  • Bảng 2:T2, Số cột:3, Dữ liệu:B, D, F, G

Bất cứ khi nào chúng tôi thực hiện truy vấn EXCEPT trên hai bảng này, chúng tôi sẽ nhận được A và C vì hai dữ liệu này không có trong bảng T2, B và D là phổ biến trong cả hai bảng, loại bỏ.

Hãy hiểu khái niệm SQL EXCEPT với các ví dụ. Hãy xem xét các bảng sau cùng với các bản ghi đã cho.

Table1:Emp

EMPLOYEEID FIRST_NAME LAST_NAME TIỀN LƯƠNG THÀNH PHỐ KHOA MANAGERID
1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOIDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 ĐIỀU CHỈNH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 MUMBAI KIỂM TRA 4
3001 PRANOTI CHIA SẺ 55500 PUNE JAVA 3
3002 ANUJA Ở ĐÂU 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH MỤC TIÊU 60500 MUMBAI KIỂM TRA 4

Bảng 2:Nhân viên

EMPLOYEEID FIRST_NAME LAST_NAME TIỀN LƯƠNG THÀNH PHỐ KHOA MANAGERID
1001 Vaibhav Sharma 65000 PUNE ORACLE 1
1002 Nikhil Vani 60000 NOIDA ORACLE 1
1003 Vaibhavi Mishra 50000 JAIPUR FMW 2
2001 Ruchika Jain 55500 ĐIỀU CHỈNH ORACLE 1
2002 Thực tế Sharma 65500 PUNE FMW 2
2003 Bhavesh Jain 50000 MUMBAI KIỂM TRA 4
3001 Deepam Jauhari 55500 PUNE JAVA 3
3002 ANUJA Ở ĐÂU 50500 JAIPUR FMW 2
3003 Pranoti Shende 58500 MUMBAI JAVA 3
4001 RAJESH MỤC TIÊU 60500 MUMBAI KIỂM TRA 4

Bảng 3:Người quản lý

Managerid manager_name manager_department
1 Snehdeep Kaur ORACLE
2 Kirti Kirtane FMW
3 Abhishek Manish JAVA
4 Anupam Mishra KIỂM TRA

Bảng 4:Người quản lý1

Managerid manager_name manager_department
1 Ishita Agrawal ORACLE
2 Kirti Kirtane FMW
3 Abhishek Manish JAVA
4 Paul Oakip KIỂM TRA

Ví dụ 1: Giả sử chúng ta muốn nối hai bảng trên Emp và Employee trong truy vấn SELECT bằng toán tử EXCEPT.

SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, DEPARTMENT MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER ON EMP.MANAGERID = MANAGER.MANAGERID EXCEPT SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, DEPARTMENT, MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER1 ON EMPLOYEE.MANAGERID = MANAGER1.MANAGERID;

Chúng tôi đang sử dụng mệnh đề INNER JOIN giữa bảng Emp và Employee, nơi chúng tôi hiển thị Id nhân viên, Tên, Thành phố, Phòng ban, Id người quản lý và Tên người quản lý bằng toán tử EXCEPT. Truy vấn trên sẽ chỉ hiển thị các giá trị duy nhất giữa cả hai bảng.

Truy vấn trên cho kết quả sau:

Nếu chúng ta quan sát dữ liệu bảng, có hai dữ liệu chung giữa cả bảng Emp table và bảng Employee, tức là, ID nhân viên 3002 và 4001. Thông tin chi tiết về id 4001 của nhân viên hiển thị ngoại trừ 3002. Vì tên Trình quản lý id 3002 của nhân viên giống nhau trong cả hai bảng Trình quản lý. và Manager1 nhưng Tên người quản lý 4001 của Nhân viên khác nhau trong cả hai bảng, thông tin chi tiết về id 4002 của nhân viên được hiển thị.

Ví dụ 2: Giả sử chúng ta muốn nối hai bảng trên Emp và Employee trong truy vấn SELECT bằng toán tử EXCEPT và sắp xếp kết quả được đặt theo mức lương của họ theo thứ tự giảm dần. Chúng tôi sẽ sử dụng mệnh đề ORDER BY để sắp xếp tập hợp kết quả trong truy vấn SQL.

SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, SALARY, MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER ON EMP.MANAGERID = MANAGER.MANAGERID EXCEPT SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, SALARY, MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER1 ON EMPLOYEE.MANAGERID = MANAGER1.MANAGERID ORDER BY SALARY;

Truy vấn trên hiển thị kết quả sau:

Ví dụ 3: Giả sử chúng ta muốn nối hai bảng trên Emp và Employee trong truy vấn CHỌN của mình bằng toán tử EXCEPT trong đó lương của nhân viên lớn hơn 55000 từ bảng Emp và thành phố của nhân viên bao gồm 'Pune', 'Mumbai', 'Jaipur' từ bảng Employee.

SELECT * FROM EMP WHERE SALARY > 55000 EXCEPT SELECT * FROM EMPLOYEE WHERE CITY IN ('Pune', 'Mumbai', 'Jaipur');   

Câu lệnh SELECT đầu tiên của truy vấn ở trên tìm nạp tất cả thông tin chi tiết của những nhân viên có mức lương lớn hơn 55000 từ bảng Emp. Câu lệnh SELECT thứ hai tìm nạp tất cả thông tin chi tiết của những nhân viên có thành phố bao gồm Pune, Mumbai, Jaipur từ bảng Nhân viên. Sau đó, toán tử EXCEPT sẽ được thực thi giữa bảng Emp và bảng Employee.

Điều này cho kết quả sau:


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giới thiệu về Dịch vụ Web Amazon (AWS) Tự động mở rộng quy mô

  2. Cách so sánh ngày tháng trong SQL

  3. ODBC là gì?

  4. SCD loại 1

  5. Giới thiệu về auto_explain:Cách tự động ghi nhật ký các kế hoạch truy vấn Postgres chậm