sql >> Database >  >> RDS >> SQLite

SQLite BEHALVE Operator

In SQLite is de EXCEPT operator kan worden gebruikt om een ​​samengestelde SELECT te maken instructie die de subset van rijen retourneert die worden geretourneerd door de linker SELECT die niet worden geretourneerd door de juiste SELECT .

Voorbeeld

Stel dat we de volgende tabellen hebben:

SELECT * FROM Teachers;
SELECT * FROM Students;

Resultaat:

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       

We kunnen de EXCEPT . gebruiken operator om docenten terug te sturen die niet ook studenten zijn:

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

Resultaat:

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

We krijgen dus alleen waarden die voorkomen in de Teachers tabel die niet ook voorkomt in de Students tafel.

We kunnen verschillende resultaten krijgen, afhankelijk van welke tabel aan de linkerkant is en welke aan de rechterkant. Hier is een voorbeeld waarin de Students tabel aan de linkerkant en Teachers aan de rechterkant:

SELECT StudentName FROM Students
EXCEPT
SELECT TeacherName FROM Teachers;

Resultaat:

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

Deze keer krijgen we leerlingen die niet ook leraar zijn.

SQLite's EXCEPT operator retourneert alleen afzonderlijke rijen. Dus in ons voorbeeld wordt slechts één rij geretourneerd voor Cathy , ook al zijn er twee leraren met die naam.

Sommige andere RDBMS'en stellen ons in staat om duplicaten in het resultaat op te nemen door een optionele ALL . te accepteren trefwoord met hun EXCEPT operator, maar SQLite niet (tenminste, niet op het moment van schrijven). Voel je vrij om de documentatie van SQLite te raadplegen voor het geval er iets verandert.

Een alternatief

Het is mogelijk om hetzelfde resultaat te krijgen zonder de EXCEPT exploitant. We zouden ons eerste voorbeeld hier bijvoorbeeld naar kunnen herschrijven:

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

Resultaat:

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

  1. Selecteer de laatste rij voor elke groep van orakel

  2. Unieke samengestelde sleutel van SQL Server van twee velden met automatische verhoging van het tweede veld

  3. Is het mogelijk om een ​​door de gebruiker gedefinieerde MySql-variabele te gebruiken in een .NET MySql-opdracht?

  4. Tips voor het bewaken van MariaDB-replicatie met ClusterControl