サブクエリと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したりするのはサブクエリだと大変そうですし。。。サブクエリ側で予めデータ絞っておけばできるのかな。。。?