Sự khác biệt giữa UNION và UNION ALL là gì?


Câu trả lời:


1734

UNIONloại bỏ các bản ghi trùng lặp (trong đó tất cả các cột trong kết quả là như nhau), UNION ALLkhông.

Có một hiệu suất nhấn khi sử dụng UNIONthay vìUNION ALL , vì máy chủ cơ sở dữ liệu phải thực hiện thêm công việc để loại bỏ các hàng trùng lặp, nhưng thông thường bạn không muốn các bản sao (đặc biệt là khi phát triển báo cáo).

Ví dụ:

SELECT 'foo' AS bar UNION SELECT 'foo' AS bar

Kết quả:

+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)

ĐOÀN TẤT CẢ ví dụ:

SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar

Kết quả:

+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)

179
Hàm ý của điều này, đó là sự kết hợp ít hiệu quả hơn vì nó phải quét kết quả để tìm các bản sao
Matthew Watson

19
UNION ALL thực sự sẽ có hiệu suất cao hơn, đặc biệt là do thiếu các loại khác biệt. Thực tiễn chung của tôi là sử dụng UNION ALL trừ khi tôi đặc biệt muốn sao chép.
Adam Caviness

6
Chỉ cần lưu ý rằng có rất nhiều bình luận / câu trả lời hay ở đây, vì vậy tôi đã bật cờ wiki và thêm một ghi chú về hiệu suất ...
Jim Harte

250
UNION ALL có thể chậm hơn UNION trong các trường hợp thực tế trong đó mạng như internet, là một nút cổ chai. Chi phí chuyển nhiều hàng trùng lặp có thể vượt quá lợi ích về thời gian thực hiện truy vấn. Điều này phải được phân tích trên cơ sở từng trường hợp.
Charles Burns

23
@AdamCaviness Nhận xét của bạn không hoàn toàn có ý nghĩa.
kojow7

285

Cả UNION và UNION ALL đều nối kết quả của hai SQL khác nhau. Họ khác nhau trong cách họ xử lý các bản sao.

  • UNION thực hiện DISTINCT trên tập kết quả, loại bỏ mọi hàng trùng lặp.

  • UNION ALL không loại bỏ các bản sao và do đó nhanh hơn UNION.

Lưu ý: Trong khi sử dụng lệnh này, tất cả các cột được chọn cần phải cùng loại dữ liệu.

Ví dụ: Nếu chúng tôi có hai bảng, 1) Nhân viên và 2) Khách hàng

  1. Dữ liệu bảng nhân viên:

nhập mô tả hình ảnh ở đây

  1. Dữ liệu bảng khách hàng:

nhập mô tả hình ảnh ở đây

  1. Ví dụ về UNION (Nó xóa tất cả các bản ghi trùng lặp):

nhập mô tả hình ảnh ở đây

  1. UNION ALL Ví dụ (Nó chỉ ghép các bản ghi, không loại bỏ các bản sao, vì vậy nó nhanh hơn UNION):

nhập mô tả hình ảnh ở đây


3
"tất cả các cột được chọn cần phải cùng loại dữ liệu" - thực tế, mọi thứ không nghiêm ngặt (không phải là một điều tốt từ quan điểm mô hình quan hệ!). Tiêu chuẩn SQL cho biết bộ mô tả cột tương ứng của chúng phải giống nhau ngoại trừ về tên.
onedaywhen

47

UNIONloại bỏ trùng lặp, trong khi UNION ALLkhông.

Để loại bỏ bản sao các tập kết quả phải được sắp xếp, và điều này có thể có ảnh hưởng đến việc thực hiện các UNION, tùy thuộc vào số lượng dữ liệu được sắp xếp, và các thiết lập các thông số RDBMS khác nhau (Đối với Oracle PGA_AGGREGATE_TARGETvới WORKAREA_SIZE_POLICY=AUTOhay SORT_AREA_SIZESOR_AREA_RETAINED_SIZEnếu WORKAREA_SIZE_POLICY=MANUAL).

Về cơ bản, sắp xếp nhanh hơn nếu nó có thể được thực hiện trong bộ nhớ, nhưng cùng cảnh báo về khối lượng dữ liệu được áp dụng.

Tất nhiên, nếu bạn cần dữ liệu được trả về mà không trùng lặp thì bạn phải sử dụng UNION, tùy thuộc vào nguồn dữ liệu của bạn.

