
述語とは?
<>や、BETWEEN等のSQLの中の、予約語のような存在のことです。
ただ、NVLや、DECODE等の関数とはまた違った存在になります。よく使われるのはINやEXIST、NOT NULLなどでしょう。
関数との違い
述語は引数を取って、値も返しますが、関数とは区別しています。
では、その違いは何かというと、戻り値が必ず真偽値(true/false/unknown)になることです。
述語一覧
述語名 | 説明 |
---|---|
= | |
<> | |
< | |
> | |
BETWEEN | xxxからyyyの間の検索ができます。 |
LIKE | あいまい検索(部分一致検索)を行いたい場合に使います。 |
NOT IS NULL | NULL以外を抽出できます。 |
IS NULL | NULLを抽出できます。 |
IN | 「ORキーワード」を簡略化する目的で使われます。サブクエリも引数に取れます。 |
NOT IN | 「ORキーワード」を簡略化する目的で使われます。サブクエリを引数に取れます。 |
EXISTS | 相関サブクエリが唯一の引数になります。存在するデータのみについて検索をかけることができる。 |
NOT EXISTS | 相関サブクエリが唯一の引数になります。存在しないデータのみについて検索をかけることができる。 |
BETWEEN
以下は、idが1〜3の間のユーザーを取得するSELECT文です。
1 |
SELECT * FROM user WHERE id BETWEEN 1 AND 3; |
EXISTS述語について
特徴
- IN句によって、代用できるのであまり使われないが、使いこなせるようになると重宝する。
- 引数を相関サブクエリの一つしか取らない述語
- サブクエリの戻り値は論理値(TRUE/FALSE)を返す。
引数を相関サブクエリの一つしか取らない
「相関サブクエリ」については、下記の記事で解説しています。
サブクエリの戻り値は論理値(TRUE/FALSE)を返す。
例えば、EXISTS述語を使った下記のようなサブクエリの場合は、サブクエリ内の結果はレコードのあるなしで、TRUE、FALSEで返してその結果を元に、判定します。
1 2 |
SELECT * FROM USER_MASTER A WHERE EXISTS (SELECT * FROM AUTHORIZATION B WHERE A.USER_ID = B.USER_ID ) |
また、サブクエリ内の取得列に関しては、基本的にどんな列でも問題ないですが、「SELECT *」とすることが決まりとなっています。
この記事へのコメントはありません。