SQLでは、 UNION
、 INTERSECT
、およびオペレーターEXCEPT
2つ以上の選択ステートメントの結果を組み合わせるために使用されます。各オペレーターには、ユニークな機能とユースケースがあります。
ユニオン:この演算子は、2つ以上の選択ステートメントの結果セットを単一の結果セットに組み合わせるために使用されます。 UNION ALL
使用されない限り、最終結果から重複する行を削除します。選択されたステートメントの構造は同じでなければなりません。つまり、同じ数の列を持つ必要があり、対応する列には互換性のあるデータ型が必要です。
構文:
<code class="sql">SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2;</code>
Intersect :この演算子は、両方の選択ステートメントの結果セットに共通の行のみを返します。 UNION
と同様に、選択されたステートメントには同じ構造が必要です。
構文:
<code class="sql">SELECT column1, column2 FROM table1 INTERSECT SELECT column1, column2 FROM table2;</code>
ただし、一部のデータベースシステムでMINUS
としても知られているこの演算子は、2番目の選択ステートメントに存在しない最初の選択ステートメントからすべての行を返します。繰り返しますが、選択されたステートメントは構造的に互換性がなければなりません。
構文:
<code class="sql">SELECT column1, column2 FROM table1 EXCEPT SELECT column1, column2 FROM table2;</code>
これらのオペレーター間の主な違いは、複数の選択ステートメントからのデータの処理方法に基づいています。
UNION ALL
使用されない限り)。重複したエントリを排除する必要があるさまざまなソースからデータを集約する場合に使用されます。要約すると、 UNION
データを組み合わせて潜在的に重複させる可能性があり、 INTERSECT
共通データを見つけ、他のセットにはないセットから一意のデータを分離しEXCEPT
。
ユニオンの例:名前と部門を含む2つのテーブル、 employees
とcontractors
を持つデータベースを管理するとします。複製せずに会社のすべての担当者の完全なリストが必要な場合は、 UNION
を使用できます。
<code class="sql">SELECT name, department FROM employees UNION SELECT name, department FROM contractors;</code>
交差例: event1_attendees
とevent2_attendees
に保存されている2つの異なるイベントへの出席を追跡していると想像してください。誰が両方のイベントに参加したかを知るには、 INTERSECT
使用できます。
<code class="sql">SELECT attendee_id FROM event1_attendees INTERSECT SELECT attendee_id FROM event2_attendees;</code>
例を除いて、アカウントを持っているが注文したことがない顧客を見つけたい場合、これらはそれぞれcustomers
とorders
表に保存されている場合は、 EXCEPT
使用できます。
<code class="sql">SELECT customer_id FROM customers EXCEPT SELECT customer_id FROM orders;</code>
UNION
、 INTERSECT
、またはEXCEPT
使用するクエリを最適化することは、パフォーマンスを大幅に改善する可能性があります。ここにいくつかのヒントがあります:
UNION
の代わりにUNION ALL
使用してください。 UNION ALL
重複をチェックして削除する必要がないため、より速いです。UNION
、 INTERSECT
、またはEXCEPT
、個々のSELECT
ステートメント内の条項を選択しWHERE
。これにより、これらの演算子が処理するデータの量が減少します。SELECT
ステートメントで使用される列が適切にインデックス化されていることを確認してください。インデックスは、特に大きなテーブルで、データの検索を大幅に高速化できます。UNION ALL
の代わりにUNION
を使用する場合、クエリを不必要に遅くすることができます。 DISTINCT
が必要かどうかを常に評価してください。SELECT
ステートメントの効率に依存するため、クエリの各部分を個別に最適化します。これらの最適化戦略に従うことにより、 UNION
、 INTERSECT
、またはオペレーターEXCEPT
除くSQLクエリのパフォーマンスを強化できます。
以上がSQLのオペレーターを除いて、ユニオン、交差、および除いてどのように使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。