Tôi đã có ý kiến ​​về bài đăng đầu tiên để đủ điều kiện nhận xét "ít hiệu quả hơn nhiều", nhưng không đủ danh tiếng (điểm) để làm như vậy.


1
"Để loại bỏ trùng lặp, tập hợp kết quả phải được sắp xếp" - có thể bạn có một nhà cung cấp cụ thể nhưng không có thẻ cụ thể của nhà cung cấp nào trong câu hỏi. Ngay cả nếu có, bạn có thể chứng minh rằng các bản sao không thể được loại bỏ mà không cần sắp xếp?
onedaywhen

2
riêng biệt sẽ "ngầm" sắp xếp các kết quả, bởi vì việc loại bỏ trùng lặp sẽ nhanh hơn trên một tập hợp được sắp xếp. điều này không có nghĩa là tập kết quả trả về thực sự được sắp xếp theo cách đó, nhưng trong hầu hết các trường hợp, riêng biệt (và do đó, UNION) sẽ sắp xếp bên trong tập hợp kết quả.
DevilSuichiro

30

Trong ORACLE: UNION không hỗ trợ các loại cột BLOB (hoặc CLOB), UNION ALL cũng vậy.



13

Bạn có thể tránh trùng lặp và vẫn chạy nhanh hơn nhiều so với UNION DISTINCT (thực tế giống như UNION) bằng cách chạy truy vấn như thế này:

SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X

Chú ý AND a!=Xmột phần. Điều này nhanh hơn nhiều so với UNION.


4
Điều này sẽ bỏ qua các hàng và do đó không tạo ra kết quả mong đợi nếu chứa giá trị NULL. Ngoài ra, nó vẫn không trả về kết quả tương tự như một UNION- UNIONcũng loại bỏ các bản sao được trả về bởi các truy vấn con, trong khi phương pháp của bạn sẽ không.
Frank Schmitt

@FrankSchmitt - cảm ơn vì câu trả lời này; bit này về các truy vấn con là chính xác những gì tôi muốn biết!
Doradus

11

Chỉ cần thêm hai xu của tôi vào cuộc thảo luận ở đây: người ta có thể hiểu UNION toán tử là một UNION thuần túy, theo định hướng SET - ví dụ: đặt A = {2,4,6,8}, đặt B = {1,2,3,4 }, ĐOÀN B = {1,2,3,4,6,8}

Khi giao dịch với bộ, bạn sẽ không muốn số 2 và 4 xuất hiện hai lần, như là một yếu tố hoặc hoặc không phải là trong một bộ.

Tuy nhiên, trong thế giới của SQL, bạn có thể muốn thấy tất cả các yếu tố từ hai bộ cùng nhau trong một "túi" {2,4,6,8,1,2,3,4}. Và với mục đích này, T-SQL cung cấp toán tử UNION ALL.


2
Nitpick: UNION ALLkhông được "cung cấp" bởi T-SQL. UNION ALLlà một phần của tiêu chuẩn SQL ANSI và không dành riêng cho MS SQL Server.
Frank Schmitt

1
Nhận xét 'Nitpick' có thể ám chỉ rằng bạn không thể sử dụng "Liên minh tất cả" trong TSQL, nhưng bạn có thể. Tất nhiên, bình luận không nói lên điều đó, nhưng ai đó đọc nó có thể suy luận ra.
JosephDoggie

10

UNION
Các UNIONlệnh được sử dụng để chọn các thông tin có liên quan từ hai bảng, giống như các JOINlệnh. Tuy nhiên, khi sử dụng UNIONlệnh, tất cả các cột được chọn cần phải cùng loại dữ liệu. VớiUNION , chỉ có các giá trị riêng biệt được chọn.

UNION ALL
Các UNION ALLlệnh tương đương với UNIONlệnh, ngoại trừ việcUNION ALL Chọn tất cả các giá trị.

Sự khác biệt giữa UnionUnion allUnion allsẽ không loại bỏ các hàng trùng lặp, thay vào đó, nó chỉ kéo tất cả các hàng từ tất cả các bảng phù hợp với chi tiết truy vấn của bạn và kết hợp chúng vào một bảng.

Một UNIONtuyên bố có hiệu quả làm một SELECT DISTINCTtrên các kết quả thiết lập. Nếu bạn biết rằng tất cả các hồ sơ được trả về là duy nhất từ ​​liên minh của bạn, UNION ALLthay vào đó, hãy sử dụng , nó sẽ cho kết quả nhanh hơn.


