JOINとUNIONの違いは何ですか?


回答:


301

UNIONクエリから行を順番に配置しJOIN、デカルト積を作成してサブセット化します-完全に異なる操作です。の簡単な例UNION

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

同様の簡単な例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
UNION-JOIN標準SQLで何をどのように達成できるか教えていただけますか?Maria DBにはコマンドunion joinがありますが、他のデータベースにはありません。ありがとう。
Erran Morad 2014

72

結合とユニオンを使用して、1つ以上のテーブルのデータを組み合わせることができます。違いは、データの結合方法にあります。

簡単に言えば、結合はデータを新しい列に結合します。2つのテーブルが結合されている場合、最初のテーブルのデータは、同じ行の2番目のテーブルの列と並んで1つの列セットに表示されます。

ユニオンはデータを新しい行に結合します。 2つのテーブルが一緒に「結合」される場合、最初のテーブルのデータは1つの行のセットにあり、2番目のテーブルのデータは別のセットにあります。行は同じ結果になります。

これは結合の視覚的な描写です。テーブルAとBの列が1つの結果に結合されます。

ここに画像の説明を入力してください

結果の各行には、テーブルAとBの両方のテーブルの列が含まれます。あるテーブルの列が別のテーブルの列と一致すると、行が作成されます。この一致は、結合条件と呼ばれます。

これにより、結合は値を検索して結果に含めるのに非常に役立ちます。これは通常、非正規化(正規化の逆)の結果であり、1つのテーブルの外部キーを使用して、別のテーブルの主キーを使用して列の値を検索する必要があります。

上記の描写を組合の描写と比較してみましょう。ユニオンでは、結果内の各行は1つのテーブルまたは他のテーブルからのものです。ユニオンでは、列を組み合わせて結果を作成するのではなく、行を組み合わせます。

ここに画像の説明を入力してください

結合とユニオンの両方を使用して、1つ以上のテーブルのデータを1つの結果に結合できます。彼らは両方ともこれについて異なる方法です。結合は異なるテーブルの列を結合するために使用されますが、ユニオンは行を結合するために使用されます。

ソース


4
これは素晴らしい視覚的な例です。私は他の答えの後に理解したと確信していましたが、これはそれを完全にクリアしました。
seadoggie01

技術的に言えば、結合の例では、結果の列数は10にすべきではありませんか?
Bharath Ram

60

UNIONは、2つ以上のクエリの結果を、ユニオン内のすべてのクエリに属する​​すべての行を含む単一の結果セットに結合します。

JOINを使用すると、テーブル間の論理関係に基づいて、2つ以上のテーブルからデータを取得できます。結合は、SQLがあるテーブルのデータを使用して別のテーブルの行を選択する方法を示します。

UNION操作は、2つのテーブルの列を組み合わせるJOINの使用とは異なります。

UNIONの例:

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

出力:

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

JOINの例:

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

これにより、条件a.Id = b.AFKIdが真である両方のテーブルからすべての行が出力されます。


結合では、1つ以上のテーブルからデータを取得できます。必ずしも2
ケネットセレステ

51

両方で同じ回路図の説明が表示される場合がありますが、これらは完全に混乱しています。

UNIONの場合:

ここに画像の説明を入力してください

JOINの場合:

ここに画像の説明を入力してください


9
これらの画像FULL OUTER JOINは、と同じUNIONであることを示して
icc97

1
この回答は、それらの画像は混乱していることを示しています(どのIMOかはわかりません)が、その理由を説明したり、元の質問に対する説明を提供したりすることはしません。
Josh D.

1
図を含む各画像は、状況を完全に説明しています。すべての図をマージできるほど、単一の画像はありません。それはもっと混乱します。
Javaメイン

41

参加:

結合は、異なるテーブルの同じ名前または異なる名前の列を表示するために使用されます。表示される出力には、すべての列が個別に表示されます。つまり、列は互いに隣り合わせに配置されます。

連合:

UNIONセット演算子は、同じデータ型の列を持つ2つのテーブルからのデータを結合するために使用されます。UNIONが実行されると、両方のテーブルのデータは、同じデータ型を持つ単一の列に収集されます。

例えば:

以下に示す2つの表を参照してください。

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

