以前の記事では、SELECTステートメントを使用してデータベースのテーブルからデータを取得する方法を紹介しました。
データを取得する際には、何らかの順番でデータを並べ替えたい時(ソートしたい時)があります。
例えば、学生の成績情報を管理するテーブルから試験の得点が高いものから順に並べたデータを取得したい場合や、学生の名簿を取得する際に氏名のあいうえお順に並べたデータを取得したい場合などです。
そこで今回は、SELECTステートメントを使用してデータを取得する際に、特定の列や条件によって並べ替えてデータを取得する方法について紹介します。
目次
データの並べ替えに使用するテーブル
本記事では、データの並べ替えを行うためのサンプルテーブルとして、学生情報を管理する「学生」テーブルと、成績情報を管理する「成績」テーブルを使用します。
テーブル定義
「学生」テーブルには、「学生番号」「氏名」「出席番号」の3つの列を作成します。
「成績」テーブルには、「学生番号」「科目」「得点」「評価」の4つの列を作成します。
列名 | データ型 | NULLを許容 | 主キー |
---|---|---|---|
学生番号 | int | NO | ○ |
氏名 | nvarchar(30) | NO | |
出席番号 | int | NO |
列名 | データ型 | NULLを許容 | 主キー |
---|---|---|---|
学生番号 | int | NO | ○ |
科目 | nvarchar(10) | NO | ○ |
得点 | int | NO | |
評価 | int | NO |
テーブルを作成するCREATE文(SQL)
テーブルを作成するSQLは次のようになります。
1 2 3 4 5 6 7 |
CREATE TABLE 学生 ( 学生番号 int NOT NULL, 氏名 nvarchar(30) NOT NULL, 出席番号 int NOT NULL, PRIMARY KEY(学生番号) ); |
1 2 3 4 5 6 7 8 |
CREATE TABLE 成績 ( 学生番号 int NOT NULL, 科目 nvarchar(10) NOT NULL, 得点 int NOT NULL, 評価 int NOT NULL, PRIMARY KEY(学生番号, 科目) ); |
テーブルにデータを挿入するINSERT(SQL)
テーブルには、以下のデータを挿入しておきます。
1 2 3 4 5 6 7 |
INSERT INTO 学生 (学生番号, 氏名, 出席番号) VALUES (1001, '山田 太郎', 5), (1002, '佐藤 花子', 1), (1003, '中村 一郎', 3), (1004, '鈴木 次郎', 2), (1005, '松本 桜', 4); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
INSERT INTO 成績 (学生番号, 科目, 得点, 評価) VALUES (1001, '国語', 42, 2), (1001, '数学', 64, 3), (1001, '英語', 51, 3), (1002, '国語', 92, 5), (1002, '数学', 70, 4), (1002, '英語', 64, 3), (1003, '国語', 66, 3), (1003, '数学', 32, 2), (1003, '英語', 73, 4), (1004, '国語', 40, 2), (1004, '数学', 94, 5), (1004, '英語', 90, 5), (1005, '国語', 46, 2), (1005, '数学', 25, 1), (1005, '英語', 83, 4); |
データの順序を指定する ORDER BY
SELECTステートメントでデータを並べ替えて取得する際は、ORDER BY句を使用します。
ORDER BY句は、SELECTステートメントの最後に記載します。
1 2 3 4 5 6 7 8 9 |
SELECT 列1, 列2, 列3, ... FROM テーブル ORDER BY 並べ替えの条件 |
ORDER BY句には並べ替えを行う条件を指定します。
例えば「番号」という列の値の順に並べるのであれば、「ORDER BY 番号」となります。
昇順と降順
ORDER BY句を使用してデータを並べ替える際は、値が小さいものから並べる「昇順」と、大きいものから並べる「降順」のいずれかが指定できます。
昇順を指定する場合は「ASC」、降順を指定する場合は「DESC」というキーワードを付加します。
上記の「ORDER BY 番号」で番号の昇順に並べるのであれば「ORDER BY 番号 ASC」となり、降順に並べるのであれば「ORDER BY 番号 DESC」となります。
「ASC」「DESC」の指定を省略した場合は昇順(ASCを指定した場合と同様)になります。
ORDER BY句の使用例
ここでは、ORDER BY句を使用したSELECTステートメントでデータを取得する例を示します。
例1 学生データを出席番号の昇順に並べ替えて取得する
1 2 3 4 5 6 7 8 9 |
学生テーブルのデータを出席番号の昇順に並べ替えて取得するSQLは次のようになります。 SELECT 学生番号, 氏名, 出席番号 FROM 学生 ORDER BY 出席番号; |
学生番号 | 氏名 | 出席番号 |
---|---|---|
1002 | 佐藤 花子 | 1 |
1004 | 鈴木 次郎 | 2 |
1003 | 中村 一郎 | 3 |
1005 | 松本 桜 | 4 |
1001 | 山田 太郎 | 5 |
例2 成績データを科目の昇順 + 得点の降順に並べ替えて取得する
成績テーブルのデータを科目の昇順 + 得点の降順に並べ替えて取得するSQLは次のようになります。
1 2 3 4 5 6 7 8 9 10 |
SELECT 学生番号, 科目, 得点, 評価 FROM 成績 ORDER BY 科目 ASC, 得点 DESC; |
学生番号 | 科目 | 得点 | 評価 |
---|---|---|---|
1004 | 英語 | 90 | 5 |
1005 | 英語 | 83 | 4 |
1003 | 英語 | 73 | 4 |
1002 | 英語 | 64 | 3 |
1001 | 英語 | 51 | 3 |
1002 | 国語 | 92 | 5 |
1003 | 国語 | 66 | 3 |
1005 | 国語 | 46 | 2 |
1001 | 国語 | 42 | 2 |
1004 | 国語 | 40 | 2 |
1004 | 数学 | 94 | 5 |
1002 | 数学 | 70 | 4 |
1001 | 数学 | 64 | 3 |
1003 | 数学 | 32 | 2 |
1005 | 数学 | 25 | 1 |