8

Không chắc chắn rằng nó quan trọng cơ sở dữ liệu nào

UNIONUNION ALL nên hoạt động trên tất cả các Máy chủ SQL.

Bạn nên tránh những thứ không cần thiết UNIONvì chúng bị rò rỉ hiệu năng rất lớn. Như một quy tắc sử dụng ngón tay cái UNION ALLnếu bạn không chắc chắn nên sử dụng.


Không có thẻ SQL Server cho câu hỏi này. Tôi nghĩ rằng tùy chọn trả về các bản sao chỉ vì nó thường hoạt động tốt nhất là lời khuyên sai.
onedaywhen

1
@encedaywhen Tôi đoán OP đã sử dụng cụm từ "Máy chủ SQL" làm từ đồng nghĩa cho tất cả các RDBMS (ví dụ: MySQL, PostGreQuery, Oracle, SQL Server). Từ ngữ là không may, mặc dù (và tất nhiên, tôi có thể bị nhầm lẫn).
Frank Schmitt

@FrankSchmitt: không có sản phẩm nào bạn liệt kê là RDBMS thực sự :)
onedaywhen

1
@encedaywhen quan tâm đến công phu? Ít nhất en.wikipedia.org/wiki/Relational_database_manler_system dường như đồng ý với tôi - nó đề cập rõ ràng đến Microsoft SQL Server, Cơ sở dữ liệu Oracle và MySQL. Hay bạn khó chịu về sự khác biệt giữa Oracle và Cơ sở dữ liệu Oracle, vd?
Frank Schmitt

8

UNION - kết quả trong các bản ghi riêng biệt

trong khi

UNION ALL - kết quả trong tất cả các bản ghi bao gồm các bản sao.

Cả hai đều chặn các toán tử và do đó cá nhân tôi thích sử dụng THAM GIA hơn các Toán tử chặn (UNION, INTERSECT, UNION ALL, v.v.) bất cứ lúc nào.

Để minh họa tại sao hoạt động của Union hoạt động kém so với Union All kiểm tra ví dụ sau đây.

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'

nhập mô tả hình ảnh ở đây

Sau đây là kết quả của hoạt động UNION ALL và UNION.

nhập mô tả hình ảnh ở đây

Một tuyên bố UNION thực hiện một cách hiệu quả CHỌN DISTINCT trên tập kết quả. Nếu bạn biết rằng tất cả các hồ sơ được trả về là duy nhất từ ​​liên minh của bạn, thay vào đó, hãy sử dụng UNION ALL, nó sẽ cho kết quả nhanh hơn.

Sử dụng kết quả UNION trong các hoạt động Sắp xếp riêng biệt trong Kế hoạch thực hiện. Bằng chứng để chứng minh tuyên bố này được hiển thị dưới đây:

nhập mô tả hình ảnh ở đây


3
Tất cả mọi thứ trong câu trả lời này đã được nói, quá khó hiểu là hữu ích (đề nghị tham gia vào các công đoàn khi họ làm những việc khác nhau, đưa ra "chặn" như một lý do mà không giải thích ý của bạn về việc đó hoặc máy chủ cơ sở dữ liệu nào áp dụng cho nó), hoặc rất dễ gây hiểu lầm (tỷ lệ phần trăm trong ảnh chụp màn hình của bạn không thể áp dụng cho việc sử dụng thực tế UNION/ UNION ALL).

Toán tử chặn là các toán tử nổi tiếng trong TSQL. Mọi thứ mà các nhà khai thác chặn có thể đạt được bằng Joins nhưng không phải ngược lại. Hoạt động Sắp xếp riêng biệt được khoanh tròn trong hình để cho thấy lý do tại sao liên minh hoạt động tốt hơn liên kết và cũng để hiển thị chính xác nơi nó tồn tại trong kế hoạch thực hiện. Vui lòng thêm nhiều dữ liệu vào các bảng T1 và T2 để chơi xung quanh với tỷ lệ phần trăm!
DBA

Về mặt kỹ thuật, bạn CÓ THỂ tạo ra kết quả của unionviệc sử dụng kết hợp giữa joins và một số s thực sự khó chịu case, nhưng nó khiến cho truy vấn gần như không thể đọc và duy trì, và theo kinh nghiệm của tôi, nó cũng rất tệ đối với hiệu suất. So sánh: select foo.bar from foo union select fizz.buzz from fizzvớiselect case when foo.bar is null then fizz.buzz else foo.bar end from foo join fizz where foo.bar is null or fizz.buzz is null
Devin Lamothe

