SQLShack (Polski)
Ten artykuł dostarczy głębokiego zagłębienia się w operatora SQL Union, opisując jego wiele zastosowań wraz z przykładami i zbadać kilka typowych pytań, takich jak różnice między Union a Union All.
aby spełnić rzeczywiste wymagania dotyczące danych, może być konieczne połączenie zestawów wyników z wielu źródeł danych, aby móc analizować dane lub tworzyć nowe zestawy danych. Zbiory danych mogą być identyczne, ale są szanse, że odwołują się do różnych tabel., Czy istnieje sposób na połączenie danych w jednym zapytaniu? Czy operatory Set są realną opcją? Zacznijmy od tego, jak niektórzy z obecnych operatorów mogą pomóc nam sprostać tym wspólnym wyzwaniom.,n vs Union All
operatory
operator to symbol lub słowo kluczowe definiujące akcję wykonywaną na jednym lub kilku wyrażeniach w instrukcji SELECT.,
Operator Set
przejdźmy do szczegółów operatorów Set W Sql serverze i jak ich używać
W Sql serverze są cztery podstawowe operatory Set:
- Union
- Union All
- INTERSECT
Z wyjątkiem
Union
operator Union łączy wyniki dwóch lub więcej zapytań w osobny sposób.pojedynczy zestaw wyników, który zawiera wszystkie wiersze należące do wszystkich zapytań w Unii. W tej operacji łączy jeszcze dwa zapytania i usuwa duplikaty.,
na przykład tabela 'A' ma 1,2 i 3, a Tabela 'B' ma 3,4,5.,
na wyjściu możesz zobaczyć odrębną listę rekordów z dwóch zestawów wyników
wszystkie
gdy szukasz w Union vs union wszystkie uważamy, że są one dość podobne, ale mają pewne istotne różnice z perspektywy wyników.,
operator Unii łączy wyniki dwóch lub więcej zapytań w jeden zestaw wyników, który zawiera wszystkie wiersze należące do wszystkich zapytań w Unii. W prosty sposób łączy dwa lub więcej zestawów wierszy i utrzymuje duplikaty.
na przykład tabela 'A' ma 1,2 i 3, a Tabela 'B' ma 3,4,5.,iv>
na wyjściu można również zobaczyć wszystkie wiersze zawierające zduplikowane wpisy.,>4
EXCEPT
operator EXCEPT wyświetla wiersze w pierwszym, które nie są w drugim.,/div>
div>
wymień nazwę-wspólne Ciągi z pierwszego zestawu.,
Uwaga: Bardzo łatwo jest wizualizować Operator zestawu za pomocą diagramu Venna, gdzie każda z tabel jest reprezentowana przez przecinające się kształty. Przecięcia kształtów, w których tabele nakładają się na siebie, są wierszami, w których spełniony jest warunek.,olumny zdefiniowane w każdym zapytaniu muszą mieć taką samą kolejność
Uwaga:
- operatory te usuwają duplikaty, z wyjątkiem Unii wszystkie operatory
- wyjściowe nazwy kolumn są odniesione z pierwszego zapytania i.,e. gdy uruchomimy polecenie SELECT z dowolnym operatorem Set i zestawem wyników każdego z zapytań może mieć różne nazwy kolumn, więc wynik polecenia SELECT odnosi się do nazw kolumn z pierwszego zapytania w operacji.
- SQL JOIN jest częściej używany do łączenia kolumn z wielu powiązanych tabel, podczas gdy operatory SET łączą wiersze z wielu tabel.,
- gdy typy wyrażeń są takie same, ale różnią się dokładnością, skalą lub długością, wynik jest określany na podstawie tych samych zasad łączenia wyrażeń
przykłady:
następujące zapytania T-SQL są przygotowywane i uruchamiane w bazie danych Adventureworks2014. Możesz pobrać przykładową bazę danych AdventireWorks2014 tutaj
-
Jak używać prostej klauzuli SQL Union w instrukcji select
w tym przykładzie zestaw wyników zawiera oddzielny zestaw wierszy z pierwszego i drugiego zestawu.,Poniższy przykład opiera się na zasadzie 1, 3 & 5.,
wybór 1Uniawybór 2Uniawybierz 3)Unia(wybierz 3 BUniawybierz 4Uniawybierz 5)Unia(wybierz 8 zUniaWybierz 9Uniawybór 1)) t;wyjście połączenie Unii i Unii wszystkich operatorów za pomocą nawiasów., -
Jak używać SQL Union z zapytaniami, które mają klauzulę WHERE
poniższy przykład pokazuje użycie Union w dwóch instrukcjach SELECT z klauzulą WHERE I ORDER BY.,
The following example is based on the rule 1,2 and 3
12345678910SELECT P1.ProductModelID,P1.NameFROM Production.ProductModel P1WHERE ProductModelID IN(3, 4)UNIONSELECT P2.ProductModelID,P2.,Nazwaz produkcji.ProductModel P2gdzie P2.ProductModelID IN (3, 4)ORDER BY P1.Name; -
Jak używać SQL Union z zapytaniami, które mają klauzulę WHERE i ORDER BY
jest to możliwe tylko wtedy, gdy użyj funkcji top lub zagregowanych w każdym zestawieniu select operatora unijnego. W tym przypadku, top 10 wierszy są wymienione z każdego zestawu wyników i połączone wiersze za pomocą klauzuli Unii, aby uzyskać wynik końcowy. Widzisz również, że klauzula order by jest umieszczona we wszystkich instrukcjach select.,
123div>
456789101112131415161718192021wybierz.ModelID,the.,NameFROM(SELECT TOP 10 ProductModelID ModelID,NameFROM Production.ProductModelWHERE ProductModelID NOT IN(3, 4)ORDER BY Name DESC) aUNIONSELECT b.ProductModelID,b.NameFROM(SELECT TOP 10 ProductModelID,NameFROM Production.,ProductModelWHERE ProductModelID IN(5, 6)ORDER BY Name DESC) b; -
Jak używać SQL Union i SQL pivot
w poniższym przykładzie staramy się połączyć więcej niż jeden zestaw wyników. W realnej sytuacji możesz mieć numery finansowe z różnych regionów lub działów, a tabele mogą mieć te same kolumny i typy danych, ale chcesz umieścić je w jednym zestawie wierszy i w jednym raporcie., W takim scenariuszu skorzystałbyś z klauzuli unijnej i bardzo łatwo jest połączyć wyniki i przekształcić dane w bardziej sensowny raport.
w tym przykładzie Model produktu jest klasyfikowany do Top10, Top100, Top 100 i przekształca wiersze jako zagregowany zestaw wartości w odpowiednie kolumny. Poniższy przykład opiera się na zasadzie 2.,/div>
2345678910111213div> 1415161718192021222324wybierz Max(top10) top10,Max(Top100) Top100,Max(TOP1000) Top100from the(select count(*) TOP10,0 Top100,0 TOP1000from production.,ProductModelWHERE ProductModelID < 10UNIONSELECT 0,COUNT(*),0FROM Production.ProductModelWHERE ProductModelID > 11AND ProductModelID < 100UNIONSELECT 0,0,COUNT(*)FROM Production.,ProductModelgdzie ProductModelID > 101) T;wartości NULL są bardzo ważne dla operatorów zestawu i są traktowane jako wartości drugorzędne.klasowa baza danych. Ponieważ null są uważane za unikalne i jeśli dwa wiersze mają NULL w tej samej kolumnie, to będą one uważane za identyczne, więc w takim przypadku porównujesz NULL do NULL i otrzymujesz równość. W poniższym przykładzie widać użycie wartości NULL. W tym przypadku jest on obsługiwany z funkcją agregatu, max.,
23456789101112131415161718192021222324wybierz max(TOP10) TOP10,max(Top100) Top100,max(TOP1000) Top100from the(select count(*) top10,null Top100,null TOP1000from production.,ProductModelWHERE ProductModelID < 10UNIONSELECT NULL,COUNT(*),NULLFROM Production.ProductModelWHERE ProductModelID > 11AND ProductModelID < 100UNIONSELECT NULL,NULL,COUNT(*)FROM Production.,ProductModelgdzie ProductModelID > 101) T;
Jak używać klauzuli SELECT INTO z SQL Union
poniższy przykład tworzy nowy dbo.atrapa tabeli wykorzystującej klauzulę INTO w pierwszej instrukcji SELECT, która przechowuje końcowy zestaw wyników połączenia kolumn ProductModel i name z dwóch różnych zestawów wyników., W tym przypadku jest wyprowadzany z tej samej tabeli, ale w rzeczywistej sytuacji mogą to być również dwie różne tabele. Poniższy przykład opiera się na regule 1 , 2 i 4.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
DROP TABLE IF EXISTS dbo.,dummy;
SELECT P1.ProductModelID,
P1.Name
INTO dummy
FROM Production.ProductModel P1
WHERE ProductModelID IN(3, 4)
UNION
SELECT P2.ProductModelID,
P2.Name
FROM Production.ProductModel P2
WHERE P2.ProductModelID IN(3, 4)
ORDER BY P1.Name;
GO
SELECT *
FROM dbo.,Dummy;
|
jak używać SQL union z group and having clauses
poniższe przykłady używają operatora union do łączenia wyniku tabeli, w której wszystkie mają klauzulę warunkową zdefiniowaną za pomocą group by I having clause.
LastName jest przetwarzane przez podanie warunków w klauzuli having.
poniższy przykład opiera się na zasadzie 5.,
1
2
3
div> 4
5
6
7
8
9
10
11
12
13
14
15
div> |
wybierz PP.lastname,
COUNT(*) repeatedtwice,
0 Repeatedthrice
od osoby.Człowiek jak pp
dołącz do HumanResources.Pracownik A E O E. Identyfikator businessentityid = polipropylen.,Business
GROUP BY pp.lastname
HAVING COUNT (*) = 2
UNION
SELECT pp.LastName,
0,
COUNT(*) NtoZRange
FROM Person.Osoba jako pp
dołącz do zasobów ludzkich.Pracownik jako e NA e. Biznesentitiid = pp.Business
GROUP BY pp.,LastName
mając COUNT(*) > 2;
|
widzimy, że nazwiska są wyprowadzane w dwóch różnych kolumnach za pomocą operatora unijnego
to wszystko na teraz…
podsumowanie
do tej pory zajęliśmy się różnymi dostępnymi opcjami i regułami, aby używać operatorów set i zrozumieć, kiedy ich używać. Przy ustalaniu, czy używać Union vs Union, należy wziąć pod uwagę kilka punktów., Użyj Union All, jeśli wiesz, że zestawy wyników z wielu zapytań nie nakładają się ani nie generują duplikatów i pamiętaj, że jeśli chcesz użyć nawiasów, możesz to zrobić. Można również obracać i przekształcać wyjście.
Po prostu upewnij się, że typy danych pasują do siebie, a jeśli chcesz wykonać zamówienie, zrób to na końcu po uruchomieniu wszystkich zestawów zapytań. Z natury rzeczy, jeśli chodzi o Union vs Union All, Union All jest szybszy niż Union; ponieważ operatorzy unijni ponoszą dodatkowe koszty, aby wyeliminować duplikaty.
Mam nadzieję, że spodobał ci się ten artykuł o operatorze SQL Union., Zachęcamy do zadawania pytań w komentarzach poniżej.
- Autor
- Ostatnie posty
moją specjalnością jest projektowanie & implementacja rozwiązań o wysokiej dostępności i wieloplatformowa migracja DB., Obecnie pracujące technologie to SQL Server, PowerShell, Oracle i MongoDB.,
Zobacz wszystkie posty Prashanth Jayaram
- szybki przegląd audytu bazy danych w SQL – 28 stycznia 2021
- jak skonfigurować synchronizację danych usługi Azure między bazami danych usługi Azure SQL a lokalnym serwerem SQL Server-20 stycznia 2021
- jak wykonywać operacje importu/eksportu bazy danych usługi Azure SQL przy użyciu programu PowerShell – 14 stycznia 2021