joinとleftjoinとwhere

スポンサーリンク

一見同じに見えて全然違うよというお話

以下のようなテーブルを結合する事を考えよう
これをtableA

IDnamaage
1tom10
2yuki10
3toru11
4marry11
5sam11

これをtableB

IDbloodsex
1Aman
2Agirl
3Bman
4Ogirl
5ABman

select * from tableA left join tableB on tableA.ID = tableB.ID where sex = 'man'
こちらの結果は以下

IDnamaagebloodsex
1tom10Aman
3toru11Bman
5sam11ABman

IDで結合したものから最後にmanで絞られる。

さて、こちらはどうか?
select * from tableA left join tableB on tableA.ID = tableB.ID AND sex = 'man'
こちらの結果は以下

IDnamaagebloodsex
1tom10Aman
2yuki10nullnull
3toru11Bman
4marry11nullnull
5sam11ABman

この場合、IDとsexがmanの場合に結合され、一致しなければnullが入る結果になる。

一見似ていてもちょっと違うだけで結果が異なってくる。

参考
https://qiita.com/zaburo/items/548b3c40fee68cd1e3b7
https://www.grapecity.com/developer/support/powernews/column/how_to_database/012/page02.htm

コメント

タイトルとURLをコピーしました