@fukutechの技術ブログ

概要

・SQLにおける「副問い合わせ」について
・サブクエリとインラインビューの違いを理解
・インラインビューはどのような場合に使用するのかの判断基準を知る
・具体例で考えて理解度を深める

要点

・SQL文を入れ子にして条件指定をする構文
・2つのSQL文を1文で書きたい時に使用すると便利
・SELECT句やWHERE句で副問い合わせをする方法を「サブクエリ」と呼ぶ
・FROM句で副問い合わせをすることも可能であり、その方法を「インラインビュー」と呼ぶ
・インラインビューは、集合関数やASなどを用いて、テーブル中の値や名前を加工・編集したい時に使い勝手の良い方法

具体例

以下に具体例を挙げる。

前提条件は以下の通り。

  • Employeesテーブルには以下のカラムが含まれている

    • EmployeeID
    • Name, Emai
    • Salary
    • DepartmentName
    • Salary
  • EmployeeID = 1には以下の社員情報が登録されているとする。

    • Name: Taro
    • Email: tato@email.com
    • DepartmentName: 営業
    • Salary: 400,000

(例1)Taroと同じ部署の人のEmailを知りたい

副問い合わせを使用しない場合

SELECT  
  DepartmentName  
FROM  
  Employees  
WHERE  
  Name = 'Taro'  
;

「DepartmentID: 営業」と出力されるため、続けて以下を実行

SELECT  
  Email  
FROM  
  Employees  
WHERE  
  DepartmentName = '営業'  
;

「Email: ichiro@email.com」と欲しい結果が出力

副問い合わせ(サブクエリ)を使用する場合

SELECT  
  Email  
FROM  
  Employees  
WHERE  
  DepartmentName =  
(  
SELECT  
  DepartmentName  
FROM  
  Employees  
WHERE  
  Name = 'Taro'  
)  
;

「Email: ichiro@gmail.com」と、1文で欲しい結果が出力

(例2)Taroの部署の平均給与以上のSalaryをもらっているEmployeeIDを知りたい

副問い合わせを使用しない場合

SELECT  
  AVG( Salary )  
FROM  
  Employees  
WHERE  
  DepartmentID = 1  
GROUP BY  
  DepartmentID  
;

「Amount: 600,000」と出力されるため、続けて以下を実行

SELECT  
  EmployeeID  
FROM  
  Employees  
WHERE  
  Salary > 600,000  
;

「EmployeeID: 5, 10, 15, …」と欲しい結果が出力される

副問い合わせ(インラインビュー)を使用する場合

SELECT  
  EmployeeID  
FROM  
(  
SELECT  
  EmployeeID,  
  AVG( Salary ) AS 平均給与  
FROM  
  Employees  
GROUP BY  
  EmployeeID  
)  
WHERE    
  Salary >   
(  
SELECT  
  平均給与  
FROM  
  Employees  
WHERE  
  DepartmentID = 1  
)  
;

「EmployeeID: 5, 10, 15, …」と、(この例だと冗長となってしまったものの)1文で欲しい結果が出力される

このログへのコメント

コメントはありません