Oracle では、句が結果セットを返すかどうかを判断するために、「存在しない」が使用されます。句が結果セットを返す場合、それは false です。句が結果セットを返さない場合、それは true です. 構文は「select * from daul where not存在 (句クエリ条件)」です。
このチュートリアルの動作環境: Windows 10 システム、Oracle 11g バージョン、Dell G3 コンピューター。
exists: 結果セットを返すかどうかに重点が置かれており、何が返されるかを知る必要はありません。例:
select name from student where sex = 'm' and mark exists(select 1 from grade where ...)
によって導かれる子が存在する限り 文に結果セットが返された場合、exists 条件が確立されます。返されるフィールドは常に 1 であることに注意してください。「select 2 from」に変更された場合は、 Grade where..." の場合、返されるフィールドは 2 です。この数値には意味がありません。したがって、exists 句は何が返されるかではなく、返される結果セットがあるかどうかを考慮します。
exists と in の最大の違いは、in 句が 1 つのフィールドしか返せないことです (例:
select name from student where sex = 'm' and mark in (select 1,2,3 from grade where ...)
、in 句は 3 つのフィールドを返しますが、これは正しくありません)では、exists 句は許可されますが、返されるフィールドは 1 つだけです。1、2、および 3 の任意の 2 つのフィールドを削除するだけです。
そして、notowned と not in は、それぞれ、exists と in の反対です。
存在します (SQL は結果セットを true として返します)
存在しません (SQL は結果セットを true として返しません)
存在しない場合の処理を以下に詳しく説明します。
次のように:
テーブル A
ID 名
1 A1
2 A2
3 A3
テーブル B
ID AID 名
1 1 B1
##2 2 B2 3 2 B3テーブル A とテーブル B には 1 対多の関係があります A.ID => B.AIDSELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE A.ID=B.AID)実行結果は1 A12 A2理由は次のように分析できます
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1) --->SELECT * FROM B WHERE B.AID=1有值返回真所以有数据 SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=2) --->SELECT * FROM B WHERE B.AID=2有值返回真所以有数据 SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=3) --->SELECT * FROM B WHERE B.AID=3无值返回真所以没有数据NOT EXISTS は逆です
SELECT ID,NAME FROM A WHERE NOT EXIST (SELECT * FROM B WHERE A.ID=B.AID)実行結果は #3 A3
EXISTS = IN となり、意味は同じですが構文が若干異なります。IN を使用した方が効率が悪いような気がします。インデックスが実行されない理由
SELECT ID,NAME FROM A WHERE ID IN (SELECT AID FROM B)NOT EXISTS = NOT IN、意味は同じですが、構文に違いがあります。少しの違い
SELECT ID,NAME FROM A WHERE ID NOT IN (SELECT AID FROM B)時々、このような状況に遭遇することがあります。ここで、特定の列を重複なく選択し、特定の列を選択条件として使用する必要があります。そうすれば、他の列は通常どおり出力されます。推奨チュートリアル: 「
Oracle Video チュートリアル >>##」 #
以上がオラクルで存在しないの使い方は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。