5. NOT
クエリを実行するときに、where 句で、より大きい、より小さい、等しい、等しくないなどの論理式をよく使用します。and (and)、or (or) も使用できます。 )ではなく(いいえ)。 NOT は、論理演算記号を否定するために使用できます。以下は NOT 句の例です:
... where not (status ='VALID')
NOT を使用したい場合は、否定句の前に括弧を置き、否定句の前に NOT 演算を置く必要があります。フレーズ記号。 NOT 演算子は、別の論理演算子 (不等号 (;) 演算子) 内に含まれています。つまり、NOT 単語がクエリの where 句に明示的に追加されていない場合でも、演算子には NOT が含まれています。次の例を参照してください。
... where status ;'INVALID'
再度次の例を示します。
select * from member where給与;3000;
このクエリは、NOT を使用せずに書き換えることができます。同じように、2 番目のこのクエリ プランは最初のクエリ プランよりも高速になります。 2 番目のクエリでは、Oracle は給与列にインデックスを使用できますが、最初のクエリではインデックスを使用できません。
6. IN と EXISTS
場合によっては、列が一連の値と比較されます。最も簡単な方法は、where 句でサブクエリを使用することです。 where 句では 2 つの形式のサブクエリを使用できます。
最初の形式は IN 演算子を使用することです:
... where column in(select * from ... where ...); 2 番目の形式は EXIST 演算子を使用することです:
... where が存在します (...where ... から 'X' を選択してください);
ほとんどの人は最初の形式を使用すると思いますが、実際には 2 番目の形式の方が最初の形式よりもはるかに優れています。非常に効率的です。 Oracle では、ほぼすべての IN 演算子のサブクエリを EXISTS を使用したサブクエリとして書き換えることができます。
2 番目の形式では、サブクエリは「select 'X'」で始まります。 EXISTS 句を使用すると、サブクエリがテーブルからどのようなデータを抽出するかに関係なく、where 句のみが参照されます。このように、オプティマイザはテーブル全体を走査する必要がなく、インデックスのみに基づいて作業を完了できます (これは、where ステートメントで使用される列にインデックスがあることを前提としています)。 IN 句と比較すると、EXISTS は接続されたサブクエリを使用しますが、これは IN サブクエリよりも構築が困難です。
http://www.bkjia.com/PHPjc/631005.html
www.bkjia.com