SQL 副問合せ
仕事でよくSQL文を操作するのですが、久しぶりに勉強になったので記載しておきます
①FROM句で使う
SELECT
T2.*
FROM (SELECT * FROM TABLE1 WEHRE ID = 1) AS T2
WHERE T2.ID = 1
この書き方あんまりしたことなかったけども、複雑なSQLだったり、一時テーブル作らないといけないけども、作りたくないときはこういう形で書くこともできるみたい。ただ、わかりにくくなってしまうので多用しすぎるとよくなさそう。あとはあんまり複雑にすると遅くなりそう
②WHERE句で使う
SELECT
T1.*
FROM TABLE1 T1
WHERE T1.NAME = (SELECT ID FROM TABLE2 WHERE 条件)
注意としては、WHERE句で使うと複数件戻ってくるとエラーになることがあるなので、条件をINにするほうがいいかも
ただ、件数が多いと遅くなったりするのであんまり使わないほうがいいかも
SELECT
T1.*
FROM TABLE1 T1
WHERE T1.NAME IN (SELECT ID FROM TABLE2 WHERE 条件)
③SELECT句で使う
SELECT
T1.*,
(SELECT ID FROM TABLE2 WHERE NAME = T1.NAME) AS NAME
FROM TABLE1 T1
これはいままでよくかいているやり方。一番よく書くやり方かな
④JOIN句で使う
SELECT
T1.*,
T2.*
FROM TABLE1 T1
LEFT JOIN (SELECT * FROM TABLE2 WHERE 条件) T2 ON T1.ID = T2.ID
JOIN句で使う方法もあるみたい。TABLE1、TABLE2をIDで引っ付けてTABLE2の内容を持ってきたいときに使うのかなぁ…わりと早いみたいだけどどうなんだろ…見た感じだと遅そうに見えるけども
今までは、一時テーブル作って、その中でとかやってたけど、そういうのつかなくても一回でSELECTしたいよって時にできるみたい。特に①(FROM句)、④(JOIN句)は今まであまり使ったことなかったけども勉強したら使えそうだな。
それに関連して、EXISTS句ってのがあって、今まではそれを多用してたんだけど、遅くなる時があるみたいだから使い分けしたほうがよさそう。
今回のお仕事はちょっとお勉強になりました