日々積み重ねろ。

何も積み重ねて来なかった私が何かを積みかねて行くブログ。主にIT系の技術・知識を書いて行きます。

【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);