SlideShare a Scribd company logo
はじめてのSQL文
最速でSQL文をマスターするためのポイント
目的
SQL文を理解することによって、MVCフレームワー
クのモデルが行っている処理を理解する
データベースってなに?
特定のデータの集まり
主な機能
● 検索
● CRUD(クラッド)
○ Create(作成)
○ Read(読み取り)
○ Update(更新)
○ Delete(削除)
TERM
用語
id name age sex birthplace
1 富澤 寛之 28 男性 埼玉県
2 岡藤 美桜 21 女性 群馬県
3 石野 博和 28 男性 愛知県
4 増井 里美 32 女性 千葉県
5 池原 清治 23 男性 兵庫県
TABLE
users テーブル
id name age sex birthplace
1 富澤 寛之 28 男性 埼玉県
2 岡藤 美桜 21 女性 群馬県
3 石野 博和 28 男性 愛知県
4 増井 里美 32 女性 千葉県
5 池原 清治 23 男性 兵庫県
FILED
name フィールド フィールド名
id name age sex birthplace
1 富澤 寛之 28 男性 埼玉県
2 岡藤 美桜 21 女性 群馬県
3 石野 博和 28 男性 愛知県
4 増井 里美 32 女性 千葉県
5 池原 清治 23 男性 兵庫県
RECORD
レコード
SQL文
(MySQL)
SELECT 〜 WHERE [検索]
SELECT `id`, `name` FROM `users`
WHERE `id` = 3;
→
+----+-----------------+
| id | name |
+----+-----------------+
| 3 | 石野 博和 |
+----+-----------------+
フィールド テーブル
検索条件
ORDER BY 〜 DESC/ASC [並び替え]
SELECT `id`, `name’, `age` FROM `users`
ORDER BY `age` ASC;
→
+----+--------------+-----+
| id | name | age |
+----+--------------+-----+
| 5 | 池原 清治 | 23 |
| 1 | 富澤 寛之 | 28 |
| 2 | 岡藤 美桜 | 28 |
| 3 | 石野 博和 | 28 |
| 4 | 増井 里美 | 32 |
+----+--------------+-----+
年齢昇順で並び替え
LIMIT [レコード数/開始レコード位置]
SELECT `id`, `name’ FORM `users`
LIMIT 2, 1;
→
+----+-----------------+
| id | name |
+----+-----------------+
| 3 | 石野 博和 |
+----+-----------------+
2番目のデータから1件取り出す
※ データベース上では0から番号がふ
 られるため2番目のデータはid=3
 のレコードとなる
