C220 サブクエリ

サブクエリとは、SQLの中に記述する別のSQLを記載し、一時的なビューのようなものを用いる手法のことをいいます。抽出したい条件が複雑になった際に用いることの多い構文です。今回はサブクエリについて紹介します。

サブクエリとは

studentsテーブル

idnameage
1山田15
2田中16
3佐藤15
4高橋17

下記のように、FROM句の中でサブクエリを記載することで、ageとageの数をcount関数で合計した数値を抽出することができます。

SQL
SELECT age, age_count
  FROM (SELECT age, COUNT(age) as age_count
          FROM students
         GROUP BY age) as s1;

抽出結果

SQL
age | age_count 
15        2
16        1
17        1

下記と同じ処理を1文の中で行っております。ビュー(View)は1つ以上のテーブルから必要な要素のみを取得して作成される仮想的なテーブルのようなものです。下記の例は、studentsテーブルからageとageの数(ここではage_countと名付ける)を取得した仮想テーブルを作り、student_1と名付けています。

SQL
CREATE VIEW student_1 AS
    SELECT age, COUNT(age) as age_count
      FROM students
     GROUP BY age;

select age, age_count from student_1;

サブクエリを用いると、上記のような仮想テーブルを一つの文の中で作成し、冗長なコードを避けることができます。

エンジニアからのアドバイス

1つのSQL文の中にサブクエリを重ねて複数用いることも可能です。可読性に注意しながら必要に応じて用いましょう。

サブクエリは、大抵はJOIN文で書くことができ、更にJOIN文の方が早い場合が多いです。サブクエリを使用するのは、JOINと比べて早くなる時、集計結果を用いて更に処理を行いたい時、特定の件数においてSQLを実行したい時などが考えられます。

---