Jaka jest różnica między Unią a Unią?

Jaka jest różnica między UNION a UNION ALL?

Author: DineshDB, 2008-09-08

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)
 1410
Author: Robbie Averill,
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

  1. Dane tabeli pracowników:

Tutaj wpisz opis obrazka

  1. Dane tabeli klienta:

Tutaj wpisz opis obrazka

  1. Przykład Unii (usuwa wszystkie zduplikowane rekordy):

Tutaj wpisz opis obrazka

  1. Przykład unifikacji (po prostu konkatenuje rekordy, nie eliminuje duplikatów, więc jest szybszy od unifikacji):

Tutaj wpisz opis obrazka

 240
Author: Bhaumik Patel,
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ć.

 42
Author: mathewbutler,
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.

 27
Author: Michiel Overeem,
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/

 18
Author: George Mauer,
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.

 12
Author: Ihor Vorotnov,
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.

 12
Author: Peter Perháč,
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.

 9
Author: DotNetGuy,
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ć.

 6
Author: Jakub Šturc,
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'

Tutaj wpisz opis obrazka

Poniżej znajdują się wyniki Unii Wszystkie i operacje związkowe.

Tutaj wpisz opis obrazka

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:

Tutaj wpisz opis obrazka

 6
Author: DBA,
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

 5
Author: ,
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
2009-06-15 10:42:42

(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 DISTINCTnad 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.

 5
Author: shA.t,
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

Dobrze jest zrozumieć diagram Venna.

Oto link do źródła. Jest dobry opis.

Tutaj wpisz opis obrazka

 5
Author: michael-mammut,
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;
 3
Author: Do Nhu Vy,
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.

 2
Author: Rahul Sawant,
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ść.

 2
Author: pedram,
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))

Tutaj wpisz opis obrazka

Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)

Tutaj wpisz opis obrazka

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

Tutaj wpisz opis obrazka

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

Wyjście Tutaj wpisz opis obrazka

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

 2
Author: reza.cse08,
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.

 1
Author: Shubham Pandey,
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.

 0
Author: Pawan Kumar,
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.

 0
Author: AjV Jsy,
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.

 0
Author: Sona,
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

Union Vs Union All Z Przykładem

 0
Author: Sandeep TK,
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