
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 (odpowiednikEXCEPT 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
lubNOT 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
Opanuj SQL z moim kursem!
Poznasz zarówno podstawy, jak i zaawansowane zapytania analityczne (CTE, subqueries, window functions). Nauczysz się pracować na różnych silnikach – na kursie pracujemy zarówno na MySQL, jak i na Postgres. Wszystko zainstalujemy na Twoim komputerze, plus dostaniesz mnóstwo zestawów danych do ćwiczeń.
Zostań analitykiem danych – dołącz do KajoDataSpace!
Najlepsza ścieżka do zawodu analityka danych. Dostęp do pełnych wersji kursów online z Excela, SQLa, Tableau i Pythona z certyfikatami + specjalistycznych webinarów z PowerBI.
Ekskluzywana ale pomagająca sobie społeczność.
Ponad 61 godzin materiałów video.
Spotkania LIVE co miesiąc.
Mój osobisty mentoring.