KWALIFIKACJA INF3 - STYCZEŃ 2018

PYTANIE NR 18.
Jak działa instrukcja łącząca wyniki zapytań INTERSECT w języku SQL?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
INTERSECT jest operatorem działań na zbiorach wyników zapytań. Zwraca tylko te wiersze, które występują jednocześnie w wyniku pierwszego i drugiego zapytania (czyli część wspólną). Nie jest to ani suma wyników (jak przy UNION), ani różnica zbiorów (wiersze tylko z jednego zapytania).

Pełne wyjaśnienie:

Operator INTERSECT należy do tzw. operatorów zbiorowych w SQL, czyli takich, które łączą wyniki dwóch zapytań w jeden wynik w oparciu o logikę teorii zbiorów.

Znaczenie INTERSECT jest następujące: zwraca część wspólną wyników, czyli te wiersze, które pojawiają się w obu zbiorach wynikowych. Innymi słowy, aby rekord znalazł się w rezultacie, musi wystąpić zarówno w pierwszym, jak i w drugim zapytaniu.

  • Dlaczego "Zwraca część wspólną wyników dwóch zapytań." jest poprawne?
    Bo dokładnie opisuje przecięcie zbiorów: wynik zawiera elementy wspólne dla obu zapytań.
  • Dlaczego odpowiedzi o wierszach "z pierwszego, ale nie z drugiego" oraz "z drugiego, ale nie z pierwszego" są błędne?
    To opis różnicy zbiorów (w SQL często realizowanej operatorem typu EXCEPT / MINUS, zależnie od systemu), a nie przecięcia.
  • Dlaczego odpowiedź o "liście wyników z pierwszego oraz listę wyników z drugiego" jest błędna?
    To opis działania sumy zbiorów (UNION). UNION łączy wyniki obu zapytań, zazwyczaj usuwając duplikaty, natomiast INTERSECT nic "nie dokłada", tylko filtruje do wspólnych wierszy.

W praktyce, aby operatory zbiorowe działały poprawnie, oba zapytania muszą zwracać kompatybilne wyniki (np. tę samą liczbę kolumn i zgodne typy danych na odpowiadających pozycjach). Warto też pamiętać, że wsparcie dla INTERSECT zależy od konkretnego systemu bazy danych: w jednych jest dostępny, w innych może go nie być, ale tam gdzie występuje, jego sens pozostaje taki sam.

Wskazówka egzaminacyjna: zapamiętaj triadę działań na zbiorach: suma (UNION), część wspólna (INTERSECT), różnica (EXCEPT/MINUS). To pozwala szybko rozpoznać poprawną definicję po opisie.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
INTERSECT to operator zbiorowy łączący wyniki dwóch zapytań. Zwraca tylko te wiersze, które występują w obu wynikach jednocześnie, czyli część wspólną. Przydaje się, gdy masz dwa niezależne warunki i chcesz znaleźć rekordy spełniające oba.
UNION zwraca sumę wyników obu zapytań (rekordy z pierwszego i drugiego), a INTERSECT zwraca tylko rekordy wspólne. W skrócie: UNION "dodaje", INTERSECT "przecina". Oba operatory zwykle eliminują duplikaty, ale mają inną logikę doboru wierszy.
Bo jego definicja odpowiada przecięciu zbiorów: element ma znaleźć się w wyniku tylko wtedy, gdy jest obecny w obu zbiorach wejściowych. Wiersze "tylko z jednego" to już różnica zbiorów, a tę realizuje inny operator (np. EXCEPT/MINUS, zależnie od systemu).
Zapytania muszą zwracać kompatybilne zestawy danych: zwykle tę samą liczbę kolumn oraz zgodne typy na odpowiadających pozycjach. Dzięki temu system może porównać całe wiersze i ustalić, które są identyczne w obu wynikach, aby zwrócić część wspólną.
W typowym ujęciu operatorów zbiorowych wynik jest traktowany jak zbiór, więc duplikaty są eliminowane. Szczegóły zależą od konkretnego silnika bazy danych i jego wariantów składni, ale na egzaminie najczęściej przyjmuje się, że INTERSECT zwraca unikalne wiersze wspólne.
INTERSECT stosuje się, gdy masz dwa pełne zapytania i chcesz wyciągnąć część wspólną ich wyników, np. gdy każde zapytanie buduje wynik inną logiką (inne JOIN-y, inne agregacje). AND w WHERE dotyczy pojedynczego zapytania i łączy warunki filtrowania w nim.
Nie. Wsparcie dla INTERSECT zależy od DBMS. Część systemów implementuje go wprost, a w innych trzeba osiągnąć podobny efekt innymi konstrukcjami (np. odpowiednimi złączeniami). Na egzaminie ważne jest jednak rozumienie, że INTERSECT oznacza część wspólną wyników.
Najczęściej myli się INTERSECT z UNION (bo oba "łączą" wyniki) albo z operatorem różnicy (rekordy tylko z jednego zapytania). Częsty błąd to też traktowanie wyniku jak prostej konkatenacji list, zamiast jako operacji na zbiorach wierszy.
Najprościej uruchomić osobno oba zapytania, obejrzeć ich wyniki, a potem wykonać INTERSECT i porównać. W wyniku powinny zostać tylko te wiersze, które są identyczne i występują w obu zestawach. To dobra metoda do nauki przed egzaminem.
Pomaga skojarzenie z matematyką: przecięcie zbiorów to część wspólna. Dodatkowo warto utrwalić zestaw: UNION = suma, INTERSECT = część wspólna, EXCEPT/MINUS = różnica. Taka "trójka" szybko rozwiązuje pytania definicyjne na egzaminie.
info

Około 68% zdających odpowiada poprawnie na to pytanie. średnie

Eksperci podkreślają: "INTERSECT jest operatorem działań na zbiorach wyników zapytań."

Źródła:

  • PostgreSQL Documentation: Queries — Combining Queries (INTERSECT/UNION/EXCEPT), https://www.postgresql.org/docs/current/queries-union.html - accessed 2026-03-02
  • Microsoft Learn: Set operators (UNION, INTERSECT, EXCEPT) in Transact-SQL, https://learn.microsoft.com/en-us/sql/t-sql/language-elements/set-operators-union-intersect-except-transact-sql - accessed 2026-03-02
  • Oracle Database SQL Language Reference: Set Operators (INTERSECT), https://docs.oracle.com/en/database/oracle/oracle-database/ - (SQL Language Reference, Set Operators) accessed 2026-03-02

Materiały:

  • Dokumentacja wybranego systemu DBMS: sekcja o operatorach zbiorowych
  • Ćwiczenia: porównanie wyników UNION, INTERSECT i EXCEPT na tych samych danych
  • Notatki/ściąga: tabelka "UNION = suma, INTERSECT = część wspólna, EXCEPT = różnica"

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego