Jak połączyć wyniki wielu zapytań SQL za pomocą instrukcji Unii
- 2800
- 758
- Roland Sokół
W poprzednim artykule rozmawialiśmy o różnym rodzaju DOŁĄCZYĆ
Możemy użyć w bazie danych mariadb/mysql. Tym razem patrzymy na UNIA
Stwierdzenie: Jak to działa, jak możemy go użyć do połączenia wyniku zapytań działających na różnych tabelach i jakie są jego osobliwości.
W tym samouczku nauczysz się:
- Jak korzystać z instrukcji Union na serwerze MariaDB/MySQL
- Jakie są właściwości oświadczenia Unii
Wynik oświadczenia Unii
Zastosowane wymagania i konwencje oprogramowania
Kategoria | Wymagania, konwencje lub wersja oprogramowania |
---|---|
System | Niezależny od OS |
Oprogramowanie | Działająca baza danych mariadb/mysql |
Inny | Podstawowa znajomość bazy danych Mariadb/MySQL |
Konwencje | # - Wymaga, aby podane polecenia Linux są wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda$ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny |
Oświadczenie Unii
UNIA
Oświadczenie pozwól nam połączyć wyniki dwóch lub więcej zapytań. Podczas wykonywania połączenia możemy wykonać jakieś działanie lub pobrać dodatkowe informacje na temat podstawowych relacji między tabelami, podczas korzystania z UNIA
Oświadczenie, jeśli zostaną spełnione pewne warunki, rzędy wynikające z zapytań uruchomionych na różnych, nawet niezwiązanych tabelach, można połączyć. W tym samouczku zobaczymy podstawowy i rzeczywisty przykład tego, jak możemy użyć UNIA
Oświadczenie w środowisku Mariadb/MySQL.
Podstawowy przykład
Zacznijmy od bardzo podstawowego przykładu, aby wprowadzić osobliwości UNIA
oświadczenie. Załóżmy, że mamy dwa całkowicie niezwiązane stoły: pierwszy zwany „film” i drugi „kolor”. W tym pierwszym rzędu zawiera informacje o filmie: tytuł, gatunek i data premiery. Ten ostatni zawiera tylko nazwę niektórych kolorów. Oto jak wyglądają stoły:
+----+---------------+---------+--------------+ |. Id | Tytuł | gatunek | Release_date | +----+---------------+----------+--------------+| 1 | Nowa nadzieja | Fantasy | 1977-05-25 | |. 2 | Ojciec chrzestny | Dramat | 1972-05-24 | +----+---------------+----------+--------------++- -+ --------+ | Id | Nazwa | +----+--------+| 1 | Niebieski | |. 2 | żółty | +----+--------+
Kopiuj I to jest ich opis:
+--------------+-------------+------+-----+---------+----------------+ |. Pole | Typ | NULL | Klucz | Domyślnie | Dodatkowe | +--------------+-------------+------+------+------- -+ ----------------+ | Id | int (2) | Nie |. Pri | NULL | Auto_increment | |. Tytuł | varchar (20) | Nie |. |. NULL | |. |. gatunek | varchar (20) | Nie |. |. NULL | |. |. Release_date | Data | Nie |. |. NULL | |. +--------------+-------------+------+------+------- -+----------------++-------+-------------+------+ -----+---------+----------------+| Pole | Typ | NULL | Klucz | Domyślnie | Dodatkowe | +-------+-------------+------+-----+---------+---- ------------+ | Id | int (2) | Nie |. Pri | NULL | Auto_increment | |. Nazwa | varchar (10) | Nie |. |. NULL | | +-------+-------------+------+-----+---------+----------------+
Kopiuj Jak powiedziano wcześniej, te dwie tabele nie mają ze sobą absolutnie żadnego połączenia. Za pomocą UNIA
Stwierdzenie możemy jednak połączyć wyniki dwóch oddzielnych zapytań wprowadzonych na nich. Biegnijmy:
Wybierz tytuł, gatunek z Identyfikatora Select Union Union, nazwa z koloru;
Powyższe polecenie zwraca następujący wynik:
+---------------+---------+ |. Tytuł | gatunek | +---------------+---------+| Nowa nadzieja | Fantasy | |. Ojciec chrzestny | Dramat | |. 1 | Niebieski | |. 2 | żółty | +---------------+---------+
Kopiuj Wyjaśnijmy. Wykonaliśmy dwa różne WYBIERAĆ
Zapytania: W pierwszym wyborze wartości kolumn „Tytuł” i „Gatunek” dla każdego wiersza w tabeli filmów. W drugim, zamiast tego wybraliśmy kolumny „id” i „nazwa” z tabeli „kolor”, ponownie bez użycia filtra.
Nawet jeśli oba tabele są całkowicie niezwiązane, ponieważ użyliśmy UNIA
Oświadczenie między dwoma zapytaniami, wiersze zwrócone przez każde z nich są łączone: Wynik to tabela, którą można zobaczyć powyżej.
Nawet jeśli w zdecydowanej większości przypadków świata rzeczywistych kolumny wybrane z zaangażowanych tabel prawdopodobnie miałyby te same typy danych, w powyższym przykładu, wyraźnie zobaczymy, w jaki sposób UNIA
zdarza się, nawet jeśli kolumny dwóch oryginalnych tabel zawiera różne typy danych: obie kolumny wybrane z tabeli „film” są z Varchar
Typ danych, podczas gdy kolumna „ID” tabeli „kolor” jest typu Int
. Jest to możliwe, ponieważ baza danych automatycznie wykonuje potrzebne konwersje danych.
Kolejną bardzo ważną rzeczą do zauważenia jest to, że kolumny w UNIA
wynik, odziedziczyli ich nazwiska po wybranych w Pierwszy
zapytanie, po lewej stronie UNIA
Słowo kluczowe: „Tytuł” i „Gatunek”. Patrzenie na powyższy przykład prawdopodobnie sprawiłbyś, że zapytasz, co UNIA
Oświadczenie może być przydatne w scenariuszu prawdziwego życia: zobaczmy inny przykład.
Fantasy Football Case
Jakiś czas temu byłem zaangażowany w tworzenie małej aplikacji do piłki nożnej fantasy. W bazie danych aplikacji znajdowała się tabela o nazwie „Club”, która była gospodarzem informacji o klubach fantasy zaangażowanych w konkurs. To jest jego ekstrakt:
+----+-----------------+--------+ |. Id | Nazwa | budżet | +----+-----------------+--------+| 1 | Havana Blu | 4 | |. 2 | Longobarda | 4 | |. 3 | Real Siderno | 0 | |. 4 | Zespół trzęsienia ziemi | 66 | |. 5 | Kalapagos | 33 | |. 6 | Cantasant | 5 | |. 7 | F.C. Mojito | 0 | |. 8 | Apoel Nicotina | 1 | |. 9 | Dharma | 0 | |. 10 | Real 1908 | 12 | +----+-----------------+--------+
Kopiuj W tym samym projekcie istniał również połączenie stołowe „kalendarz”, w którym każdy rząd reprezentował mecz między dwoma z wyżej wymienionych klubów. Ponieważ mieliśmy 10 klubów, każdy dzień mistrzostw był gospodarzem w sumie 5 meczów. Jako przykład, oto ekstrakt ze wszystkich meczów z pierwszych czterech dni:
+----+-----+------+-------------+-------+--------------+ |. Id | dzień | gospodarz | host_scores | Gość | Guest_Scores | +----+------+------+-------------+-------+--------- -----+ | 1 | 1 | 2 | 75.5 | 8 | 67 | |. 2 | 1 | 4 | 80 | 6 | 77 | |. 3 | 1 | 7 | 63 | 9 | 71.5 | |. 4 | 1 | 3 | 79.5 | 5 | 68 | |. 5 | 1 | 10 | 64 | 1 | 72.5 | |. 6 | 2 | 5 | 66.5 | 10 | 65.5 | |. 7 | 2 | 9 | 82 | 3 | 62.5 | |. 8 | 2 | 6 | 83 | 7 | 69.5 | |. 9 | 2 | 8 | 77 | 4 | 79.5 | |. 10 | 2 | 1 | 67 | 2 | 81.5 | |. 11 | 3 | 4 | 73 | 2 | 58 | |. 12 | 3 | 7 | 70.5 | 8 | 75.5 | |. 13 | 3 | 3 | 66.5 | 6 | 88 | |. 14 | 3 | 10 | 74.5 | 9 | 60.5 | |. 15 | 3 | 5 | 68.5 | 1 | 72.5 | |. 16 | 4 | 9 | 68 | 5 | 69 | |. 17 | 4 | 6 | 60 | 10 | 66 | |. 18 | 4 | 8 | 70.5 | 3 | 73.5 | |. 19 | 4 | 2 | 71.5 | 7 | 79 | |. 20 | 4 | 1 | 68.5 | 4 | 68 | +----+-----+------+-------------+-------+--------------+
Kopiuj Pierwsza kolumna każdego wiersza zawiera Klucz zastępczy
używane jako główny klucz
dla stołu. Drugi zawiera liczbę całkowitą reprezentującą dzień, w którym mecz jest częścią. gospodarz
, host_scores
, I gość
, guest_scores
Kolumny zawierają odpowiednio identyfikator i dziesiątki klubu, które grały jako gospodarz i The Club, który grał jako gość.
Teraz powiedzmy, że chcemy wygenerować ranga, w której wszystkie kluby są wymienione w kolejności malejącej w podstawie całkowitych wyników, które wykonali w pierwszych czterech mistrzostwach. Gdyby każdy identyfikator klubu był wymieniony tylko w kolumnie, powiedz „host”, operacja byłaby naprawdę łatwa: po prostu obliczylibyśmy sumę wyników za pomocą SUMA()
Funkcja łączna i zgrupuj wyniki według identyfikatora klubów, wyświetlając je w kolejności malejącej:
Wybierz host, sum (host_scores) jako suma_scores z grupy kalendarzowej według zamówienia hosta według total_scores desc
Kopiuj Jednak ponieważ każdy dzień mistrzostwa klub gra alternatywnie jako gospodarz i jako gość, powyższe zapytanie nie zwróci pożądanych przez nas wyników, ale wytworzy całkowitą liczbę drużyn, w tym tylko wyniki wykonane, gdy grał jako gospodarz (lub alternatywnie, jako gość).
To jest jeden przypadek, w którym UNIA
Oświadczenie może się przydać: możemy wykonać dwa osobne zapytania, jedno obejmujące kolumny „host” i „host_scores”, a drugi z udziałem „gości” i „guest_scores”; Następnie możemy użyć UNIA
instrukcja dołączona do wiersza wynikającego z drugiego zapytania do tych zwróconych przez pierwsze, a na koniec oblicz wartości agregatów. Dodatkowo możemy wykonać dołączenie do stołu „klubowego”, aby nazwa każdego klubu pojawia się w wyniku. Oto pełne zapytanie:
Wybierz dane.Team_id, klub.Nazwa, suma (wyniki) jako suma_sores (wybierz host jako team_id, host_scores jako wyniki z Union Calendar All Select Guest, Guest_scores z kalendarza) jako Data łącza klub w klubie.id = dane.grupa desty_id według danych.Team_id Zamówienie według total_scores desc;
Kopiuj Oto wynik zapytania:
+---------+-----------------+--------------+ |. Team_id | Nazwa | Total_Scores | +----------+-----------------+--------------+| 6 | Cantasant | 308 | |. 4 | Zespół trzęsienia ziemi | 300.5 | |. 8 | Apoel Nicotina | 290 | |. 2 | Longobarda | 286.5 | |. 3 | Real Siderno | 282 | |. 9 | Dharma | 282 | |. 7 | F.C. Mojito | 282 | |. 1 | Havana Blu | 280.5 | |. 5 | Kalapagos | 272 | |. 10 | Real 1908 | 270 | +---------+-----------------+--------------+
Kopiuj Jak widać, pod koniec czwartego dnia mistrzostw drużyna „Cantasant” była tą z najwyższymi wynikami. Kolejną rzeczą, którą należy zauważyć w powyższym zapytaniu, jest użycie WSZYSTKO
słowo kluczowe razem z UNIA
: To było konieczne, ponieważ kiedy UNIA
Instrukcja jest używana domyślnie, zduplikowane wiersze są usuwane; Jeśli Związek All
jest używany, zamiast tego rzędy są zachowane.
Wnioski
W tym samouczku nauczyliśmy się znać UNIA
Instrukcja w bazach danych MariaDB/MySQL. Widzieliśmy podstawowy przykład zademonstrowania niektórych właściwości oświadczenia i przykładu prawdziwego świata, zaczerpniętego z prawdziwego projektu. Podsumowując, cechy UNIA
oświadczenie:
- W wynikowej tabeli używana jest nazwa kolumn wybranych w pierwszym zapytaniu;
- Liczba kolumn musi być taka sama we wszystkich zapytaniach;
- Rodzaje danych kolumn mogą być różne, baza danych wykona konwersję;
- Domyślnie, gdy
UNIA
Używana jest instrukcja, zduplikowane wiersze w wynikach są usuwane: aby uniknąć tego, możemy użyćZwiązek All
;
Rozwiń swoją wiedzę na temat oświadczenia Unii, możesz przyjrzeć się oficjalnej dokumentacji.
Powiązane samouczki Linux:
- Zainstaluj MySQL na Ubuntu 20.04 LTS Linux
- Jak zainstalować MySQL na Almalinux
- Ubuntu 20.04 WordPress z instalacją Apache
- Rzeczy do zainstalowania na Ubuntu 20.04
- Wprowadzenie do silników magazynowych MySQL
- Instalacja Ampache Raspberry Pi
- Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
- Jak utworzyć stos lampy na bazie Dockera za pomocą Dockera na…
- Jak zmienić hasło użytkownika mariadb
- Jak przetrwać dane do PostgreSQL w Javie
- « PostgreSQL Performance Tuning dla szybszego wykonywania zapytania
- Wprowadzenie do wyzwalaczy Mariadb i MySQL »