回答:
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)
UNION-JOIN
標準SQLで何をどのように達成できるか教えていただけますか?Maria DBにはコマンドunion join
がありますが、他のデータベースにはありません。ありがとう。
結合とユニオンを使用して、1つ以上のテーブルのデータを組み合わせることができます。違いは、データの結合方法にあります。
簡単に言えば、結合はデータを新しい列に結合します。2つのテーブルが結合されている場合、最初のテーブルのデータは、同じ行の2番目のテーブルの列と並んで1つの列セットに表示されます。
ユニオンはデータを新しい行に結合します。 2つのテーブルが一緒に「結合」される場合、最初のテーブルのデータは1つの行のセットにあり、2番目のテーブルのデータは別のセットにあります。行は同じ結果になります。
これは結合の視覚的な描写です。テーブルAとBの列が1つの結果に結合されます。
結果の各行には、テーブルAとBの両方のテーブルの列が含まれます。あるテーブルの列が別のテーブルの列と一致すると、行が作成されます。この一致は、結合条件と呼ばれます。
これにより、結合は値を検索して結果に含めるのに非常に役立ちます。これは通常、非正規化(正規化の逆)の結果であり、1つのテーブルの外部キーを使用して、別のテーブルの主キーを使用して列の値を検索する必要があります。
上記の描写を組合の描写と比較してみましょう。ユニオンでは、結果内の各行は1つのテーブルまたは他のテーブルからのものです。ユニオンでは、列を組み合わせて結果を作成するのではなく、行を組み合わせます。
結合とユニオンの両方を使用して、1つ以上のテーブルのデータを1つの結果に結合できます。彼らは両方ともこれについて異なる方法です。結合は異なるテーブルの列を結合するために使用されますが、ユニオンは行を結合するために使用されます。
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
が真である両方のテーブルからすべての行が出力されます。
結合は、異なるテーブルの同じ名前または異なる名前の列を表示するために使用されます。表示される出力には、すべての列が個別に表示されます。つまり、列は互いに隣り合わせに配置されます。
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
ユニオンが結果をマージすることを忘れないでください(確かに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
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;
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