Czym różni się operator UNION od UNION ALL przy łączeniu wyników dwóch zapytań SELECT?
Oba operatory sklejają wyniki dwóch zapytań SELECT jeden pod drugim. UNION dodatkowo usuwa duplikaty: jeśli identyczny wiersz wystąpi w obu wynikach, pojawi się raz. UNION ALL niczego nie sprawdza i zwraca wszystkie wiersze, także powtórzone. Słowo ALL można zapamiętać jako „weź wszystko”.
Usuwanie duplikatów wymaga porównania wierszy, więc UNION ALL działa szybciej i stosuje się go, gdy powtórzeń być nie może albo są potrzebne, np. przy sumowaniu sprzedaży z dwóch tabel. Oba zapytania muszą zwracać tyle samo kolumn o zgodnych typach, a nazwy kolumn wyniku pochodzą z pierwszego zapytania.
Sortowanie całego wyniku dopisuje się raz, na końcu ostatniego zapytania.
Najczęstszy błąd to zamiana ról: odwrotne przypisanie usuwania duplikatów nie ma oparcia w nazwach. Słowo ALL dopisuje się właśnie po to, żeby zachować wszystkie wiersze, łącznie z powtórzonymi.
Łączenie kolumn dwóch tabel obok siebie to zadanie złączenia JOIN, np. SELECT * FROM uczniowie JOIN klasy ON uczniowie.id_klasy = klasy.id. Obie wersje UNION zawsze dokładają wiersze, a liczba kolumn wyniku się nie zmienia.
Liczba tabel też nie ma znaczenia. Oba operatory mogą łączyć zapytania do tej samej tabeli, np. mieszkańców dwóch miast, albo do zupełnie różnych tabel. Jedyna różnica między nimi dotyczy duplikatów.
Gdy wiadomo, że powtórzeń nie będzie, lepiej wybrać szybszy UNION ALL, bo serwer nie musi porównywać wierszy.
Przykład: mieszkaniec zapisany w obu wynikach pojawi się dwa razy po UNION ALL i raz po UNION.