JOINタイプを実行するためのクエリを次に示します。

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

それが参加です。

UNIONは、同じ数とタイプの列を持つテーブルまたは結果セットを使用する必要があり、これをテーブル/結果セットに一緒に追加することを意味します。この例を見てください:

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

それらは完全に異なるものです。

参加するあなたは、異なる表の同様のデータを関連付けることができます。

ユニオンは、2つの異なるクエリの結果を単一のレコードセットとして返します。


9

Unionは、2つのクエリを1つのクエリのように見せます。結合は、単一のクエリステートメントで2つ以上のテーブルを調べるためのものです。


3

結合とユニオンを使用して、1つ以上のテーブルのデータを組み合わせることができます。違いは、データの結合方法にあります。

簡単に言えば、結合はデータを新しい列に結合します。2つのテーブルが結合されている場合、最初のテーブルのデータは、同じ行の2番目のテーブルの列と並んで1つの列セットに表示されます。

ユニオンはデータを新しい行に結合します。2つのテーブルが一緒に「結合」される場合、最初のテーブルのデータは1つの行のセットにあり、2番目のテーブルのデータは別のセットにあります。行は同じ結果になります。


1

ユニオンが結果をマージすることを忘れないでください(確かにSQL Server)(機能またはバグ?)

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

id、value

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、値、ID、値

1,3,1,3


6
これはANSI標準によるもので、UNION ALLは結果をマージしません
vzczc '25年

1
参照してくださいUNIONUNION ALL stackoverflow.com/questions/49925/...
Jaider

0

1. SQL結合句を使用して、データベース内の2つ以上のテーブルのレコードを結合します。JOINは、2つのテーブルのフィールドを、それぞれに共通の値を使用して結合するための手段です。

2. SQL UNION演算子は、2つ以上のSELECTステートメントの結果を結合します。UNION内の各SELECTステートメントには、同じ数の列が必要です。列も同様のデータ型である必要があります。また、各SELECTステートメントの列は同じ順序である必要があります。

例:表1の顧客/表2の注文

内部結合:

ID、名前、金額、日付を選択

顧客から


内部結合注文


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

連合:

ID、名前、金額、日付を選択


顧客から


左の注文


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID

連合

ID、名前、金額、日付を顧客から選択


正しい参加注文


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;


0

UNIONの使用

UNIONは、2つ以上のクエリの結果を、ユニオン内のすべてのクエリに属する​​すべての行を含む単一の結果セットに結合します。

UNIONの例:
SELECT 121 AS [列1]、221 AS [列2]
連合
SELECT 321 AS [列1]、422 AS [列2]
出力:

列1列2
-------------------
121 221
321 422

JOINの使用

JOINを使用すると、テーブル間の論理関係に基づいて、2つ以上のテーブルからデータを取得できます。

JOINの例:
SELECT a.Column1、b.Column2 FROM TblA a INNER JOIN TblB b ON a.Id = b.id


-1

抽象的には、2つのテーブルまたは結果セットが結合されるという点で似ていますが、UNIONは実際には、同じセットの列と同じデータ型を持つ列と同じ数の列を持つ結果セットを結合するためのものです。構造は同じで、新しい行のみが追加されます。

結合では、テーブル/結果セットを任意の可能な構造と組み合わせることができます。これには、共有/類似の列がないデカルト結合を含みます。


-1

UNION演算子は、2つ以上のSELECTステートメントを組み合わせるためのものです。

JOINは、inner、outer、left、またはrightのいずれかの方法で、各テーブルから行を選択するためのものです。

ここここを参照しください。例を使ったより良い説明があります。


-1

ユニオン演算は、行の垂直集計の結果を結合したものであり、ユニオン演算は、列の水平集計の結果を結合したものです。


-3

私は一般的な違いを次のように考えるのが好きです:

  • JOINS結合テーブル
  • UNION(et all)はクエリを組み合わせます。

1
これは疑問を引き起こします-結合は「結合」の観点から言及され、結合は説明されていない「結合」の観点から言及されます。とにかく、これを「有用」にする他の非常に投票された10年前の回答を超えて何を追加すると思いますか?(修辞。)投票矢印のマウスオーバーテキストを参照してください。
philipxy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.