Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

EXCEPT

Termin Definicja
EXCEPT

EXCEPT to operator Transact-SQL zwracający wiersze występujące w pierwszym zestawie wyników, lecz nieobecne w drugim.

Operator EXCEPT w języku Transact-SQL

EXCEPT jest operatorem zbiorów języka Transact-SQL używanym do porównania dwóch zestawów wyników zapytań. Zwraca te wiersze, które pojawiają się w wyniku pierwszego zapytania, ale nie występują w wyniku drugiego. Kolejność operandów ma znaczenie: wyrażenie „A EXCEPT B” oznacza odjęcie zbioru B od zbioru A, natomiast zamiana zapytań może dać zupełnie inny rezultat. Operator jest dostępny w Microsoft SQL Server i służy do porównań wykonywanych na podstawie wartości zwracanych przez obie części zapytania.

Podstawowa postać składni wygląda następująco: SELECT kolumna FROM tabela_a EXCEPT SELECT kolumna FROM tabela_b;. Pierwszy SELECT określa zbiór bazowy, z którego wybierane są wiersze, a drugi SELECT określa wartości wykluczające. Wynik zawiera kolumny pierwszego zapytania. EXCEPT działa na całych wierszach, więc w przypadku wielu kolumn porównywana jest jednocześnie kombinacja wartości ze wszystkich wskazanych kolumn, a nie tylko jedna wybrana kolumna.

Warunki zgodności obu zapytań

Oba zapytania połączone przez EXCEPT muszą zwracać taką samą liczbę kolumn. Kolumny znajdujące się na odpowiadających sobie pozycjach muszą mieć zgodne typy danych albo takie typy, które SQL Server może wzajemnie skonwertować zgodnie z regułami konwersji danych. Nazwy kolumn w drugim zapytaniu nie zmieniają nazw prezentowanych w rezultacie, ponieważ wynik przyjmuje strukturę pierwszego SELECT-a. Z tego powodu często stosuje się jawne aliasy oraz jednoznacznie dobraną kolejność kolumn.

Przykładowo, poniższe zapytanie wyszukuje identyfikatory produktów znajdujące się w tabeli ProduktyAktywne, których nie ma w tabeli ProduktyZablokowane: SELECT ProduktID FROM ProduktyAktywne EXCEPT SELECT ProduktID FROM ProduktyZablokowane;. Jeżeli jeden identyfikator występuje wielokrotnie w pierwszej tabeli, standardowe działanie EXCEPT usuwa duplikaty wyniku. Operator ten działa więc jak porównanie zbiorów, a nie jak porównanie wszystkich pojedynczych rekordów z zachowaniem ich liczności. Wariant EXCEPT ALL, znany z niektórych innych implementacji SQL, nie jest właściwą składnią standardowego operatora EXCEPT w Transact-SQL używanym przez SQL Server.

Duplikaty, wartości NULL i kolejność przetwarzania

EXCEPT traktuje wynikowe wiersze jako wartości do porównania. Domyślne usuwanie duplikatów oznacza, że rezultat zawiera najwyżej jeden egzemplarz każdej unikalnej kombinacji kolumn. Wartość NULL jest uwzględniana w porównaniu zgodnie z zasadami operatorów zbiorów SQL Server: odpowiadające sobie wartości NULL mogą zostać uznane za równoważne na potrzeby ustalenia, czy dany wiersz występuje w obu zestawach. Jest to istotna różnica względem prostego użycia predykatu porównania, gdzie wyrażenie z NULL nie daje wyniku TRUE, lecz UNKNOWN.

Sortowanie rezultatu należy umieszczać na końcu całego wyrażenia, ponieważ operator EXCEPT tworzy jeden wynik z dwóch zapytań. Przykład ma postać: SELECT ProduktID FROM ProduktyAktywne EXCEPT SELECT ProduktID FROM ProduktyZablokowane ORDER BY ProduktID;. Klauzula ORDER BY porządkuje końcowy rezultat, a nie niezależne wyniki pośrednie. Jeżeli zapytania zawierają własne elementy wymagające osobnego przetwarzania, można użyć podzapytań lub wyrażeń tabelarycznych, pamiętając o zachowaniu zgodności liczby i typów kolumn.

EXCEPT w porównaniu z NOT EXISTS i zastosowania kontrolne

EXCEPT jest przydatny podczas wykrywania różnic pomiędzy tabelami, widokami albo wynikami dwóch zapytań. Może wskazać rekordy obecne w aktualnym zestawie, których brakuje w zestawie referencyjnym, na przykład identyfikatory nieobecne w drugim wykazie. W praktyce warto ograniczać obie strony do tych samych kolumn znaczeniowych. Jeżeli pierwsze zapytanie zwraca identyfikator, nazwę i status, a drugie tylko identyfikator, operator zgłosi błąd zgodności, zamiast samodzielnie dopasować różne struktury.

Podobny cel można osiągnąć za pomocą NOT EXISTS, lecz oba rozwiązania nie zawsze mają identyczną semantykę. NOT EXISTS pozwala bezpośrednio zapisać warunek zależny od kolumn tabeli zewnętrznej i łatwiej kontrolować porównania z wartościami NULL. EXCEPT porównuje natomiast komplet wierszy zwracanych przez dwa zapytania oraz eliminuje duplikaty. Wybór operatora powinien wynikać z tego, czy potrzebne jest porównanie zbiorów wynikowych, czy sprawdzenie istnienia powiązanego rekordu. Przy diagnozowaniu problemów z bazą należy zweryfikować tekst obu SELECT-ów, typy kolumn, zastosowane filtry, wpływ wartości NULL oraz ewentualne różnice wynikające z duplikatów. Warszawskie Pogotowie Komputerowe wykonuje profesjonalną naprawę laptopów, komputerów PC i ich podzespołów. Interpretacja zapytań z operatorem EXCEPT wymaga natomiast znajomości konkretnego silnika bazy danych i wersji jego dokumentacji.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę