Łączyliśmy już w lewo, prawo i w obydwie strony. Nie łączyliśmy jeszcze w górę i w dół, czyli pionowo. Dziś właśnie o łączeniu pionowym wyników, czyli o UNION, UNION ALL, INTERSECT oraz EXCEPT (MINUS). Inaczej nazywamy je złączeniami na zbiorach.
A dlaczego w ogóle określenie "pionowe"? Bo operujemy na dwóch lub więcej zbiorach uzyskanych z kolejnych, występujących jeden pod drugim, zapytaniach. Czyli łączymy w dół.
UNION i UNION ALL zapewne już znasz z MySQL i być może nawet je stosowałeś. Operator UNION pozwala na połączenie wyników uzyskanych z X (X>1, bo głupio robić UNION na jednym zapytaniu) zapytań. W przypadku UNION będzie to suma wyników bez powtórzeń, a w przypadku UNION ALL duplikaty mogą spać spokojnie.
Przykładowe tabele:
klient1:
| id_klient | login |
|---|---|
| 1 | marek |
| 2 | zdzisiek |
| 3 | heniek |
klient2:
| id_klient | login |
|---|---|
| 1 | marek |
| 3 | heniek |
| 4 | janek |
i zapytanie:
SELECT * FROM klient1 AS k1
UNION /* lub UNION ALL */
SELECT * FROM klient2 AS k2
Wynik z UNION:
| id_klient | login |
|---|---|
| 1 | marek |
| 2 | zdzisiek |
| 3 | heniek |
| 4 | janek |
Wynik z UNION ALL:
| id_klient | login |
|---|---|
| 1 | marek |
| 2 | zdzisiek |
| 3 | heniek |
| 1 | marek |
| 3 | heniek |
| 4 | janek |
O ile UNION i UNION ALL występują w MySQL natywnie, to co z INTERSECT oraz EXCEPT?