SQLは、データベースに対してデータの追加、取得、更新、削除を行うための言語です。
Webアプリケーションでは、ユーザー情報、投稿内容、商品情報、ログイン情報などをデータベースに保存することが多いです。
PHPやNode.jsでサーバーサイドを学ぶなら、SQLの基本も知っておく必要があります。
この記事では、SQL初心者向けに、データベースの考え方、テーブル、カラム、レコード、そして基本的なSQL文を解説します。
SQLとは
SQLは、データベースを操作するための言語です。
たとえば、次のようなことができます。
- データを登録する
- データを検索する
- データを更新する
- データを削除する
- 条件に合うデータだけを取り出す
- 複数のテーブルを組み合わせて表示する
Webアプリケーションでは、画面に表示する情報をデータベースから取得することがよくあります。
たとえば、ブログの記事一覧、会員情報、商品一覧、投稿コメントなどです。
SQLを使うと、こうしたデータをデータベースから取り出したり、保存したりできます。
データベースとは
データベースとは、データを整理して保存するための仕組みです。
たとえば、会員登録機能があるWebサイトでは、ユーザーの名前、メールアドレス、パスワードなどを保存する必要があります。
そのような情報を保存する場所がデータベースです。
よく使われるデータベースには、次のようなものがあります。
- MySQL
- PostgreSQL
- SQLite
- MariaDB
SQLは、これらのデータベースを操作するときに使われます。
ただし、データベースの種類によって、細かい書き方が少し違う場合があります。
初心者のうちは、まず基本のSQL文を覚えれば大丈夫です。
テーブル・カラム・レコード
データベースでは、データをテーブルという形で管理します。
テーブルは、表のようなものです。
たとえば、ユーザー情報を保存するusersテーブルを考えます。
| id | name | age | |
|---|---|---|---|
| 1 | 山田太郎 | taro@example.com | 25 |
| 2 | 佐藤花子 | hanako@example.com | 30 |
この表では、id、name、email、ageがカラムです。
カラムは、データの項目です。
1行分のデータは、レコードと呼ばれます。
上の例では、山田太郎さんの情報が1つのレコードです。
| 用語 | 意味 |
|---|---|
| テーブル | データを保存する表 |
| カラム | 表の項目 |
| レコード | 表の1行分のデータ |
| 主キー | レコードを識別するための値 |
idは、レコードを識別するために使われることが多いです。
このような識別用の値を、主キーと呼びます。
SQLでよく使う命令
SQLで最初に覚えたい命令は、次の4つです。
| 命令 | 内容 |
|---|---|
SELECT | データを取得する |
INSERT | データを追加する |
UPDATE | データを更新する |
DELETE | データを削除する |
Webアプリケーションでは、この4つをよく使います。
たとえば、ブログ記事一覧を表示するときはSELECTを使います。
新しい投稿を保存するときはINSERTを使います。
投稿内容を編集するときはUPDATEを使います。
投稿を削除するときはDELETEを使います。
SELECTでデータを取得する
SELECTは、データベースからデータを取得する命令です。
たとえば、usersテーブルのすべてのデータを取得する場合は、次のように書きます。
SELECT * FROM users;
*は、すべてのカラムを取得するという意味です。
特定のカラムだけを取得したい場合は、カラム名を指定します。
SELECT name, email FROM users;
このSQLでは、usersテーブルからnameとemailだけを取得します。
まずは、SELECTがデータを取り出すための命令だと覚えておきます。
WHEREで条件を指定する
WHEREを使うと、条件に合うデータだけを取得できます。
たとえば、idが1のユーザーだけを取得する場合は、次のように書きます。
SELECT * FROM users WHERE id = 1;
年齢が20歳以上のユーザーを取得する場合は、次のように書きます。
SELECT * FROM users WHERE age >= 20;
名前が山田太郎のユーザーを取得する場合は、文字列をシングルクォートで囲みます。
SELECT * FROM users WHERE name = '山田太郎';
WHEREは、SELECTだけでなく、UPDATEやDELETEでもよく使います。
条件を間違えると、意図しないデータを更新・削除してしまうことがあるため注意が必要です。
ORDER BYで並び替える
ORDER BYを使うと、取得したデータを並び替えられます。
たとえば、年齢が若い順に並べる場合は、次のように書きます。
SELECT * FROM users ORDER BY age ASC;
ASCは昇順です。
小さい値から大きい値へ並びます。
年齢が高い順に並べる場合は、DESCを使います。
SELECT * FROM users ORDER BY age DESC;
DESCは降順です。
大きい値から小さい値へ並びます。
ブログ記事なら、新しい順に表示するためにcreated_at DESCのような指定を使うことがあります。
INSERTでデータを追加する
INSERTは、テーブルに新しいデータを追加する命令です。
たとえば、usersテーブルに新しいユーザーを追加する場合は、次のように書きます。
INSERT INTO users (name, email, age)
VALUES ('鈴木一郎', 'ichiro@example.com', 28);
INSERT INTO usersで、どのテーブルに追加するかを指定しています。
(name, email, age)で、どのカラムに値を入れるかを指定しています。
VALUESの中に、実際に追加する値を書きます。
文字列はシングルクォートで囲みます。
数値はそのまま書けます。
UPDATEでデータを更新する
UPDATEは、すでにあるデータを更新する命令です。
たとえば、idが1のユーザーの年齢を26に変更する場合は、次のように書きます。
UPDATE users
SET age = 26
WHERE id = 1;
UPDATE usersで、更新するテーブルを指定します。
SET age = 26で、変更する内容を指定します。
WHERE id = 1で、どのレコードを更新するかを指定します。
UPDATEでは、WHEREを書き忘れないように注意します。
WHEREを書かないと、テーブル内のすべてのレコードが更新対象になる場合があります。
UPDATE users
SET age = 26;
このように書くと、全ユーザーの年齢が26に変わってしまう可能性があります。
更新するときは、必ずどのデータを更新するのか確認してから実行します。
DELETEでデータを削除する
DELETEは、データを削除する命令です。
たとえば、idが1のユーザーを削除する場合は、次のように書きます。
DELETE FROM users
WHERE id = 1;
DELETE FROM usersで、どのテーブルから削除するかを指定します。
WHERE id = 1で、どのレコードを削除するかを指定します。
DELETEでも、WHEREを書き忘れないように注意します。
DELETE FROM users;
このように書くと、usersテーブルのデータをすべて削除してしまう可能性があります。
初心者のうちは、UPDATEとDELETEを実行する前に、同じ条件でSELECTして対象データを確認すると安全です。
SELECT * FROM users WHERE id = 1;
対象が合っていることを確認してから、UPDATEやDELETEを実行します。
LIKEであいまい検索する
LIKEを使うと、文字列の一部が一致するデータを検索できます。
たとえば、名前に「山田」を含むユーザーを検索する場合は、次のように書きます。
SELECT * FROM users WHERE name LIKE '%山田%';
%は、任意の文字列を表します。
よく使う書き方は次の通りです。
| 書き方 | 意味 |
|---|---|
'山田%' | 山田で始まる |
'%山田' | 山田で終わる |
'%山田%' | 山田を含む |
検索フォームを作るときに、LIKEを使うことがあります。
COUNTで件数を数える
COUNTを使うと、データの件数を数えられます。
たとえば、usersテーブルの件数を数える場合は、次のように書きます。
SELECT COUNT(*) FROM users;
条件をつけて数えることもできます。
SELECT COUNT(*) FROM users WHERE age >= 20;
このSQLでは、20歳以上のユーザー数を取得します。
会員数、投稿数、検索結果の件数などを表示するときに使います。
SQLを書くときの注意点
SQLを書くときは、いくつか注意点があります。
- 文字列はシングルクォートで囲む
- テーブル名とカラム名を間違えない
UPDATEとDELETEではWHEREを書き忘れない- 実行前に
SELECTで対象データを確認する - ユーザー入力をSQLに直接つなげない
特に重要なのは、ユーザー入力をSQLに直接つなげないことです。
フォームから送られた値をそのままSQLに入れると、SQLインジェクションというセキュリティ上の問題につながる可能性があります。
PHPでデータベースを扱う場合は、PDOのプリペアドステートメントなどを使って安全に処理します。
SQLの基本文を覚えることと、安全に実行することは別の話として考えます。
SQLの基本文まとめ
この記事で扱ったSQLをまとめます。
| 目的 | SQL |
|---|---|
| すべて取得 | SELECT * FROM users; |
| 一部のカラムを取得 | SELECT name, email FROM users; |
| 条件を指定して取得 | SELECT * FROM users WHERE id = 1; |
| 並び替え | SELECT * FROM users ORDER BY age DESC; |
| 追加 | INSERT INTO users (name, email, age) VALUES ('鈴木一郎', 'ichiro@example.com', 28); |
| 更新 | UPDATE users SET age = 26 WHERE id = 1; |
| 削除 | DELETE FROM users WHERE id = 1; |
| あいまい検索 | SELECT * FROM users WHERE name LIKE '%山田%'; |
| 件数取得 | SELECT COUNT(*) FROM users; |
まとめ
SQLは、データベースを操作するための言語です。
Webアプリケーションでは、ユーザー情報、投稿内容、商品情報、コメント、ログイン情報などをデータベースに保存します。
そのデータを追加、取得、更新、削除するときにSQLを使います。
初心者が最初に覚えたいSQLは、次の4つです。
SELECT:データを取得するINSERT:データを追加するUPDATE:データを更新するDELETE:データを削除する
また、条件を指定するWHERE、並び替えるORDER BY、件数を数えるCOUNTもよく使います。
UPDATEやDELETEでは、WHEREを書き忘れないように注意してください。
SQLの基本を理解すると、PHPやNode.jsでデータベースを使うWebアプリケーションを作りやすくなります。
まずは、SELECTでデータを取得するところから練習し、少しずつINSERT、UPDATE、DELETEへ進めていきましょう。

