Połącz wiersze tabeli używając UNION

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ń:

  1. liczba kolumn musi być taka sama dla obu poleceń select.
  2. 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:

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Przejdź do paska narzędzi