Câu trả lời:
UNION
đặt các dòng từ các truy vấn lẫn nhau, trong khi JOIN
tạ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)
UNION-JOIN
và 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.
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.
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.
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.
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.AFKId
là đúng.
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:
Dành cho 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.
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
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.
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ả.
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
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;
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
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ự.
Tôi thích nghĩ về sự khác biệt chung như là: