Sự khác biệt giữa THAM GIA và ĐOÀN là gì?


252

Sự khác biệt giữa JOINvà là UNIONgì? Tôi có thể có một ví dụ?


Bất kỳ DBS hiện đại nào, như MariaDB , đều thực hiện lệnh UNION THAM GIA. Đây là lệnh SQL & nbsp; 3 , nhưng nó không được biết đến hoặc sử dụng. Tìm hiểu thêm về UNION THAM GIA .
Auston

Câu trả lời:


301

UNIONđặt các dòng từ các truy vấn lẫn nhau, trong khi JOINtạo ra một sản phẩm cartesian và đặt lại nó - các hoạt động hoàn toàn khác nhau. Ví dụ tầm thường của UNION:

mysql> SELECT 23 AS bah
    -> UNION
    -> SELECT 45 AS bah;
+-----+
| bah |
+-----+
|  23 | 
|  45 | 
+-----+
2 rows in set (0.00 sec)

ví dụ tầm thường của similary của JOIN:

mysql> SELECT * FROM 
    -> (SELECT 23 AS bah) AS foo 
    -> JOIN 
    -> (SELECT 45 AS bah) AS bar
    -> ON (33=33);
+-----+-----+
| foo | bar |
+-----+-----+
|  23 |  45 | 
+-----+-----+
1 row in set (0.01 sec)

6
Bạn có thể vui lòng cho tôi biết a là gì UNION-JOINvà làm thế nào tôi có thể hoàn thành nó trong SQL tiêu chuẩn? Maria DB có một lệnh union join, nhưng các cơ sở dữ liệu khác thì không. Cảm ơn.
Erran Morad

72

Tham gia và hiệp hội có thể được sử dụng để kết hợp dữ liệu từ một hoặc nhiều bảng. Sự khác biệt nằm ở cách kết hợp dữ liệu.

Nói một cách đơn giản, tham gia kết hợp dữ liệu vào các cột mới . Nếu hai bảng được nối với nhau, thì dữ liệu từ bảng đầu tiên được hiển thị trong một bộ cột dọc theo cột của bảng thứ hai trong cùng một hàng.

Liên hiệp kết hợp dữ liệu thành các hàng mới. Nếu hai bảng được liên kết với nhau, thì dữ liệu từ bảng đầu tiên nằm trong một tập hợp các hàng và dữ liệu từ bảng thứ hai trong một tập hợp khác. Các hàng trong cùng một kết quả.

Dưới đây là một mô tả trực quan của một tham gia. Các cột của Bảng A và B được kết hợp thành một kết quả duy nhất.

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

Mỗi hàng trong kết quả chứa các cột từ BÓNG bảng A và B. Hàng được tạo khi các cột từ một bảng khớp với các cột khác. Trận đấu này được gọi là điều kiện tham gia.

Điều này làm cho các phép nối thực sự tuyệt vời để tìm kiếm các giá trị và bao gồm chúng trong các kết quả. Đây thường là kết quả của việc không chuẩn hóa (đảo ngược chuẩn hóa) và liên quan đến việc sử dụng khóa ngoại trong một bảng để tra cứu các giá trị cột bằng cách sử dụng khóa chính trong một bảng khác.

Bây giờ so sánh mô tả ở trên với mô tả của một công đoàn. Trong một liên minh, mỗi hàng trong kết quả là từ một bảng HOẶC bảng khác. Trong một liên kết, các cột không được kết hợp để tạo kết quả, các hàng được kết hợp.

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

Cả hai phép nối và phép kết hợp có thể được sử dụng để kết hợp dữ liệu từ một hoặc nhiều bảng thành một kết quả duy nhất. Cả hai đi về đây là cách khác nhau. Trong khi một phép nối được sử dụng để kết hợp các cột từ các bảng khác nhau, phép nối được sử dụng để kết hợp các hàng.

Nguồn


4
Đây là một ví dụ trực quan tuyệt vời. Tôi khá chắc chắn rằng tôi đã hiểu sau những câu trả lời khác, nhưng điều này hoàn toàn xóa nó đi.
seadoggie01

Đối với ví dụ tham gia, về mặt kỹ thuật, không nên có 10 cột cho kết quả?
Bharath Ram

60

UNION kết hợp các kết quả của hai hoặc nhiều truy vấn thành một tập kết quả duy nhất bao gồm tất cả các hàng thuộc về tất cả các truy vấn trong liên minh.

Bằng cách sử dụng THAM GIA , bạn có thể truy xuất dữ liệu từ hai hoặc nhiều bảng dựa trên mối quan hệ logic giữa các bảng. Tham gia cho biết SQL nên sử dụng dữ liệu từ một bảng như thế nào để chọn các hàng trong bảng khác.

