SQL:「どの列を・どの表から・どの条件で」取り出す
SQLはデータベースに指示を出すための言葉です。基本は SELECT 列 FROM 表 WHERE 条件 の3点セットで、「どの列を・どの表から・どの行だけ」取り出すかを書きます。表計算の「必要な行だけ絞りこむ」作業を、命令文で正確にくり返せるようにしたものだと考えるとわかりやすいです。
このページで学べること
- SQLが何をするための言葉かわかる
- SELECT・FROM・WHERE の役割がわかる
- 条件で行を絞りこめる
- 並べ替え・件数の数え方がわかる
前提知識
基本の形は3つの語だけ
- SELECT:取り出す列を指定(* はすべての列)
- FROM:取り出す表を指定
- WHERE:残す行の条件を指定(省略すると全行)
次のような「会員」表があるとします。
| 会員ID | 名前 | 年齢 | 都道府県 |
|---|---|---|---|
| 1 | 青木 | 25 | 東京都 |
| 2 | 井上 | 17 | 大阪府 |
| 3 | 上田 | 34 | 東京都 |
「20歳以上の会員の名前」を取り出すなら SELECT 名前 FROM 会員 WHERE 年齢 >= 20; です。結果は青木・上田の2件。条件に合う行だけ、指定した列だけが返ります。
並べ替えは ORDER BY(DESC で大きい順)、件数を数えるのは COUNT(*) を使います。文の最後には ;(セミコロン)を付けます。
利用者が入力した文字をそのままSQLに埋めこむと、SQLインジェクションという攻撃を受けるおそれがあります。実際のプログラムでは値を直接つなげず、専用のしくみ(プレースホルダ)を使います。くわしくは情報セキュリティを参照してください。
図でイメージする(行と列でしぼる)
| ID | 名前 | 年齢 | 都道府県 |
|---|---|---|---|
| 1 | 青木 | 25 | 東京都 |
| 2 | 井上 | 17 | 大阪府 |
| 3 | 上田 | 34 | 東京都 |
WHERE 年齢 >= 20 → 青木・上田の行が残る
| 名前 |
|---|
| 青木 |
| 上田 |
結果は2件
例題(くわしい手順)
上の会員テーブルから「東京都に住む会員の名前と年齢を、年齢の大きい順に」取り出します。
- 列を決める:名前と年齢 → SELECT 名前, 年齢
- 表と条件:FROM 会員 WHERE 都道府県 = '東京都'(文字は引用符で囲む)
- 並べ替え:ORDER BY 年齢 DESC を最後に付ける
結果は「上田 34」「青木 25」の順。WHERE → ORDER BY の順番で書くのが決まりです(逆にすると文法エラーになります)。
SELECT * と列を指定する場合の違い
| 書き方 | 取り出す内容 | 向いている場面 |
|---|---|---|
| SELECT * | すべての列 | 中身を確認したいとき |
| SELECT 名前, 年齢 | 指定した列だけ | 実際の処理(通信量が少なく、必要な情報だけ扱える) |
個人情報を扱うときは、必要な列だけを取り出すのが安全です(データ最小化の考え方)。
よくある間違い
WHERE 都道府県 = 東京都 のように書くとエラーになります。文字は '東京都' のように引用符で囲みます(数値は囲みません)。
SQLは SELECT → FROM → WHERE → ORDER BY の順で書きます。順番を入れかえると文法エラーになります。
「等しくない」は <> または != です。また、空欄(NULL)かどうかは = ではなく IS NULL で調べます。
練習問題
まず自分で解いてから解説を開きましょう。
会員テーブルの全データを取り出すSQLを書きなさい。
解答・解説を見る
答え:SELECT * FROM 会員;
* はすべての列という意味です。WHERE を省略しているので全行が対象になります。
会員テーブルから、年齢が20以上の行だけを取り出す条件を書きなさい。
解答・解説を見る
答え:WHERE 年齢 >= 20
数値なので引用符は不要です。20 も含めたいので > ではなく >= を使います。
上の会員テーブル(青木25・井上17・上田34)で SELECT COUNT(*) FROM 会員 WHERE 年齢 >= 20; の結果はいくつですか。
解答・解説を見る
答え:2
条件を満たすのは青木(25)と上田(34)の2件。COUNT(*) はその件数を返します。
ORDER BY 年齢 DESC はどんな並び順になりますか。
解答・解説を見る
答え:年齢の大きい順(降順)
DESC は降順、ASC(省略時)は昇順です。上の表なら上田34 → 青木25 → 井上17 の順になります。
よくある質問
Q. SQLとは何ですか?
データベースにデータの取り出しや追加を指示するための言葉です。基本は SELECT 列 FROM 表 WHERE 条件 の形で、必要な行と列だけを取り出せます。
Q. SELECT * はどんな意味ですか?
すべての列を取り出すという意味です。中身の確認には便利ですが、実際の処理では必要な列だけを指定したほうが安全で効率的です。
Q. WHERE の条件で文字を扱うときの注意は?
文字列は '東京都' のように引用符で囲みます(数値は囲みません)。また利用者の入力をそのままSQLに埋めこむとSQLインジェクションの危険があるため、プレースホルダを使います。
Q. SQLで並べ替えるにはどう書きますか?
文の最後に ORDER BY を書きます。「ORDER BY 価格」で安い順、「ORDER BY 価格 DESC」で高い順になります。
次に学ぶ内容
高等学校「情報I」および基本的なIT知識の範囲を参照し、オリジナルに作成(実在試験問題の転載はありません)。正確性は編集・監修フローで確認しています(仕様書 第11章)。