1 つ以上の制限条件を指定する SELECT 節です。
Synopsis
SELECT fields
FROM table
WHERE condition-expression
オプションの
WHERE 節は、1 つまたは複数の
条件を指定し、
SELECT 文で検索されたデータを制限 (行をフィルタ削除) します。
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 つ目の値の後に照合される場合、値は別の値よりも大きくなります。例えば、文字列値に対する既定照合は大文字と小文字を区別しません。以下はその例です。
これは、「以上」と「以下」の組み合わせと同じ働きをします。以下はその例です。
SELECT Name, Age FROM Sample.Person
WHERE Age BETWEEN 18 AND 21
Sample.Person データベース内で 18 から 21 までの年齢のすべての名前を返します。
これにより、以下のワイルドカード文字を使用してパターン・マッチングを実行できます。
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%'
LIKE ESCAPE は、LIKE 述語のエスケープ文字として任意の 1 文字の定義をサポートします。このエスケープ文字は、直後の文字をワイルドカードやフォーマッティング文字ではなくリテラル文字として解釈するよう指示します。以下の例では、LIKE ESCAPE を使用して '%_' の値を返しています。
SELECT * FROM MyTable
WHERE symbol_field LIKE '#%#_' ESCAPE '#'
定義されていない値を見つけます。すべての NULL 値またはすべての非 NULL 値を検出できます。
SELECT Name, FavoriteColors FROM Sample.Person
WHERE FavoriteColors IS NULL
SELECT Name, FavoriteColors FROM Sample.Person
WHERE FavoriteColors IS NOT NULL
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 項目を持ちます。
サブクエリが空のセットを評価するか否かをテストするために、サブクエリを使用して処理します。
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)