前回は、PHPからMySQLにアクセスするための準備と、簡単なアクセスをするところまで解説した。
とはいえ、実際のアクセス部分はまだしっかり解説できていないので、今後解説するとしよう。
以下がその記事だ。
【PHP講座13】PHPからMySQLにアクセスしよう | Shino’s Mind Archive
さて、今回からちょっと横道に逸れる。
MySQLへアクセスするためには、そのための構文が必要となる。
というわけで、数回にわたって、MySQLにアクセスするためのSQLを解説していこう。
かなり色々できるため、これを単体の講座に分けることも考えたのだが、一旦はごく基本のみを簡単に解説していくことにする。
今回は、データを取得するSELECT文の基本を見ていこう。
これがないと折角管理しているデータを使えないので、しっかり理解していきたい。
SQL
まず、このSQLというものについて解説していこう。
SQLとは、MySQLなどのデータベースを操作するための言語だ。
データベース内にあるデータを欲しい形で取得したり、データを新しく追加したりなど、プログラムで利用するための基本的な操作は全てSQLで可能だ。
具体的には、大きく分けると以下3種類がある。
- データ定義言語
- データ操作言語
- データ制御言語
…が、単にPHPから使う場合には、二つ目のデータ操作言語が分かればひとまず使える。
データ定義言語、データ制御言語も解説すると本格的にデータベースの講座になってしまうので、ここでは割愛しよう。
さて、そのデータ操作言語だが、これはテーブルがすでにあるとして、その中のデータを操作するためのものだ。
大きく分けると以下の4種類。
- 検索:SELECT
- 挿入:INSERT
- 更新:UPDATE
- 削除:DELETE
例えば、ショッピングサイトのカートで見てみよう。
カート情報を保持したテーブルがあるとする。
ユーザーが、今のカート情報を確認しようとしたとき、検索でそのユーザーのカート情報を持ってくる。
新しくカートに追加したら、挿入でデータを追加する。
カートの中身の数量を変更した場合には、更新でデータを変更する。
カートから削除したら、そのままデータも削除だ。
このように、テーブル情報がある状態で、その中のデータを取り出したり、操作したりすることができるのだ。
そして、言語ということは、もちろん構文も存在する。
というわけで、ここからはその構文を解説していこう。
恐らく、SELECTは複数回になると思うが、INSERT以降は各一回くらいのボリュームになるはずだ。
SELECT文
では、早速SELECT文から見ていこう。
上でも軽く触れている通り、SELECT文はデータを取得するための構文だ。
さて、軽く復習を。
データベースには、テーブル形式でデータが格納されていた。
前回作ったもので言うと、「access_test」がそれだ。
表形式と言う通り、データには行と列という考え方が存在する。
行について、1行が一つのデータのまとまりだ。
列は、そのデータの種類を表している。
例えば商品の場合、商品名や値段、在庫数といったものは列、具体的な「缶コーヒー:120円:20個」といったものが行になる。
この、列と行の違いはSELECT文の解説を進める上で非常に重要になってくる。
混乱しないよう、気を付けよう。
サンプル用テーブルを用意しよう
先に、今回の例が使えるテーブルを用意しておこう。
まず、「http://localhost/phpmyadmin」にアクセスしてphpMyAdminを開いてほしい。
先にApache、MySQLの実行を忘れずに。
開いたら、左に前回作成した「testdb」があるはずなので、それをクリックしておこう。
そうしたら、前回作成した「access_test」テーブルの情報と、その下に新しいテーブルを作るための欄がある。
その下の欄で、名前を「product」、カラム数を4にして実行を押そう。
すると、カラムの情報入力画面が出てくるので、今度は以下の内容を入力してほしい。
- カラム一つ目
- 名前:id
- データ型:INT
- インデックス:PRIMARY
- A_I:チェックあり
- コメント:通しID
- カラム二つ目
- 名前:name
- データ型:VARCHAR
- 長さ/値:20
- コメント:商品名
- カラム三つ目
- 名前:price
- データ型:INT
- コメント:値段
- カラム四つ目
- 名前:stock
- データ型:INT
- コメント:在庫数
- テーブルのコメント:商品管理テーブル
- 照合順序:utf8_general_ci
前回と同じく、これら以外はデフォルトのままでいい。
また、PRIMARY選択時に出てくるポップアップは、何も変えずに実行で大丈夫だ。
これで、まずテーブルができた。
そうしたら、以下のデータを入れておこう。
id | name | price | stock |
---|---|---|---|
1 | 缶コーヒー | 120 | 20 |
2 | オレンジジュース | 120 | 15 |
3 | コーラ | 130 | 20 |
4 | お茶 | 110 | 10 |
5 | 水 | 90 | 12 |
上から順番に入れればIDは自動で入るので、name列以降だけ入力すればOKだ。
また、このほかにも色々データを入れておいてもいいだろう。
その場合、もちろん入力したデータによって結果も変わってくるので、そこだけ注意してほしい。
SQLを実行する場合は、上のタブから「SQL」を選んでもらえれば、入力画面が出てくる。
試しに、以下一文を実行して、上の表そのままが出てくれば大丈夫だ。
SELECT * FROM product;
ここまで準備ができたら、解説に進んでいこう。
SELECT文の基本構文
さて、ようやくSELECT文だが…先に構文を見てもらおう。
SELECT 列1, 列2, ... FROM テーブル名;
最も単純な形がこれだ。
こうすることで、テーブル名に指定したテーブルから、指定した列の情報を全て持ってきてくれる。
表を縦に抜き出すイメージだ。
また、この列には「*
」を指定することもできる。
これを書いた場合、定義されている列を、その順番で全て抜き出す。
つまり、SELECT * FROM テーブル名;
でそのテーブルに入っている全ての情報を持ってくることができる。
サンプルテーブル作成後に実行してもらったテストのSQLがこの形になっている。
さて、常に全ての行が欲しいわけではない。
ほとんどの場合、必要な情報を絞り込む必要がある。
そのために、WHERE句というものを付け加えよう。
SELECT 列1, 列2, ... FROM テーブル名 WHERE 条件;
テーブル名の後ろに、WHERE 条件
というものがくっついた。
これで、条件に合致した行のみを抜き出すことができる。
今度は、横を絞り込むということだ。
条件にも色々書き方があるが、まずは特定の条件に一致する場合、というもの。
これは、列名 = 値
と書けばいい。
PHPでは等しい条件をイコール二つで書いていたが、SQLでは一つなので注意。
例えば、以下のSQL。
SELECT name FROM product WHERE price = 120;
こう書いた場合、「product」というテーブルの、「price」の列が120であるようなデータの「name」列を表示することになる。
今回のサンプルに対し、上のSQLを発行すると…
name |
---|
缶コーヒー |
オレンジジュース |
このような結果が返ってくる。
他にも、条件には不等号も使える。
こちらはPHPと同じく、<
、<=
、>=
、>
が使用可能だ。
なので、今度は以下のようなSQLを発行すると…
SELECT name FROM product WHERE stock < 15;
stock列が15未満のデータ…要するに、以下の結果が返ってくる。
name |
---|
お茶 |
水 |
ちなみに、等しくない場合には!=
の他、<>
でも可能だ。
なお、複数の条件も可能だ。
二つの条件について、両方とも満たしている行を持ってくる場合はAND
で、どちらかでも満たしていれば持ってくる場合はOR
で挟む。
SQLの例だけ出すと以下のような感じになる。
SELECT name FROM product WHERE price < 100 AND stock < 15;
これで、「priceの列が100未満」かつ「stockの列が15未満」の行を抜き出すことができる。
簡単にまとめると…
- テーブル名で指定したテーブルから
- WHERE句で指定した条件でデータを絞り込み
- SELECTの直後に指定した列の情報を表示する
という形になる。
一つ補足で、条件に文字列を指定する場合には、その文字列をシングルクォーテーションで囲む必要がある。
例えば、name列が「缶コーヒー」のデータを持ってくる場合は、以下のような形だ。
SELECT * FROM product WHERE name = '缶コーヒー';
おわりに
今回から、MySQLの内容を持ってきたり、データを操作したりするSQLの解説に入った。
その中でも、データを持ってくるSELECT文の基本を解説した。
SELECT文を使うには、最低限でも今回解説した内容は必須だ。
その他、まだまだできることはある。
次回は、SELECTで取得した結果を並び替えたり、表示件数を抑えたりする方法を解説しよう。
とはいえ、やはり今回の内容が基になっているので、しっかり理解してから次に進んでいこう。
コメント