przez: Greg Robidoux | aktualizacja: 2019-10-29 | Komentarze (4) / Powiązane: 1 | 2 | 3 | 4 | 5 | Więcej > JOIN Tables
Problem
czasami istnieje potrzeba łączenia danych z wielu tabel lub widoków w jeden kompleksowy zestaw danych. Może to być dla tabel z podobnymi danymi w ramach tej samej bazy danych lub może istnieje potrzeba łączenia podobnych danych w bazach danych lub nawet na serwerach.
w tej poradzie przyjrzymy się, jak używać poleceń UNION vs.UNIONALL i jak się różnią.,
rozwiązanie
w SQL Server masz możliwość łączenia wielu zestawów danych w jeden kompleksowy zestaw za pomocą operatorów UNION lub UNION ALL. Istnieje duża różnica w tych pracach, jak również w zwracanym zestawie wyników końcowych, ale zasadniczo polecenia łączą wiele zestawów danych, które mają podobne struktury w jeden połączony zestaw danych.
UNION
Ta operacja pozwoli Ci połączyć multipledatasets w jeden zbiór danych i usunie wszystkie istniejące duplikaty. Zasadniczo wykonuje odrębną operację we wszystkich kolumnach w zestawie wynikowym.,
połącz wszystkie
Ta operacja ponownie pozwala połączyć wiele zestawów danych w jeden zestaw danych, ale nie usuwa żadnych zduplikowanych wierszy.Ponieważ nie usuwa to zduplikowanych wierszy, proces ten jest szybszy, ale jeśli nie chcesz duplikatów rekordów, musisz zamiast tego użyć operatora unijnego.,h zapytanie musi mieć taką samą liczbę kolumn
Wskazówka: Jeśli nie masz dokładnie tych samych kolumn we wszystkich zapytaniach użyj wartości domyślnej lub wartości null, takiej jak:
SELECT firstName, lastName, company FROM businessContactsUNIONSELECT firstName, lastName, NULL FROM nonBusinessContactsorSELECT firstName, lastName, createDate FROM businessContactsUNION ALLSELECT firstName, lastName, getdate() FROM nonBusinessContacts
Union vs., UNION wszystkie przykłady
przyjrzyjmy się kilku prostym przykładom, jak te polecenia działają i jak różnią się. Jak zobaczysz, końcowe wynikiostatki będą się różnić, ale jest kilka ciekawych informacji na temat tego, jak SQL Server faktycznie kończy proces.
UNION ALL
w tym pierwszym przykładzie używamy operatora UNION ALL przeciwko pracownikowi z bazy danych AdventureWorks. Prawdopodobnie nie jest to coś, co można by zrobić, ale to pomaga zilustrować różnice tych dwóch operatorów.
w tabeli dbo znajduje się 290 wierszy.Pracownik.,
SELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.Employee
Po uruchomieniu tego zapytania zestaw wyników ma 870 wierszy. To jest 290 wierszy zwróconych 3 razy. Dane są po prostu zestawiane jeden zestaw danych na drugim zestawie danych.
oto plan wykonania tego zapytania. Widzimy, że tabela została zapytana3 razy, a SQL Server wykonał krok konkatenacji, aby połączyć wszystkie dane.
UNION
w następnym przykładzie używamy operatora UNION przeciwko Tableagain pracownika z bazy danych AdventureWorks.,
SELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.Employee
Po uruchomieniu tego zapytania zestaw wyników ma 290 wierszy. Mimo, że połączyliśmy dane trzy razy operator Unii usunął zduplikowane rekordy, a zatem wyświetla tylko 290 unikalnych wierszy.
oto plan wykonania tego zapytania. Widzimy, że SQL Server najpierw zapytał2 tabel, a następnie wykonał operację łączenia Merge w celu połączenia dwóch pierwszych tabel, a następnie wykonał kolejne połączenie Merge wraz z zapytaniem trzeciej tabeli w zapytaniu.,Widzimy więc, że trzeba było wykonać o wiele więcej pracy, aby uzyskać ten wynik w porównaniu do całej Unii.
UNION vs.UNION wszystkie przykłady z sortowaniem na kolumnie Clustered Index
jeśli zrobimy krok dalej i zrobimy sortowanie danych za pomocą kolumny ClusteredIndex otrzymamy te plany wykonania. Z tego widzimy, że plan wykonania, którego używa SQL Server, jest identyczny dla każdej z tych operacji, mimo że zestawy wyników końcowych nadal będą zawierały 870 wierszy dla Unii ALL I 290 wierszy dla Unii.,
UNION ALL execution plan with sort on clustered index column
Union execution plan with sort on Cluster index column
UNION vs.UNION wszystkie przykłady Z Sort on Non-indeksowana kolumna
oto kolejny przykład robiący to samo, ale tym razem robiący sortowanie na anon indeksowanej kolumnie. Jak widać plany wykonania są ponownie identyczne dla tych dwóch zapytań, ale tym razem zamiast używać połączenia MERGE, stosuje się konkatenację i sortowanie.,
- spójrz na te inne wskazówki, które mogą być przydatne przy użyciu operatorów union
- porównywanie wielu zestawów danych z operatorami INTERSECTand z wyjątkiem operatorów
- czteroczęściowe nazewnictwo SQL Server
- porównywanie wyników SQL Server z dwóch zapytań za pomocą UNION
Ostatnia aktualizacja: 2019-10-29
o autorze
Zobacz wszystkie moje porady
Leave a Reply