sql >> Databasteknik >  >> RDS >> SQLite

SQLite UTOM Operatör

I SQLite, EXCEPT operatorn kan användas för att skapa en sammansatt SELECT sats som returnerar delmängden av rader som returneras av den vänstra SELECT som inte returneras av rätt SELECT .

Exempel

Anta att vi har följande tabeller:

SELECT * FROM Teachers;
SELECT * FROM Students;

Resultat:

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       

Vi kan använda EXCEPT operatör för att returnera lärare som inte också är elever:

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

Resultat:

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

Så vi får bara värden som visas i Teachers tabell som inte också visas i Students tabell.

Vi kan få olika resultat, beroende på vilken tabell som är till vänster och vilken som är till höger. Här är ett exempel som sätter Students tabellen till vänster och Teachers till höger:

SELECT StudentName FROM Students
EXCEPT
SELECT TeacherName FROM Teachers;

Resultat:

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

Den här gången får vi elever som inte också är lärare.

SQLites EXCEPT operatören returnerar endast distinkta rader. Så i vårt exempel returneras bara en rad för Cathy , även om det finns två lärare med det namnet.

Vissa andra RDBMS tillåter oss att inkludera dubbletter i resultatet genom att acceptera en valfri ALL sökord med deras EXCEPT operatör, men det gör inte SQLite (åtminstone inte i skrivande stund). Kolla gärna SQLites dokumentation om något ändras.

Ett alternativ

Det är möjligt att få samma resultat utan att använda EXCEPT operatör. Till exempel skulle vi kunna skriva om vårt första exempel till detta:

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

Resultat:

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

  1. Välj Bulk Collect into Oracle Exempel

  2. MySQL återställningsfråga

  3. Oracle-tabell dynamisk partition

  4. SQL ALTER TABLE Syntax – Listad av DBMS