Hoạt động UNION khác với việc sử dụng THAM GIA kết hợp các cột từ hai bảng.

Ví dụ:

SELECT 1 AS [Column1], 2 AS [Column2]
UNION
SELECT 3 AS [Column1], 4 AS [Column2]

Đầu ra:

Column1    Column2
-------------------
1          2
3          4

Ví dụ THAM GIA:

SELECT a.Column1, b.Column2 FROM TableA a INNER JOIN TableB b ON a.Id = b.AFKId

Điều này sẽ xuất ra tất cả các hàng từ cả hai bảng mà điều kiện a.Id = b.AFKIdlà đúng.


Tham gia có thể lấy dữ liệu từ một * hoặc nhiều bảng. Không nhất thiết phải là hai
Kennet Celeste

51

Bạn có thể thấy những giải thích sơ đồ giống nhau cho cả hai, nhưng những điều này hoàn toàn khó hiểu.

Đối với ĐOÀN:

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

Dành cho THAM GIA:

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


9
Những hình ảnh này ngụ ý FULL OUTER JOINgiống như UNION, có sự khác biệt
icc97

1
Câu trả lời này chỉ ra rằng những hình ảnh đó gây nhầm lẫn (đó là IMO) nhưng sau đó không tiếp tục giải thích lý do hoặc đưa ra bất kỳ sự làm rõ nào cho câu hỏi ban đầu.
Josh D.

1
Mỗi hình ảnh với sơ đồ giải thích hoàn hảo tình hình. Không có hình ảnh duy nhất hơn có thể hợp nhất tất cả các sơ đồ. Điều đó sẽ khó hiểu hơn.
Java Main

41

THAM GIA:

Một phép nối được sử dụng để hiển thị các cột có cùng tên hoặc khác nhau từ các bảng khác nhau. Đầu ra được hiển thị sẽ có tất cả các cột được hiển thị riêng lẻ. Đó là, các cột sẽ được sắp xếp cạnh nhau.

LIÊN HIỆP:

Toán tử tập hợp UNION được sử dụng để kết hợp dữ liệu từ hai bảng có các cột có cùng kiểu dữ liệu. Khi UNION được thực hiện, dữ liệu từ cả hai bảng sẽ được thu thập trong một cột có cùng kiểu dữ liệu.

Ví dụ:

Xem hai bảng dưới đây:

Table t1
Articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2

Table t2
manufacturer_id manufacturer
1 ABC Gmbh
2 DEF Co KG

Bây giờ để thực hiện loại THAM GIA, truy vấn được hiển thị bên dưới.

SELECT articleno, article, manufacturer
FROM t1 JOIN t2 ON (t1.manufacturer_id =
t2.manufacturer_id);

articelno article manufacturer
1 hammer ABC GmbH
2 screwdriver DEF Co KG

Đó là một sự tham gia.

UNION có nghĩa là bạn phải đặt các bảng hoặc tập kết quả với cùng số lượng và loại cột và bạn thêm phần này vào các bảng / kết quả cùng nhau. Nhìn vào ví dụ này:

Table year2006
Articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2

Table year2007
Articleno article price manufacturer_id
1 hammer 6 $ 3
2 screwdriver 7 $ 4

SELECT articleno, article, price, manufactruer_id
FROM year2006
UNION
SELECT articleno, article, price, manufacturer_id
FROM year2007

articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2
1 hammer 6 $ 3
2 screwdriver 7 $ 4

21

Chúng là những thứ hoàn toàn khác nhau.

Một phép nối cho phép bạn liên kết dữ liệu tương tự trong các bảng khác nhau.

Một liên minh trả về kết quả của hai truy vấn khác nhau dưới dạng một recordset.


9

Union làm cho hai truy vấn trông giống như một. Tham gia để kiểm tra hai hoặc nhiều bảng trong một câu lệnh truy vấn


3

Tham gia và công đoàn có thể được sử dụng để kết hợp dữ liệu từ một hoặc nhiều bảng. Sự khác biệt nằm ở cách kết hợp dữ liệu.

Nói một cách đơn giản, tham gia kết hợp dữ liệu vào các cột mới. Nếu hai bảng được nối với nhau, thì dữ liệu từ bảng đầu tiên được hiển thị trong một bộ cột dọc theo cột của bảng thứ hai trong cùng một hàng.

Liên hiệp kết hợp dữ liệu thành các hàng mới. Nếu hai bảng được liên kết với nhau, thì dữ liệu từ bảng đầu tiên nằm trong một tập hợp các hàng và dữ liệu từ bảng thứ hai trong một tập hợp khác. Các hàng trong cùng một kết quả.


1

Hãy nhớ rằng union sẽ hợp nhất các kết quả ( SQL Server để chắc chắn) (tính năng hay lỗi?)

