ホームページ  >  記事  >  データベース  >  SQL ステートメントの MINUS、INTERSECT、UNION ALL の分析

SQL ステートメントの MINUS、INTERSECT、UNION ALL の分析

一个新手
一个新手オリジナル
2017-10-17 10:10:331891ブラウズ

SQL ステートメント内の 3 つのキーワード: MINUS (減算)、INTERSECT (交差)、および UNION ALL (和集合)

集合の概念については、誰もが中学校で習ったはずですが、あまり持っていません。これら 3 つのキーワードは、中国語の意味と同じように、主にデータベースのクエリ結果を操作するために使用されます。2 つのクエリ、MINUS は、交差がある場合に、最初のクエリ結果から 2 番目のクエリ結果を減算することです。交差部分はその部分から減算されます。それ以外の場合、INTERSECT は 2 つのクエリ結果の交差です。UNION ALL は 2 つのクエリの結合です。 同じですが、関数は単純な SQL ステートメントで実装できますが、パフォーマンスの違いは非常に大きく、誰かが実験を行っています。made_order には合計 230,000 レコードがあり、charge_detail には合計 170,000 のレコードがあります。

    SELECT order_id FROM made_order
  MINUS
  SELECT order_id FROM charge_detail
耗时:1.14 sec
  
  SELECT a.order_id FROM made_order a
   WHERE a.order_id NOT exists (
     SELECT order_id
     FROM charge_detail
     WHERE order_id = a.order_id
   )
耗时:18.19 sec

パフォーマンスの違いは次のとおりです。 15.956 回! したがって、この問題が発生した場合は、MINUS、INTERSECT、UNION ALL を使用して問題を解決することをお勧めします。サーバーは私たちに打ちのめされないでしょうか?

追伸: 2 つのアプリケーション セットの減算、交差、および追加を行う場合、次の厳しい要件があります。 1. 2 つのセットのフィールドがクリアされている必要があります (* を使用すると機能しません。エラーになります) 2. フィールドのタイプと順序は同じです (名前は異なる場合があります)。たとえば、セット 1 のフィールド 1 は NUMBER、フィールド 2 は VARCHAR、セット 2 のフィールド 1 も NUMBER である必要があります。フィールド 2 は VARCHAR である必要があります。 3. 結果を並べ替える場合は、クエリの後で並べ替えを次のように変更できます。

以上がSQL ステートメントの MINUS、INTERSECT、UNION ALL の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。