表から特定の行を選択するには、SELECT ステートメントの後に WHERE 文節を使って、 行が選択されるために満たすべき条件を指定します。 表から行を選択する基準のことを、 検索条件 といいます。
検索条件は、1 つまたは複数の述部 で構成されます。 述部は、ある行に関して真か偽 (または不明) となる条件を指定します。 WHERE 文節の中で条件を指定するには、次の基本的な述部を使います。
述部 | 機能 |
---|---|
x = y | x は y に等しい |
x <> y | x は y に等しくない |
x < y | x は y より小さい |
x > y | x は y より大きい |
x <= y | x は y 以下である |
x >= y | x は y 以上である |
IS NULL/IS NOT NULL | NULL 値かどうかの検査 |
検索条件を作成する場合、 数値データ・タイプ以外には算術計算を実行しないようにし、 互換性のあるデータ・タイプの間以外では比較を行わないように注意してください。 たとえば、テキスト・ストリングと数値は比較できません。
文字値に基づいて行を選択する場合、 その値は単一引用符で囲む必要があり (たとえば WHERE JOB = 'Clerk')、 各文字値はデータベース中に存在しているものと正確に一致するように入力する必要があります。 データベースの中でデータ値が小文字になっているのに、 大文字として入力すると、行は選択されません。 数値に基づいて行を選択する場合、 その値は引用符で囲まないようにしてください (たとえば WHERE DEPT = 20)。
次の例では、STAFF 表から部署 20 の行だけを選択しています。
SELECT DEPT, NAME, JOB FROM STAFF WHERE DEPT = 20
このステートメントの結果は、次のとおりです。
DEPT NAME JOB ------ --------- ----- 20 Sanders Mgr 20 Pernal Sales 20 James Clerk 20 Sneider Clerk
次の例では、AND を使って複数の条件を指定しています。 条件は、必要なだけ何個でも指定できます。 この例では、STAFF 表から部署 20 の事務員 (Clerk) を選択しています。
SELECT DEPT, NAME, JOB FROM STAFF WHERE JOB = 'Clerk' AND DEPT = 20
このステートメントの結果は、次のとおりです。
DEPT NAME JOB ------ --------- ----- 20 James Clerk 20 Sneider Clerk
省略時値がサポートされていない列に値が入力されていないなら、NULL 値になります。 また、値が特に NULL として設定されている場合もあります。 NULL 値になるのは、NULL 値をサポートするよう定義されている列だけです。 表の中の NULL 値の定義とサポートについては、 表の作成を参照してください。
NULL 値かどうかを調べるには、IS NULL 述部および IS NOT NULL 述部を使います。
次のステートメントは、歩合が該当しない従業員のリストを出力します。
SELECT ID, NAME FROM STAFF WHERE COMM IS NULL
このステートメントの結果は、次のとおりです。
ID NAME ------ --------- 10 Sanders 30 Marenghi 50 Hanes 100 Plotz 140 Fraye 160 Molinare 210 Lu 240 Daniels 260 Jones 270 Lea 290 Quill
値 0 (ゼロ) は、NULL 値と同じではありません。 次のステートメントでは、表に含まれている従業員のうち、 歩合が 0 の人を選択しています。
SELECT ID, NAME FROM STAFF WHERE COMM = 0
サンプル表の中に、COMM 列の値が 0 のものはないため、 戻される結果セットは空です。
次の例では、 STAFF 表の中で YEARS の値が 9 より大きい行をすべて選択しています。
SELECT NAME, SALARY, YEARS FROM STAFF WHERE YEARS > 9
このステートメントの結果は、次のとおりです。
NAME SALARY YEARS --------- --------- ------ Hanes 20659.80 10 Lu 20010.00 10 Jones 21234.00 12 Quill 19818.00 10 Graham 21000.00 13