【SQL】MySQLサブクエリコマンドまとめ
■平均以上のデータだけを表示
SELECT * FROM fuitList WHERE price >= (SELECT AVG(price) FROM furitList);
※AVGなどの集約関数をWHERE句に書くことができないため、上記のようにサブクエリを使って検索します。
■SELECT句にスカラ・サブクエリを書いて結果を表示
SELECT code, name, price, (SELECT AVG(price) FROM fruitList) AS avg_price FROM fruitList;
■スカラ・サブクエリの結果と特定の列の値とを計算する
SELECT code, name, price - (SELECT AVG(price) FROM fruitList) AS "平均価格との差" FROM fruitList;
■スカラ・サブクエリをHAVING句に書く
SELECT shop, SUM(sales) FROM orderList GROUP BY shop HAVING SUM(sales) <= (SELECT SUM(sales) FROM sales) / 3;
※shopのsales合計を全体のsales合計から3で割った値より小さい店舗を表示
■2つのテーブルで共通するデータの中から指定したデータを取り出す(相関サブクエリ)
SELECT code, shop, sales FROM orderList WHERE (SELECT name FROM fruitList WHERE orderList.code = fruitList.code) = ''マスクメロン;
※外部への山椒があるサブクエリのことを相関サブクエリと呼ぶ。相関サブクエリで抽出されたnameがマスクメロンのデータを表示。
■INをつけたサブクエリ
SELECT name From fruitList WHERE code IN (SELECT code FROM orderList);
■どの候補にも一致しないデータを取り出す
SELECT name FROM fruitList WHERE code NOT IN (SELECT code FROM orderList);
■テーブル間で共通のデータだけを取り出す(EXISTS)
SELECT code, name FROM fruitList WHERE EXISTS (SELECT * FROM orderList WHERE fruitList.code = orderList.code);
※EXISTS:サブクエリの条件に一致している行が存在していればTRUEを返す
■サブクエリの条件に一致しないデータを抽出
SELECT code, name FROM fruitList WHERE NOT EXISTS (SELECT * FROM orderList WHERE fruitList.code = orderList.code);