Zamiast niesławnych Join’ów możliwe jest wykorzystanie klauzuli Intersect, która w wyniku pokaże dane wspólne dla co najmniej dwóch tabel.
SQL Intersect Nieco Teorii…
Użycie tej klauzuli jest stosunkowo proste poniżej schemat użycia dla tabel A i B.
1 2 3 4 5 |
SELECT kolumna_1,...,kolumna_n FROM A INTERSECT SELECT kolumna_1,...,kolumna_n FROM B; |
Należy pamiętać o tym, aby w obydwu zapytaniach SELECT miał dokładnie tyle samo kolumn wybranych oraz aby te kolumny były tego samego typu.
Do wykonania ćwiczeń w następnym kroku konieczne będzie utworzenie trzech dodatkowych tabel oraz wypełnienie ich przykładowymi danymi.
Tabel people przechowuje klucz główny oraz imię i nazwisko osoby. Tabela manager przechowuje ID osoby, która jest managerem, datę zatrudnienia oraz klucz obcy, który prowadzi do tabeli people. Tabela ordinary_employee, przechowuje zwykłych pracowników z ich ID oraz datą zatrudnienia.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
CREATE TABLE people ( people_id serial PRIMARY KEY, people_name VARCHAR (255) NOT NULL ); CREATE TABLE manager ( people_id INT PRIMARY KEY, effective_date DATE NOT NULL, FOREIGN KEY (people_id) REFERENCES people (people_id) ); CREATE TABLE ordinary_employee ( people_id INT PRIMARY KEY, effective_date DATE NOT NULL, FOREIGN KEY (people_id) REFERENCES people (people_id) ); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
INSERT INTO people (people_name) VALUES ('Jan Brzeziński'), ('Tomasz Leśniak'), ('Alicja Lenartowicz'), ('Julia Przybył'), ('Hubert Bąk'), ('Witold Leszczyński'), ('Dorota Wilk'), ('Maciej Cook'), ('Lucyna Wiśniewska'), ('Beata Junik'); INSERT INTO manager VALUES (1, '2020-02-01'), (2, '2019-06-01'), (5, '2020-01-01'), (7, '2020-06-01'); INSERT INTO ordinary_employee VALUES (9, '2018-01-01'), (2, '2020-06-01'), (5, '2017-06-01'), (10, '2015-06-01'); |
Przykłady, Przykłady…
Przy użyciu klauzuli INTERSECT wykonaj z powyższych danych zapytanie, które wyświetli część wspólną z dwóch dostępnych w zapytaniu tabel: manager oraz ordinary_employee.
1 2 3 4 5 6 |
SELECT people_id FROM manager INTERSECT SELECT people_id FROM ordinary_employee; |
W wyniku zapytania będzie część wspólna czyli id 2 oraz 5.

W kolejnym wpisie przedstawię klauzulę Except.
Dziękuję Ci, za poświęcony czas na przeczytanie tego artykułu. Jeśli był on dla Ciebie przydatny, to gorąco zachęcam Cię do zapisania się na mój newsletter, jeżeli jeszcze Cię tam nie ma. Proszę Cię także o “polubienie” mojego bloga na Facebooku oraz kanału na YouTube – pomoże mi to dotrzeć do nowych odbiorców. Raz w tygodniu (niedziela punkt 17.00) otrzymasz powiadomienia o nowych artykułach / projektach zanim staną się publiczne. Możesz również pozostawić całkowicie anonimowy pomysł na wpis/nagranie.
Link do formularza tutaj: https://beitadmin.pl/pomysly
Pozostaw również komentarz lub napisz do mnie wiadomość odpisuję na każdą, jeżeli Masz jakieś pytania:).