MySQL UNIA – Kompletny samouczek

⚡ Inteligentne podsumowanie

MySQL UNION łączy wyniki dwóch lub więcej zapytań SELECT w jeden skonsolidowany zestaw wyników. Niniejsze wyjaśnienie obejmuje reguły kolumnowe, które warunkują poprawność unii, różnicę między UNION DISTINCT a UNION ALL oraz przykłady uruchomień w bazie danych myflixdb.

  • 🔗 Główny cel: UNION układa wiersze zwrócone przez kilka zapytań SELECT w pojedynczy zestaw wyników, jedno zapytanie pod drugim.
  • 📐 Reguła kolumnowa: Każda instrukcja SELECT musi zwrócić taką samą liczbę kolumn, w tej samej kolejności, ze zgodnymi typami danych.
  • 🧹 UNION DISTINCT: Duplikaty wierszy są usuwane, a zwracane są tylko wiersze unikatowe, co jest zachowaniem MySQL stosuje się domyślnie.
  • 📚 ZJEDNOCZENIE WSZYSTKICH: Zwracany jest każdy wiersz, łącznie z duplikatami, co jest szybsze, ponieważ nie jest wymagana żadna procedura usuwania duplikatów.
  • 🏷️ Nazwy kolumn: Zestaw wyników przyjmuje nazwy kolumn z pierwszego polecenia SELECT, więc aliasy należą do tego zapytania.
  • 🛠️. Typowe zastosowanie: Konsolidacja dwóch tabel zawierających ten sam rodzaj rekordu, bez dopuszczania do występowania duplikatów wierszy w scalonych wynikach.

MySQL UNION OperaTor

Czym jest UNIA w MySQL?

UNION jest MySQL Operator łączący wyniki wielu zapytań SELECT w skonsolidowany zestaw wyników. Wiersze zwrócone przez drugie zapytanie są umieszczane pod wierszami zwróconymi przez pierwsze, co tworzy jedną listę pionową zamiast dwóch oddzielnych.

Jedynym wymogiem, aby to zadziałało, jest to, że liczba kolumn musi być taka sama we wszystkich zapytaniach SELECT, które mają zostać połączone.

Załóżmy, że mamy dwie tabele, jak poniżej.

MySQL UNIONMySQL UNION

Obie tabele zawierają dwie kolumny tego samego typu, więc kwalifikują się do połączenia. Poniższe przykłady łączą dokładnie te dwie tabele.

Dlaczego warto wybrać UNION?

Załóżmy, że w projekcie Twojej bazy danych występuje błąd i używasz dwóch różnych tabel przeznaczonych do tego samego celu. Chcesz skonsolidować te dwie tabele w jedną, pomijając jednocześnie wszelkie duplikaty rekordów w pliku cree.ping do nowej tabeli. W takich przypadkach można użyć UNION.

Operator jest również przydatny w codziennej pracy raportowej:

  • Archidane rejestrowane i na żywo: Bieżącą tabelę i tabelę archiwalną, które współdzielą te same kolumny, można generować razem, bez konieczności ich fizycznego scalania.
  • Kilka źródeł, jeden raport: Członków i filmy lub sprzedaż z dwóch regionów można wyświetlić w jednym wynikach, co umożliwia szybki audyt.
  • Kontrole migracji: Wiersze ze starej tabeli i nowej tabeli można ułożyć w stos i porównać przed usunięciem starej tabeli.

Unia nie zastępuje połączenia JOIN. Połączenie UNION dodaje wiersze pod wierszami, natomiast połączenie JOIN dodaje kolumny obok kolumn, a to rozróżnienie decyduje, którego operatora wymaga zadanie.

MySQL Składnia i reguły UNION

Teraz, gdy cel jest jasny, przyjrzyjmy się kształtowi oświadczenia i regułom egzekwowanym przez bazę danych.

SELECT column1, column2 FROM `table1`
UNION [DISTINCT | ALL]
SELECT column1, column2 FROM `table2`;

Każdy związek zawodowy kieruje się trzema zasadami:

  1. Taka sama liczba kolumn. Każdy SELECT oświadczenie musi zwrócić taką samą liczbę kolumn, w przeciwnym razie MySQL powoduje błąd 1222.
  2. Zgodne typy danych w tej samej kolejności. Pierwsza kolumna pierwszego zapytania jest dopasowywana do pierwszej kolumny drugiego zapytania, więc liczba powinna spotkać się z liczbą, a tekst powinien spotkać się z tekstem.
  3. Nazwy pochodzą z pierwszego zapytania. Nagłówek zestawu wyników pobierany jest z pierwszego polecenia SELECT, dlatego też wszelkie aliasy powinny tam się znajdować.

An ORDER BY lub LIMIT Klauzula umieszczona na końcu odnosi się do łącznego wyniku, a nie do jednej jego gałęzi, i musi odwoływać się do nazw kolumn wygenerowanych przez pierwszą instrukcję SELECT.

UNION DISTINCT vs UNION ALL

Po wprowadzeniu tych zasad pozostaje decyzja, czy powielone wiersze mają zostać zachowane.

