Jak działa EXCEPT w języku SQL? Przykłady zastosowania

Jak działa EXCEPT w języku SQL? Przykłady zastosowania

W SQL mamy kilka sposobów na manipulowanie danymi, a jednym z nich jest operator EXCEPT. Jest on bardzo przydatny, gdy chcemy porównać dwa zestawy wyników i znaleźć różnice między nimi. Dzisiaj dokładnie przyjrzę się temu, jak działa EXCEPT w języku SQL oraz jak można go używać w praktyce.

Co to jest operator EXCEPT w SQL?

Operator EXCEPT w SQL pozwala porównywać dwa zapytania i zwraca tylko te wiersze, które występują w pierwszym zbiorze, ale nie występują w drugim. Działa podobnie do operacji różnicy w teorii zbiorów.

Najprościej można to przedstawić w taki sposób:


SELECT kolumny FROM tabela1
EXCEPT
SELECT kolumny FROM tabela2;

Rezultat tego zapytania będzie zawierał tylko te rekordy z tabela1, które nie mają odpowiednika w tabela2. Warto jednak wiedzieć, że EXCEPT usuwa duplikaty z wyniku, ponieważ domyślnie zwraca jedynie unikalne wiersze.

Warunki poprawnego użycia EXCEPT

Żeby użyć operatora EXCEPT, musimy spełnić kilka podstawowych warunków:

  • Obie części zapytania muszą zwracać taką samą liczbę kolumn.
  • Typy danych w odpowiednich kolumnach muszą być zgodne.
  • Standardowo EXCEPT zwraca unikalne wartości (odpowiednik EXCEPT DISTINCT).

Przykłady zastosowania operatora EXCEPT

Rozważmy przykład, w którym mamy dwie tabele: Pracownicy oraz Menadżerowie. Chcemy znaleźć wszystkich pracowników, którzy nie są menadżerami.


SELECT imie, nazwisko FROM Pracownicy
EXCEPT
SELECT imie, nazwisko FROM Menadżerowie;

Ten wynik wyświetla tylko tych pracowników, którzy nie mają swoich odpowiedników w tabeli Menadżerowie.

EXCEPT a EXCEPT ALL – jaka jest różnica?

Niektóre systemy SQL (np. PostgreSQL) obsługują wariant EXCEPT ALL, który nie usuwa duplikatów. Oznacza to, że jeśli dany wiersz pojawia się w pierwszym zbiorze kilka razy, zostanie zwrócony dokładnie tyle samo razy – o ile nie występuje w drugim zbiorze.

Przykład:


SELECT imie FROM Pracownicy
EXCEPT ALL
SELECT imie FROM Kandydaci;

Różnica między tymi dwiema wersjami jest istotna, gdy mamy do czynienia z powtarzającymi się wartościami i chcemy zachować ich liczność.

Jak EXCEPT działa w różnych bazach danych?

Nie wszystkie systemy baz danych obsługują EXCEPT. Warto wiedzieć, jak to wygląda w najpopularniejszych systemach:

System baz danych Obsługuje EXCEPT? Obsługuje EXCEPT ALL?
SQL Server Tak Nie
PostgreSQL Tak Tak
MySQL Nie (można użyć NOT EXISTS lub LEFT JOIN) Nie
Oracle Tak (jako MINUS) Nie
SQLite Tak (od wersji 3.15.0) Tak

Alternatywy dla EXCEPT w MySQL i innych bazach

MySQL nie obsługuje operatora EXCEPT, ale można go zastąpić innymi technikami, np. LEFT JOIN lub NOT EXISTS.

Użycie LEFT JOIN


SELECT p.imie, p.nazwisko
FROM Pracownicy p
LEFT JOIN Menadżerowie m ON p.imie = m.imie AND p.nazwisko = m.nazwisko
WHERE m.imie IS NULL;

Użycie NOT EXISTS


SELECT imie, nazwisko
FROM Pracownicy p
WHERE NOT EXISTS (
    SELECT 1 FROM Menadżerowie m WHERE p.imie = m.imie AND p.nazwisko = m.nazwisko
);

Obie te alternatywy dają podobny rezultat, eliminując wiersze, które mają swoje odpowiedniki w drugiej tabeli.

Podsumowanie

Operator EXCEPT w SQL pozwala szybko porównywać dwa zbiory danych i znaleźć elementy, które znajdują się tylko w jednym z nich. Jest niezwykle użyteczny w analizie danych, raportowaniu i porządkowaniu zbiorów informacji.

Warto pamiętać o kilku kluczowych kwestiach:

  • EXCEPT usuwa duplikaty z wyników.
  • EXCEPT ALL zachowuje liczbę wystąpień (ale nie we wszystkich bazach jest dostępny).
  • MySQL nie obsługuje EXCEPT, ale można go zastąpić za pomocą LEFT JOIN lub NOT EXISTS.

Zrozumienie działania EXCEPT pozwala efektywnie filtrować dane i tworzyć precyzyjne zapytania. Mam nadzieję, że teraz wiesz, jak działa EXCEPT w języku SQL i jakie ma praktyczne zastosowania.

 

Inny ciekawy artykuł:

Jak działa INTERSECT w języku SQL? Przykłady zastosowania

KajoDataSpace