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 table2Obie 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
| id | name |
| 1 | Lena |
| 2 | Leonie |
england_people
| id | name |
| 1 | George |
| 2 | Lena |
Problem: Chcemy utworzyć jedną dużą tabelę ze wszystkimi nazwami, które mamy.
SELECT name from germany_people
UNION
SELECT name from england_peopleWynik:
| 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_peopleWynik:
| 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 DESCWynik:
| name | total_count |
| Lena | 2 |
| Leonie | 1 |
| George | 1 |
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.
Wyzwanie
ŁatwyDostępne tabele i kolumny:
sales_2009:product_id,quantity_soldsales_2010:product_id,quantity_soldsales_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;Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
4Więcej słów kluczowych
Słowo kluczowe INSłowo kluczowe BETWEENSłowo kluczowe LIKESłowo kluczowe ASPowtórzenie – modele telefonów komórkowych2Instrukcje warunkowe
Podstawy instrukcji warunkowychSłowo kluczowe ANDSłowo kluczowe ORSłowo kluczowe NOTŁączenie wielu warunkówNawiasyWartości logiczne3Określony format zwracanych danych
Wartości nullSortowanie wyników — część 1Sortowanie wyników — część 2Powtórzenie — firma zajmująca się cyberbezpieczeństwemOgraniczanie liczby rekordówPowtórzenie — fabryka pojazdów6Wyzwania na początek
Powtórka – wybory parlamentarnePowtórka – zatrzymanie przestępcy przez policjęPowtórka – pojemnik na napój w barzePowtórka – inżynier: nowe kolumnyPoćwicz samodzielnie: Edytor online SQL