Połącz wiersze tabeli używając UNION
w tej lekcji porozmawiamy o klauzuli UNION. Klauzula UNION umożliwia łączenie wierszy tabeli z dwóch różnych zapytań w jeden wynik. W przeciwieństwie do łączenia, które łączy kolumny z różnych tabel, Unia łączy wiersze z różnych tabel. Oto ilustracja jak wygląda związek
związki
wszystkie przykłady tej lekcji są oparte na Microsoft SQL Server Management Studio i Bazie Danych AdventureWorks2012., Możesz zacząć korzystać z tych bezpłatnych narzędzi za pomocą mojego przewodnika Pierwsze kroki za pomocą SQL Server.
w SQL to polecenie wygląda tak:
SELECT columnlistFROM table1UNIONSELECT columnlistFROM table2
aby połączyć dwie tabele istnieje kilka wymagań:
- liczba kolumn musi być taka sama dla obu poleceń select.
- kolumny w kolejności muszą być tego samego typu danych.
gdy wiersze są łączone, duplikaty wierszy są eliminowane. Jeśli chcesz zachować wszystkie wiersze z wyników instrukcji select, użyj słowa kluczowego ALL.,
przykłady
dwie tabele
Załóżmy, że zostałeś poproszony o podanie listy wszystkich kategorii i podkategorii produktów AdventureWorks2012. Aby to zrobić, możesz napisać dwa oddzielne zapytania i dostarczyć dwa oddzielne wyniki, takie jak dwa arkusze kalkulacyjne, lub możesz użyć klauzuli UNION, aby dostarczyć jeden połączony wynik:
SELECT C.NameFROM Production.ProductCategory AS CUNION ALLSELECT S.NameFROM Production.ProductSubcategory AS S
z tego otrzymujesz połączoną listę nazw, ale załóżmy, że chcesz wiedzieć, które nazwy są kategoriami a podkategorie., Aby to zrobić, możesz dodać nową kolumnę wskazującą typ kategorii:
SELECT 'category', C.NameFROM Production.ProductCategory AS CUNION ALLSELECT 'subcategory', S.NameFROM Production.ProductSubcategory AS S
Union versus Union All
różnica między UNION a UNION ALL polega na tym, że z UNION zwraca unikalny zestaw wierszy z wyniku union; podczas gdy UNION ALL zwraca każdy wiersz.
przykład:
SELECT person.Address.CityFROM person.Address
zwraca 19614 wierszy.
SELECT person.Address.CityFROM person.AddressUNIONSELECT person.Address.CityFROM person.Address
zwraca 575 wierszy, czyli liczbę odrębnych nazw miast w tabeli. Uruchomienie UNION All zwraca dwa razy cały zestaw nazw miast:
SELECT person.Address.CityFROM person.AddressUNION ALLSELECT person.Address.CityFROM person.Address
zwraca 39228 wierszy.,
jak widać jest duża różnica w używaniu all qualifier. Gdy nie są używane, wyniki są odrębnymi wartościami. Duplikaty są eliminowane nie tylko między wierszami z każdego wyniku, ale także od wewnątrz.
Unia trzy tabele
Załóżmy, że zarząd chce połączonej listy osób, dostawców i nazw sklepów zidentyfikowanych według źródła.
aby to zrobić, tworzymy trzy oddzielne zapytania, a następnie używamy klauzuli union, aby je połączyć. Następnie zamówimy listę.,
na pierwszy rzut oka może się wydawać, że klauzula ORDER BY odnosi się tylko do ostatniego polecenia select, ale w rzeczywistości dotyczy wszystkich wyników zwracanych przez Unię. Silnik bazy danych najpierw przetwarza wszystkie oświadczenia Unii, a następnie kolejność przez.
Jeśli masz wątpliwości co do kolejności przetwarzania, możesz użyć nawiasu ” ()”, aby kontrolować kolejność oceny, podobnie jak w przypadku wyrażeń. Oto jak w ogóle wyglądałoby stwierdzenie z nawiasem: