回答:
UNION(結果のすべての列が同じである)重複レコードを削除しますが、削除UNION ALLしません。
のUNION代わりにを使用するとUNION ALL、データベースサーバーが重複行を削除するために追加の作業を行う必要があるため、通常は重複が望ましくないため(特にレポートを作成する場合)、パフォーマンスに影響があります。
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar結果:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar結果:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
UNIONとUNION ALLはどちらも、2つの異なるSQLの結果を連結します。重複の処理方法が異なります。
UNIONは結果セットに対してDISTINCTを実行し、重複する行を排除します。
UNION ALLは重複を削除しないため、UNIONよりも高速です。
注:このコマンドを使用している間、選択したすべての列は同じデータ型である必要があります。
例:2つのテーブルがある場合、1)従業員と2)顧客




UNION重複を削除しますが、削除UNION ALLはしません。
除去するためには、結果セットがソートされなければならない複製し、これがでできる UNIONのパフォーマンスに影響を与え、データの量に応じてソートされ、および(Oracleのための様々なRDBMSパラメータの設定PGA_AGGREGATE_TARGETを持つWORKAREA_SIZE_POLICY=AUTO又はSORT_AREA_SIZEおよびSOR_AREA_RETAINED_SIZE場合WORKAREA_SIZE_POLICY=MANUAL)。
基本的に、並べ替えはメモリ内で実行できる場合はより高速ですが、データの量に関する同じ警告が適用されます。
もちろん、データを重複せずに返す必要がある場合は、データのソースに応じてUNIONを使用する必要があります。
私は最初の投稿で「パフォーマンスがはるかに低い」コメントを修飾するためにコメントしましたが、そうするための評判(ポイント)は不十分です。
ORACLEでは、UNIONはBLOB(またはCLOB)列タイプをサポートしていませんが、UNION ALLはサポートしています。
UNIONとUNION ALLの基本的な違いは、ユニオン操作は結果セットから重複する行を削除しますが、union allは結合後にすべての行を返します。
http://zengin.wordpress.com/2007/07/31/union-vs-union-all/から
次のようなクエリを実行することで、重複を避け、UNION DISTINCT(実際にはUNIONと同じ)よりもはるかに高速に実行できます。
SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X
AND a!=Xパーツに注目してください。これはUNIONよりもはるかに高速です。
UNION- UNIONあなたのアプローチはしません一方でまた、サブクエリによって返される重複を削除します。
                    ここでの議論に私の2セントを追加するだけです。UNION演算子を純粋なSET指向のUNIONとして理解できます。たとえば、set A = {2,4,6,8}、set B = {1,2,3,4 }、A UNION B = {1,2,3,4,6,8}
セットを扱う場合、あなたは数字2と4は、要素のいずれかのように、二回登場たくないですか、ではありませんセットで。
ただし、SQLの世界では、2つのセットのすべての要素を1つの「バッグ」{2,4,6,8,1,2,3,4}にまとめて表示したい場合があります。この目的のために、T-SQLは演算子を提供しますUNION ALL。
UNION ALLT-SQLでは「提供」されません。UNION ALLANSI SQL標準の一部であり、MS SQL Serverに固有ではありません。
                    UNIONコマンドは多くのように、2つのテーブルの関連情報を選択するために使用されるコマンド。ただし、コマンドを使用するときは、選択したすべての列が同じデータ型である必要があります。では、個別の値のみが選択されます。UNIONJOINUNIONUNION
UNION ALLコマンドがに等しいことを除いて、コマンドのすべての値を選択します。UNION ALLUNIONUNION ALL
違いUnionとUnion allつまりUnion all、重複する行を排除しませんが代わりに、それはちょうどあなたのクエリの詳細をフィッティングすべてのテーブルからすべての行を取り出してテーブルにそれらを兼ね備えています。
UNION声明は、効果的に行いSELECT DISTINCT、結果セットに。返されたすべてのレコードがユニオンから一意であることを知っている場合は、UNION ALL代わりに使用すると、結果が速くなります。
どのデータベースが重要かわからない
UNIONそしてUNION ALL、すべてのSQL Serverで動作するはずです。
不要なUNIONs は避けてください。これらは大きなパフォーマンスリークです。経験則として、UNION ALLどちらを使用するかわからない場合は使用してください。
UNION- 異なるレコードになりますが
、
 
UNION ALL-重複を含むすべてのレコードになります。
どちらもブロッキングオペレーターなので、個人的にはいつでもブロッキングオペレーター(UNION、INTERSECT、UNION ALLなど)よりもJOINSを使用することを好みます。
Union Allチェックアウトと比較して、Union操作のパフォーマンスが低い理由を説明するために、次の例を示します。
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'UNION ALLおよびUNION操作の結果は次のとおりです。
UNIONステートメントは、結果セットに対してSELECT DISTINCTを効果的に実行します。返されたすべてのレコードがユニオンから一意であることを知っている場合は、代わりにUNION ALLを使用すると、結果が速くなります。
UNIONを使用すると、実行プランで個別の並べ替え操作が行われます。この声明を証明する証拠を以下に示します。
UNION/の実際の実際の使用には適用されませんUNION ALL)。
                    union組み合わせを使用し   て結果を生成することができますが、クエリを読み、維持することはほとんど不可能であり、私の経験ではパフォーマンスもひどいものです。比較:対joincaseselect foo.bar from foo union select fizz.buzz from fizzselect 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
                    unionは2つのテーブルから異なる値を選択するために使用され、union allはテーブルからの重複を含むすべての値を選択するために使用されます
()が2回目に表示されます。実際、考え直してunion allみると、結果はセットではないので、ベン図を使用してそれを描くことはしないでください。
                    (Microsoft SQL Server Book Onlineから)
UNION [すべて]
複数の結果セットを組み合わせて単一の結果セットとして返すことを指定します。
すべて
すべての行を結果に組み込みます。これには重複が含まれます。指定しない場合、重複する行が削除されます。
UNION結果にlike DISTINCTが適用されるような重複行の検索が行われると、時間がかかりすぎます。
SELECT * FROM Table1
UNION
SELECT * FROM Table2同等です:
SELECT DISTINCT * FROM (
    SELECT * FROM Table1
    UNION ALL
    SELECT * FROM Table2) DT
DISTINCT結果に適用することの副作用は、結果に対するソート操作です。
UNION ALL結果は結果の任意の順序で表示されますが、UNION結果はORDER BY 1, 2, 3, ..., n (n = column number of Tables)結果に適用されたものとして表示されます。重複する行がない場合、この副作用を確認できます。
例を追加します
UNIONは、比較が必要なため、明確にマージされます->遅くなります(Oracle SQL開発者は、クエリを選択し、F10を押してコスト分析を表示します)。
UNION ALL、明確にマージせずに->より速く。
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;UNION 2つの構造的に互換性のあるテーブルの内容を1つの結合されたテーブルにマージします。 
違いUNIONとは、UNION ALLということであるUNION willのに対し、オミット重複レコードがUNION ALL重複したレコードが含まれます。
Union結果セットは昇順でソートされますが、結果セットはソートされUNION ALLません
UNIONDISTINCT結果セットに対してを実行するので、重複する行がなくなります。一方UNION ALL、重複は削除されないため、UNION。* より高速です。
注: のパフォーマンスはUNION ALL、通常よりも良くなるUNIONことから、UNION任意の重複を除去する追加作業を行うためのサーバが必要です。したがって、重複がないことが確実な場合、または重複が問題にならないUNION ALL場合は、パフォーマンス上の理由からの使用をお勧めします。
ORDER BY、ソートされた結果は保証されません。多分あなたは特定のSQLベンダーを念頭に置いています(それでも、昇順で正確に何ですか...?)が、この質問にはvendor =固有のタグがありません。
                    2つのテーブルTeacher&Studentがあるとします。
どちらもこのように異なる名前の4列があります
Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)同じ数の列を持つ2つのテーブルにUNIONまたはUNION ALLを適用できます。ただし、名前やデータ型が異なります。
UNION2つのテーブルに操作を適用すると、重複するエントリはすべて無視されます(テーブルの行のすべての列の値は別のテーブルと同じです)。このような
SELECT * FROM Student
UNION
SELECT * FROM Teacher結果は
UNION ALL2つのテーブルに操作を適用すると、重複してすべてのエントリが返されます(2つのテーブルの行の列の値に違いがある場合)。このような
SELECT * FROM Student
UNION ALL
SELECT * FROM Teacherパフォーマンス:
UNION ALLのパフォーマンスは、重複する値を削除する追加のタスクを実行するため、UNIONよりも明らかに優れています。MSSQLでctrl + Lを押して、実行推定時間から確認できます。
UNIONUNION ALL実際のパフォーマンスを絶対的に向上させる可能性が低いため、意図を伝えるためする(つまり、重複がない)。
                    もう1つ追加したいこと
連合:-結果セットは昇順でソートされます。
Union All:-結果セットはソートされません。2つのクエリ出力が追加されます。
UNIONは結果を昇順で並べ替えません。使用せずに結果に表示される順序order byは、まったくの偶然です。DBMSは、重複を削除するのが効率的であると考える任意の戦略を自由に使用できます。これは並べ替えの可能性がありますが、ハッシュアルゴリズムまたはまったく異なるものである可能性もあり、行数によって戦略は変化します。100行でソートされたunionように見える A は100.000行ではない可能性があります
                    ORDER BY句を追加します。
                    SQLでのユニオンとユニオンALLの違い
SQLのUnionとは何ですか?
UNION演算子は、2つ以上のデータセットの結果セットを組み合わせるために使用されます。
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重要!OracleとMysqlの違い:t1 t2にはそれらの間に重複する行はありませんが、個々に重複する行があるとします。例:t1には2017年からの売上、2018年からのt2があります
SELECT T1.YEAR, T1.PRODUCT FROM T1
UNION ALL
SELECT T2.YEAR, T2.PRODUCT FROM T2ORACLE UNION ALLでは、両方のテーブルからすべての行をフェッチします。MySQLでも同じことが起こります。
しかしながら:
SELECT T1.YEAR, T1.PRODUCT FROM T1
UNION
SELECT T2.YEAR, T2.PRODUCT FROM T2でORACLE T1とT2との間には重複する値が存在しないため、UNIONは、両方のテーブルのすべての行をフェッチします。一方、MySQLでは、テーブルt1内およびテーブルt2内にも重複する行があるため、結果セットの行数は少なくなります。
UNIONは重複レコードを削除しますが、UNION ALLは削除しません。ただし、処理されるデータの大部分を確認する必要があり、列とデータ型は同じである必要があります。
unionは内部で「個別の」動作を使用して行を選択するため、時間とパフォーマンスの点でコストが高くなります。お気に入り
select project_id from t_project
union
select project_id from t_project_contact  これは私に2020年の記録を与えます
一方
select project_id from t_project
union all
select project_id from t_project_contact17402行を超える
優先度の観点では、どちらにも同じ優先度があります。
唯一の違いは:
「UNION」は重複する行を削除します。
「UNION ALL」は重複行を削除しません。