Menu
Coddy logo textTech

UNION

Część sekcji Podstawy ścieżki SQL w Coddy. Lekcja 48 z 72.

Sumy różnią się od złączeń. Złączenia wykorzystują warunki do łączenia tabel, natomiast sumy po prostu dodają jedną tabelę pod drugą. Aby użyć UNION, napiszemy:

SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2

Obie instrukcje SELECT muszą spełniać następujące zasady:

  • Liczba pól powinna być taka sama
  • Kolejność ma znaczenie
  • Kolumny na tych samych pozycjach muszą mieć zgodne typy danych

Na przykład załóżmy, że mamy następujące tabele:

germany_people

idname
1Lena
2Leonie

england_people

idname
1George
2Lena

Problem: Chcemy utworzyć jedną dużą tabelę ze wszystkimi nazwami, które mamy.

SELECT name from germany_people
UNION
SELECT name from england_people

Wynik:

name
Lena
Leonie
George

UNION zwraca tylko unikatowe wartości, podczas gdy UNION ALL zwraca wszystkie rekordy w niezmienionej postaci:

SELECT name from germany_people
UNION ALL
SELECT name from england_people

Wynik:

name
Lena
Leonie
George
Lena

Możesz też połączyć UNION ALL z funkcjami agregującymi, GROUP BY i ORDER BY, aby podsumować dane z wielu tabel. Sztuczka polega na umieszczeniu UNION ALL w podzapytaniu, a następnie zastosowaniu grupowania i sortowania.

Na przykład załóżmy, że chcemy policzyć, ile razy każde imię pojawia się w obu tabelach:

SELECT name, COUNT(*) AS total_count
FROM (
    SELECT name FROM germany_people
    UNION ALL
    SELECT name FROM england_people
) AS combined
GROUP BY name
ORDER BY total_count DESC

Wynik:

nametotal_count
Lena2
Leonie1
George1

Tutaj użyto UNION ALL (a nie UNION), aby zachować duplikaty, takie jak Lena. W przeciwnym razie zostałyby usunięte przed zliczaniem. Podzapytanie łączy wszystkie wiersze, a następnie GROUP BY + COUNT podsumowują je. ORDER BY sortuje wynik końcowy.

challenge icon

Wyzwanie

Łatwy

Dostępne tabele i kolumny:

  • sales_2009: product_id, quantity_sold
  • sales_2010: product_id, quantity_sold
  • sales_2011: product_id, quantity_sold

Są 3 tabele sprzedaży.

Znajdź łączną sprzedaż każdego produktu ze wszystkich tabel.

Wynik powinien zawierać product_id i łączną sprzedaż.

Nazwij tę kolumnę total_sales.

Posortuj wyniki według łącznej sprzedaży malejąco.

Spróbuj swoich sił

-- Połącz trzy tabele w jeden wynik, zachowując wszystkie wiersze
SELECT product_id, ____ AS total_sales
FROM (
    SELECT * FROM sales_2009
    ____
    SELECT * FROM sales_2010
    ____
    SELECT * FROM sales_2011
)
-- Jeden wiersz na produkt, najpierw największa suma
GROUP BY ____
ORDER BY ____ DESC;
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Edytor online SQL