こんにちは先日東武動物公園でホワイトタイガーの赤ちゃんを見てきた鈴木です。やはりネコ科の動物は可愛すぎて神ですね~
今回はSQLのサブクエリについて話していきたいと思います。
そもそもサブクエリとは
まず、まず、サブクエリとはクエリ(SQL文)の中に書くクエリのことです。
簡単な例を書いてみます。
次のような「employees」テーブルがあるとします。
このテーブルから、平均給与より高い給与を持つ従業員を取得したいとします。
そこで以下のようなクエリを書きます。
SELECT employee_name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
SELECT文の中でSELECT文を記述していますね。これがサブクエリになります。
一方サブクエリを使用せず、SELECT文を二回実行して同様の処理を行うこともできます。
DECLARE @AVG_SALARY int
SELECT @AVG_SALARY = AVG([salary]) FROM [employees]
SELECT
[employee_name]
FROM [employees]
WHERE [salary] > @AVG_SALARY
一回目のSELECT文で変数(@AVG_SALARY)に平均値を格納し、二回目のSELECT文ではその変数を用いて平均給与より高い給与を持つ従業員を取得しています。
違い
上記二つのクエリを比較するために、実際にデータベース上で実行してみました。
もちろん実行結果は同じものになります。
実行時のコストを比較してみます。
サブツリーの推定コストという項目を比較するとクエリ①(サブクエリ使用)は0.0065936、クエリ②(サブクエリ未使用)は(1)と(2)の合計で0.0065757になり、クエリ②の方がほんの少し処理が軽いと考えられます。
まとめ
上記の通り、同じ処理を行いたい場合でもSQL文の書き方によって実行速度が異なる場合があります。今回の例は簡単なクエリで比較したため非常に小さな差でしたが、もっと複雑なクエリの場合大きな差が生まれる可能性があります。私もコードを書く際には処理速度なども気にしながら製造していきたいと思います!