select 1 as id, 3 as value
union
select 1 as id, 3 as value

id, giá trị

1,3

select * from (select 1 as id, 3 as value) t1 inner join (select 1 as id, 3 as value) t2 on t1.id = t2.id

id, giá trị, id, giá trị

1,3,1,3


6
Đây là theo tiêu chuẩn ANSI, UNION ALL không hợp nhất các kết quả
vzczc

1
Xem thêm UNIONvs UNION ALL stackoverflow.com/questions/49925/
Mạnh

0

1. Mệnh đề SQL Joins được sử dụng để kết hợp các bản ghi từ hai hoặc nhiều bảng trong cơ sở dữ liệu. THAM GIA là một phương tiện để kết hợp các trường từ hai bảng bằng cách sử dụng các giá trị chung cho mỗi bảng.

2. Toán tử SQL UNION kết hợp kết quả của hai hoặc nhiều câu lệnh CHỌN. Mỗi câu lệnh CHỌN trong UNION phải có cùng số cột. Các cột cũng phải có kiểu dữ liệu tương tự. Ngoài ra, các cột trong mỗi câu lệnh CHỌN phải theo cùng một thứ tự.

ví dụ: bảng 1 khách hàng / bảng 2 đơn hàng

tham gia nội bộ:

CHỌN ID, TÊN, SỐ TIỀN, NGÀY

TỪ KHÁCH HÀNG


ĐỐI TƯỢNG THAM GIA


TRÊN KHÁCH HÀNG.ID = ORDERS.CUSTOMER_ID;

liên hiệp:

CHỌN ID, TÊN, SỐ TIỀN, NGÀY


TỪ KHÁCH HÀNG


ĐẶT HÀNG


TRÊN KHÁCH HÀNG.ID = ORDERS.CUSTOMER_ID

LIÊN HIỆP

CHỌN ID, TÊN, SỐ TIỀN, NGÀY TỪ KHÁCH HÀNG


ĐỐI TƯỢNG THAM GIA


TRÊN KHÁCH HÀNG.ID = ORDERS.CUSTOMER_ID;


0

Liên minh sử dụng

UNION được kết hợp các kết quả của hai hoặc nhiều truy vấn thành một tập kết quả duy nhất bao gồm tất cả các hàng thuộc về tất cả các truy vấn trong liên kết.

Ví dụ:
CHỌN 121 AS [Cột1], 221 AS [Cột2]
LIÊN HIỆP
CHỌN 321 AS [Cột1], 422 AS [Cột2]
Đầu ra:

Cột1 Cột2
-------------------
121 221
321 422

THAM GIA

THAM GIA, bạn có thể truy xuất dữ liệu từ hai hoặc nhiều bảng dựa trên mối quan hệ logic giữa các bảng.

Ví dụ THAM GIA:
CHỌN a.Column1, b.Column2 TỪ TblA a INNER THAM GIA TblB b ON a.Id = b.id


-1

Trong bản tóm tắt, chúng tương tự nhau, trong đó hai bảng hoặc tập kết quả đang được kết hợp, nhưng UNION thực sự là để kết hợp các tập kết quả với CÙNG SỐ MÀU SẮC với CÁC LOẠI DỮ LIỆU SIMILAR. CẤU TRÚC là như nhau, chỉ có các hàng mới được thêm vào.

Trong các phép nối, bạn có thể kết hợp các bảng / tập kết quả với bất kỳ cấu trúc nào có thể, bao gồm cả phép nối cartesian trong đó KHÔNG có cột chia sẻ / tương tự.


-1

Toán tử UNION chỉ để kết hợp hai hoặc nhiều câu lệnh CHỌN.

Trong khi THAM GIA là để chọn các hàng từ mỗi bảng, theo phương thức bên trong, bên ngoài, bên trái hoặc bên phải.

Tham khảo tại đâytại đây . Có một lời giải thích tốt hơn với các ví dụ.


-1

Hoạt động liên minh là kết quả tổng hợp của Tổng hợp dọc của các hàng, Hoạt động liên kết là kết quả kết hợp của Tổng hợp ngang của các cột.


-3

Tôi thích nghĩ về sự khác biệt chung như là:

  • THAM GIA tham gia các bảng
  • UNION (et all) kết hợp các truy vấn.

1
Điều này đặt ra câu hỏi - tham gia được đề cập dưới dạng "tham gia" và liên minh được đề cập dưới dạng "kết hợp" không giải thích được. Dù sao, bạn nghĩ bạn sẽ thêm gì ngoài những câu trả lời 10 năm được bình chọn cao khác làm cho điều này "hữu ích"? (Hùng biện.) Xem văn bản di chuột mũi tên bỏ phiếu.
philipxy
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.