@DBA Câu trả lời của bạn chỉ phù hợp với người dùng MS SQL Server. OP không bao giờ đề cập đến RDBMS họ đang sử dụng - họ có thể đang sử dụng MySQL, PostgreSQL, Oracle, SQLite, ...
Frank Schmitt

6

union được sử dụng để chọn các giá trị riêng biệt từ hai bảng trong đó liên kết được sử dụng để chọn tất cả các giá trị bao gồm các giá trị trùng lặp từ các bảng


6

Nó là tốt để hiểu với một sơ đồ Venn.

đây là đường dẫn đến nguồn Có một mô tả tốt.

nhập mô tả hình ảnh ở đây


5
Bức ảnh thứ hai của bạn cho thấy hai người là loại trừ lẫn nhau khi họ không. Hình ảnh sẽ hiển thị giống như lần đầu tiên nhưng với 'hình elip giao nhau' ()được hiển thị lần thứ hai. Trên thực tế, trên suy nghĩ thứ hai, vì union allkết quả không phải là một tập hợp, bạn không nên cố gắng vẽ nó bằng sơ đồ Venn!
onedaywhen

5

(Từ Microsoft SQL Server Book trực tuyến)

ĐOÀN [TẤT CẢ]

Chỉ định rằng nhiều bộ kết quả sẽ được kết hợp và trả về dưới dạng một tập kết quả.

TẤT CẢ

Kết hợp tất cả các hàng vào kết quả. Điều này bao gồm các bản sao. Nếu không được chỉ định, các hàng trùng lặp sẽ bị xóa.

UNIONsẽ mất quá nhiều thời gian khi một hàng trùng lặp tìm kiếm DISTINCTđược áp dụng trên kết quả.

SELECT * FROM Table1
UNION
SELECT * FROM Table2

tương đương với:

SELECT DISTINCT * FROM (
    SELECT * FROM Table1
    UNION ALL
    SELECT * FROM Table2) DT

Một tác dụng phụ của việc áp dụng DISTINCTtrên kết quả là một hoạt động sắp xếp trên kết quả.

UNION ALLkết quả sẽ được hiển thị theo thứ tự tùy ý trên kết quả Nhưng UNIONkết quả sẽ được hiển thị như ORDER BY 1, 2, 3, ..., n (n = column number of Tables)được áp dụng trên kết quả. Bạn có thể thấy tác dụng phụ này khi bạn không có bất kỳ hàng trùng lặp nào.


5

Tôi thêm một ví dụ,

UNION , nó được hợp nhất với riêng biệt -> chậm hơn, vì nó cần so sánh (Trong nhà phát triển Oracle SQL, chọn truy vấn, nhấn F10 để xem phân tích chi phí).

UNION ALL , nó được hợp nhất mà không có sự khác biệt -> nhanh hơn.

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION ALL
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

2

UNION hợp nhất nội dung của hai bảng tương thích cấu trúc thành một bảng kết hợp duy nhất.

  • Sự khác biệt:

Sự khác biệt giữa UNIONUNION ALLUNION willbỏ qua các bản ghi trùng lặp trong khi UNION ALLsẽ bao gồm các bản ghi trùng lặp.

UnionTập kết quả được sắp xếp theo thứ tự tăng dần trong khi UNION ALLtập kết quả không được sắp xếp

UNIONthực hiện một DISTINCTtập kết quả để nó sẽ loại bỏ bất kỳ hàng trùng lặp nào. Trong khi đó UNION ALLsẽ không loại bỏ trùng lặp và do đó nó nhanh hơn UNION. *

Lưu ý : Hiệu suất của UNION ALLthông thường sẽ tốt hơn UNION, vì UNIONyêu cầu máy chủ thực hiện công việc bổ sung để loại bỏ bất kỳ bản sao nào. Vì vậy, trong trường hợp chắc chắn rằng sẽ không có bất kỳ sự trùng lặp nào hoặc khi có sự trùng lặp không phải là vấn đề, việc sử dụng UNION ALLsẽ được khuyến nghị vì lý do hiệu suất.


1
"Tập kết quả liên minh được sắp xếp theo thứ tự tăng dần" - Trừ khi có ORDER BY, kết quả được sắp xếp không được đảm bảo. Có thể bạn có một nhà cung cấp SQL cụ thể (thậm chí sau đó, tăng dần thứ tự chính xác ...?) Nhưng câu hỏi này không có nhà cung cấp = thẻ cụ thể.
onedaywhen

