Day5 前半
「入れたデータを、狙って取り出す」最初の一歩
Day4 までで、テーブルを作り、INSERT でデータを入れられるようになりました。
Day5 からはいよいよ、「欲しいデータだけを取り出す」 という、SQL の一番おいしい部分に入っていきます。
前半では、まずSELECT * で「全部見る」WHERE で「条件をつけて絞り込む」
という二つを、=, >, < に絞って丁寧に押さえます。
SELECT文の役割
「どのテーブルから、どの列を、どんな条件で取り出すか」を伝える文
SELECT は、データベースに対して
「このテーブルから、こういうデータを見せて」
とお願いするための文です。
構造としては、まずこう覚えてください。
SELECT 取り出したい列
FROM テーブル名
[WHERE 条件];
SQLWHERE は「条件があるときだけ付けるオプション」として、角かっこで表しました。
Day5 前半では、まず WHERE なしの形から始めます。
SELECT * とは何か
「そのテーブルの、すべての列・すべての行を見せて」
* は「全部」という意味の特別な記号です。SELECT * は、「そのテーブルにある全ての列を出して」という指示になります。
たとえば、Day4 までで作った users テーブルがこうだとします。
id | name | age | email
---+------------+-----+----------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
このとき、次のように書きます。
SELECT * FROM users;
SQL意味は
「users テーブルから、全部の列・全部の行を見せて」
です。
最初のうちは、SELECT * を「テーブルの中身を確認するための基本動作」として、何度も使ってかまいません。
ただし、実務では「本当に全部必要か?」という視点が重要になるので、その話は後半や次の Day で触れていきます。
WHERE句の役割
「全部はいらない、その中から“条件に合う行だけ”欲しい」
SELECT * は「全部見せて」でしたが、現実の仕事では「全部」欲しいことはあまりありません。
たいていは、
「20歳以上だけ欲しい」
「ID が 1 の人だけ欲しい」
「年齢が 30 未満の人だけ欲しい」
といった「条件付きの取り出し」をします。
この「条件」を指定する場所が WHERE です。
SELECT * FROM users
WHERE 条件;
SQLここでの「条件」が、=, >, < などの比較演算子です。
=(イコール)による条件指定
「この値と完全に一致する行だけ欲しい」
= は「等しい」という意味です。
たとえば、「ID が 1 のユーザーだけ欲しい」ときは、こう書きます。
SELECT * FROM users
WHERE id = 1;
SQL意味は
「users テーブルの中から、id が 1 の行だけを出して」
です。
結果はこうなります。
id | name | age | email
---+----------+-----+----------------------
1 | 山田太郎 | 25 | taro@example.com
文字列に対して = を使うこともできます。
「名前が ‘佐藤花子’ の人だけ欲しい」ときは、こうです。
SELECT * FROM users
WHERE name = '佐藤花子';
SQLここで重要なのは、
数値はクォートなし、文字列はシングルクォートで囲む
という Day4 までのルールが、そのまま WHERE にも適用されることです。
>(より大きい)による条件指定
「この値より大きいものだけ欲しい」
> は「より大きい」という意味です。
たとえば、「20歳より上のユーザーだけ欲しい」ときは、こう書きます。
SELECT * FROM users
WHERE age > 20;
SQL意味は
「users テーブルの中から、age が 20 より大きい行だけを出して」
です。
先ほどの例なら、結果はこうなります。
id | name | age | email
---+------------+-----+----------------------
1 | 山田太郎 | 25 | taro@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
ここでのポイントは、age 列が INTEGER だからこそ、> で大小比較ができる
ということです。
もし age を TEXT で持っていたら、「文字列としての大小比較」になってしまい、意図しない結果になります。
Day3 で「型を正しく決めることが大事」と言った理由が、ここで実感できるはずです。
<(より小さい)による条件指定
「この値より小さいものだけ欲しい」
< は「より小さい」という意味です。
たとえば、「20歳未満のユーザーだけ欲しい」ときは、こう書きます。
SELECT * FROM users
WHERE age < 20;
SQL意味は
「users テーブルの中から、age が 20 より小さい行だけを出して」
です。
先ほどの例なら、結果はこうなります。
id | name | age | email
---+------------+-----+----------------------
2 | 佐藤花子 | 19 | hanako@example.com
>, < はセットで覚えてしまいましょう。
どちらも「数値型の列に対して使うことが多い」という点が重要です。
SELECT * と WHERE を組み合わせる感覚
「まず全部を見る」「次に条件をつけて絞る」
Day5 前半で身につけてほしい流れは、とてもシンプルです。
まず、テーブルの中身をざっと確認する。
SELECT * FROM users;
SQLそのあとで、「こういう条件で絞りたい」と思ったら WHERE を付ける。
SELECT * FROM users
WHERE age > 20;
SQLこの「全部 → 条件付き」という二段階で考えると、SQL がぐっと分かりやすくなります。
いきなり複雑な条件を書こうとせず、
「まずは SELECT * で現状を確認する」
という癖をつけると、デバッグもしやすくなります。
セキュリティの視点から見る WHERE の意味
「必要なものだけ取る」というのは、それ自体が防御になる
情報セキュリティの観点から見ると、WHERE を使って「必要なデータだけを取る」というのは、とても重要な考え方です。
たとえば、管理画面で「1人のユーザー情報だけを表示したい」のに、WHERE を付け忘れて SELECT * FROM users; を実行してしまうと、全ユーザーの情報が一度に出てきてしまいます。
それがログに残ったり、画面に表示されたりすると、それだけで情報漏洩のリスクになります。
だからこそ、
「本当に必要な行だけを取る」
「本当に必要な列だけを取る(これは Day5 後半以降)」
という意識は、最初のうちから持っておく価値があります。
Day5 前半のまとめ
SELECT は「どのテーブルから、どのデータを取り出すか」を指定する文。SELECT * FROM テーブル名; で、そのテーブルの全行・全列を確認できる。WHERE は「条件に合う行だけを取り出す」ための場所。= は「等しい」、> は「より大きい」、< は「より小さい」を表し、主に数値型の列に対して使う。
「まず SELECT * で全体を見てから、WHERE で絞る」という二段階の思考が、理解と安全性の両方を高める。
後半では、SELECT * から「必要な列だけを選ぶ」書き方に進みつつ、WHERE の条件をもう少しバリエーション豊かにしながら、
実際の「検索っぽさ」を感じられる例題を扱っていきます。
