導入
テーブル全体ではなく「条件に合う行だけ」が欲しいことがほとんどです。そこで使うのが WHERE 句。SELECT に条件を付け足して、行を絞り込みます。列を選ぶ「射影」に対して、行を選ぶこの操作を 選択(selection) と呼びます(=横方向に行を絞る)。
説明
WHERE は FROM の後ろに書き、「この条件が真になる行だけ」を残します。
flowchart LR
T["users の全行<br/>佐藤(東京)・鈴木(大阪)・高橋(東京)・田中(福岡)・伊藤(大阪)"]
T -->|"WHERE city = '東京'<br/>(ふるいにかける)"| R["条件に合う行だけ<br/>佐藤・高橋"]
SELECT name, age, city FROM users WHERE city = '東京';
文字列は 'シングルクオート' で囲みます。等しいかどうかの比較は =(プログラミング言語と違い、イコール1つ)です。使える比較演算子はこれだけ覚えれば十分です。
| 演算子 | 意味 | 例 |
|---|---|---|
= | 等しい | city = '東京' |
<> / != | 等しくない | city <> '東京' |
> < | より大きい/小さい | age > 30 |
>= <= | 以上/以下 | age >= 30 |
複数の条件は AND(かつ)/OR(または)でつなげます。NOT で否定もできます。
SELECT name FROM users WHERE city = '大阪' AND age >= 30;
AND と OR が混ざるときは、( ) で囲んでまとまりを明示すると安全です(掛け算と足し算の優先順位のように、AND が先にまとまります)。
SELECT name FROM users WHERE city = '東京' AND (age < 25 OR age >= 40);
やってみよう
初期表示のクエリを実行して、東京在住の会員だけが出ることを確認しましょう。次に、条件を age < 30(30歳未満)に書き換えてみてください。
演習
products テーブルから、価格(price)が 5000 以上の商品の name と price を取り出してください。
ヒント1を見る
数値の比較なのでクオートは不要です。WHERE price >= 5000
ヒント2を見る
SELECT name, price FROM products WHERE price >= 5000;