達⼈人に学ぶSQL徹底指南書
勉勉強会 #0
⽬目次
• SQLとは
• CREATE DATABASE
• SQL DATA TYPE
• CREATE TABLE
• INSERT INTO
• SELECT
• WHERE
• UPDATE
⽬目次 (2)
• ALTER TABLE
• PRIMARY KEY
• FOREIGN KEY
• JOIN
SQLとは
• SQLとはMySQLやPostgresql,SqliteなどのRDBを操作するためのド
メイン固有⾔言語(特定のタスクに特化したコンピューター⾔言語)であ
る。
• SQLを操る事により、DBにしまうデータの構造や型、関連性の定義
などが可能。
• 使うRDBによって多少の⽂文法の違いがあるため注意が必要。
CREATE DATABASE
• DATABASEを操作する前にRDBの中で明示的に仕様するDATABASE
を定義する必要がある。
• 今回はsql_sampleと⾔言うDBを作る。
• CREATE DATABASE sql_sample;
• また、DATABASE内のデータを操作する為には明示的に使うDBを宣
⾔言する必要がある。
• USE sql_sample;
• DATABASEを消す際は DROP DATABASE <DB_NAME>
SQLデータ型
• テーブル構造に定義できるデータ型は以下
• CHAR (SIZE) 固定⻑⾧長⽂文字型、SIZEに指定した⻑⾧長さの固定⻑⾧長サイズの
⽂文字列列を保存できる。
• VARCHAR(SIZE) 可変⻑⾧長⽂文字型、SIZEに指定した⻑⾧長さの可変⻑⾧長サイズ
の⽂文字列列を保存できる。
• TINYTEXT 最⼤大255⽂文字のデータを保存できる⽂文字列列型
• TEXT 最⼤大65535byteの⽂文字列列を保存できる⽂文字列列型
• BLOB 最⼤大65535byteのバイナリデータを保存できる型
SQLデータ型 (2)
• MEDIUMTEXT 最⼤大16,777,215⽂文字を保存できる⽂文字列列型
• MEDIUMBLOB 最⼤大16,777,215byte保存できるバイナリデータ型
• LONGTEXT 最⼤大4,294,967,295⽂文字保存できる⽂文字列列型
• LONGBLOB 最⼤大4,294,967,295⽂文字保存できるバイナリデータ型
• 書ききれないほどあるので詳しくは https://www.w3schools.com/
sql/sql_datatypes.asp を参照
•
CREATE TABLE⽂文(テーブルを作成する)
• CREATE⽂文はDB内にテーブルを作成し、テーブル構造を定義する事
ができる。
• CREATE⽂文でテーブルを作成していない場合、データの挿⼊入や検索が
できない。
• ⽂文法
• CREATE TABLE <TABLE_NAME>

(field_name field_type, field2_name, field_type);
• 今回は次のような構造のテーブルを定義する。
CREATE TABLE⽂文(テーブルを作成する)
CREATE TABLE⽂文(テーブルを作成する)
• 実際にやってみよう
• https://github.com/yasuno0327/LearnSQL からリポジトリをclone
• cloneしたリポジトリに移動してdocker-compose up
• mysql -u root -p でmysqlに⼊入る => 設定してあるパスワードは
password
• それぞれコマンドを実⾏行行。
INSERT INTO⽂文
• INSERT⽂文はDBのtable構造の中に実際にデータを挿⼊入する際に使う。
• ⽂文法
• INSERT INTO <TABLE_NAME> (field_name1, field_name2)

VALUES (value01, value02),(value11, value12);
• field_nameにはtableのfield名を⼊入れ, valueにはそのfieldに⼊入れたい値を⼊入れ
る
• そうするとDBに値を保存する事ができる。
• articlesのtitleとbodyに何か⼊入れてみてください。
SELECT ⽂文
• SELECT⽂文は⽂文字通りDBのデータを選ぶSQL⽂文
• SELECTを使うとDBから⾒見見たいデータを取ってきてくれる
• ⽂文法
• SELECT <FIELD_NAME> FROM <TABLE_NAME>;

