Jak połączyć wyniki wielu zapytań SQL za pomocą instrukcji Unii

Jak połączyć wyniki wielu zapytań SQL za pomocą instrukcji Unii

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

Wymagania oprogramowania i konwencje linii poleceń Linux
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