前回
11. 述語
- 述語とは「戻り値が真理値であるような関数」のことを指す。
- には3つの使い方がある。
- は3つの引数を持つ。
- を選択するためにはを用いる。
11.1 述語とは
戻り値が真理値であるような関数を述語という。すなわち述語はのいずれかを返す。
11.2 LIKE述語
文字列の部分一致検索を行うには述語を用いる。
-- LIKE述語 SELECT * FROM ABC WHERE ABC.CONDITON LIKE 'abc__' -- 「abc+任意の2文字」であるような値をABCテーブルのCONDITION列から抽出(=検索)される。
11.2 BETWEEN述語
範囲検索を行うには述語を用いる。
-- BETWEEN述語 SELECT * FROM ABC WHERE ABC.CONDTITION BETWEEN 'abc' AND 'cab' --'abc','abd',…,'caa','cab'のうち、指定した列に存在するものが抽出(=検索)される。
11.3 IS NULL/IS NOT NULL
ある列がの行を選択するには、は通常のが利用できないため、(イズ・ナル((ヌルはドイツ語読み。)))述語を扱う。逆にでない行を選択するには、述語を扱う。
-- IS NULL/IS NOT NULL述語 SELECT * FROM ABC WHERE ABC.CONDITION2 IS NULL -- ABCテーブルのCONDITION2列内のNULLであるような行を抽出(=検索)する SELECT * FROM ABC WHERE ABC.CONDITION2 IS NOT NULL -- ABCテーブルのCONDITION2列内のNULLであるような行を抽出(=検索)する
11.4 IN
複数の検索値の少なくとも1つに合致するものを検索するには述語を用いる。いずれにも合致しないものを扱うならば述語を用いる。検索対象値は()で囲む。ただしは検索できないため述語または述語を扱う。
-- IN述語 SELECT * FROM ABC WHERE ABC.CONDITION3 IN ('abc','cde','efg') -- ABC.CONDITION3列がabc,cde,またはefgであるような行のみを検索する。 -- 上と同値:しかし、書きぶりが煩雑になる SELECT * FROM ABC WHERE ABC.CONDITION3 = 'abc' OR ABC.CONDITION3 = 'cde' OR ABC.CONDITION3 = 'efg' -- ABC.CONDITION3列がabc,cde,またはefgであるような行のみを検索する。 -- IN述語とNULLを併用する例 SELECT * FROM ABC WHERE ABC.CONDITION3 IN ('abc','cde','efg') -- ABC.CONDITION3列がabc,cde,またはefgであるような行のみを検索する。 OR ABC.CONDITION3 IS NULL
はサブクエリと併用できる。
-- IN述語 SELECT A1.* FROM A1 WHERE A1.id IN (SELECT A2.id FROM A AS [A2] -- OracleではASを抜くこと:文法上誤りのため WHERE A2.id = 'abc')
11.5 EXISTS述語
「ある条件に合致するレコードの存在有無」を調べるには述語または述語を用いる。述語は引数として常に(相関)サブクエリを取る。
SELECT P1.a, P1.b FROM PRODUCT P1 WHERE EXISTS (SELECT * FROM PRODUCT2 P2 WHERE P2.id = 'A1' AND P2.product_id = 'B1')
述語は述語で代用できる場面が多い一方で、厳密には一致しない*1。
*1:ただしここでは詳細を述べない。