Łączenie tabel za pomocą DISTINCT

Utwórzmy teraz zapytanie UNION łączące obie tabele za pomocą DISTINCT.

SELECT column1, column2 FROM `table1`
UNION DISTINCT
SELECT column1, column2 FROM `table2`;

Tutaj zduplikowane wiersze są usuwane i zwracane są tylko unikalne wiersze.

Odrębny dla Unii

Uwaga: MySQL używa klauzuli DISTINCT jako domyślnej podczas wykonywania zapytań UNION, jeśli nic nie jest określone.

Łączenie tabel za pomocą ALL

Utwórzmy teraz zapytanie UNION łączące obie tabele za pomocą ALL.

SELECT `column1`, `column2` FROM `table1`
UNION ALL
SELECT `column1`, `column2` FROM `table2`;

Tutaj uwzględniane są powielone wiersze, ponieważ używamy opcji ALL.

Unia-Wszystko

Różnicę łatwo zauważyć na obu obrazkach, a poniższa tabela ją podsumowuje.

Punkt porównania ODRÓŻNIENIE UNII UNIA WSZYSTKIE
Zduplikowane wiersze Usunięto z wyniku Utrzymany w wyniku
Domyślne zachowanie Tak, stosowane, gdy nic nie jest określone Nie, słowo kluczowe ALL musi być napisane
Prędkość Wolniej, wymagany jest przebieg deduplikacji Szybciej, wiersze są zwracane w miarę ich odczytywania
Najlepiej stosować, gdy Połączona lista musi zawierać unikatowe wiersze Każdy wiersz ma znaczenie, w przeciwnym razie nie mogą wystąpić duplikaty

💡 Wskazówka: Jeśli obie gałęzie nie mogą wygenerować zduplikowanych wierszy, wybierz UNION ALL. Baza danych pomija wówczas sortowanie i porównywanie wymagane przez DISTINCT, co jest zauważalną oszczędnością w przypadku dużych tabel.

Praktyczny przykład użycia MySQL Workbench

W dotychczasowych przykładach wykorzystano przykładowe tabele. To samo zapytanie jest teraz uruchamiane w prawdziwej bazie danych myflixdb, gdzie obie tabele zawierają zupełnie różne rekordy.

W naszym myFlixDB połączmy membership_number oraz full_names kolumny z tabeli członków z movie_id oraz title kolumny z tabeli „filmy”. Oba zapytania zwracają dwie kolumny, więc unia jest prawidłowa.

Możemy użyć następującego zapytania.

SELECT `membership_number`, `full_names` FROM `members`
UNION
SELECT `movie_id`, `title` FROM `movies`;

Wykonanie powyższego skryptu w MySQL Workbench W przypadku bazy danych myflixdb otrzymujemy następujące wyniki. Zauważ, że nagłówki pochodzą z pierwszego polecenia SELECT, mimo że dolne wiersze zawierają rekordy filmowe.

membership_number full_names
1 Janet Jones
2 Janet Smith Jones
3 Robert Phil
4 Gloria Williams
5 Leonard Hofstadter
6 Sheldon Cooper
7 Rajesh Koothrappali
8 Leslie Winkle
9 Howard Wolowitz
16 67% Guilty
6 Angels and Demons
4 Code Name Black
5 Daddy's Little Girls
7 Davinci Code
2 Forgetting Sarah Marshal
9 Honey mooners
19 movie 3
1 Pirates of the Caribean 4
18 sample movie
17 The Great Dictator
3 X-Men

FAQ

UNION układa wiersze jednego zapytania pod drugim, więc wynik rośnie. DOŁĄCZ Dopasowuje powiązane wiersze i umieszcza ich kolumny obok siebie, dzięki czemu wynik staje się szerszy. Użyj UNION dla podobnych wierszy i JOIN dla powiązanych tabel.

Umieść pojedynczy ZAMÓW PRZEZ Klauzula LIMIT umieszczona po ostatnim poleceniu SELECT. Sortuje ona połączony wynik i musi używać nazw kolumn wygenerowanych przez pierwsze polecenie SELECT. Klauzula LIMIT umieszczona w tym miejscu zachowuje się tak samo.

Błąd 1222 pojawia się, gdy gałęzie SELECT zwracają nierówną liczbę kolumn. Policz kolumny w każdej gałęzi i dodaj literał lub symbol zastępczy NULL do krótszej gałęzi, aby obie strony ułożyły się w tej samej kolejności.

Tak. Asystenci tekstu na SQL, w tym ci wbudowani MySQL WorkbenchGeneruj instrukcje UNION z prostego żądania. Sprawdź kolejność kolumn samodzielnie, ponieważ model może wyrównać kolumny, które wyglądają podobnie.

Asystent może zasugerować UNION ALL, gdy duplikaty są niemożliwe, co często przyspiesza proces. Decyzja nadal zależy od danych, dlatego przed usunięciem kroku deduplikacji należy upewnić się, że gałęzie rzeczywiście nie mogą się na siebie nakładać.

Podsumuj ten post następująco: