SQLはあんま詳しくないので、基礎的なことですが外部結合についてメモっときます。
サンプルのテーブルと、元データ †
mysql> select ITEM_ID,NAME,INITIAL_PRICE from ITEM;
+---------+--------+---------------+
| ITEM_ID | NAME | INITIAL_PRICE |
+---------+--------+---------------+
| 1 | 商品1 | 100.45 |
| 2 | 商品2 | 1600.5 |
| 3 | 商品3 | 1700.1 |
+---------+--------+---------------+
3 rows in set (0.00 sec)
mysql> select BID_ID,ITEM_ID,AMOUNT from BID;
+--------+---------+--------+
| BID_ID | ITEM_ID | AMOUNT |
+--------+---------+--------+
| 1 | 2 | 1700.5 |
| 2 | 2 | 1700.5 |
| 3 | 3 | 1800.1 |
+--------+---------+--------+
3 rows in set (0.00 sec)
このテーブルに対して検索を実行します。
- 通常の検索
mysql> select ITEM.ITEM_ID ,NAME,INITIAL_PRICE,BID_ID,AMOUNT
from ITEM ,BID where ITEM.ITEM_ID=BID.ITEM_ID;
+---------+--------+---------------+--------+--------+
| ITEM_ID | NAME | INITIAL_PRICE | BID_ID | AMOUNT |
+---------+--------+---------------+--------+--------+
| 2 | 商品2 | 1600.5 | 1 | 1700.5 |
| 2 | 商品2 | 1600.5 | 2 | 1700.5 |
| 3 | 商品3 | 1700.1 | 3 | 1800.1 |
+---------+--------+---------------+--------+--------+
3 rows in set (0.00 sec)
- 外部結合
mysql> select ITEM.ITEM_ID ,NAME,INITIAL_PRICE,BID_ID,AMOUNT
from ITEM left join BID on ITEM.ITEM_ID=BID.ITEM_ID;
+---------+--------+---------------+--------+--------+
| ITEM_ID | NAME | INITIAL_PRICE | BID_ID | AMOUNT |
+---------+--------+---------------+--------+--------+
| 1 | 商品1 | 100.45 | NULL | NULL |BIDにはITEM_ID=1
| 2 | 商品2 | 1600.5 | 1 | 1700.5 |はないけど検索される
| 2 | 商品2 | 1600.5 | 2 | 1700.5 |
| 3 | 商品3 | 1700.1 | 3 | 1800.1 |
+---------+--------+---------------+--------+--------+
4 rows in set (0.00 sec)
mysql>
左側(ITEM left join BID)のITEMを基準にしてBIDをくっつけていくのが、左外部結合ですね。ITEMを指しているBIDがなくても、そのITEMは表示されると。でそのITEMのBIDのデータはNULLになるんですね。
で、右外部結合ってのもあるけど、ITEMとBIDを入れ替えれば*1意味は同じかな??
この記事は
- あああああ -- っかっぁああ?
- あああああ -- っかっぁああ?
現在のアクセス:19753