クエリーの結果を並べ替える - ORDER BY

クエリーの結果をソートしてみよう

これまで、テーブルから全レコードや、検索条件を指定してレコードを取得しました。

今回は、ソート順を指定して、クエリーの結果を並べ替えてみましょう。

サンプルデータを生成する

サンプルデータをまだ作っていない場合は、以下のクエリーを実行して、データを取得する元のテーブルを作っておいてください。

CREATE TABLE Students (
   StudentID INT NOT NULL PRIMARY KEY,
   FirstName VARCHAR(50) NULL,
   LastName VARCHAR(50) NULL,
   Birthday DATE NULL,
   Gender CHAR(1) NULL
);

INSERT INTO Students
  (StudentID, FirstName, LastName, Birthday, Gender)
 VALUES
  (1, 'Taro', 'Yamada', '1980-02-15', 'M'),
  (2, 'Hanako', 'Tanaka' ,'1979-12-30', 'F'),
  (3, 'Yuko', 'Suzuki', '1979-07-07', 'F'),
  (4, 'Takao', 'Sato', '1980-03-12', 'M'),
  (5, 'Hiroki', 'Takagi', '1979-04-05', 'M');

ORDER BY でソート順を指定する

クエリーの結果セットのソート順を指定するには SELECT 文の最後で ORDER BY 句を使います。


例えば、Students テーブルの全レコードを Birthday の昇順に並べたい時は、次のように指定します。

SELECT  *
FROM    Students
ORDER BY Birthday;

[ 実行結果 ]
Select 文 ORDER BY の実行結果 1


反対に、Students テーブルの全レコードを Birthday の降順に並べたい時は、以下のようにカラム名の後に DESC と追加します。

SELECT  *
FROM    Students
ORDER BY Birthday DESC;

[ 実行結果 ]
Select 文 ORDER BY の実行結果 2

昇順 が ASC で、降順が DESC ですが、何も指定しなければ 「 昇順 (ASC) 」 になります。

ORDER BY で複数のカラムでソート順を指定する

複数のカラムを使って並べ替えることも可能です。 カンマで区切って、カラムと順序を続けます。

例えば、まずは Gender(性別)で、次に Birthday の降順で並べ替えたい時は次のように指定します。

SELECT      *
FROM        Students
ORDER BY    Gender,
            Birthday DESC;

[ 実行結果 ]
Select 文 ORDER BY の実行結果 3


OORDER BY でカラムの別名でソート順を指定する

既存のテーブルのカラムだけでなく、SELECT 句で作ったカラムを使ってもソートすることができます。

その時は、SELECT 句でカラムエイリアス(別名)をつけて、それを ORDER BY 句で指定します。


例えば、YEAR は日付から年を取り出す関数で、YEAR(Birthday) のようにして Birthday の年を BirthdayYear というカラムとして取得しているとします。

そのようなクエリーの結果を、BirthdayYear と LastName で並べたい時は、次のように指定することができます。

SELECT      *,
            YEAR(Birthday) AS BirthdayYear
FROM        Students
ORDER BY    BirthdayYear,
            LastName;

[ 実行結果 ]
Select 文 ORDER BY の実行結果 4


TOP でソートの後に上位にくるレコードを取得する

SELECT 句で「TOP 取得したいレコード数」のように指定すると、上から指定したレコード数の結果セットを取得することができます。

ORDER BY を指定しないと、予期せぬレコードが取得される可能性があるので、通常 TOP と ORDER BY はセットで使われます。


例えば、先ほどの BirthdayYear と LastName で並べた結果の最初の 3 行だけを取得したい場合は次のように指定することができます。

SELECT      TOP 3
            *,
            YEAR(Birthday) AS BirthdayYear
FROM        Students
ORDER BY    BirthdayYear,
            LastName;
[ 実行結果 ]
Select 文 ORDER BY の実行結果 5


次は、T-SQL の集計関数を使ってみましょう。

© 2010-2024 SQL Server 入門