結合するサンプルテーブルの準備
商品管理用のcommodityテーブル
+----+----------------------+-------+-------+
| id | item | price | maker |
+----+----------------------+-------+-------+
| 1 | おいしい水 | 190 | NULL |
| 2 | ポテトチップバターし | 120 | NULL |
| 3 | カフェ'チョコ | 150 | NULL |
| 5 | チョコパン | 240 | NULL |
| 6 | 米 | 2000 | NULL |
| 7 | たまねぎ | 0 | NULL |
| 8 | NULL | 9800 | NULL |
+----+----------------------+-------+-------+
メーカー管理用のtraderテーブル
+----+----------------------+-------+-------+ | id | item | price | maker | +----+----------------------+-------+-------+ | 1 | おいしい水 | 190 | 3 | | 2 | ポテトチップバターし | 120 | NULL | | 3 | カフェ'チョコ | 150 | NULL | | 5 | チョコパン | 240 | NULL | | 6 | 米 | 2000 | NULL | | 7 | たまねぎ | 0 | NULL | | 8 | NULL | 9800 | NULL | +----+----------------------+-------+-------+
commodityテーブル:
テーブルを結びつけるためのmakerフィールドを追加
+----+----------------------+-------+-------+ | id | item | price | maker | +----+----------------------+-------+-------+ | 1 | おいしい水 | 190 | NULL | | 2 | ポテトチップバターし | 120 | NULL | | 3 | カフェ'チョコ | 150 | NULL | | 5 | チョコパン | 240 | NULL | | 6 | 米 | 2000 | NULL | | 7 | たまねぎ | 0 | NULL | | 8 | NULL | 9800 | NULL | +----+----------------------+-------+-------+
commodityテーブル:
makerフィールドにid番号をセット
+----+----------------------+-------+-------+
| id | item | price | maker |
+----+----------------------+-------+-------+
| 1 | おいしい水 | 190 | 3 |
| 2 | ポテトチップバターし | 120 | 4 |
| 3 | カフェ'チョコ | 150 | 4 |
| 5 | チョコパン | 240 | 1 |
| 6 | 米 | 2000 | 2 |
| 7 | たまねぎ | 0 | NULL |
| 8 | NULL | 9800 | NULL |
+----+----------------------+-------+-------+
内部結合(JOIN)
書式1(JOIN)
SELECT フィールド名 FROM テーブル名1 JOIN テーブル名2
ON テーブル名1. フィールド名=テーブル名2. フィールド名;
例
SELECT * FROM commodity JOIN trader
ON commodity. maker=trader. id;
※両テーブルに共通するフィールド名がない場合、ONの後のテーブル名指定は省略可能だが、以後同じフィールド名が作成されないとも限らないため、指定しておく方が良い。
※ONの後、テーブル名.とフィールド名の間には半角スペース!!
+----+----------------------+-------+-------+----+------------+---------+--------------+
| id | item | price | maker | id | company | address | tel |
+----+----------------------+-------+-------+----+------------+---------+--------------+
| 5 | チョコパン | 240 | 1 | 1 | 東京パン | 東京都 | 03-0000-0000 |
| 6 | 米 | 2000 | 2 | 2 | 宇都宮米店 | 栃木県 | 028-111-1111 |
| 1 | おいしい水 | 190 | 3 | 3 | 札幌農場 | 北海道 | 011-222-2222 |
| 2 | ポテトチップバターし | 120 | 4 | 4 | 浦安製菓 | 千葉県 | 047-XXX-3333 |
| 3 | カフェ'チョコ | 150 | 4 | 4 | 浦安製菓 | 千葉県 | 047-XXX-3333 |
+----+----------------------+-------+-------+----+------------+---------+--------------+
※ONの条件で対応する相手があるものだけ表示される
書式2
SELECT フィールド名 FROM テーブル名1,テーブル名2
WHERE テーブル名1.フィールド名=テーブル名.2フィールド名;
FROMの後に結合するテーブルを「,」で区切り羅列する。結合するテーブルはいくつでも指定可能。ただし、WHEREで照合用のフィールドを指定してあげないと、全てを総当たりにした無駄に長いテーブルが表示されるので注意。
外部結合
内部結合の場合、照合できないレコードは表示されない。外部結合を使用すると照合できなかったレコードも表示させることができる。
左外部結合(LEFT JOIN)
SELECT フィールド名 FROM テーブル名1 LEFT JOIN テーブル名2
ON テーブル名1. フィールド名=テーブル名2. フィールド名;
右外部結合(RIGHT JOIN)
SELECT フィールド名 FROM テーブル名1 RIGHT JOIN テーブル名2
ON テーブル名1. フィールド名=テーブル名2. フィールド名;