SQLite
 sql >> Baza danych >  >> RDS >> SQLite

SQLite Z WYJĄTKIEM Operatora

W SQLite EXCEPT operator może być użyty do utworzenia złożonego SELECT instrukcja zwracająca podzbiór wierszy zwracanych przez lewy SELECT które nie są zwracane przez właściwy SELECT .

Przykład

Załóżmy, że mamy następujące tabele:

SELECT * FROM Teachers;
SELECT * FROM Students;

Wynik:

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       

Możemy użyć EXCEPT operator zwracający nauczycieli, którzy nie są jednocześnie uczniami:

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

Wynik:

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

Tak więc otrzymujemy tylko wartości, które pojawiają się w Teachers tabela, która nie pojawia się również w Students stół.

W zależności od tego, który stół jest po lewej, a który po prawej, możemy uzyskać różne wyniki. Oto przykład, który umieszcza Students tabela po lewej i Teachers po prawej:

SELECT StudentName FROM Students
EXCEPT
SELECT TeacherName FROM Teachers;

Wynik:

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

Tym razem mamy uczniów, którzy nie są jednocześnie nauczycielami.

EXCEPT SQLite operator zwraca tylko różne wiersze. Tak więc w naszym przykładzie dla Cathy zwracany jest tylko jeden wiersz , mimo że jest dwóch nauczycieli o tym nazwisku.

Niektóre inne RDBMS pozwalają nam na uwzględnienie duplikatów w wyniku poprzez zaakceptowanie opcjonalnego ALL słowo kluczowe z ich EXCEPT operatora, ale SQLite tego nie robi (przynajmniej nie w momencie pisania). Zachęcamy do zapoznania się z dokumentacją SQLite na wypadek jakichkolwiek zmian.

Alternatywna

Możliwe jest uzyskanie tego samego wyniku bez użycia EXCEPT operator. Na przykład moglibyśmy przepisać nasz pierwszy przykład do tego:

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

Wynik:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sortowanie dat w bazie sqlite?

  2. Brak takiego wyjątku w kolumnie sqlite

  3. NullPointerException w getReadableDatabase()

  4. Jak działa SQLite Sum()

  5. Android sqlite, limit liczby wierszy w bazie danych