Łą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?