【PHP講座14】SQL編1 -SELECT文の基本-

PHP講座

前回は、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選択時に出てくるポップアップは、何も変えずに実行で大丈夫だ。

これで、まずテーブルができた。

そうしたら、以下のデータを入れておこう。

idnamepricestock
1缶コーヒー12020
2オレンジジュース12015
3コーラ13020
4お茶11010
59012
productテーブル

上から順番に入れれば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
缶コーヒー
オレンジジュース
SQL結果1

このような結果が返ってくる。

他にも、条件には不等号も使える。

こちらはPHPと同じく、<<=>=>が使用可能だ。

なので、今度は以下のようなSQLを発行すると…

SELECT name FROM product WHERE stock < 15;

stock列が15未満のデータ…要するに、以下の結果が返ってくる。

name
お茶
SQL結果2

ちなみに、等しくない場合には!=の他、<>でも可能だ。

なお、複数の条件も可能だ。

二つの条件について、両方とも満たしている行を持ってくる場合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で取得した結果を並び替えたり表示件数を抑えたりする方法を解説しよう。

とはいえ、やはり今回の内容が基になっているので、しっかり理解してから次に進んでいこう。

コメント

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