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;
(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 条件) サブクエリテーブル;
サブクエリテーブル.カラム
FROM
(SELECT
カラム
FROM テーブル
WHERE 条件) サブクエリテーブル;
SELECT
サブクエリテーブル2.カラム2
FROM
(SELECT
サブクエリテーブル1.カラム2
FROM
(SELECT
カラム2
FROM テーブル
WHERE 条件) サブクエリテーブル1;
) サブクエリテーブル2;
サブクエリテーブル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 条件)
カラム3
FROM テーブル1
WHERE カラム1 IN (SELECT カラム2 FROM テーブル2 WHERE 条件)