サブクエリとJOIN

サブクエリとJOINどちらでもデータ取得できることあるよな、比べてみよう、と思い比較してみました。

 

 

以下はどちらもeventsテーブルのidが1であるものと関連するpetsレコードを取得しています。

 

 JOIN

select * from pets join events on pets.name=events.name where events.id=1;

 結果

1 Whistler Gwen bird f 1989-08-30 NULL 2019-11-04 09:26:17 2019-11-04 09:26:17 1 Whistler 1999-11-09 Went hiking. 2019-11-09 13:23:43 2019-11-09 13:25:38

 

サブクエリ

select * from pets where name in(select name from events where id=1);

 結果

1 Whistler Gwen bird f 1989-08-30 NULL 2019-11-04 09:26:17 2019-11-04 09:26:17 1 Whistler 1999-11-09 Went hiking. 2019-11-09 13:23:43 2019-11-09 13:25:38

 

 

感想その他

JOINはテーブル同士くっつけているので、SELECT *とすればどちらのテーブルのカラムの値も返ってきますね。

一方サブクエリは最初にSELECT *した方のテーブルのデータのみ返ってきます。(当たり前かもですが)

 

こう比較してみるとJOINの方が応用効くし便利そうですね。

JOINしてGROUP BYでまとめてHAVINGで絞ってCOUNTしたりするのはサブクエリだと大変そうですし。。。サブクエリ側で予めデータ絞っておけばできるのかな。。。?