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意味は同じかな??
この記事は
現在のアクセス:19783