INSERT [追加]
INSERT INTO `users`
(`name`, `age`, `sex`)
VALUES (“新川 奈保”, 23, “女性”);
→
+----+-------------+------+------+------------+
| id | name | age | sex | birthplace |
+----+-------------+------+------+------------+
| 6 | 新川 奈保 | 23 | 女性 | NULL |
+----+-------------+------+------+------------+
フィールド
値
UPDATE [更新]
UPDATE `users`SET `age` = 38
WHERE `id` = 3;
→
+--+--------------+----+
| id | name | age |
+--+--------------+----+
| 3 | 石野 博和 | 38 |
+--+--------------+----+
ユーザIDが3のユーザの年齢を38歳に更新検索条件
値
DELETE [削除]
DELETE FROM `users`
WHERE id = 3;
ユーザIDが3のレコードを削除
検索条件
CREATE [作成]
CREATE TABLE `hobbies` (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id INT UNSIGNED NOT NULL ,
name VARCHAR(64) NOT NULL ,
PRIMARY KEY (id), INDEX (`user_id`)
);
id user_id name
1 1 バスケット
2 2 サッカー
3 2 ボルダリング
hobbies テーブル
INNER JOIN [内部結合]
SELECT `users`.`id`, `users`.`name`, `hobbies`. `name` FROM `users`
INNER JOIN `hobbies`
ON `users`.`id` =`hobbies`.`user_id`;
→
+----+------------+----------------+
| id | name | name |
+----+------------+----------------+
| 1 | 富澤 寛之 | バスケット |
| 2 | 岡藤 美桜 | サッカー |
| 2 | 岡藤 美桜 | ボルダリング |
+----+------------+----------------+
値が一致するデータだけを結合
id user_id name
1 1 バスケット
2 2 サッカー
3 2 ボルダリング
users テーブル hobbies テーブル
id name age sex birthplace
1 富澤 寛之 28 男性 埼玉県
2 岡藤 美桜 21 女性 群馬県
3 石野 博和 28 男性 愛知県
LEFT JOIN / RIGHT JOIN [外部結合]
SELECT `users`.`id`, `users`.`name`, `hobbies`. `name` FROM `users`
LEFT JOIN `hobbies`
ON `users`.`id` =`hobbies`.`user_id`;
→
+--+----------------+--------------------+
| id | name | name |
+--+----------------+--------------------+
| 1 | 富澤 寛之 | バスケット |
| 2 | 岡藤 美桜 | サッカー |
| 2 | 岡藤 美桜 | ボルダリング |
| 3 | 石野 博和 | NULL |
+---+---------------+--------------------+
左側のテーブルの値に合わせて
右側のテーブルに一致するデータを結合
値がないときはNULLになるのがINNER JOINとの違い
id user_id name
1 1 バスケット
2 2 サッカー
3 2 ボルダリング
users テーブル hobbies テーブル
id name age sex birthplace
1 富澤 寛之 28 男性 埼玉県
2 岡藤 美桜 21 女性 群馬県
3 石野 博和 28 男性 愛知県
課題
課題1 更新
上記のusersテーブルに対して、ユーザ ID 2の出身地を”千葉県”に更新するSQL文を作成しなさい
↓答えはこちらをドラックしてください
UPDATE `users`SET `birthplace` = “千葉県”
WHERE `id` = 2;
users テーブル
id name age sex birthplace
1 富澤 寛之 28 男性 埼玉県
2 岡藤 美桜 21 女性 群馬県
3 石野 博和 28 男性 愛知県
課題2 テーブル作成
左のようなphonesテーブル作成するSQL文を作成しなさい
↓答えはこちらをドラックしてください
CREATE TABLE `task_users`.`phones` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`user_id` INT UNSIGNED NOT NULL ,
`name` VARCHAR(16) NOT NULL ,
PRIMARY KEY (`id`), INDEX (`user_id`)
);
id user_id name
1 1 iPhone7
2 2 iPhone7
3 2 iPhoneSE
phones テーブル
課題3 結合
usersテーブルとphonesテーブルを結合し、下記の値を取得する SQL文を書きなさい
id user_id name
1 1 iPhone7
2 2 iPhone7
3 2 iPhoneSE
users テーブル phones テーブル
id name age sex birthplace
1 富澤 寛之 28 男性 埼玉県
2 岡藤 美桜 21 女性 群馬県
3 石野 博和 28 男性 愛知県
↓答えはこちらをドラックしてください
SELECT
`users`.`id`, `users`.`name`, `phones`. `name`
FROM `users`
LEFT JOIN `phones` ON
 `users`.`id` =`phones`.`user_id`;
→
+----+------------+------------+
| id | name | name |
+----+------------+------------+
| 1 | 富澤 寛之 | iPhone7 |
| 2 | 岡藤 美桜 | iPhone7 |
| 2 | 岡藤 美桜 | iPhoneSE |
| 3 | 山崎 泰正 | NULL |
+----+------------+------------+
Good is good.
We provide opportunities to the world by fusing technology and ideas.
テクノロジーとクリエイティブで世界をより良くする
お問い合わせはこちらから
https://giginc.co.jp/contact/

More Related Content

More from GIG inc.

LT38テーマ2-1
LT38テーマ2-1LT38テーマ2-1
LT38テーマ2-1
GIG inc.
 
LT38テーマ1-2
LT38テーマ1-2LT38テーマ1-2
LT38テーマ1-2
GIG inc.
 
LT38テーマ1-1
LT38テーマ1-1LT38テーマ1-1
LT38テーマ1-1
GIG inc.
 
lt37
lt37lt37
lt37
GIG inc.
 
lt23後半
lt23後半lt23後半
lt23後半
GIG inc.
 
lt23前半
lt23前半lt23前半
lt23前半
GIG inc.
 
LT.22 GitHub Actionsを触ってみた話
LT.22 GitHub Actionsを触ってみた話LT.22 GitHub Actionsを触ってみた話
LT.22 GitHub Actionsを触ってみた話
GIG inc.
 
