マサ島の探検日記#12(サブクエリ)

業務

こんにちは先日東武動物公園でホワイトタイガーの赤ちゃんを見てきた鈴木です。やはりネコ科の動物は可愛すぎて神ですね~
今回は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文ではその変数を用いて平均給与より高い給与を持つ従業員を取得しています。

違い

上記二つのクエリを比較するために、実際にデータベース上で実行してみました。

もちろん実行結果は同じものになります。
実行時のコストを比較してみます。

※左からクエリ①、クエリ②(1)、クエリ②(2)

サブツリーの推定コストという項目を比較するとクエリ①(サブクエリ使用)は0.0065936、クエリ②(サブクエリ未使用)は(1)と(2)の合計で0.0065757になり、クエリ②の方がほんの少し処理が軽いと考えられます。

まとめ

上記の通り、同じ処理を行いたい場合でもSQL文の書き方によって実行速度が異なる場合があります。今回の例は簡単なクエリで比較したため非常に小さな差でしたが、もっと複雑なクエリの場合大きな差が生まれる可能性があります。私もコードを書く際には処理速度なども気にしながら製造していきたいと思います!

今日のひとこと先日業務で書いたクエリでは6倍くらい差が出ました!!

Suzuki Masato

Suzuki Masato

出身:埼玉県越生町 趣味:ドラム、Tシャツづくり 一言:猫好きに悪い人はいない

特集記事

アーカイブ

週間ランキング

  1. 1

    第12訓 健康第一!

  2. 2

    #11 タスク管理をしよう

  3. 3

    13_顧客向け分析ビュー作成

ランダム記事表示(3件)

ランダムで記事が3つ表示されます。アーカイブ記事との偶然の出会いをお楽しみに。

ISLAND

ISLAND

株式会社システムインテグレータの30期新卒社員15名によるブログです。日々の成長や業務、研修、就活についてなど情報を発信していきます。1年間宜しくお願いします。

TOP