W wyniku działania operatora Except otrzymasz wynik tylko i wyłącznie z lewej (pierwszej) tabeli (A). Klauzule Select pomiędzy Except mogą być bardzo złożone, możesz wykorzystać np. Join, aby jak najbardziej ograniczyć wyniki zapytania.
PostgreSQL Except Nieco Teorii…
Szablon użycia operatora Except jest stosunkowo proste, musisz użyć dwóch klauzul Select a pomiędzy nimi operator Except.
1 2 3 4 5 6 7 |
SELECT kolumny FROM tabela_A WHERE warunek_a EXCEPT SELECT kolumny FROM tabela_B WHERE warunek_b; |
Musisz pamiętać o dwóch wymaganiach co do składowych zapytania:
- Liczba kolumn i ich zamówień musi być taka sama w dwóch zapytaniach.
- Typy danych odpowiednich kolumn muszą być kompatybilne.
Przykłady, Przykłady…
Załóżmy, że chcesz wyświetlić filmy, których nie ma w tabeli inventory.
Na początek wyświetl id każdego filmu oraz jego tytuł.
1 2 3 |
SELECT film_id, title FROM film ORDER BY title; |
Kolejnym krokiem będzie wyświetlenie filmów, które należą do tabeli inventory, tzn. czy film_id znajduje się w niej. Dla zachowania porządku pomiń powtarzające się wyniki (distinct).
1 2 3 4 |
SELECT distinct inventory.film_id, title FROM inventory INNER JOIN film ON film.film_id = inventory.film_id ORDER BY title; |
Połączenie powyższych zapytań przy pomocy klauzuli except, spowoduje otrzymanie wyniku dokładanie odwrotnego, czyli pokaże filmy, których nie ma w tabeli inventory.
1 2 3 4 5 6 7 |
SELECT film_id, title FROM film EXCEPT SELECT DISTINCT inventory.film_id, title FROM inventory INNER JOIN film ON film.film_id = inventory.film_id ORDER BY title; |
W kolejnym wpisie przedstawię informacje w jaki sposób utworzyć podzapytanie(subquery).
Dziękuję Ci, za poświęcony czas na przeczytanie tego artykułu. Jeśli był on dla Ciebie przydatny, to gorąco zachęcam Cię do zapisania się na mój newsletter, jeżeli jeszcze Cię tam nie ma. Proszę Cię także o “polubienie” mojego bloga na Facebooku oraz kanału na YouTube – pomoże mi to dotrzeć do nowych odbiorców. Raz w tygodniu (niedziela punkt 17.00) otrzymasz powiadomienia o nowych artykułach / projektach zanim staną się publiczne. Możesz również pozostawić całkowicie anonimowy pomysł na wpis/nagranie.
Link do formularza tutaj: https://beitadmin.pl/pomysly
Pozostaw również komentarz lub napisz do mnie wiadomość odpisuję na każdą, jeżeli Masz jakieś pytania:).