前回は、「内部結合」をご紹介した。
今回は、結合する両方のテーブルに存在するレコードはもちろん、どちらか一方のテーブルにだけ存在するレコードも含めて取り出す「外部結合」をご紹介しよう。
それでは、実際に操作してみよう。
まずは、mysqlクライアントを起動しよう。
PS C:\Users\vinta> mysql -u myusr -p
Enter password: *****
続いて、basicデータベースに移動しよう。
mysql> USE basic;
Database changed
外部結合でレコードを表示しよう
scheduleテーブルと、usrテーブルを外部結合してレコードを表示しよう。
以下の通り、入力しよう。
なお、このbasicデータベースには、scheduleテーブルとusrテーブルにはあらかじめレコードが登録してあるものとする。
mysql> SELECT s.subject,s.pdate,u.uname FROM usr As u
-> LEFT OUTER JOIN schedule AS s ON u.uid = s.uid;
以下の通り、表示されれば、成功である。
mysql> SELECT s.subject,s.pdate,u.uname FROM usr As u
-> LEFT OUTER JOIN schedule AS s ON u.uid = s.uid;
+-----------------+------------+----------+
| subject | pdate | uname |
+-----------------+------------+----------+
| 小学校参観日 | 2024-08-10 | 井上花子 |
| NULL | NULL | 田中美紀 |
| NULL | NULL | 原田直樹 |
| WINGS会議 | 2024-06-25 | 掛谷奈美 |
| C社打ち合わせ | 2024-07-31 | 掛谷奈美 |
| D企画打ち上げ | 2024-08-21 | 掛谷奈美 |
| WINGS会議 | 2024-06-25 | 鈴木正一 |
| B企画書提出 | 2024-07-05 | 佐藤留吉 |
| WINGS会議 | 2024-06-25 | 山田祥寛 |
| MySQL本原稿提出 | 2024-07-31 | 山田祥寛 |
| WINGSメンバ面接 | 2024-08-05 | 山田祥寛 |
| D企画打ち上げ | 2024-08-21 | 山田祥寛 |
+-----------------+------------+----------+
12 rows in set (0.09 sec)
テーブルを名が長くて、毎回テーブルを名で修飾するのが面倒な場合、AS句でテーブル名の別名を設定できる。今回は、scheduleテーブルを「s」、usrテーブルを「u」としている。
なお、今回の「外部結合」では、「双方のテーブルでキーが一致するレコード」+「左テーブルのすべてのレコード」を取り出した。この「左」とは、「LEFT OUTER JOIN」の左に記述した「usrテーブル」となる。
取り出したレコードの中には、scheduleテーブルに対応するキーがないレコードもある。その場合には、scheduleテーブルのフィールドには「NULL」が表示される。
今回は、ここまでである。mysqlクライアントを終了しよう。
mysql> exit;
Bye
PS C:\Users\vinta>
(参考)3ステップでしっかり学ぶ MySQL入門 [改訂第3版] 山田奈美(著)山田祥寛(監修)技術評論社
コメント