PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak działa Z WYJĄTKIEM w PostgreSQL

W PostgreSQL EXCEPT operator zwraca wiersze zwracane przez lewe zapytanie wejściowe, które nie są zwracane przez prawe zapytanie wejściowe. Można to również nazwać różnicą między dwoma zapytaniami.

Składnia

Składnia wygląda tak:

query1 EXCEPT [ALL] query2

Duplikaty są eliminowane, chyba że EXCEPT ALL jest używany.

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 
-------------
 Cathy
 Ben

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

Domyślnie EXCEPT operator zwraca 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.

Powyższy przykład jest odpowiednikiem następującego zapytania:

SELECT TeacherName FROM Teachers
EXCEPT DISTINCT
SELECT StudentName FROM Students;

Wynik:

 teachername 
-------------
 Cathy
 Ben

Jest to ten sam wynik, który otrzymaliśmy, gdy nie było wyraźnego DISTINCT słowo kluczowe. Możemy uwzględnić duplikaty za pomocą ALL słowo kluczowe (więcej na ten temat później).

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 
-------------
 Faye
 Jet
 Spike
 Ein

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

Dołącz duplikaty

Domyślnie EXCEPT operator domyślnie stosuje DISTINCT operacja. Innymi słowy, domyślnie zwraca tylko różne wartości.

Możemy uwzględnić ALL słowo kluczowe, aby uwzględnić duplikaty w naszym wyniku:

SELECT TeacherName FROM Teachers
EXCEPT ALL
SELECT StudentName FROM Students;

Wynik:

 teachername 
-------------
 Cathy
 Cathy
 Bill
 Ben

Tym razem otrzymaliśmy cztery wiersze, zamiast dwóch, które otrzymaliśmy w naszym pierwszym przykładzie.

Widzimy, że obie Cathys zostały zwrócone zamiast jednej, jak w naszym pierwszym przykładzie.

A co z Billem? W sekcji Teachers znajdują się dwa rachunki tabela, ale tutaj zwracana jest tylko jedna. To prawdopodobnie dlatego, że w grupie Students jest jeden rachunek tabeli, która wykluczałaby jeden z rachunków z naszych wyników.

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 
-------------
 Cathy
 Ben

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. USUŃ KASKADOWE tylko raz

  2. Nazwa dynamicznej tabeli zapytań SQL w FOR

  3. Jak utworzyć pojedynczy punkt końcowy dla konfiguracji replikacji PostgreSQL za pomocą HAProxy?

  4. Zliczanie liczby wystąpień podciągu w ciągu w PostgreSQL

  5. Jak wykonać kopię zapasową i przywrócić bazę danych PostgreSQL