#概要
アウトプット用に、学習した内容を紹介していきます。
本日はMySQLでLEFT JOINを使ってみます。
#環境
Mac OS Mojave 10.14.6
MySQL 5.7.28
#表の結合
以下の二つの表がデータベースに登録されており、これを結合してユーザーが投稿した内容を表示したいとします。
userテーブル
id | name | gender | age |
---|---|---|---|
1 | john | m | 18 |
2 | paul | m | 20 |
3 | alice | f | 15 |
4 | dabid | m | 17 |
postsテーブル
id | user_id | content |
---|---|---|
1 | 1 | Hello |
2 | 1 | World |
3 | 2 | I'm Paul. |
4 | 4 | 😀 |
5 | 5 | 😂 |
posts表の全てのcontentと、それに対応したusers表のnameが欲しいカラムです。
この時、以下のSELECT文による左外部結合を用いることで欲しい結果が得られます。
mysql> SELECT name,content
-> FROM posts
-> LEFT JOIN users
-> ON posts.user_id = users.id;
出力
+-------+-----------+
| name | content |
+-------+-----------+
| john | Hello |
| john | World |
| paul | I'm Paul. |
| dabid | 😀 |
| NULL | 😂 |
+-------+-----------+
5 rows in set (0.00 sec)
無事にnameと、それに対応するcontentが表示されました。また'😂'に対応するnameがusers側に存在しないため、nameがNULLになっています。
ちなみに上記の表をINSERTで作成しようとすると、posts表・contentカラムに登場してくるシングルクォーテーション、そして絵文字で、それぞれエラーを吐いてしまう可能性があります。
シングルクォーテーションはエスケープ、絵文字は文字コードをutf8からutf8mb4に変更することで対応が可能ですので、気になった方はぜひ調べてみてください。