テーブルやビューからデータを取得する順序を指定する 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