1 つ以上の制限条件を指定する SELECT 節です。
Synopsis
SELECT fields
FROM table
WHERE condition-expression
引数
condition-expression 検索するデータにパラメータを指定する修飾子。
概要
オプションの WHERE 節は、1 つまたは複数の条件を指定し、SELECT 文で検索されたデータを制限 (行をフィルタ削除) します。
WHERE 節は、クエリ選択から特定の行を適格とするか、もしくは不適格とします。適格な行とは、condition-expression が真である行です。condition-expression は、AND、OR、および NOT 演算子によってリンク可能な論理テスト (述語) のリストです。
SQL の述語は以下のカテゴリーに分類されます。
比較述語
以下は、使用できる比較述語です。
SQL 比較述語
述語 処理
= 等しい
<> 等しくない
> より大きい
< より小さい
>= 以上
<= 以下
以下はその例です。
SELECT Name, Age FROM Sample.Person
WHERE Age < 21
Caché の %STARTSWITH 拡張子も利用できるので、部分的一致も実行できます。以下はその例です。
SELECT Name, Age FROM Sample.Person
WHERE Name %STARTSWITH 'SM'
SQL は照合 (値がソートされる順番) という点から比較演算子を定義します。まったく同様の方法で照合する場合の 2 つの値は等しくなります。2 つ目の値の後に照合される場合、値は別の値よりも大きくなります。例えば、文字列値に対する既定照合は大文字と小文字を区別しません。以下はその例です。
'AAA' = 'AAA'
'AAA' = 'aaa'
'AAA' = 'Aaa'
'BBB' > 'aaa'
BETWEEN 述語
これは、「以上」と「以下」の組み合わせと同じ働きをします。以下はその例です。
SELECT Name, Age FROM Sample.Person
WHERE Age BETWEEN 18 AND 21
Sample.Person データベース内で 18 から 21 までの年齢のすべての名前を返します。
LIKE 述語
これにより、以下のワイルドカード文字を使用してパターン・マッチングを実行できます。
LIKE ワイルドカード文字
文字 以下と一致
“_” 単独の文字
“%” 0 かそれ以上の文字のシーケンス
以下はその例です。
SELECT Name, Address FROM Sample.Vendor
WHERE Name LIKE '%Com%'
文字列 'Com' を含む会社名をすべて探します。
LIKE 比較演算子は、大文字と小文字を区別します。上記の例で 'com' のような文字列を受け入れるには、%SQLUPPER を使用します。
SELECT Name, Address FROM Sample.Vendor
WHERE %SQLUPPER(Name) LIKE '%COM%'
Note:
LIKE は照合を使用しません
LIKE ESCAPE は、LIKE 述語のエスケープ文字として任意の 1 文字の定義をサポートします。このエスケープ文字は、直後の文字をワイルドカードやフォーマッティング文字ではなくリテラル文字として解釈するよう指示します。以下の例では、LIKE ESCAPE を使用して '%_' の値を返しています。
SELECT * FROM MyTable
WHERE symbol_field LIKE '#%#_' ESCAPE '#'
NULL 述語
定義されていない値を見つけます。すべての NULL 値またはすべての非 NULL 値を検出できます。
SELECT Name, FavoriteColors FROM Sample.Person
WHERE FavoriteColors IS NULL 
SELECT Name, FavoriteColors FROM Sample.Person
WHERE FavoriteColors IS NOT NULL 
IN 述語
IN には、等値比較とサブクエリ比較の 2 つの形式があります。
等値比較
IN 述語は、OR 演算子で複数の等値比較を結合する省略表現として使用します。以下はその例です。
SELECT Name, Home_State FROM Sample.Person
WHERE Home_State IN ('ME','NH','VT','MA','RI','CT') 
以上の文は、state が括弧のリスト内の値と等しい場合、真と評価します。リストの要素は定数または式です。等式テストと同様に、照合が IN 比較に適用されます。
IN 述語の等値比較に日付または時刻を使用すると、適切なデータ型変換が自動的に実行されます。WHERE フィールドが TimeStamp 型の場合、Date 型または Time 型の値は Timestamp に変換されます。WHERE フィールドが Date 型の場合、TimeStamp 型または String 型の値は Date に変換されます。WHERE フィールドが Time 型の場合、TimeStamp 型または String 型の値は Time に変換されます。
以下の 2 つの例は、同じ等値比較を実行し、同じデータを返します。DOB フィールドは Date データ型です。
SELECT Name,DOB FROM Sample.Person 
WHERE DOB IN ({d '1951-02-02'},{d '1987-02-28'})
SELECT Name,DOB FROM Sample.Person 
WHERE DOB IN ({ts '1951-02-02 02:37:00'},{ts '1987-02-28 16:58:10'})
詳細は、"日付/時刻文" を参照してください。
サブクエリ比較
サブクエリで IN を使用し、列の値 (あるいは他の式) がサブクエリの行の値と等しいかどうかをテストできます。以下はその例です。
SELECT Name,Home_State FROM Sample.Person
WHERE Name IN 
 (SELECT Name FROM Sample.Employee
 HAVING Salary < 50000)
サブクエリは、SELECT リスト内に必ず 1 項目を持ちます。
EXISTS 述語
サブクエリが空のセットを評価するか否かをテストするために、サブクエリを使用して処理します。
SELECT t1.disease FROM illness_tab t1 WHERE EXISTS 
 (SELECT t2.disease FROM disease_registry t2 
 WHERE t1.disease = t2.disease 
 HAVING COUNT(t2.disease) > 100) 
関連項目
条件式 SELECT