SELECT文の基本的な使い方 Lv.2
Lv.1がない理由は、
すでに、マーケティングチームの人に教えくれたので、ないです。
SELECT文に対して、
基本的な内容を整理します。
ORDER BY
テーブルからSELECTでデータを照会する時、
「ORDER BY」を使うと、指定されたカラムを基準に並べ替えることができます。
昇順(ASC)または降順(DESC)二つのソート方法があります。
基本は、昇順(ASC)です。→ 昇順(ASC)は、省略が可能です。
Member Table
id | name | gender | grade | date |
---|---|---|---|---|
1 | Akagi | female | 94 | 1992-01-15 |
2 | Yamada | male | 88 | 1989-05-05 |
3 | Uchida | female | 52 | 1990-12-09 |
4 | Sakurai | male | 99 | 1985-06-08 |
5 | Midoriya | male | 10 | 1995-11-11 |
6 | Sakura | female | 60 | 1970-04-01 |
7 | Ishihara | female | 33 | 1988-03-15 |
SELECT * FROM Member;
SELECT * FROM Member ORDER BY grade ASC;
SELECT * FROM Member ORDER BY grade;
SELECT * FROM Member WHERE gender = "female" ORDER BY grade;
SELECT * FROM Member WHERE gender = "female" ORDER BY grade desc, date;
SELECT * FROM Member WHERE gender = "female" ORDER BY grade desc;
id | name | gender | grade | date |
---|---|---|---|---|
1 | Akagi | female | 94 | 1992-01-15 |
6 | Sakura | female | 60 | 1970-04-01 |
3 | Uchida | female | 52 | 1990-12-09 |
7 | Ishihara | female | 33 | 1988-03-15 |
GROUP BY
COUNT関数でデータを照会すると、全ての合計数を計算します。
タイプ別に合計したい時に、「GROUP BY」を使います。
Member2 Table
id | name | gender | Country | date |
---|---|---|---|---|
1 | Akagi | female | Japan | 1992-01-15 |
2 | Yamada | male | Japan | 1989-05-05 |
3 | Uchida | female | Korea | 1990-12-09 |
4 | Sakurai | male | USA | 1985-06-08 |
5 | Midoriya | male | USA | 1995-11-11 |
6 | Sakura | female | Japan | 1970-04-01 |
7 | Ishihara | female | Korea | 1988-03-15 |
SELECT COUNT(name), Country FROM Member2 GROUP BY Country;
SELECT COUNT(name), Country FROM Member2 WHERE date > "1970-01-01" GROUP BY Country;
SELECT COUNT(name) as cnt, Country FROM Member2 GROUP BY Country;
cnt | Country |
---|---|
3 | Japan |
2 | Korea |
2 | USA |
HAVING
GROUP BYを使う時、特定な条件をかけたい場合があります。
その時、使うのが「HAVING」です。
簡単に言うと、GROUP BYに使うWHERE文です。
SELECT COUNT(name) AS cnt, Country FROM Member2 GROUP BY Country HAVING cnt >= 2;
SELECT COUNT(name) AS cnt, Country FROM Member2 WHERE date > "1970-01-01" GROUP BY Country HAVING cnt >= 2;
SELECT COUNT(name) AS cnt, Country FROM Member2 WHERE date > "1970-01-01" GROUP BY Country HAVING cnt >= 2 ORDER BY cnt desc;
SELECT COUNT(name) AS cnt, Country FROM Member2 GROUP BY Country HAVING cnt > 2;
cnt | Country |
---|---|
3 | Japan |
SELECT文の定義順
①select:照会するカラム名を明示
②from:テーブル名を明示
③where:条件を明示
④group by:グループ化するフィールド名を明示
⑤having:グループ化されたデータに適用する条件を明示
⑥order by:並べ替えの基準となるフィールド名を明示
SELECT文の実行順
①from:実際の照会データがあるテーブルをまずメモリに認識
②where:条件を検索して照会するデータじゃないものを除く。
③group by:レコードを指定したフィールドごとに、重複したものを一つにまとめてグループ化する。
④having:グループ化されたデータに条件を適用して満足していないものは除く。
⑤select:実際のデータ値を出力する。
⑥order by:データを並べ替えて示す。