SQL グループ比較条件

グループ比較条件は SQL において リスト、または、副問合せで戻される結果セットをいずれか(ANY、SOME)一致、全一致(ALL)を評価する。
グループ比較の条件述語は(WHERE、START WITH、CONNECT BY、HAVING)で使用するオペレーター(演算子)に使用する。
単純比較条件LIKE、IN、BETWEEN AND、IS NULL 比較

表1
演算子内容
ANY
または SOME
リストまたは問い合わせ結果とのいずれかの一致、比較条件(=、<、<= など)は表2 すべての演算子を使用できる
ALLリストまたは問い合わせ結果との全一致、比較条件(=、<、<= など)は 表2 すべての演算子を使用できる

スカラーと値グループの比較

1つの式、または、値とグループ値を比較する場合はグループ比較は 表2 の演算子を利用できる。

1つの値とグループ比較条件の例(左辺が「より大きい」条件の場合)

SQL> select 1 from dual where 1 > ANY (0,1,2);
 
         1
----------
         1

上記 SQLを念のため説明: 1 は (0、1 または 2) のグループと比較して1つでも「より大きい」条件に一致するか? を評価する。
右辺のカッコ内は副問合せに置き換えてもよい。ANY の代わりに SOME を使用してもよい。

PL/SQL におけるグループ比較

PL/SQL ではグループ比較条件は使用できない。
ANY による比較条件

SQL> begin
  2     if (('abc') = ANY ('abc', 'xyz')) then
  3             dbms_output.put_line('aaaa');
  4     end if;
  5  end;
  6  /
        if (('abc') = ANY ('abc', 'xyz')) then
                    *
行2でエラーが発生しました。:
ORA-06550: 行2、列14:
PLS-00204: 関数または疑似列=ANYはSQL文の中でしか使用できません。

IN 演算子であれば グループとの比較は可能

SQL> begin
  2     if (('abc') IN ('abc', 'xyz')) then
  3             dbms_output.put_line('aaaa');
  4     end if;
  5  end;
  6  /
aaaa

比較演算子

表2
演算子内容
=等しい
<>
!=
^=
¬=
等しくない
¬= は、あまり一般的でないプラットフォーム向け
<> は標準SQLに規定されている不等号
>
<
(左辺が)より大きい、より小さい
>=
<=
(左辺が)以上、以下

式リストと値グループの比較

複数の式、または、値とグループ値を比較する場合は「等号と不等号」のみ利用できる。(SQL のみ)

たとえば、姓と名は2つで1セットであることを念頭に氏名の条件一致を評価する。

SQL> select 1 from dual where ('鈴木','一郎') <> ALL (('田中','一郎'), ('鈴木','一郎'));
 
レコードが選択されませんでした。

念のため説明:右辺の名前のグループすべてと比較して「鈴木:一郎」とする式のセットは存在しないか?

SQL> select 1 from dual where ('鈴木','一郎') = ANY (('田中','一郎'), ('鈴木','一郎'));
 
         1
----------
         1

念のため説明:右辺の名前のグループに「鈴木:一郎」とする式のセットは1つでも存在するか?

右辺のカッコ内は以下のように副問合せに置き換えてもよい。

SQL> select 1 from dual where ('鈴木','一郎') = ANY (
       select last_name, first_name from username_list
       where last_name like '鈴%'
     );


比較条件に関連する内容

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle Web セミナー