前回は以下の記事で、INSERT文でデータベースという倉庫に荷物を搬入する様子を解説しました。
しかし、入れっぱなしでは意味がありません。入れたものは、取り出して使うためにあります。
Amazonで商品を検索するとき。
X(Twitterでタイムラインを表示するとき。
銀行で残高を確認するとき。
これら全ての裏側で、猛烈な勢いで「データをくれ!」と働いているのが「SELECT(セレクト)」文です。
これは、データベースの管理人(倉庫番)に対する「注文票」です。
今日は、このデータを要求する注文票の書き方をマスターし、欲しいデータを自在に引っこ抜く技術を伝授します。
基本構文:これとこれを、ここから出せ
SELECT文の構造は、英語の授業よりも簡単です。
覚える単語は2つだけ。
- SELECT (これを選べ)
- FROM (ここから)
たとえば、ユーザーアカウントの一覧が入った「users」というテーブルから、名前を示す「name」の一覧だけを取り出したい場合。
SELECT name FROM users;
これだけです。
倉庫番は、usersテーブルの棚に行き、全員分の名前だけをリストアップして持ってきてくれます。
もし「名前」と「年齢」が欲しいなら、カンマで区切ります。
SELECT name, age FROM users;
非常にシンプルです。
「何を(SELECT)」「どこから(FROM)」持ってくるか。
この2つさえ伝えれば、文句も言わずに働いてくれます。
アスタリスク(*):強欲な「全部よこせ」
いちいち列の名前を書くのが面倒なとき、最強の記号があります。
アスタリスクです。
これは「全ての列」を意味します。
SELECT * FROM users;
これを実行すると、名前も年齢も住所も電話番号も、そのテーブルにある全ての項目をごっそり持ってきます。
「とりあえず全部くれ」
バイキングで料理を全種類皿に盛るようなものです。
開発中は非常に便利ですが、本番環境で使うときは注意が必要です。
もしデータが100万件あり、列が100個あったらどうなるか。
膨大なデータがネットワークを圧迫し、システムがフリーズするかもしれません。
必要なものだけを注文する。それがスマートな大人のマナーです。
また、先ほどの例ではusersテーブルを扱いましたが、今後名前や年齢以外にも、性別などの列が増えていくかもしれません。
そうすると、アスタリスクを使った場合はもちろん増えた列の値も取得しますので、予期せぬ不具合の原因になるかもしれません。
やはりさきほど「name, age」と値が欲しい列だけを指定したように、使用したい列名だけを指定するのが無難でしょう。
WHERE:条件をつけて絞り込む
「全員分のデータ」なんて、普通は欲しくありません。
欲しいのは「特定の誰か」のデータです。
そこで使うのが WHERE (ウェア) です。
これは「条件」を指定するフィルターです。
「年齢が20歳以上の人だけ欲しい」ならこう書きます。
SELECT * FROM users WHERE age >= 20;
「名前が『田中』の人だけ欲しい」ならこうです。
SELECT * FROM users WHERE name = '田中';Code language: JavaScript (javascript)
この WHERE がないと、毎回全データを読み込むことになります。
Google検索で「猫」と入れたのに、世界中の全Webサイトを検索しだしたら困りますよね。
WHEREは、情報の海で溺れないための浮き輪のようなものです。
まとめ:検索こそがアプリの命
Webアプリケーションの仕事の多くは、このSELECT文です。この記事を開いたときももちろん、この記事の情報がSELECTされています。
- SELECT:欲しい列を指定する。
- FROM:場所を指定する。
- WHERE:条件で絞る。
ユーザーが見たい情報を、データベースという巨大な倉庫から探し出し、きれいに並べて提示する。
この「検索力」こそが、システムの安定性を左右します。
正しい注文票を書いて、倉庫番を使いこなしてください。



コメント