MySQL(MariaDB)でサブクエリを使う方法

MySQL(MariaDB)でサブクエリを使う方法

このページでは、MySQL(MariaDB)でサブクエリを使う方法を紹介します。
私は、GROUP BYをしたSELECTのCOUNTを抽出したいときにサブクエリを使ったりします。

サブクエリとは何?

そのまま訳すと、1つのクエリの中に複数のSELECT文があるクエリです。
SELECT句やFROM句、WHERE句で使うことができます。

SELECT句の使い方

SELECT
(SELECT
COUNT(カラム1)
FROM テーブル2
WHERE テーブル2.カラム2 = テーブル1.カラム1) AS 表示
FROM テーブル1;

— COUNT以外にSUMやAVGでも使えます。

SELECT句の結果は、1つしか出力できません。

(例)社員ごとに注文件数を抽出する。

SELECT
 syain_id
 ,(SELECT
 COUNT(tbl_chumon.chumon_id)
 FROM tbl_chumon
 WHERE tbl_chumon.syain_id = mst_syain.syain_id) AS kensu
 FROM mst_syain;

FROM句の使い方

SELECT
サブクエリテーブル.カラム
FROM
(SELECT
カラム
FROM テーブル
WHERE 条件) サブクエリテーブル;
SELECT
サブクエリテーブル2.カラム2
FROM
(SELECT
サブクエリテーブル1.カラム2
FROM
(SELECT
カラム2
FROM テーブル
WHERE 条件) サブクエリテーブル1;
) サブクエリテーブル2;
サブクエリのサブクエリみたいに入れ子も可能です。

(例)合計金額が10万円以上の注文件数を抽出する。

SELECT
 COUNT(ss.chumon_id) AS kensu
 FROM (SELECT
 t1.chumon_id
 ,SUM(t1.kingaku) AS goukei_gaku
 FROM tbl_chumon t1
 GROUP BY
 t1.chumon_id
 HAVING goukei_gaku >= 100000
) ss;

WHERE句の使い方

SELECT
カラム3
FROM テーブル1
WHERE カラム1 IN (SELECT カラム2 FROM テーブル2 WHERE 条件)