LT.22 機械学習におけるPDCAを回せる環境構築の話
LT.22 機械学習におけるPDCAを回せる環境構築の話 LT.22 機械学習におけるPDCAを回せる環境構築の話
LT.22 機械学習におけるPDCAを回せる環境構築の話
GIG inc.
 
LT.21 SPIN法を活用した人心掌握術
LT.21 SPIN法を活用した人心掌握術LT.21 SPIN法を活用した人心掌握術
LT.21 SPIN法を活用した人心掌握術
GIG inc.
 
LT.21 スゴいチームになるフィードバック術
LT.21 スゴいチームになるフィードバック術LT.21 スゴいチームになるフィードバック術
LT.21 スゴいチームになるフィードバック術
GIG inc.
 
LT.20 コーディングとマジックナンバー
LT.20 コーディングとマジックナンバーLT.20 コーディングとマジックナンバー
LT.20 コーディングとマジックナンバー
GIG inc.
 
LT.20 Wordpress x nuxt.jsで実現するSPA
LT.20 Wordpress x nuxt.jsで実現するSPALT.20 Wordpress x nuxt.jsで実現するSPA
LT.20 Wordpress x nuxt.jsで実現するSPA
GIG inc.
 
【Tech Trend Talk vol.19】社外向け勉強会「拡張するデザイン -(DONGURI)」
【Tech Trend Talk vol.19】社外向け勉強会「拡張するデザイン -(DONGURI)」【Tech Trend Talk vol.19】社外向け勉強会「拡張するデザイン -(DONGURI)」
【Tech Trend Talk vol.19】社外向け勉強会「拡張するデザイン -(DONGURI)」
GIG inc.
 
【Tech Trend Talk vol.19】社外向け勉強会「拡張するデザイン -(GIG)」
 【Tech Trend Talk vol.19】社外向け勉強会「拡張するデザイン -(GIG)」 【Tech Trend Talk vol.19】社外向け勉強会「拡張するデザイン -(GIG)」
【Tech Trend Talk vol.19】社外向け勉強会「拡張するデザイン -(GIG)」
GIG inc.
 
LT.19 ビジネス環境の変化とカスタマーサクセス
LT.19 ビジネス環境の変化とカスタマーサクセスLT.19 ビジネス環境の変化とカスタマーサクセス
LT.19 ビジネス環境の変化とカスタマーサクセス
GIG inc.
 
LT.19 BigQueryとGoogleスプレッドシートで作る格安BI
LT.19 BigQueryとGoogleスプレッドシートで作る格安BILT.19 BigQueryとGoogleスプレッドシートで作る格安BI
LT.19 BigQueryとGoogleスプレッドシートで作る格安BI
GIG inc.
 
【Tech Trend Talk vol.17】社外向け勉強会「仮に同じ商品を売っても、競合の倍以上売る営業組織の作り方 -(GIG)」
【Tech Trend Talk vol.17】社外向け勉強会「仮に同じ商品を売っても、競合の倍以上売る営業組織の作り方 -(GIG)」【Tech Trend Talk vol.17】社外向け勉強会「仮に同じ商品を売っても、競合の倍以上売る営業組織の作り方 -(GIG)」
【Tech Trend Talk vol.17】社外向け勉強会「仮に同じ商品を売っても、競合の倍以上売る営業組織の作り方 -(GIG)」
GIG inc.
 
【Tech Trend Talk vol.16】社外向け勉強会「国境を超えるクリエイティブのインスピレーション -(GIG)」
【Tech Trend Talk vol.16】社外向け勉強会「国境を超えるクリエイティブのインスピレーション -(GIG)」【Tech Trend Talk vol.16】社外向け勉強会「国境を超えるクリエイティブのインスピレーション -(GIG)」
【Tech Trend Talk vol.16】社外向け勉強会「国境を超えるクリエイティブのインスピレーション -(GIG)」
GIG inc.
 
LT.18 スケジュール遅延をさせないためのディレクション
LT.18 スケジュール遅延をさせないためのディレクションLT.18 スケジュール遅延をさせないためのディレクション
LT.18 スケジュール遅延をさせないためのディレクション
GIG inc.
 