"hợp nhất nội dung của hai bảng tương thích về cấu trúc" - Tôi nghĩ rằng bạn đã nói phần này thực sự tốt :)
onedaywhen

2

Giả sử bạn có hai bảng Giáo viên & Học sinh

Cả hai đều có 4 Cột với Tên khác nhau như thế này.

Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))

nhập mô tả hình ảnh ở đây

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

nhập mô tả hình ảnh ở đây

Bạn có thể áp dụng UNION hoặc UNION ALL cho hai bảng có cùng số cột. Nhưng họ có tên hoặc kiểu dữ liệu khác nhau.

Khi bạn áp dụng UNIONthao tác trên 2 bảng, nó sẽ bỏ qua tất cả các mục trùng lặp (tất cả các giá trị cột của hàng trong một bảng giống với bảng khác). Như thế này

SELECT * FROM Student
UNION
SELECT * FROM Teacher

kết quả sẽ là

nhập mô tả hình ảnh ở đây

Khi bạn áp dụng UNION ALLthao tác trên 2 bảng, nó sẽ trả về tất cả các mục có trùng lặp (nếu có bất kỳ sự khác biệt nào giữa bất kỳ giá trị cột nào của một hàng trong 2 bảng). Như thế này

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

Đầu ra nhập mô tả hình ảnh ở đây

Hiệu suất:

Rõ ràng hiệu suất của UNION ALL tốt hơn là UNION khi họ thực hiện nhiệm vụ bổ sung để loại bỏ các giá trị trùng lặp. Bạn có thể kiểm tra xem từ Thời gian thực hiện ước tính bằng cách nhấn ctrl + L tại MSSQL


Có thật không? Cho kết quả bốn hàng?! Tôi nghĩ rằng đây là một kịch bản mà bạn muốn sử dụng UNIONđể truyền đạt ý định (nghĩa là không có sự trùng lặp) bởi vì UNION ALLkhông có khả năng đưa ra bất kỳ hiệu suất thực tế nào trong cuộc sống một cách tuyệt đối.
onedaywhen

2

Nói một cách rất đơn giản, điểm khác biệt giữa UNION và UNION ALL là UNION sẽ bỏ qua các bản ghi trùng lặp trong khi UNION ALL sẽ bao gồm các bản ghi trùng lặp.


1

Một điều nữa tôi muốn thêm-

liên hiệp : - Tập kết quả được sắp xếp theo thứ tự tăng dần.

Liên minh Tất cả : - Tập kết quả không được sắp xếp. hai đầu ra truy vấn chỉ được nối thêm.


Thật ! UNION có thể thay đổi thứ tự của hai kết quả phụ.
gracchus

6
Cái này sai. A UNIONsẽ KHÔNG sắp xếp kết quả theo thứ tự tăng dần. Bất kỳ thứ tự bạn nhìn thấy trong một kết quả mà không sử dụng order bylà hoàn toàn ngẫu nhiên. DBMS có thể tự do sử dụng bất kỳ chiến lược nào mà họ cho là hiệu quả để loại bỏ các bản sao. Điều này có thể được sắp xếp, nhưng nó cũng có thể là một thuật toán băm hoặc một cái gì đó hoàn toàn khác - và chiến lược sẽ thay đổi theo số lượng hàng. Một unionxuất hiện được sắp xếp với 100 dòng có thể không phải với 100.000 hàng
a_horse_with_no_name

2
Không có mệnh đề ORDER BY trên truy vấn, RDBMS có thể trả về các hàng theo bất kỳ chuỗi nào . Quan sát rằng tập kết quả từ hoạt động UNION được trả về "theo thứ tự tăng dần" chỉ là sản phẩm phụ của hoạt động "sắp xếp duy nhất" được thực hiện bởi cơ sở dữ liệu. Các hành vi quan sát không được đảm bảo. Vì vậy, đừng dựa vào nó. Nếu đặc tả là trả về các hàng theo một thứ tự cụ thể, sau đó thêm một ORDER BYmệnh đề thích hợp .
spencer7593

1

Sự khác biệt giữa Union Vs Union ALL trong Sql

Liên minh trong SQL là gì?

Toán tử UNION được sử dụng để kết hợp tập kết quả của hai hoặc nhiều tập dữ liệu.

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

Liên minh Vs Liên minh tất cả với ví dụ


