Wybieranie części wspólnej zapytań słowem kluczowym INTERSECT

Lekcja: Łączenie wyników zapytań za pomocą INTERSECT w MySQL


1. Wprowadzenie

Słowo kluczowe INTERSECT umożliwia uzyskanie wspólnych wierszy wyników dwóch lub więcej zapytań SQL. Działa podobnie jak przecięcie zbiorów w matematyce – zwraca tylko te rekordy, które są obecne we wszystkich łączonych zapytaniach.


2. Kluczowe cechy INTERSECT

  • Usuwa duplikaty: Domyślnie zwraca tylko unikalne wiersze wspólne dla obu zapytań.
  • Zasady zgodności:
    • Zapytania muszą zwracać tę samą liczbę kolumn.
    • Typy danych w odpowiadających sobie kolumnach muszą być kompatybilne.

3. Składnia

SELECT kolumna1, kolumna2 FROM tabela1
INTERSECT
SELECT kolumna1, kolumna2 FROM tabela2;

4. Przykłady

Przykład 1: Wspólni klienci

Chcemy znaleźć osoby, które są zarówno pracownikami firmy, jak i kontrahentami.

SELECT imie, nazwisko FROM pracownicy
INTERSECT
SELECT imie, nazwisko FROM kontrahenci;
Przykład 2: Wspólne lokalizacje

Znajdź wspólne miasta pracowników i kontrahentów.

SELECT miasto FROM pracownicy
INTERSECT
SELECT miasto FROM kontrahenci;
Przykład 3: Przecięcie dwóch warunków

Znajdź pracowników, którzy zarabiają więcej niż 5000 zł i jednocześnie należą do działu IT.

SELECT imie, nazwisko FROM pracownicy WHERE pensja > 5000
INTERSECT
SELECT imie, nazwisko FROM pracownicy WHERE dzial = 'IT';

Ćwiczenia dla uczniów

1. Tabele do ćwiczeń

Tworzenie tabel i wstawianie danych:

-- Tabela: pracownicy
CREATE TABLE pracownicy (
    id INT AUTO_INCREMENT PRIMARY KEY,
    imie VARCHAR(50),
    nazwisko VARCHAR(50),
    dzial VARCHAR(50),
    pensja DECIMAL(10, 2),
    miasto VARCHAR(50)
);

INSERT INTO pracownicy (imie, nazwisko, dzial, pensja, miasto) VALUES
('Jan', 'Kowalski', 'IT', 6000.00, 'Warszawa'),
('Anna', 'Nowak', 'Marketing', 4500.00, 'Kraków'),
('Piotr', 'Wiśniewski', 'IT', 7000.00, 'Gdańsk'),
('Katarzyna', 'Zielińska', 'Sprzedaż', 5000.00, 'Warszawa'),
('Marek', 'Jankowski', 'HR', 4000.00, 'Poznań');

-- Tabela: kontrahenci
CREATE TABLE kontrahenci (
    id INT AUTO_INCREMENT PRIMARY KEY,
    imie VARCHAR(50),
    nazwisko VARCHAR(50),
    miasto VARCHAR(50)
);

INSERT INTO kontrahenci (imie, nazwisko, miasto) VALUES
('Jan', 'Kowalski', 'Warszawa'),
('Anna', 'Nowak', 'Kraków'),
('Tomasz', 'Lis', 'Warszawa'),
('Piotr', 'Wiśniewski', 'Gdańsk'),
('Monika', 'Adamska', 'Poznań');

2. Zadania

Zadanie 1
Znajdź osoby, które są zarówno pracownikami, jak i kontrahentami (imiona i nazwiska).


Zadanie 2
Znajdź miasta, w których mieszkają zarówno pracownicy, jak i kontrahenci.


Zadanie 3
Znajdź pracowników z działu IT, którzy zarabiają więcej niż 6000 zł.


Zadanie 4
Znajdź imiona i nazwiska osób, które pracują w dziale IT lub sprzedaży i jednocześnie są kontrahentami.


Zadanie 5
Znajdź osoby, które pracują w mieście "Warszawa" i jednocześnie są kontrahentami z tego samego miasta.


Podsumowanie

  • INTERSECT zwraca wspólne wiersze wyników dwóch zapytań.
  • Jest szczególnie przydatne, gdy chcemy znaleźć wspólne elementy w różnych zbiorach danych.
  • Wymaga, aby zapytania zwracały tę samą liczbę kolumn z kompatybilnymi typami danych.