Blog JSystems - z miłości do programowania

Szukaj

Operatory zbiorowe w MS SQL Server

Wszystkich operatorów zbiorowych dotyczą te same zasady:



  • Kolumny na tych samych pozycjach muszą być tego samego typu.

  • Zapytania muszą zwracać tą samą liczbę kolumn.

  • Nazwy kolumn w wyniku pobierane są z pierwszego zapytania.

  • Sortować można tylko wynik całości


UNION ALL


powoduje, że w wyniku zapytania otrzymujemy sumę wszystkich wierszy, które znajdowały się w obu zapytaniach składowych.


select ProductID, Name, ListPrice, ProductCategoryID  from SalesLT.Product where ProductID between 800 and 805


union all


select ProductID, Name, ListPrice, ProductCategoryID  from SalesLT.Product where ProductID between 803 and 808;


91.jpg (794×453)


Utworzone zostały dwa zapytania, pierwsze zawierało produkty o identyfikatorze produktu w przedziale zamkniętym od 800 do 805, drugi natomiast przedziale zamkniętym od 803 do 808. W wyniku zastosowania operatora union all otrzymaliśmy sumę wierszy wyświetloną przez oba zapytania. Widać to na produktach o identyfikatorze produktu 803, 804 i 805 – zostały one wyświetlone dwa razy.


UNION


Połączenie to powoduje, że w wyniku zapytania otrzymujemy sumę wszystkich wierszy, które znajdowały się w obu zapytaniach składowych, ale z wyniku końcowego eliminowane są wiersze, które powtarzają się w obu zbiorach składowych.


select ProductID, Name, ListPrice, ProductCategoryID  from SalesLT.Product where ProductID between 800 and 805


union all


select ProductID, Name, ListPrice, ProductCategoryID  from SalesLT.Product where ProductID between 803 and 808;


92.jpg (797×394)


Utworzone zostały dwa zapytania, pierwsze zawierało produkty o identyfikatorze produktu w przedziale zamkniętym od 800 do 805, drugi natomiast przedziale zamkniętym od 803 do 808. W wyniku zastosowania operatora union otrzymaliśmy sumę wierszy wyświetloną przez oba zapytania, ale tym razem powtórzenia zostały wyeliminowane.


INTERSECT


Połączenie za pomocą operatora zbiorowego intersect wyświetla tylko te wiersze które wystąpiły w obu zbiorach - tj. część wspólna dwóch zbiorów.


select ProductID, Name, ListPrice, ProductCategoryID  from SalesLT.Product where ProductID between 800 and 805


intersect


select ProductID, Name, ListPrice, ProductCategoryID  from SalesLT.Product where ProductID between 803 and 808;


93.jpg (795×281)


Utworzone zostały dwa zapytania, pierwsze zawierało produkty o identyfikatorze produktu w przedziale zamkniętym od 800 do 805, drugi natomiast przedziale zamkniętym od 803 do 808. W wyniku zastosowania operatora intersect otrzymaliśmy wiersze które występowały w obu zapytaniach.


EXCEPT


Połączenie przy pomocy minus eliminuje z pierwszego zbioru te rekordy, które wystąpiły w drugim zbiorze.


select ProductID, Name, ListPrice, ProductCategoryID  from SalesLT.Product where ProductID between 800 and 805


except


select ProductID, Name, ListPrice, ProductCategoryID  from SalesLT.Product where ProductID between 803 and 808;


94.jpg (794×282)


 


Utworzone zostały dwa zapytania, pierwsze zawierało produkty o identyfikatorze produktu w przedziale zamkniętym od 800 do 805, drugi natomiast przedziale zamkniętym od 803 do 808. W wyniku zastosowania operatora except otrzymaliśmy wiersze z zapytania pierwszego, lecz z wyeliminowanymi wierszami które wystąpiły w drugim zapytaniu.

Przyjdź do nas na szkolenie z baz danych SQL Server! Mamy szereg szkoleń w ofercie: SQL, T-SQL, tuning, administracja i wiele innych. Sprawdź dostępne szkolenia SQL Server
Zapisz się do newslettera aby otrzymywać najnowsze świeżynki pojawiające się na blogu! Zapisz się do newslettera