テーブルやビューからデータを取得する順序を指定する ORDER BY [SQLServer]

SQL Server ロゴ

以前の記事では、SELECTステートメントを使用してデータベースのテーブルからデータを取得する方法を紹介しました。

テーブルやビューなどからデータを取得(選択)する SELECT FROM [SQLServer]
SQLでデータベースのテーブルやビューなどからデータ(行)を取得する際には、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は次のようになります。

学生テーブル

成績テーブル

テーブルにデータを挿入するINSERT(SQL)

テーブルには、以下のデータを挿入しておきます。

学生テーブル

成績テーブル

データの順序を指定する ORDER BY

SELECTステートメントでデータを並べ替えて取得する際は、ORDER BY句を使用します。

ORDER BY句は、SELECTステートメントの最後に記載します。

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 学生データを出席番号の昇順に並べ替えて取得する

実行結果

学生番号 氏名 出席番号
1002 佐藤 花子 1
1004 鈴木 次郎 2
1003 中村 一郎 3
1005 松本 桜 4
1001 山田 太郎 5

例2 成績データを科目の昇順 + 得点の降順に並べ替えて取得する

成績テーブルのデータを科目の昇順 + 得点の降順に並べ替えて取得するSQLは次のようになります。

実行結果

学生番号 科目 得点 評価
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