【SQLの学習】Webサイトを作る為のデータベース操作方法の学習

database Webエンジニア
Webサイトを作る時にデータベースに入力データを登録したり、データベースからデータを参照する為にSQLを理解する必要があるみたいだけど、どうやって勉強したらいいんだろう?
このような方向けの記事です。

SQLで覚えるべきことは4つ

SQLについて、最初に覚えるべき基本は以下の4つです。

  • INSERT(挿入)
  • SELECT(選択)
  • UPDATE(更新)
  • DELETE(削除)

それぞれ解説していきますね

INSERT(挿入)

読んで字の通りデータベースに新しいデータを挿入します。これがなければデータは0件の状態ですので、まず初めに行う作業になってくるかと思います。

ユーザーテーブルに以下のような形のデータを挿入したいとします。

user_id name
1 タナカ

その場合のSQLの文は以下のようになります。
※事前にuserテーブル(構造はuser_id、nameの2カラム)が作成してあるものとします。

INSERT INTO user (user_id, name) VALUES (‘1’, ‘タナカ’);

基本的にはこれだけなので、INSERT(挿入)に関しては特に問題はないかなと思います。

SELECT(選択)

次はSELECTになります。これはいわゆる検索や抽出といった形になります。例えばショッピングサイトのデータベースから、商品名が一致するデータを検索する時に使うことになります。

以下ような商品(product)テーブルがあるとします。

product_id product_name category price
1 プリントTシャツ アパレル 1980
2 液晶ディスプレイ24インチ 家電 14800
3 ジーンズ アパレル 8000
4 無地Tシャツ アパレル 980
※本来categoryは日本語の文字列ではなく、category_idとして、そのidが何というカテゴリかは別途カテゴリテーブルで管理するのが一般的です。ここではわかりやすいように日本語のcategoryとしてしまっています。

このようなデータから色々な条件でデータを選択していくわけです。例えば「プリントTシャツ」という商品名の商品を選択したい場合のSQL文は以下になります。

SELECT * FROM product WHERE product_name = ‘プリントTシャツ’

WHERE句というものが条件設定の構文となりますので、WHERE以降が選択条件を設定する部分になります。

これで商品名がプリントTシャツのデータが1件ヒットしてきます。

次にカテゴリが「アパレル」の商品を選択したいとします。その場合は同様に以下のSQL文になります。

SELECT * FROM product WHERE category = ‘アパレル’

これでidが1,3,4のアパレルの商品のみ3件ヒットしてきます。

アパレル全件ではなくて、商品名に「Tシャツ」を含む商品をすべて選択したいとすると以下の文です。

SELECT * FROM product WHERE product_name like ‘%Tシャツ%’

ここだけちょっと特殊になっていますよね。イコールではなくlikeで商品名の中に「Tシャツ」を含む商品を選択条件としています。これでidが1,4のTシャツのみがヒットします。

次にショッピングサイトでよく見る検索条件の、10000円以下の商品を検索したいとします。その場合の文は以下になります。

SELECT * FROM product WHERE price <= 10000;

これで価格(price)は10000円以下の商品を選択可能です。

SELECT文では概ねどのような抽出条件でも実現可能になっているかと思います。もしこういう条件で抽出したいというものがあればその条件+sqlとかで検索すると例が色々出てくると思います。

UPDATE(更新)

次に既に登録されているデータの値を変える必要が出てきた場合の更新のSQL文についてです。

例えば先ほどの商品テーブルで、idが1の商品の価格を1980円から1480円に変更する文は以下の通りです。

UPDATE product SET price = 1480 WHERE product_id = 1;

これでproduct_idが1の商品の値段(price)が1480円に更新されます。

更新文で注意しなければいけないのは、WHERE句を利用して必ず条件指定を行い、この条件のデータに当てはまるものを更新対象にするということです。

それをせず以下のSQL文を実行してしまったとします。

UPDATE product SET price = 1480;

この瞬間、データ内のすべてのpriceが1480に更新され大惨事となります。本番公開しているようなサイトでこのようなことを起こせば大事件になるでしょう。

また日本語の曖昧な部分を条件にしてしまうと、意図していないレコードまで更新されてしまう可能性があります。

なので各テーブルにはかならずそれぞれのレコードで固有の数字になるようなidのような列を設けて、更新の際はそこを条件にすることが多いです。

上記の例ではproduct_id部分がそれにあたります。

DELETE(削除)

最後に覚えるのがDELETE(削除)です。早速ですがproduct_idが1の商品を削除する場合のSQL文は以下になります。

DELETE FROM product WHERE product_id = 1;

ここでもWHERE句で必ず条件設定をすることに最大限の注意を払ってください。もしWHERE句を設定せずにDELETEを実行すれば全データ削除という恐ろしい結果になります。

削除はこのように恐ろしいので、無効区分というようなカラムをテーブルに追加し、そこを1に変更することで無効とする論理削除という方法もあります。

この場合は商品選択の際に向こう区分が0のものという条件を加えてあげれば、あたかも商品リストからは消えたように見えるというわけです。

ただし論理削除はデータが残り続けるので、何十万行・何百万行になるようなデータではDELETEを行いデータをスリムに保つことが大事になる場合もあります。

ちなみにDELETEで実際にデータ自体を削除してしまうことは倫理削除に対し物理削除となります。

まとめ

基本として上記の4つをまず覚えれば、基本的なことは実現可能になるかと思います。

ただしフレームワークを使って開発する場合、上記のようにSQLを直書きするようなことはほぼありません。

変わりにフレームワークによって「SELECTはこういう書き方」というのが決まっているので、それに合わせてコードを書いていけばOKです。

上記の基本を知らずにいきなりそれを使うのはわけがわからなくなってしまうと思うので、知識として知っておくのは必須ですね。

phpMyAdminの利用

データベースやテーブルの管理、SQL文実行テストなどすべてブラウザ上で完結できるものとしてphpMyAdminがあります。

もし開発マシンにXAMPPやMANPといったものを入れていればphpMyAdminも最初から入っているかと思います。

ブラウザ上から簡単に操作出来て便利ですし、そもそもこのSQL文で臨む結果が返ってくるかのテストなどもブラウザで先にできるので便利です。

本番環境でそのようなものを公開することはできませんが、自分の開発環境では問題ありませんのでガンガン活用していきましょう。