LT.18 フリーランスの「イケてる / イケてない」を科学してみた
LT.18 フリーランスの「イケてる / イケてない」を科学してみたLT.18 フリーランスの「イケてる / イケてない」を科学してみた
LT.18 フリーランスの「イケてる / イケてない」を科学してみた
GIG inc.
 

More from GIG inc. (20)

LT38テーマ2-1
LT38テーマ2-1LT38テーマ2-1
LT38テーマ2-1
 
LT38テーマ1-2
LT38テーマ1-2LT38テーマ1-2
LT38テーマ1-2
 
LT38テーマ1-1
LT38テーマ1-1LT38テーマ1-1
LT38テーマ1-1
 
lt37
lt37lt37
lt37
 
lt23後半
lt23後半lt23後半
lt23後半
 
lt23前半
lt23前半lt23前半
lt23前半
 
LT.22 GitHub Actionsを触ってみた話
LT.22 GitHub Actionsを触ってみた話LT.22 GitHub Actionsを触ってみた話
LT.22 GitHub Actionsを触ってみた話
 
LT.22 機械学習におけるPDCAを回せる環境構築の話
LT.22 機械学習におけるPDCAを回せる環境構築の話 LT.22 機械学習におけるPDCAを回せる環境構築の話
LT.22 機械学習におけるPDCAを回せる環境構築の話
 
LT.21 SPIN法を活用した人心掌握術
LT.21 SPIN法を活用した人心掌握術LT.21 SPIN法を活用した人心掌握術
LT.21 SPIN法を活用した人心掌握術
 
LT.21 スゴいチームになるフィードバック術
LT.21 スゴいチームになるフィードバック術LT.21 スゴいチームになるフィードバック術
LT.21 スゴいチームになるフィードバック術
 
LT.20 コーディングとマジックナンバー
LT.20 コーディングとマジックナンバーLT.20 コーディングとマジックナンバー
LT.20 コーディングとマジックナンバー
 
LT.20 Wordpress x nuxt.jsで実現するSPA
LT.20 Wordpress x nuxt.jsで実現するSPALT.20 Wordpress x nuxt.jsで実現するSPA
LT.20 Wordpress x nuxt.jsで実現するSPA
 
【Tech Trend Talk vol.19】社外向け勉強会「拡張するデザイン -(DONGURI)」
【Tech Trend Talk vol.19】社外向け勉強会「拡張するデザイン -(DONGURI)」【Tech Trend Talk vol.19】社外向け勉強会「拡張するデザイン -(DONGURI)」
【Tech Trend Talk vol.19】社外向け勉強会「拡張するデザイン -(DONGURI)」
 
【Tech Trend Talk vol.19】社外向け勉強会「拡張するデザイン -(GIG)」
 【Tech Trend Talk vol.19】社外向け勉強会「拡張するデザイン -(GIG)」 【Tech Trend Talk vol.19】社外向け勉強会「拡張するデザイン -(GIG)」
【Tech Trend Talk vol.19】社外向け勉強会「拡張するデザイン -(GIG)」
 
LT.19 ビジネス環境の変化とカスタマーサクセス
LT.19 ビジネス環境の変化とカスタマーサクセスLT.19 ビジネス環境の変化とカスタマーサクセス
LT.19 ビジネス環境の変化とカスタマーサクセス
 
LT.19 BigQueryとGoogleスプレッドシートで作る格安BI
LT.19 BigQueryとGoogleスプレッドシートで作る格安BILT.19 BigQueryとGoogleスプレッドシートで作る格安BI
LT.19 BigQueryとGoogleスプレッドシートで作る格安BI
 
【Tech Trend Talk vol.17】社外向け勉強会「仮に同じ商品を売っても、競合の倍以上売る営業組織の作り方 -(GIG)」
【Tech Trend Talk vol.17】社外向け勉強会「仮に同じ商品を売っても、競合の倍以上売る営業組織の作り方 -(GIG)」【Tech Trend Talk vol.17】社外向け勉強会「仮に同じ商品を売っても、競合の倍以上売る営業組織の作り方 -(GIG)」
【Tech Trend Talk vol.17】社外向け勉強会「仮に同じ商品を売っても、競合の倍以上売る営業組織の作り方 -(GIG)」
 
