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

Toán tử SQLite EXCEPT

Trong SQLite, EXCEPT toán tử có thể được sử dụng để tạo một phức hợp SELECT câu lệnh trả về tập hợp con các hàng được trả về bởi SELECT bên trái không được trả về bởi đúng SELECT .

Ví dụ

Giả sử chúng ta có các bảng sau:

SELECT * FROM Teachers;
SELECT * FROM Students;

Kết quả:

TeacherId  TeacherName
---------  -----------
1          Warren     
2          Ben        
3          Cathy      
4          Cathy      
5          Bill       
6          Bill       

StudentId  StudentName
---------  -----------
1          Faye       
2          Jet        
3          Spike      
4          Ein        
5          Warren     
6          Bill       

Chúng ta có thể sử dụng EXCEPT toán tử để trả lại giáo viên không phải là sinh viên:

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

Kết quả:

TeacherName
-----------
Ben        
Cathy      

Vì vậy, chúng tôi chỉ nhận được các giá trị xuất hiện trong Teachers bảng cũng không xuất hiện trong Students bàn.

Chúng ta có thể nhận được các kết quả khác nhau, tùy thuộc vào bảng nào ở bên trái và bảng nào ở bên phải. Đây là một ví dụ đặt Students bảng bên trái và Teachers ở bên phải:

SELECT StudentName FROM Students
EXCEPT
SELECT TeacherName FROM Teachers;

Kết quả:

StudentName
-----------
Ein        
Faye       
Jet        
Spike      

Lần này, chúng tôi có những sinh viên không phải là giáo viên.

EXCEPT của SQLite toán tử chỉ trả về các hàng riêng biệt. Vì vậy, trong ví dụ của chúng tôi, chỉ một hàng được trả về cho Cathy , mặc dù có hai giáo viên có tên đó.

Một số RDBMS khác cho phép chúng tôi bao gồm các bản sao trong kết quả bằng cách chấp nhận ALL tùy chọn từ khóa với EXCEPT của chúng nhưng SQLite thì không (ít nhất, không phải tại thời điểm viết bài). Vui lòng kiểm tra tài liệu của SQLite trong trường hợp có bất kỳ điều gì thay đổi.

Một giải pháp thay thế

Có thể nhận được kết quả tương tự mà không cần sử dụng EXCEPT nhà điều hành. Ví dụ:chúng tôi có thể viết lại ví dụ đầu tiên của chúng tôi thành ví dụ này:

SELECT 
    DISTINCT TeacherName
FROM Teachers t 
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);

Kết quả:

TeacherName
-----------
Ben        
Cathy      

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để xóa các hàng cụ thể trong Cơ sở dữ liệu SQLite

  2. Sự cố với SQLiteOpenHelper trên android 2.X và 3.X

  3. Cách đưa Trường Bộ sưu tập Nước ngoài vào Con trỏ trong Ormlite

  4. <expr> được mong đợi, có '?'

  5. SQLite không thể mở tệp cơ sở dữ liệu (mã 14) trên truy vấn SELECT thường xuyên