はじめに
これからSQLを触る人向けに、SQLの基礎をまとめていくよ。今回記載する内容は、
- テーブルの作成
- SQLの基礎(SELECT、JOIN、UNION、UPDATE、DELETEなど)
この辺りを中心にまとめていくよ。
SQL基礎
今回利用するテーブルは以下の3つだよ。
student1
| id | name | club_id |
|---|---|---|
student2
| id | name | club_id |
|---|---|---|
club
| id | club_name |
|---|---|
テーブル作成
テーブルを作成するには、CREATE TABLEを使うよ。
CREATE TABLE テーブル名 (列名1 データ型, 列名2 データ型, 列名3 データ型, ……);
実際に使ってみるよ。上記の3つのテーブルは以下のSQLで作成するよ。
CREATE TABLE student1 (id int, name varchar(255), club_id int);
CREATE TABLE student2 (id int, name varchar(255), club_id int);
CREATE TABLE club (id int, club_name varchar(255));
データ投入
さっき作ったテーブルにデータを投入していくよ。データ投入にはINSERT INTOを使うよ。列名を指定する場合(カラムの順番関係なく、特定のカラムにデータを投入したい場合)はテーブル名の後に列名を指定するよ。
INSERT INTO テーブル名 (列名1, 列名2, ……) VALUES (値1, 値2, ……);
では実際にコードを書くよ。ここではstudent1、student2、clubテーブルを作成するよ。student1、student2テーブルは列名を指定して、clubテーブルは列名を指定せずデータを投入するよ。
INSERT INTO student1 (id, name, club_id)
VALUES (1, 'Qiita Taro', 1), (2, 'Qiita Jiro', 2), (3, 'Qiita Saburo', 1);
INSERT INTO student2 (id, club_id, name)
VALUES (1, 3, 'Qiita Shiro'), (2, 2, 'Qiita Goro');
INSERT INTO club
VALUES (1, 'baseball'), (2, 'soccer'), (3, 'tennis');
そうするとこんな感じにデータが投入されているよ。
student1
| id | name | club_id |
|---|---|---|
| 1 | Qiita Taro | 1 |
| 2 | Qiita Jiro | 2 |
| 3 | Qiita Saburo | 1 |
student2
| id | name | club_id |
|---|---|---|
| 1 | Qiita Shiro | 3 |
| 2 | Qiita Goro | 2 |
club
| id | club_name |
|---|---|
| 1 | baseball |
| 2 | soccer |
| 3 | tennis |
データ取得
先ほどデータを投入したテーブルからデータを取得するよ。データの取得にはSELECTを使うよ。
SELECT 取得したい列名(全て取得したい場合は*) FROM テーブル名;
では実際に使っていくよ。今回はstudent1テーブルからidとnameを取得するよ。
SELECT id,name FROM student1;
取得結果はこうだよ。
| id | name |
|---|---|
| 1 | Qiita Taro |
| 2 | Qiita Jiro |
| 3 | Qiita Saburo |
また、id=1のデータだけ取得したい場合はWHEREを使うよ。
SELECT 取得したい列名(全て取得したい場合は*) FROM テーブル名 WHERE 条件式;
実際に使ってみるよ。今回はWHEREでid=1を指定してデータを取得するよ。
SELECT * FROM student1 WHERE id = 1;
取得結果はこんな感じ。
| id | name | club_id |
|---|---|---|
| 1 | Qiita Taro | 1 |
テーブル結合
次にstudent1とclubテーブルを結合して、student1からidとnameを、clubテーブルからclub_nameを取得するよ。テーブル結合はJOINを使うよ。JOINにはいろいろ種類があるけど、ここではよく使われるINNER JOINを使うよ。
SELECT テーブル名.列名, テーブル名.列名 ... FROM テーブル名1 INNER JOIN テーブル名2 ON 条件式;
実際に使っていくよ。
SELECT student1.id, student1.name, club.club_name
FROM student1
INNER JOIN club ON student1.club_id = club.id;
取得結果はこんな感じ。
| id | name | club_name |
|---|---|---|
| 1 | Qiita Taro | baseball |
| 2 | Qiita Jiro | soccer |
| 3 | Qiita Saburo | baseball |
データ更新
データの更新にはUPDATEを用いるよ。
UPDATE テーブル名 SET 列名=値 WHERE 条件;
ここでは、student1テーブルのQiita Saburoが野球部からサッカー部に転部したとするよ。そして、部活動が変更出来たかをSELECT文で確認するよ。
// データ更新
UPDATE student1 SET club_id = 2 WHERE id = 3;
// データ確認
SELECT student1.id, student2.name, club.club_nam
FROM student1
INNER JOIN club ON student1.club_id = club.id;
取得結果はこんな感じ。
| id | name | club_name |
|---|---|---|
| 1 | Qiita Taro | baseball |
| 2 | Qiita Jiro | soccer |
| 3 | Qiita Saburo | soccer |
取得データの結合
UNIONは複数のテーブルから得たデータを結合することができるよ。
UNION ALLとUNIONがあるけど、構文は基本的に同じでだよ。
違いは、
-
UNION:重複した行を除いて表示 -
UNION ALL:重複した行もすべて表示 - だよ。
構文は次の通り。
SELECT 列名 FROM テーブル名1 UNION SELECT 列名 FROM テーブル名2;
今回はテーブルstudent1とstudent2のテーブルからサッカー部のメンバーを取得し結合するよ。
SELECT student1.name, club.club_name
FROM student1
INNER JOIN club ON student1.club_id = club.id
WHERE student1.club_id = 2
UNION
SELECT student2.name, club.club_name
FROM student2
INNER JOIN club ON student2.club_id = club.id
WHERE student2.club_id = 2
取得結果はこんな感じ。
| name | club_name |
|---|---|
| Qiita Jiro | soccer |
| Qiita Saburo | soccer |
| Qiita Goro | soccer |
データ削除
最後に、データの削除はDELETEを使うよ。DELETEはWHERE句を書かないと、テーブルの全レコードが削除されてしまうので注意が必要だよ。
DELETE FROM テーブル名 WHERE 条件;
今回はstudent1テーブルからQiita Saburoを削除するよ。
// データ削除
DELETE FROM student1 WHERE id = 3;
// データ確認
SELECT * FROM student1;
| id | name | club_id |
|---|---|---|
| 1 | Qiita Taro | 1 |
| 2 | Qiita Jiro | 2 |
このようにしっかりデータが削除されたことがわかるね。
ちなみに、WHERE句を指定しないと、以下のようにデータがすべて消えるよ(テーブルは削除されない。テーブルごと削除したい場合はDROP TABLE テーブル名)。
| id | name | club_id |
|---|---|---|
まとめ
SQLの基本的な操作をまとめたよ。これである程度はSQLを使うことができるよ。
まだまだSQLを自在に使いこなすのは難しい、、、。