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

SQLite UNDTAGET operatør

I SQLite er EXCEPT operator kan bruges til at oprette en sammensat SELECT sætning, der returnerer delmængden af ​​rækker, der returneres af den venstre SELECT som ikke returneres af den rigtige SELECT .

Eksempel

Antag, at vi har følgende 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 bruge EXCEPT operatør for at returnere lærere, der ikke også er studerende:

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

Resultat:

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

Så vi får kun værdier, der vises i Teachers tabel, der ikke også vises i Students bord.

Vi kan få forskellige resultater, alt efter hvilken tabel der er til venstre og hvilken der er til højre. Her er et eksempel, der sætter Students tabel til venstre og Teachers til højre:

SELECT StudentName FROM Students
EXCEPT
SELECT TeacherName FROM Teachers;

Resultat:

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

Denne gang får vi elever, der ikke også er lærere.

SQLites EXCEPT operatør returnerer kun distinkte rækker. Så i vores eksempel returneres kun én række for Cathy , selvom der er to lærere med det navn.

Nogle andre RDBMS'er tillader os at inkludere dubletter i resultatet ved at acceptere en valgfri ALL søgeord med deres EXCEPT operatør, men det gør SQLite ikke (i hvert fald ikke i skrivende stund). Du er velkommen til at tjekke SQLites dokumentation, hvis noget ændrer sig.

Et alternativ

Det er muligt at få det samme resultat uden at bruge EXCEPT operatør. For eksempel kunne vi omskrive vores første eksempel til dette:

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

Resultat:

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

  1. Introduktion af agentbaseret databaseovervågning med ClusterControl 1.7

  2. Sådan indsætter du rækker i SQL Server-tabel ved at redigere tabelrækker GUI - SQL Server / TSQL Tutorial Del 101

  3. Sådan får du dagen fra en date i T-SQL

  4. Fejl ved oprettelse af tabel:Du har en fejl i din SQL-syntaks nær 'order( order_id INT UNSIGNED NOT NULL AUTO_INCREMENT, user_id ' på linje 1