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
比較演算子
| 演算子 | 内容 |
| = | 等しい |
<> != ^= ¬= | 等しくない ¬= は、あまり一般的でないプラットフォーム向け <> は標準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 '鈴%'
);
比較条件に関連する内容