はじめに
SQL未経験の私が、勉強したことを整理、備忘のための記事を作成しました。
1つの記事だと長くなりすぎるので、分割した1つになります。
なお、この記事内のサンプルはすべて、以下のテーブルに対して実施したものです。
id |
name |
goods |
price |
0001 |
里帆 |
時計 |
200000 |
0002 |
美桜 |
カバン |
150000 |
0003 |
遥 |
アクセサリー |
300000 |
0004 |
里帆 |
カバン |
300000 |
0005 |
美桜 |
アクセサリー |
200000 |
0006 |
遥 |
カバン |
500000 |
0007 |
美桜 |
カバン |
200000 |
グループ分け(GROUP BY)
- 指定したカラムの値をキーとしてグループ化できる
- GROUP BY句にないカラムをSELECT句で使用することはできない
- GROUP BY句で別名を使用できない
- 実行順序
FROM
⇒ WHERE
⇒ GROUP BY
⇒ SELECT
構文
SELECT <カラム1> ,<カラム2>...
FROM <テーブル名>
GROPU BY <カラム1>, <カラム2>...
サンプル
SELECT name
FROM hogehoge
GROUP BY name;
サンプル(集約関数と組み合わせ)
SELECT name, COUNT(*)
FROM hogehoge
GROUP BY name;
サンプル(複数カラムでグループ化)
SELECT name, goods, COUNT(*)
FROM hogehoge
GROUP BY name, goods;
name |
goods |
count |
美桜 |
カバン |
2 |
遥 |
アクセサリー |
1 |
美桜 |
アクセサリー |
1 |
遥 |
カバン |
1 |
里帆 |
時計 |
1 |
里帆 |
カバン |
1 |
サンプル(NG)
- GROUP BY句にないカラムをSELECT句では使用できない
この例だとname
でグループ化されており、グループ化されたレコードにgoods
は混在しているので、goods
でSELECTできない
SELECT name, goods, COUNT(*)
FROM hogehoge
GROUP BY name
サンプル(これはOK)
SELECT name, COUNT(*)
FROM hogehoge
GROUP BY name, goods;
name |
count |
美桜 |
2 |
遥 |
1 |
美桜 |
1 |
遥 |
1 |
里帆 |
1 |
里帆 |
1 |
グループ化したデータを絞り込む(HAVING)
- 実行順序
FROM
⇒ WHERE
⇒ GROUP BY
⇒ HAVING
⇒ SELECT
サンプル
SELECT name, COUNT(*)
FROM hogehoge
GROUP BY name
HAVING COUNT(*) = 2;
検索結果の並び替え(ORDER BY)
- 実行順序
FROM
⇒ WHERE
⇒ GROUP BY
⇒ HAVING
⇒ SELECT
⇒ ORDER BY
- 複数指定したときは、左側のキーから優先してソート
サンプル
SELECT name, goods, price
FROM hogehoge
ORDER BY price;
name |
count |
price |
美桜 |
カバン |
150000 |
美桜 |
アクセサリー |
200000 |
美桜 |
カバン |
200000 |
里帆 |
時計 |
200000 |
里帆 |
カバン |
300000 |
遥 |
アクセサリー |
300000 |
遥 |
カバン |
500000 |
サンプル(降順)
SELECT name, goods, price
FROM hogehoge
ORDER BY price DESC;
name |
count |
price |
遥 |
カバン |
500000 |
遥 |
アクセサリー |
300000 |
里帆 |
カバン |
300000 |
里帆 |
時計 |
200000 |
美桜 |
アクセサリー |
200000 |
美桜 |
カバン |
200000 |
美桜 |
カバン |
150000 |
サンプル(複数のソートキー)
SELECT name, goods, price, id
FROM hogehoge
ORDER BY price, id;
name |
count |
price |
id |
美桜 |
カバン |
150000 |
0002 |
里帆 |
時計 |
200000 |
0001 |
美桜 |
アクセサリー |
200000 |
0005 |
美桜 |
カバン |
200000 |
0007 |
遥 |
アクセサリー |
300000 |
0003 |
里帆 |
カバン |
300000 |
0004 |
遥 |
カバン |
500000 |
0006 |