はじめに
SQLはデータベースを操作するためのプログラムです。
プログラムをどのように分解するかは賛否あると思いますが、
ここでは以下の4つに分類して基本の構文をまとめます。
- 処理内容:検索/更新/挿入/削除のいずれの処理をおこなうか
- 対象テーブル:処理対象のテーブルと、テーブル間の関係
- 絞り込み条件:対象レコードをどのように絞り込むか
- 表示条件・計算など:定義された関数での計算や表示順など
このページでは処理内容の基本構文をまとめます。
処理内容には「検索」「挿入」「更新」「削除」の4つがあります。
例として、年別の会員名簿(こんなデータの持ち方イケてないですけど)とステータスの区分を表す
合計3テーブルが存在するとして、各SQLの動きを解説します。
1年目会員名簿(MEMBER_LIST_1ST)
ID | FAMIRY_NAME | FIRST_NAME | BIRTH_DAY | GENDER | STATUS_ID | NOTE |
---|---|---|---|---|---|---|
0001 | 鈴木 | 太郎 | 1980/10/25 | M | 1 | |
0002 | 山田 | 太郎 | 1981/3/1 | M | 1 | |
0003 | 佐藤 | 長次郎 | 1980/4/2 | M | 1 | |
0004 | 鈴木 | 定子 | 1980/8/2 | F | 1 |
2年目会員名簿(MEMBER_LIST_2ND)
ID | FAMIRY_NAME | FIRST_NAME | BIRTH_DAY | GENDER | STATUS_ID | NOTE |
---|---|---|---|---|---|---|
0001 | 鈴木 | 太郎 | 1980/10/25 | M | 1 | |
0002 | 山田 | 太郎 | 1981/3/1 | M | 2 | |
0003 | 佐藤 | 長次郎 | 1980/4/2 | M | 1 | |
0004 | 鈴木 | 定子 | 1980/8/2 | F | 1 | |
0005 | 鈴本 | 花子 | 1980/12/14 | F | 1 |
ステータス区分(STATUS_DIV)
STATUS_ID | STATUS_TEXT |
---|---|
1 | 正規会員 |
2 | 退会 |
検索(SELECT)
SELECT
SELECT * FROM STATUS_DIV
ステータス区分テーブルに存在するすべてのデータが取得できます
STATUS_ID | STATUS_TEXT |
---|---|
1 | 正規会員 |
2 | 退会 |
挿入(INSERT INTO)
insert_set_values
INSERT INTO STATUS_DIV(STATUS_ID, STATUS_TEXT) VALUES (3, '休止')
ステータス区分テーブルにレコードが一つ追加されます
STATUS_ID | STATUS_TEXT |
---|---|
1 | 正規会員 |
2 | 退会 |
3 | 休止 |
insert_from_table
INSERT INTO MEMBER_LIST_1ST select * FROM MEMBER_LIST_2ND WHERE ID = '0005"
1年目会員名簿に、2年目会員名簿でIDが'0005'のレコードが追加されます
ID | FAMIRY_NAME | FIRST_NAME | BIRTH_DAY | GENDER | STATUS_ID | NOTE |
---|---|---|---|---|---|---|
0001 | 鈴木 | 太郎 | 1980/10/25 | M | 1 | |
0002 | 山田 | 太郎 | 1981/3/1 | M | 1 | |
0003 | 佐藤 | 長次郎 | 1980/4/2 | M | 1 | |
0004 | 鈴木 | 定子 | 1980/8/2 | F | 1 | |
0005 | 鈴本 | 花子 | 1980/12/14 | F | 1 |
更新(UPDATE)
update
UPDATE MEMBER_LIST_2ND SET STATUS_ID = '2' WHERE ID = '0001'
2年目会員名簿でIDが'0001'のレコードSTATUS_IDが更新されます
ID | FAMIRY_NAME | FIRST_NAME | BIRTH_DAY | GENDER | STATUS_ID | NOTE |
---|---|---|---|---|---|---|
0001 | 鈴木 | 太郎 | 1980/10/25 | M | 2 | |
0002 | 山田 | 太郎 | 1981/3/1 | M | 2 | |
0003 | 佐藤 | 長次郎 | 1980/4/2 | M | 1 | |
0004 | 鈴木 | 定子 | 1980/8/2 | F | 1 | |
0005 | 鈴本 | 花子 | 1980/12/14 | F | 1 |
削除(DELETE)
delete
DELETE FROM MEMBER_LIST_2ND WHERE ID = '0002'
2年目会員名簿でIDが'0002'のレコードが削除されます。
ID | FAMIRY_NAME | FIRST_NAME | BIRTH_DAY | GENDER | STATUS_ID | NOTE |
---|---|---|---|---|---|---|
0001 | 鈴木 | 太郎 | 1980/10/25 | M | 2 | |
0003 | 佐藤 | 長次郎 | 1980/4/2 | M | 1 | |
0004 | 鈴木 | 定子 | 1980/8/2 | F | 1 | |
0005 | 鈴本 | 花子 | 1980/12/14 | F | 1 |