24
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【SQL】SELECT文の基本的な使い方(ORDER BY~HAVING)

Posted at

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:データを並べ替えて示す。

24
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?