SELECT <FIELD_NAME1>, <FIELD_NAME2> FROM <TABLE_NAME>;

SELECT * FROM <TABLE_NAME>;
• articlesからinsertしたtitleとbodyのデータ、全てのデータを取ってきて
みよう。
WHERE ⽂文
• WHEREはSELECTの後につけて検索条件を指定する事ができる。
• WHEREをつける事により、idが2のものを取ってくる、5以上のものを取ってくるな
どの複雑な検索を実現する事ができる。
• ⽂文法

SELECT <FIELD_NAME> FROM <TABLE_NAME> WHERE <CONDITION>;
• conditionには検索条件が⼊入ります
• 例例 SELECT title FROM articles WHERE id > 2; (articles.idが2より⼤大きい
articles.titleを取ってくる)
• title = “前回INSERTしたtitle” となるarticlesの全カラムを取ってきてみよう
UPDATE ⽂文
• INSERTしたデータを修正するためのSQL⽂文。
• ⽂文法

UPDATE <TABLE_NAME> SET <FIELD_NAME> = <NEW_VALUE>

WHERE <CONDITION>;
• WHEREを使ってある条件のarticles.titleを変更更してみよう。
ALTER TABLE ⽂文
• ALTER TABLEは作成したテーブルのデータ構造を変更更したい場合に使う。
• ⽂文法

ALTER TABLE <TABLE_NAME> <COMMAND> <COMMAND_SYNTAX>;
• コマンドにはフィールド追加のADD, フィールド名変更更のCHANGE,

フィールド型変更更のMODIFYがある。
• 詳しい紹介は時間の都合で割愛。

https://www.1keydata.com/jp/sql/sql-alter-table.php

(ここ⾒見見るとええで)
PRIMARY KEY
• いわゆる主キー、データを個別に判別するために使うキーフィール
ド
• PRIMARY KEYは重複してはいけない要素なのでこれを使って個別の
値を取ってくることができる。
• 追加⽅方法はTABLE作成の際に

CREATE TABLE articles 

(id int, title varchar(255), PRIMARY KEY(id)); のようにする
• TABLEを修正して追加する際は

ALTER TABLE articles ADD PRIMARY KEY(id);
FOREIGN KEY
• いわゆる外部キー、外部のテーブルとの関連付けのために⽤用いる

(Railsだとhas_manyとかhas_oneとか)
• FOREIGN KEYによって外部のテーブルの主キーを持ち、関連するデータの情
報を記憶し、SELECTの際に同時に取ってくる事が可能になる。
• 追加⽅方法はTABLE作成の際に

CREATE TABLE articles (

id int, title varchar(255),

FOREIGN KEY(user_id) REFERENCES users.id;

);

のようにする
• TABLEを修正して追加する際は

ALTER TABLE articles ADD FOREIGN KEY(user_id) REFERENCES users(id);
JOIN ⽂文
• テーブルを結合させます。
• WHEREで検索する際に関連性のあるテーブルから情報を取ってくるのはJOINで結
合してからでないと出来ません。デフォルトでは内部結合(結合条件にnilがある値は
無視される)されます。

外部結合は指定された側のtableを基準に相⼿手⽅方の値がnilであっても取ってきます。
• ⽂文法 (内部結合) JOINはINNER JOINでもOK、INNERを明示したほうが良い

SELECT <FIELD_NAME> FROM <TABLE_NAME>

JOIN <TABLE_NAME> ON <CONDITION>
• 実際にuserとarticleテーブルを結合させてuserと関連するarticleを取ってきてみよ
う。
最後に
• 達⼈人に学ぶSQL徹底指南書勉勉強会 #0お疲れ様でした。
• 次回からは実際に本を読みながら勧めていくので本を持ってきても
らうのが望ましいです。
• ⼀一応資料料は⽤用意しようと思いますが忙しかったら資料料なし本ベース
で進めるかもしれないのであしからず….

• 良いSQL ライフを送りましょう…!!

達人に学ぶSQL徹底指南書 第2版勉強会 #0