存在する
EXISTSを使用して、サブクエリが結果を返すかどうかをテストします。 通常、サブクエリは別のテーブルを参照します。 次のクエリは、たまたま顧客でもある従業員を返します。
SELECT e.id, e.name FROM employees e WHERE EXISTS (SELECT * FROM customers c WHERE c.email = e.email);
の
INを使用して、値が値のリストに含まれるかどうかをテストします。 次のクエリは、数人の従業員の値を返します。
SELECT * FROM employees WHERE e.id IN (10001, 10032, 10057);
次のクエリは、休暇を取っていない従業員を返します。
SELECT e.id FROM employees e WHERE e.id NOT IN (SELECT v.emp_id FROM vacations v);
IN演算子とEXISTS演算子の違いは何ですか?また、それらをさまざまな目的に使用する方法を教えてください。
Oracle IN演算子とEXISTS演算子は同じ目的で機能します。つまり、どちらもメインクエリとサブクエリの間のレコードの相関関係をチェックします。 IN演算子とEXISTS演算子の動作を比較できます。 以下にいくつかの違いを見てみましょう。
IN演算子 | 存在するオペレーター |
---|---|
内部クエリが最初に実行され、その結果として取得された値のリストが外部クエリによって使用されます。 内部クエリは1回だけ実行されます。 | 外部クエリの最初の行が選択され、次に内部クエリが実行され、外部クエリ出力はこの結果をチェックに使用します。 内部クエリ実行のこのプロセスは、何度も繰り返されます。 外側のクエリ行があるためです。 つまり、外部クエリの結果として発生する可能性のある行が10行ある場合、内部クエリはその数だけ実行されます。 時の。 |
演算子で、サブクエリの特定の値をテストします。 | Exist演算子はブール演算子です。したがって、値自体を処理するよりもブール値を処理する方が高速であるため、IN演算子よりも効率的かつ高速に動作します。 |
オペレーターでは、INブロック内のすべての値をスキャンします。 | EXISTSは、最初の発生後に終了します。 |
選択リストからのリストの数が多い場合は、IN演算子を使用しないでください。 | 存在は適切な条件で使用され、これによりクエリが確実に最適なクエリになります。 |
IN’は、値とともにサブクエリでも使用できます。 | 一方、「EXISTS」はサブクエリでのみ使用できます。 |
INは複数のOR演算子として使用されます。 | Existsは、サブクエリが行を返すかどうかを確認するために使用されます。 |
INは、一致する値のリストを選択します。 | EXISTSは、trueまたはfalseなどのブール値を返します。 存在するよりも高速です。 |
1.では、これを実際に理解しましょう。 以下の2つの表を検討してください。
SQL> SELECT * From TT1; COL1 ---------- 1 2 3 4
SQL> SELECT * From TT2; COL2 COL3 ---------- ---------- 1 4 2 6 3 7 4 8
2. Table2(TT2)のCol3にあるTable1(TT1)から値を取得します。
IN演算子の使用:
SQL> SELECT * From TT1 Where Col1 IN(SELECt Col3 From TT2); COL1 ---------- 4
EXISTS演算子の使用:
SQL> SELECT * From TT1 Where EXISTS(SELECT 'X' From TT2 Where TT1.Col1=TT2.Col3); COL1 ---------- 4
ノート:EXISTSを使用する場合は、常にサブクエリでwhere句を使用してテーブルを結合します。 そうしないと、メインテーブルからすべてのレコードがフェッチされます。 たとえば、以下のクエリを検討すると、Table1(TT1)からすべてのレコードがフェッチされます。これは「Select*FromTT1」と同じです。
SQL> SELECT * From TT1 Where EXISTS(SELECT Col3 From TT2); COL1 ---------- 1 2 3 4
EXISTSはINよりも高速に動作します。 詳細については、上記のクエリのパフォーマンスプランを確認できます。
概要
フィルタリング基準の大部分がサブクエリにある場合は、IN(大きな外部クエリと小さな内部クエリの場合はIN)を使用します。 フィルタリング基準の大部分がメインクエリにある場合は、EXISTS(小さな外部クエリと大きな内部クエリの場合はEXISTS)を使用します。
The post INおよびEXISTSSQL演算子–オタク日記 appeared first on Gamingsym Japan.