SQLite
 sql >> Datenbank >  >> RDS >> SQLite

SQLite-EXCEPT-Operator

In SQLite ist das EXCEPT Operator kann verwendet werden, um ein zusammengesetztes SELECT zu erstellen -Anweisung, die die Teilmenge der vom linken SELECT zurückgegebenen Zeilen zurückgibt die nicht vom Recht SELECT zurückgegeben werden .

Beispiel

Angenommen, wir haben die folgenden Tabellen:

SELECT * FROM Teachers;
SELECT * FROM Students;

Ergebnis:

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       

Wir können den EXCEPT verwenden Operator, um Lehrer zurückzugeben, die nicht gleichzeitig Schüler sind:

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

Ergebnis:

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

Wir erhalten also nur Werte, die in Teachers vorkommen Tabelle, die nicht auch in den Students erscheinen Tisch.

Wir können unterschiedliche Ergebnisse erhalten, je nachdem, welche Tabelle links und welche rechts ist. Hier ist ein Beispiel, das Students einfügt Tisch links und Teachers rechts:

SELECT StudentName FROM Students
EXCEPT
SELECT TeacherName FROM Teachers;

Ergebnis:

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

Diesmal bekommen wir Schüler, die nicht gleichzeitig Lehrer sind.

EXCEPT von SQLite -Operator gibt nur eindeutige Zeilen zurück. In unserem Beispiel wird also nur eine Zeile für Cathy zurückgegeben , obwohl es zwei Lehrer mit diesem Namen gibt.

Einige andere RDBMS erlauben es uns, Duplikate in das Ergebnis aufzunehmen, indem wir einen optionalen ALL akzeptieren Stichwort mit ihrem EXCEPT -Operator, aber SQLite nicht (zumindest nicht zum Zeitpunkt des Schreibens). Fühlen Sie sich frei, die SQLite-Dokumentation zu überprüfen, falls sich etwas ändert.

Eine Alternative

Es ist möglich, das gleiche Ergebnis zu erhalten, ohne EXCEPT zu verwenden Operator. Zum Beispiel könnten wir unser erstes Beispiel so umschreiben:

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

Ergebnis:

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