Jak działa instrukcja łącząca wyniki zapytań INTERSECT w języku SQL?
A. Zwraca część wspólną wyników dwóch zapytań.
Dobrze. INTERSECT zostawia tylko wiersze obecne w wynikach obu zapytań.
B. Zwraca te wiersze, które wystąpiły w wyniku pierwszego zapytania, ale nie było ich w wyniku drugiego zapytania.
Źle. Tak działa EXCEPT, czyli różnica zbiorów.
C. Zwraca te wiersze, które wystąpiły w wyniku drugiego zapytania, ale nie było ich w wyniku pierwszego zapytania.
Źle. To również różnica zbiorów, tylko z zamienioną kolejnością zapytań.
D. Zwraca zbiór wyników z pierwszego zapytania oraz zbiór wyników z drugiego zapytania, automatycznie usuwając powtarzające się wiersze.
Źle. Tak działa UNION, czyli suma wyników z usunięciem powtórzeń.
Pytanie z egzaminu CKE, styczeń 2018 (arkusz E.14-X-18.01).
Instrukcja
INTERSECT zwraca część wspólną wyników dwóch zapytań, czyli tylko wiersze obecne w obu wynikach. Oba zapytania muszą mieć tę samą liczbę kolumn i zgodne typy, bo porównywane są całe wiersze. Przykład: SELECT miasto FROM klienci INTERSECT SELECT miasto FROM dostawcy; poda miasta, w których są jednocześnie klienci i dostawcy. Do zapamiętania trzy operacje na zbiorach: UNION to suma, INTERSECT iloczyn (część wspólna), a EXCEPT różnica. MySQL obsługuje INTERSECT i EXCEPT od wersji 8.0.31; w starszych wersjach ten sam efekt daje INNER JOIN albo podzapytanie z IN. Podobnie jak UNION, operator INTERSECT domyślnie usuwa powtórzenia z wyniku.Wszystkie opisy w tym pytaniu to prawdziwe operacje na zbiorach, tylko przypisane do innych słów kluczowych. Połączenie wyników obu zapytań z usunięciem powtórzeń to
UNION - suma zbiorów, a nie ich część wspólna. Wiersze z pierwszego zapytania, których brak w drugim, zwraca EXCEPT (w Oracle MINUS), czyli różnica zbiorów. Opis odwrotny, z wierszami tylko z drugiego zapytania, to ta sama różnica z zamienioną kolejnością zapytań. INTERSECT działa jak iloczyn: zostawia wyłącznie te wiersze, które pojawiły się w obu wynikach. Pomaga skojarzenie z angielskim słowem intersection, oznaczającym skrzyżowanie - miejsce wspólne dla dwóch dróg. Analogicznie union to połączenie, a except - z wyjątkiem. W bazach bez INTERSECT część wspólną buduje się złączeniem INNER JOIN albo warunkiem WHERE kolumna IN (SELECT ...), co daje ten sam zestaw wierszy.