1

Quan trọng! Sự khác biệt giữa Oracle và Mysql: Giả sử t1 t2 không có các hàng trùng lặp giữa chúng nhưng chúng có các hàng trùng lặp riêng lẻ. Ví dụ: t1 có doanh số từ năm 2017 và t2 từ năm 2018

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION ALL

SELECT T2.YEAR, T2.PRODUCT FROM T2

Trong ORACLE UNION ALL tìm nạp tất cả các hàng từ cả hai bảng. Điều tương tự sẽ xảy ra trong MySQL.

Tuy nhiên:

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION

SELECT T2.YEAR, T2.PRODUCT FROM T2

Trong ORACLE , UNION tìm nạp tất cả các hàng từ cả hai bảng vì không có giá trị trùng lặp giữa t1 và t2. Mặt khác, trong MySQL, tập kết quả sẽ có ít hàng hơn vì sẽ có các hàng trùng lặp trong bảng t1 và cả trong bảng t2!


0

UNION loại bỏ các hồ sơ trùng lặp trong mặt khác UNION ALL không. Nhưng người ta cần kiểm tra phần lớn dữ liệu sẽ được xử lý và cột và kiểu dữ liệu phải giống nhau.

vì liên minh sử dụng nội bộ "khác biệt" để chọn các hàng do đó tốn kém hơn về thời gian và hiệu suất. giống

select project_id from t_project
union
select project_id from t_project_contact  

điều này mang lại cho tôi năm 2020 hồ sơ

mặt khác

select project_id from t_project
union all
select project_id from t_project_contact

mang lại cho tôi hơn 17402 hàng

trên quan điểm ưu tiên cả hai có cùng ưu tiên.


0

Nếu không có ORDER BY, a UNION ALLcó thể đưa các hàng trở lại khi nó đi, trong khi đó UNIONsẽ khiến bạn phải đợi cho đến khi kết thúc truy vấn trước khi đưa cho bạn toàn bộ kết quả được đặt cùng một lúc. Điều này có thể tạo ra sự khác biệt trong một tình huống hết thời gian - UNION ALLgiữ cho kết nối vẫn tồn tại như cũ.

Vì vậy, nếu bạn có một vấn đề hết thời gian, và không có sự sắp xếp, và các bản sao không phải là một vấn đề, UNION ALLcó thể khá hữu ích.


Nhưng đoạn kết quả đầu tiên của bạn có thể bị trùng lặp nhiều lần: nó hữu ích đến mức nào?!
onedaywhen

0

UNION và UNION ALL được sử dụng để kết hợp hai hoặc nhiều kết quả truy vấn.

Lệnh UNION chọn thông tin riêng biệt và liên quan từ hai bảng sẽ loại bỏ các hàng trùng lặp.

Mặt khác, lệnh UNION ALL chọn tất cả các giá trị từ cả hai bảng, hiển thị tất cả các hàng.


0

Như một thói quen, Luôn luôn sử dụng UNION ALL . Chỉ sử dụng UNION trong các trường hợp đặc biệt khi bạn cần loại bỏ các bản sao có thể cực kỳ lộn xộn và bạn có thể đọc tất cả về các bình luận khác ở đây.


0

UNION ALLcũng hoạt động trên nhiều loại dữ liệu là tốt. Ví dụ khi cố gắng kết hợp các loại dữ liệu không gian. Ví dụ:

select a.SHAPE from tableA a
union
select b.SHAPE from tableB b

sẽ ném

The data type geometry cannot be used as an operand to the UNION, INTERSECT or EXCEPT operators because it is not comparable.

Tuy nhiên union allsẽ không.


-1

Sự khác biệt duy nhất là:

"UNION" xóa các hàng trùng lặp.

"UNION ALL" không xóa các hàng trùng lặp.


13
Làm thế nào để thêm bất kỳ giá trị so với câu trả lời được chấp nhận?
Nick

@Nick Đó là câu trả lời ngắn hơn.
Mostafa Vatanpour

Ngắn hơn có thể là một lợi thế nếu bạn phải đọc một phần quan trọng của câu trả lời được chấp nhận để có được dữ liệu này. Nhưng trong trường hợp này, câu trả lời được chấp nhận chứa tất cả thông tin này trong câu đầu tiên sau đó nó tiếp tục thảo luận về ý nghĩa của sự khác biệt về chi tiết.
dmckee --- ex-moderator mèo con
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.