【Tech Trend Talk vol.16】社外向け勉強会「国境を超えるクリエイティブのインスピレーション -(GIG)」
【Tech Trend Talk vol.16】社外向け勉強会「国境を超えるクリエイティブのインスピレーション -(GIG)」【Tech Trend Talk vol.16】社外向け勉強会「国境を超えるクリエイティブのインスピレーション -(GIG)」
【Tech Trend Talk vol.16】社外向け勉強会「国境を超えるクリエイティブのインスピレーション -(GIG)」
 
LT.18 スケジュール遅延をさせないためのディレクション
LT.18 スケジュール遅延をさせないためのディレクションLT.18 スケジュール遅延をさせないためのディレクション
LT.18 スケジュール遅延をさせないためのディレクション
 
LT.18 フリーランスの「イケてる / イケてない」を科学してみた
LT.18 フリーランスの「イケてる / イケてない」を科学してみたLT.18 フリーランスの「イケてる / イケてない」を科学してみた
LT.18 フリーランスの「イケてる / イケてない」を科学してみた
 

はじめてのSql文

  • 3. データベースってなに? 特定のデータの集まり 主な機能 ● 検索 ● CRUD(クラッド) ○ Create(作成) ○ Read(読み取り) ○ Update(更新) ○ Delete(削除)
  • 5. id name age sex birthplace 1 富澤 寛之 28 男性 埼玉県 2 岡藤 美桜 21 女性 群馬県 3 石野 博和 28 男性 愛知県 4 増井 里美 32 女性 千葉県 5 池原 清治 23 男性 兵庫県 TABLE users テーブル
  • 6. id name age sex birthplace 1 富澤 寛之 28 男性 埼玉県 2 岡藤 美桜 21 女性 群馬県 3 石野 博和 28 男性 愛知県 4 増井 里美 32 女性 千葉県 5 池原 清治 23 男性 兵庫県 FILED name フィールド フィールド名
  • 7. id name age sex birthplace 1 富澤 寛之 28 男性 埼玉県 2 岡藤 美桜 21 女性 群馬県 3 石野 博和 28 男性 愛知県 4 増井 里美 32 女性 千葉県 5 池原 清治 23 男性 兵庫県 RECORD レコード
  • 9. SELECT 〜 WHERE [検索] SELECT `id`, `name` FROM `users` WHERE `id` = 3; → +----+-----------------+ | id | name | +----+-----------------+ | 3 | 石野 博和 | +----+-----------------+ フィールド テーブル 検索条件
  • 10. ORDER BY 〜 DESC/ASC [並び替え] SELECT `id`, `name’, `age` FROM `users` ORDER BY `age` ASC; → +----+--------------+-----+ | id | name | age | +----+--------------+-----+ | 5 | 池原 清治 | 23 | | 1 | 富澤 寛之 | 28 | | 2 | 岡藤 美桜 | 28 | | 3 | 石野 博和 | 28 | | 4 | 増井 里美 | 32 | +----+--------------+-----+ 年齢昇順で並び替え
  • 11. LIMIT [レコード数/開始レコード位置] SELECT `id`, `name’ FORM `users` LIMIT 2, 1; → +----+-----------------+ | id | name | +----+-----------------+ | 3 | 石野 博和 | +----+-----------------+ 2番目のデータから1件取り出す ※ データベース上では0から番号がふ  られるため2番目のデータはid=3  のレコードとなる
  • 12. INSERT [追加] INSERT INTO `users` (`name`, `age`, `sex`) VALUES (“新川 奈保”, 23, “女性”); → +----+-------------+------+------+------------+ | id | name | age | sex | birthplace | +----+-------------+------+------+------------+ | 6 | 新川 奈保 | 23 | 女性 | NULL | +----+-------------+------+------+------------+ フィールド 値
  • 13. UPDATE [更新] UPDATE `users`SET `age` = 38 WHERE `id` = 3; → +--+--------------+----+ | id | name | age | +--+--------------+----+ | 3 | 石野 博和 | 38 | +--+--------------+----+ ユーザIDが3のユーザの年齢を38歳に更新検索条件 値
  • 14. DELETE [削除] DELETE FROM `users` WHERE id = 3; ユーザIDが3のレコードを削除 検索条件
  • 15. CREATE [作成] CREATE TABLE `hobbies` ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, user_id INT UNSIGNED NOT NULL , name VARCHAR(64) NOT NULL , PRIMARY KEY (id), INDEX (`user_id`) ); id user_id name 1 1 バスケット 2 2 サッカー 3 2 ボルダリング hobbies テーブル
  • 16. INNER JOIN [内部結合] SELECT `users`.`id`, `users`.`name`, `hobbies`. `name` FROM `users` INNER JOIN `hobbies` ON `users`.`id` =`hobbies`.`user_id`; → +----+------------+----------------+ | id | name | name | +----+------------+----------------+ | 1 | 富澤 寛之 | バスケット | | 2 | 岡藤 美桜 | サッカー | | 2 | 岡藤 美桜 | ボルダリング | +----+------------+----------------+ 値が一致するデータだけを結合 id user_id name 1 1 バスケット 2 2 サッカー 3 2 ボルダリング users テーブル hobbies テーブル id name age sex birthplace 1 富澤 寛之 28 男性 埼玉県 2 岡藤 美桜 21 女性 群馬県 3 石野 博和 28 男性 愛知県
  • 17. LEFT JOIN / RIGHT JOIN [外部結合] SELECT `users`.`id`, `users`.`name`, `hobbies`. `name` FROM `users` LEFT JOIN `hobbies` ON `users`.`id` =`hobbies`.`user_id`; → +--+----------------+--------------------+ | id | name | name | +--+----------------+--------------------+ | 1 | 富澤 寛之 | バスケット | | 2 | 岡藤 美桜 | サッカー | | 2 | 岡藤 美桜 | ボルダリング | | 3 | 石野 博和 | NULL | +---+---------------+--------------------+ 左側のテーブルの値に合わせて 右側のテーブルに一致するデータを結合 値がないときはNULLになるのがINNER JOINとの違い id user_id name 1 1 バスケット 2 2 サッカー 3 2 ボルダリング users テーブル hobbies テーブル id name age sex birthplace 1 富澤 寛之 28 男性 埼玉県 2 岡藤 美桜 21 女性 群馬県 3 石野 博和 28 男性 愛知県
  • 19. 課題1 更新 上記のusersテーブルに対して、ユーザ ID 2の出身地を”千葉県”に更新するSQL文を作成しなさい ↓答えはこちらをドラックしてください UPDATE `users`SET `birthplace` = “千葉県” WHERE `id` = 2; users テーブル id name age sex birthplace 1 富澤 寛之 28 男性 埼玉県 2 岡藤 美桜 21 女性 群馬県 3 石野 博和 28 男性 愛知県
  • 20. 課題2 テーブル作成 左のようなphonesテーブル作成するSQL文を作成しなさい ↓答えはこちらをドラックしてください CREATE TABLE `task_users`.`phones` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , `user_id` INT UNSIGNED NOT NULL , `name` VARCHAR(16) NOT NULL , PRIMARY KEY (`id`), INDEX (`user_id`) ); id user_id name 1 1 iPhone7 2 2 iPhone7 3 2 iPhoneSE phones テーブル
  • 21. 課題3 結合 usersテーブルとphonesテーブルを結合し、下記の値を取得する SQL文を書きなさい id user_id name 1 1 iPhone7 2 2 iPhone7 3 2 iPhoneSE users テーブル phones テーブル id name age sex birthplace 1 富澤 寛之 28 男性 埼玉県 2 岡藤 美桜 21 女性 群馬県 3 石野 博和 28 男性 愛知県 ↓答えはこちらをドラックしてください SELECT `users`.`id`, `users`.`name`, `phones`. `name` FROM `users` LEFT JOIN `phones` ON  `users`.`id` =`phones`.`user_id`; → +----+------------+------------+ | id | name | name | +----+------------+------------+ | 1 | 富澤 寛之 | iPhone7 | | 2 | 岡藤 美桜 | iPhone7 | | 2 | 岡藤 美桜 | iPhoneSE | | 3 | 山崎 泰正 | NULL | +----+------------+------------+
  • 22. Good is good. We provide opportunities to the world by fusing technology and ideas. テクノロジーとクリエイティブで世界をより良くする お問い合わせはこちらから https://giginc.co.jp/contact/