SQLite | ゼロからはじめるSQL、30日で習得するSQLite:基礎理解 - Day5 データ取得①

SQLite
スポンサーリンク

Day5 前半

「入れたデータを、狙って取り出す」最初の一歩

Day4 までで、テーブルを作り、INSERT でデータを入れられるようになりました。
Day5 からはいよいよ、「欲しいデータだけを取り出す」 という、SQL の一番おいしい部分に入っていきます。

前半では、まず
SELECT * で「全部見る」
WHERE で「条件をつけて絞り込む」
という二つを、=, >, < に絞って丁寧に押さえます。


SELECT文の役割

「どのテーブルから、どの列を、どんな条件で取り出すか」を伝える文

SELECT は、データベースに対して
「このテーブルから、こういうデータを見せて」
とお願いするための文です。

構造としては、まずこう覚えてください。

SELECT 取り出したい列
FROM   テーブル名
[WHERE 条件];
SQL

WHERE は「条件があるときだけ付けるオプション」として、角かっこで表しました。
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 だからこそ、> で大小比較ができる
ということです。

もし ageTEXT で持っていたら、「文字列としての大小比較」になってしまい、意図しない結果になります。
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 の条件をもう少しバリエーション豊かにしながら、
実際の「検索っぽさ」を感じられる例題を扱っていきます。

タイトルとURLをコピーしました