SQLite
 sql >> Database >  >> RDS >> SQLite

SQLite EXCEPT Operatore

In SQLite, il EXCEPT può essere utilizzato per creare un composto SELECT istruzione che restituisce il sottoinsieme di righe restituite dal SELECT sinistro che non vengono restituiti dal diritto SELECT .

Esempio

Supponiamo di avere le seguenti tabelle:

SELECT * FROM Teachers;
SELECT * FROM Students;

Risultato:

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       

Possiamo usare EXCEPT operatore per restituire gli insegnanti che non sono anche studenti:

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

Risultato:

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

Quindi otteniamo solo i valori che appaiono in Teachers tabella che non compare anche in Students tavolo.

Possiamo ottenere risultati diversi, a seconda di quale tabella si trova a sinistra e quale a destra. Ecco un esempio che mette gli Students tabella a sinistra e Teachers a destra:

SELECT StudentName FROM Students
EXCEPT
SELECT TeacherName FROM Teachers;

Risultato:

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

Questa volta abbiamo studenti che non sono anche insegnanti.

EXCEPT di SQLite l'operatore restituisce solo righe distinte. Quindi nel nostro esempio, viene restituita solo una riga per Cathy , anche se ci sono due insegnanti con quel nome.

Alcuni altri RDBMS ci consentono di includere duplicati nel risultato accettando un ALL opzionale parola chiave con il loro EXCEPT operatore, ma SQLite no (almeno, non al momento della scrittura). Sentiti libero di controllare la documentazione di SQLite nel caso qualcosa cambi.

Un'alternativa

È possibile ottenere lo stesso risultato senza utilizzare il EXCEPT operatore. Ad esempio, potremmo riscrivere il nostro primo esempio in questo:

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

Risultato:

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