はじめに
以前「スッキリわかるSQL入門」を読んだので、振り返りも兼ねてSQLの基本である4大命令についてまとめました。
以下のURLからdokoQLにアクセスすると、実際に操作しながら学べるので、ぜひ試してみてください。
読者ターゲット
こんな方におすすめです。
- SQLを触り始めたばかりの人
- SQLの基本を復習したい人
- 「スッキリわかるSQL入門」に興味のある人
SQLの4大命令
SQLとは、データベースを操作するための専用の言葉である。
データベースの中のデータを操作するには、データベース管理システム(DBMS)と呼ばれるプログラムに対して、SQLで書かれた命令文(SQL文)を送信する必要がある。
では、どのようなSQL文を送信すればいいのだろうか。
SQL文にはいくつかの種類が存在する。
しかし、実際にはほとんどのデータ操作は、SELECT、UPDATE、DELETE、INSERT のたった4つの命令で実現できてしまうのだ。
この記事では、これらの4つの命令について紹介しよう。
SELECT 文
データベースとデータのやり取りをするにあたって、最も頻繁に使われる命令が SELECT 文である。
SELECT 文は、テーブルから目的のデータを取得するための命令である。
-- SELECT文の基本構文
SELECT 列名1, 列名2, ...
FROM テーブル名
(WHERE修飾)
(その他の修飾)
SELECT の後ろに取得したい列の名前を、FROM 句の後ろに取得するデータが格納されているテーブルを指定することで、目的のデータを取得することができる。
なお、列名を記述する代わりに、アスタリスク(*)を記述すれば、すべての列を指定するのと同様の効果が得られる。
また、必要に応じて、WHERE による修飾やその他の修飾を続けて記述することで、さまざまな検索条件を指定することができる。
それでは、実際に使ってみよう。
今回は、dokoQLのデータベースにあらかじめ準備されている以下のような家計簿テーブルを使用する。
| 日付 | 費目 | メモ | 入金額 | 出金額 |
|---|---|---|---|---|
| 2024-02-03 | 食費 | コーヒーを購入 | 0 | 380 |
| 2024-02-10 | 給料 | 1月の給料 | 280000 | 0 |
| 2024-02-11 | 教養娯楽費 | 書籍を購入 | 0 | 2800 |
| 2024-02-14 | 交際費 | 同期会の会費 | 0 | 5000 |
| 2024-02-18 | 水道光熱費 | 1月の電気代 | 0 | 7560 |
はじめに、次のSQL文を実行して、家計簿テーブルのうち、日付と出金額の列だけを抽出してみよう。
SELECT 日付, 出金額
FROM 家計簿
このように、日付と出金額の列だけが表示されるはずだ。
| 日付 | 出金額 |
|---|---|
| 2024-02-03 | 380 |
| 2024-02-10 | 0 |
| 2024-02-11 | 2800 |
| 2024-02-14 | 5000 |
| 2024-02-18 | 7560 |
では、2月3日の出金額のみを知りたかったら、どうすればいいだろうか。
簡単なことだ。
先ほどの命令に検索条件を追加すればいいのだ。
SELECT 日付, 出金額
FROM 家計簿
WHERE 日付 = '2024-02-03'
ぜひ一度試してみて、次のような結果になるかを確認してみよう。
| 日付 | 出金額 |
|---|---|
| 2024-02-03 | 380 |
UPDATE 文
UPDATE 文は、すでにテーブルに存在するデータを書き換えるための命令である。
-- UPDATE文の基本構文
UPDATE テーブル名
SET 列名1 = 値1, 列名2 = 値2, ...
(WHERE修飾)
UPDATE の後ろに更新したいデータが存在するテーブル名を、SET 句の後ろに更新したい列名と、その列に書き込むデータをイコール記号(=)で対応させて記述することで、データを書き換えることができる。
WHERE で対象行を指定しないと、UPDATE 文と DELETE 文はすべての行を書き換えてしまうので、注意が必要だ。
試しに2月10日の給料を30万円に書き換えてみよう。
UPDATE 家計簿
SET 入金額 = 300000
WHERE 日付 = '2024-02-10'
次のような結果になればOKだ。
もし時間に余裕があれば、SET 句の後ろに複数の更新したい列名を記述してみよう。
| 日付 | 費目 | メモ | 入金額 | 出金額 |
|---|---|---|---|---|
| 2024-02-03 | 食費 | コーヒーを購入 | 0 | 380 |
| 2024-02-10 | 給料 | 1月の給料 | 300000 | 0 |
| 2024-02-11 | 教養娯楽費 | 書籍を購入 | 0 | 2800 |
| 2024-02-14 | 交際費 | 同期会の会費 | 0 | 5000 |
| 2024-02-18 | 水道光熱費 | 1月の電気代 | 0 | 7560 |
DELETE 文
DELETE 文は、すでにテーブルに存在する行を削除するための命令である。
既存のデータに対する操作という点では、これまでに登場した SELECT 文や UPDATE 文と同じだが、行をまるごと削除する機能であるため、特定の列だけを指定することはできない。
-- DELETE文の基本構文
DELETE
FROM テーブル名
(WHERE修飾)
FROM 句の後ろにテーブル名を指定することで、行を削除することができる。
さっそく2月3日のデータを削除してみよう。
DELETE
FROM 家計簿
WHERE 日付 = '2024-02-03'
2月3日のデータが削除されて、レコード数は4件になっているはずだ。
UPDATE 文と DELETE 文は、WHERE で対象行を指定しなくても、実行することができる。
しかし、実務においては、WHERE なしで使用することはないので、本能的に実行をためらう感覚を身に付けよう。
| 日付 | 費目 | メモ | 入金額 | 出金額 |
|---|---|---|---|---|
| 2024-02-10 | 給料 | 1月の給料 | 300000 | 0 |
| 2024-02-11 | 教養娯楽費 | 書籍を購入 | 0 | 2800 |
| 2024-02-14 | 交際費 | 同期会の会費 | 0 | 5000 |
| 2024-02-18 | 水道光熱費 | 1月の電気代 | 0 | 7560 |
INSERT 文
INSERT 文は、テーブルに新しいデータを1行だけ追加する命令である。
これまでに紹介した3つの命令とは少し異なった形をしているので、注意深く見てみよう。
-- INSERT文の基本構文
INSERT INTO テーブル名
(列名1, 列名2, ...)
VALUES (値1, 値2, ...)
INTO の後ろにデータを追加するテーブル名と列名を、VALUES 句の後ろに2行目に記述した列名に対応するデータの値を指定することで、データを1行だけ追加することができる。
ただし、テーブルのすべての列に値を指定する場合には、2行目をまるごと省略可能である。
じゃあ、思い切って100万円を2月の給料として入金してみよう。
INSERT INTO 家計簿
VALUES ('2024-03-10', '給料', '2月の給料', 1000000, 0)
次のような結果になれば大成功だ。
100万円獲得おめでとう。
| 日付 | 費目 | メモ | 入金額 | 出金額 |
|---|---|---|---|---|
| 2024-02-10 | 給料 | 1月の給料 | 300000 | 0 |
| 2024-02-11 | 教養娯楽費 | 書籍を購入 | 0 | 2800 |
| 2024-02-14 | 交際費 | 同期会の会費 | 0 | 5000 |
| 2024-02-18 | 水道光熱費 | 1月の電気代 | 0 | 7560 |
| 2024-03-10 | 給料 | 2月の給料 | 1000000 | 0 |
おわりに
今回は、SQLの基本である4大命令について紹介しました。
これらの命令はSQL文の中でも特によく使われるので、ぜひ何度も使って慣れてください。