Top / MySQL / 外部結合を考える

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)
rel.png

このテーブルに対して検索を実行します。

  • 通常の検索
    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意味は同じかな??


この記事は

選択肢 投票
おもしろかった 34  
そうでもない 17  
  • あああああ -- っかっぁああ? 2015-04-09 (木) 17:17:47
  • あああああ -- っかっぁああ? 2015-04-09 (木) 17:17:49

Top / MySQL / 外部結合を考える

現在のアクセス:19776


*1 ITEM left join BID と BID rifht join ITEMは同じ?

添付ファイル: filerel.png 1408件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-04-10 (金) 00:56:44 (3305d)