次の社員表から、部署が「営業」で給与が30万円以上の社員の氏名を求めるSQL文として、最も適切なものはどれか。
| 社員番号 | 氏名 | 部署 | 給与 |
|---|---|---|---|
| 1 | 青木 | 営業 | 32 |
| 2 | 井上 | 総務 | 35 |
| 3 | 上田 | 営業 | 28 |
- ①SELECT 部署 FROM 社員 WHERE 氏名 = '営業' AND 給与 >= 30
- ②SELECT 氏名 FROM 社員 WHERE 部署 = '営業' OR 給与 >= 30
- ③SELECT 氏名 FROM 社員 GROUP BY 部署 HAVING 給与 >= 30
- ④SELECT 氏名 FROM 社員 WHERE 部署 = '営業' AND 給与 >= 30
答えと解説を見る
SELECT文は「SELECT 取り出す列 FROM 表 WHERE 行の条件」の形で書きます。「部署が営業」かつ「給与が30万円以上」の両方を満たす行を取り出すので、2つの条件をANDで結びます。この表では、青木さん(営業・32万円)だけが該当します。
他の選択肢が不適切な理由
・ORで結ぶ:どちらか一方を満たせばよいことになり、井上さん(総務・35万円)や上田さん(営業・28万円)も取り出されてしまいます。
・GROUP BY 部署 HAVING 給与 >= 30:部署ごとにグループ化する文で、個々の社員の氏名を条件で取り出す文になっていません。
・SELECT 部署 … WHERE 氏名 = '営業':取り出す列と条件の列を取り違えています。
覚え方のポイント
「両方満たす=AND」「どちらか=OR」。条件を日本語で読み上げて、「かつ」ならAND、「または」ならORと置き換えると間違えません。