Jaka jest różnica między Unią a Unią?
Jaka jest różnica między UNION
a UNION ALL
?
22 answers
UNION
usuwa zduplikowane rekordy (gdzie wszystkie kolumny w wynikach są takie same), UNION ALL
nie.
Występuje hit wydajności przy użyciu UNION
zamiast UNION ALL
, ponieważ serwer bazy danych musi wykonać dodatkową pracę, aby usunąć zduplikowane wiersze, ale zazwyczaj nie chcesz duplikatów (szczególnie podczas tworzenia raportów).
Przykład Unii:
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar
Wynik:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
Przykład:
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
Wynik:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-01 07:33:32
Zarówno UNION, jak i UNION łączą się w wyniku dwóch różnych SQL. Różnią się sposobem obsługi duplikatów.
UNION wykonuje distinctive na zbiorze wynikowym, eliminując wszelkie zduplikowane wiersze.
Unia wszystko nie usuwa duplikatów, a zatem szybciej niż Unia.
Notatka: podczas używania tego polecenia wszystkie wybrane kolumny muszą być tego samego typu danych.
Przykład: jeśli mamy dwa tabele, 1) pracownik i 2) klient
- Dane tabeli pracowników:
- Dane tabeli klienta:
- Przykład Unii (usuwa wszystkie zduplikowane rekordy):
- Przykład unifikacji (po prostu konkatenuje rekordy, nie eliminuje duplikatów, więc jest szybszy od unifikacji):
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-09 12:48:35
UNION
usuwa duplikaty, natomiast UNION ALL
nie.
W celu usunięcia duplikatów zbiór wyników musi zostać posortowany, a to Może mieć wpływ na wydajność Unii, w zależności od ilości sortowanych danych i ustawień różnych parametrów RDBMS (dla Oracle PGA_AGGREGATE_TARGET
z WORKAREA_SIZE_POLICY=AUTO
lub SORT_AREA_SIZE
i SOR_AREA_RETAINED_SIZE
if WORKAREA_SIZE_POLICY=MANUAL
).
Zasadniczo sortowanie jest szybsze, jeśli można je przeprowadzić w pamięci, ale obowiązuje to samo zastrzeżenie dotyczące ilości danych.
Z oczywiście, jeśli potrzebujesz danych zwracanych bez duplikatów, to musisz użyć UNION, w zależności od źródła danych.
Skomentowałbym pierwszy post, aby zakwalifikować komentarz "jest znacznie mniej wydajny" , ale nie ma wystarczającej reputacji (punktów), aby to zrobić.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-13 05:13:39
W ORACLE: UNION nie obsługuje typów kolumn BLOB (lub CLOB), UNION ALL tak robi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-18 20:29:34
Podstawowa różnica między UNION i UNION ALL polega na tym, że operacja union eliminuje powielone wiersze z zestawu wynikowego, ale union all zwraca wszystkie wiersze po połączeniu.
Z http://zengin.wordpress.com/2007/07/31/union-vs-union-all/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-15 17:40:39
Możesz uniknąć duplikatów i nadal działać znacznie szybciej niż Union DISTINCT (który w rzeczywistości jest taki sam jak UNION), uruchamiając zapytanie w ten sposób:
SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X
Zwróć uwagę na AND a!=X
część. To jest o wiele szybsze niż UNION.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-13 00:03:50
Aby dodać moje dwa grosze do dyskusji tutaj: można by zrozumieć operator UNION
jako czysty, zorientowany na zbiór związek-np. zbiór a={2,4,6,8}, zbiór B={1,2,3,4}, związek B = {1,2,3,4,6,8}
Gdy mamy do czynienia ze zbiorami, nie chcemy, aby liczby 2 i 4 pojawiały się dwa razy, ponieważ element jest lub nie jest w zbiorze.
W świecie SQL możesz jednak chcieć zobaczyć wszystkie elementy z dwóch zestawów razem w jednej "torbie" {2,4,6,8,1,2,3,4}. I za to cel T-SQL oferuje operator UNION ALL
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-06 09:55:35
Unia
Polecenie UNION
jest używane do wybierania powiązanych informacji z dwóch tabel, podobnie jak polecenie JOIN
. Jednak przy użyciu polecenia UNION
wszystkie wybrane kolumny muszą być tego samego typu danych. Z UNION
wybierane są tylko różne wartości.
UNIA WSZYSTKIE
Polecenie UNION ALL
jest równe poleceniu UNION
, z tym wyjątkiem, że UNION ALL
wybiera wszystkie wartości.
Różnica między Union
a Union all
jest taka, że Union all
nie wyeliminuje duplikatów wiersze, zamiast tego po prostu pobiera wszystkie wiersze ze wszystkich tabel pasujących do specyfiki zapytania i łączy je w tabelę.
A UNION
oświadczenie skutecznie wykonuje SELECT DISTINCT
na zbiorze wyników. Jeśli wiesz, że wszystkie rekordy są unikalne z Twojej Unii, użyj UNION ALL
, Aby uzyskać szybsze wyniki.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-18 14:43:22
Nie wiem, czy ma znaczenie, która baza danych
UNION
i UNION ALL
powinny działać na wszystkich serwerach SQL.
Należy unikać niepotrzebnych UNION
s są one ogromny wyciek wydajności. Z reguły należy użyć UNION ALL
, jeśli nie jest się pewnym, którego użyć.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-30 10:59:25
Unia-wyniki w odrębne rekordy
while
UNION ALL-wyniki wszystkich zapisów łącznie z duplikatami.
Oba są operatorami blokującymi i dlatego osobiście wolę używać JOINS niż operatorów blokujących (UNION, INTERSECT, UNION ALL itp. ) w każdej chwili.
Aby zilustrować, dlaczego operacja Union wypada słabo w porównaniu z Union All checkout poniższy przykład.
CREATE TABLE #T1 (data VARCHAR(10))
INSERT INTO #T1
SELECT 'abc'
UNION ALL
SELECT 'bcd'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'def'
UNION ALL
SELECT 'efg'
CREATE TABLE #T2 (data VARCHAR(10))
INSERT INTO #T2
SELECT 'abc'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'efg'
Poniżej znajdują się wyniki Unii Wszystkie i operacje związkowe.
Oświadczenie Unii skutecznie dokonuje wyboru odrębnego od ustalonych wyników. Jeśli wiesz, że wszystkie rekordy są unikalne z Twojej Unii, użyj UNION ALL zamiast tego, to daje szybsze wyniki.
Wykorzystanie wyników Unii w odrębnym sortowaniu operacji w planie realizacji. Dowód potwierdzający to stwierdzenie jest pokazany poniżej:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-21 17:24:42
Unia służy do wybierania różnych wartości z dwóch tabel gdzie jako union all służy do wyboru wszystkich wartości, w tym duplikaty z tabel
(z Microsoft SQL Server Book Online)
UNIA [WSZYSTKIE]
Określa, że wiele zestawów wyników ma być połączonych i zwracanych jako pojedynczy zestaw wyników.
Wszystkie
Zawiera wszystkie wiersze w wynikach. Obejmuje to duplikaty. Jeśli nie określono, zduplikowane wiersze są usuwane.
UNION
zajmie to zbyt długo, ponieważ duplikaty wierszy, takie jak DISTINCT
, zostaną zastosowane do wyników.
SELECT * FROM Table1
UNION
SELECT * FROM Table2
Jest odpowiednik:
SELECT DISTINCT * FROM (
SELECT * FROM Table1
UNION ALL
SELECT * FROM Table2) DT
Efektem ubocznym zastosowania
DISTINCT
nad wynikami jest operacja sortowania na wynikach.
UNION ALL
wyniki będą wyświetlane jako dowolne kolejność na wynikach, ale UNION
wyniki będą wyświetlane jako ORDER BY 1, 2, 3, ..., n (n = column number of Tables)
zastosowane na wynikach. Ten efekt uboczny można zobaczyć, gdy nie ma zduplikowanego wiersza.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-12 08:34:22
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-17 09:46:01
Dodaję przykład,
UNION , łączy się z distinct -- > wolniej, ponieważ wymaga porównania (w Oracle SQL developer wybierz query, naciśnij F10, aby zobaczyć analizę kosztów).
Połącz wszystkie , łączy się bez odrębnych -- > szybciej.
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;
I
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION ALL
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-27 04:35:14
Jeszcze jedno chciałbym dodać -
Union: - zbiór wyników jest sortowany w porządku rosnącym.
Union All: - Result set nie jest sortowany. dołączane są dwa wyjścia zapytania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-13 05:14:47
UNION
Scala zawartość dwóch tabel zgodnych ze strukturą w jedną tabelę połączoną.
- różnica:
różnica między UNION
a UNION ALL
polega na tym, że UNION will
pomija duplikaty rekordów, podczas gdy UNION ALL
będzie zawierał duplikaty rekordów.
Union
zbiór wyników jest sortowany w kolejności rosnącej, podczas gdy UNION ALL
zbiór wyników nie jest sortowany
UNION
wykonuje DISTINCT
na swoim zestawie wynikowym, dzięki czemu wyeliminuje dowolne zduplikowane wiersze. Natomiast UNION ALL
nie usuwa duplikatów i dlatego jest szybszy niż UNION
.*
Uwaga: wydajność UNION ALL
będzie zazwyczaj lepsza niż UNION
, ponieważ UNION
wymaga od serwera dodatkowej pracy polegającej na usunięciu duplikatów. Tak więc, w przypadkach, gdy jest pewne, że nie będzie duplikatów, lub gdy posiadanie duplikatów nie stanowi problemu, użycie UNION ALL
byłoby zalecane ze względu na wydajność.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-17 05:45:30
Załóżmy, że masz dwa tabele nauczyciel & Student
Obie mają 4 kolumny o innej nazwie jak ta
Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))
Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)
Możesz zastosować UNION lub UNION ALL dla tych dwóch tabel, które mają tę samą liczbę kolumn. Ale mają inną nazwę lub typ danych.
Gdy zastosujesz operację UNION
na 2 tabelach, pomija ona wszystkie zduplikowane wpisy(wartość wszystkich kolumn wiersza w tabela jest taka sama jak inna tabela). Like this
SELECT * FROM Student
UNION
SELECT * FROM Teacher
Wynik będzie
Po zastosowaniu operacji UNION ALL
na 2 tabelach zwraca wszystkie wpisy z duplikatem(jeśli istnieje jakakolwiek różnica między dowolną wartością kolumny wiersza w 2 tabelach). Like this
SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher
Wykonanie:
Oczywiście Unia wszystkie wydajność jest lepsza niż Unia jak robią dodatkowe zadanie usunięcia zduplikowanych wartości. Możesz to sprawdzić z szacowany czas wykonania naciskając ctrl + L w MSSQL
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-07 07:03:01
W bardzo prostych słowach różnica między UNION i UNION ALL polega na tym, że Unia pominie duplikaty rekordów, podczas gdy Unia ALL obejmie duplikaty rekordów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-25 16:01:56
Unia usuwa duplikaty rekordów w innych rękach Unia nie. Ale trzeba sprawdzić Większość danych, które będą przetwarzane i kolumna i typ danych muszą być takie same.
Ponieważ union wewnętrznie używa "odrębnego" zachowania do wyboru wierszy, dlatego jest bardziej kosztowne pod względem czasu i wydajności. jak
select project_id from t_project
union
select project_id from t_project_contact
This gives me 2020 records
Z drugiej strony
select project_id from t_project
union all
select project_id from t_project_contact
Daje mi więcej niż 17402 wierszy
W perspektywie pierwszeństwa oba mają takie same pierwszeństwo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-22 06:02:21
Jeśli nie ma ORDER BY
, a UNION ALL
może przywrócić wiersze, podczas gdy a UNION
sprawi, że poczekasz do samego końca zapytania, zanim podasz cały zestaw wyników na raz. Może to zmienić sytuację w czasie-a UNION ALL
utrzymuje połączenie przy życiu, jakby było.
Więc jeśli masz problem z przerwą czasową i nie ma sortowania, a duplikaty nie są problemem, UNION ALL
może być raczej pomocne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-03 12:38:27
UNION i UNION wszystkie używane do łączenia dwóch lub więcej wyników zapytań.
Polecenie UNION wybiera różne i powiązane informacje z dwóch tabel, które eliminują zduplikowane wiersze.
Z drugiej strony polecenie UNION ALL wybiera wszystkie wartości z obu tabel, które wyświetlają wszystkie wiersze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-23 08:21:02
Różnica między Union a Union ALL w Sql
Czym jest Union w SQL?
Operator Unii jest używany do łączenia zbioru wyników dwóch lub więcej zbiorów danych .
Each SELECT statement within UNION must have the same number of columns
The columns must also have similar data types
The columns in each SELECT statement must also be in the same order
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-10 10:12:39