Muni Bus

パソコンの操作方法や設定方法を忘れないようにメモしています。ブログを一回引っ越ししているので、所々表示がかなり乱れています・・・

【MySQL】二つのテーブルを一つに結合(完全外部結合)する

MySQLには完全外部結合(左右すべての行を必ず出力する結合)をする命令は搭載されていない。union演算子を使うことで同等の処理を行うことができる。結合相手がない左側(chara)の4行目と右側(seiyu)の4行目は列にNULLが挿入されて出力されていることがわかる。

mysql> select * from chara;
+------------------+-------------------+------+------------+
| name             | title             | no   | vc         |
+------------------+-------------------+------+------------+
| ライスシャワー   | ウマ娘            |   30 | miwami01   |
| スーパークリーク | ウマ娘            |   45 | kyuki01    |
| メイショウドトウ | ウマ娘            |   58 | mwatada01  |
| ライザ           | ライザのアトリエ2 |    1 | ynoguchi01 |
| フィー           | ライザのアトリエ2 |    2 | mwatada01  |
| 黒川あかね       | 推しの子          |    6 | miwami01   |
+------------------+-------------------+------+------------+
6 rows in set (0.00 sec)
mysql> select * from seiyu;
+-----------+------------+
| id        | name       |
+-----------+------------+
| miwami01  | 岩見舞菜香 |
| kyuki01   | 優木かな   |
| mwatada01 | 和多田美咲 |
| machico01 | Machico    |
+-----------+------------+
4 rows in set (0.00 sec)
mysql> select chara.name, seiyu.name from chara
    -> left join seiyu
    -> on vc = id
    -> union
    -> select chara.name, seiyu.name from chara
    -> right join seiyu
    -> on vc = id;
+------------------+------------+
| name             | name       |
+------------------+------------+
| ライスシャワー   | 岩見舞菜香 |
| スーパークリーク | 優木かな   |
| メイショウドトウ | 和多田美咲 |
| ライザ           | NULL       |
| フィー           | 和多田美咲 |
| 黒川あかね       | 岩見舞菜香 |
| NULL             | Machico    |
+------------------+------------+
7 rows in set (0.01 sec)