概要と目標
リレーショナルデータベースの真骨頂!
テーブルを結合しよう。
複数のテーブルからデータを取り出し、寄せ集めて表示することが出来ます。
欲しいレコードが抽出できるようにテーブルの結合方法を学習しましょう。
コマンドプロンプト
mysql> select p.title, u.name
-> from posts as p join users as u
-> on p.user_id = u.id;
+-----------------------------------+--------+
| title | name |
+-----------------------------------+--------+
| 2回目の投稿! | 前田 |
| ブログ始めました | 大島 |
| そろそろ・・・ | 高橋 |
| まだやってます | 高橋 |
| 久しぶりの投稿 | 高橋 |
| また、空いちゃいました | 高橋 |
| 限界です | 高橋 |
| おいしいお店発見! | 指原 |
| また、行っちゃいました | 指原 |
| 一人旅してます | 山本 |
+-----------------------------------+--------+
10 rows in set (0.00 sec)
mysql> select u.name, count(*) as total
-> from posts as p join users as u
-> on p.user_id = u.id
-> group by p.user_id;
+--------+-------+
| name | total |
+--------+-------+
| 前田 | 1 |
| 大島 | 1 |
| 高橋 | 5 |
| 指原 | 2 |
| 山本 | 1 |
+--------+-------+
5 rows in set (0.00 sec)
mysql> select p.id, p.title, p.content, u.name
-> from posts as p join users as u
-> on p.user_id = u.id
-> where p.user_id in(3,4)
-> order by p.created desc
-> limit 5;
+----+-----------------------------------+-----------------------------------------------------------------------------------------------------------+--------+
| id | title | content | name |
+----+-----------------------------------+-----------------------------------------------------------------------------------------------------------+--------+
| 10 | 限界です | こんにちは、もうブログを続けるのは限界です。 | 高橋 |
| 9 | また、行っちゃいました | こんにちは、先日見つけた美味しいパスタのお店に、また行っちゃいました。 | 指原 |
| 7 | おいしいお店発見! | こんにちは、おいしいパスタのお店を発見しました。 | 指原 |
| 6 | また、空いちゃいました | お久しぶりです。またまた日が空いてしまいましたね。 | 高橋 |
| 5 | 久しぶりの投稿 | お久しぶりです。ちょっと日が空いてしまいましたね。 | 高橋 |
+----+-----------------------------------+-----------------------------------------------------------------------------------------------------------+--------+
5 rows in set (0.01 sec)
mysql> create view view2
-> as
-> select p.*, u.name, u.email
-> from posts as p join users as u
-> on p.user_id = u.id;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from view2 order by created desc;
+----+---------+-----------------------------------+-----------------------------------------------------------------------------------------------------------+---------------------+---------------------+--------+---------------------+
| id | user_id | title | content | created | modified | name | email |
+----+---------+-----------------------------------+-----------------------------------------------------------------------------------------------------------+---------------------+---------------------+--------+---------------------+
| 10 | 3 | 限界です | こんにちは、もうブログを続けるのは限界です。 | 2017-07-18 10:00:00 | 2017-07-18 10:00:00 | 高橋 | takahashi@dummy.com |
| 9 | 4 | また、行っちゃいました | こんにちは、先日見つけた美味しいパスタのお店に、また行っちゃいました。 | 2017-07-17 10:00:00 | 2017-07-17 10:00:00 | 指原 | sashihara@dummy.jp |
| 7 | 4 | おいしいお店発見! | こんにちは、おいしいパスタのお店を発見しました。 | 2017-07-15 10:00:00 | 2017-07-15 10:00:00 | 指原 | sashihara@dummy.jp |
| 8 | 5 | 一人旅してます | こんにちは。今、北海道にいてます。一人旅してます。 | 2017-07-15 10:00:00 | 2017-07-15 10:00:00 | 山本 | yamamoto@dummy.net |
| 6 | 3 | また、空いちゃいました | お久しぶりです。またまた日が空いてしまいましたね。 | 2017-05-31 10:00:00 | 2017-05-31 10:00:00 | 高橋 | takahashi@dummy.com |
| 5 | 3 | 久しぶりの投稿 | お久しぶりです。ちょっと日が空いてしまいましたね。 | 2017-05-01 10:00:00 | 2017-05-01 10:00:00 | 高橋 | takahashi@dummy.com |
| 4 | 3 | まだやってます | 1度、このブログをやめようと思いまいしたが、まだやることにしました。 | 2017-04-11 10:00:00 | 2017-04-11 10:00:00 | 高橋 | takahashi@dummy.com |
| 3 | 3 | そろそろ・・・ | こんにちは、そろそろネタが尽きてきました。 | 2017-04-09 10:00:00 | 2017-04-09 10:00:00 | 高橋 | takahashi@dummy.com |
| 2 | 1 | 2回目の投稿! | こんにちは、2回目のブログですね。ちゃんと続いてますよ。 | 2017-04-08 10:00:00 | 2017-04-08 10:00:00 | 前田 | maeda@dummy.com |
| 1 | 2 | ブログ始めました | ついに、ブログを始めました。毎日更新するので楽しみにしてくださいね。 | 2017-04-07 10:00:00 | 2017-04-07 10:00:00 | 大島 | oshima@dummy.com |
+----+---------+-----------------------------------+-----------------------------------------------------------------------------------------------------------+---------------------+---------------------+--------+---------------------+
10 rows in set (0.01 sec)
mysql> drop view view2;
Query OK, 0 rows affected (0.00 sec)
mysql>