はじめに
これから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を自在に使いこなすのは難しい、、、。