【SQL入門】ORDER BY句の基本構文


SELECT文で取得したデータを並べ替えたいときは、ORDER BY句を使用します


基本構文は以下の通りです。

 

昇順で並べ替える場合

SELECT データを取得するカラム名
FROM 対象テーブル名
ORDER BY 並べ替えの基準にするカラム名 ASC;

 

降順で並べ替える場合

SELECT データを取得するカラム名
FROM 対象テーブル名
ORDER BY 並べ替えの基準にするカラム名 DESC;

 

ORDER BY句の並べ替えは、数値型のカラムだけでなく日付型や文字列型のカラムに対しても使用できます。
参考:データ型とは

本記事では例として以下のテーブル(テーブル名:teachers)を使用します。


1.数値型のカラムを基準にして並べ替える。

昇順で並べ替える際にはASCを使用します。
降順で並べ替える際にはDESCを使用します。
ASCやDESCの記述を省略した際には昇順で並べ替えが行われます。

例1-1.ageカラムを基準にして、teachersテーブルを昇順で並べ替える(ASCあり)。

SELECT *
FROM teachers
ORDER BY age ASC;

例1-2.ageカラムを基準にして、teachersテーブルを昇順で並べ替える(ASCなし)。

SELECT *
FROM teachers
ORDER BY age;

例1-1、1-2どちらの場合でもageカラムを基準にして昇順で並べ替えることができました。


2.日付型のカラムを基準にして並べ替える。

日付型のカラムを基準にした場合、日付の新旧を比較します。
昇順であれば古い日付から新しい日付、降順であれば新しい日付から古い日付に並べ替えます。

例2.birthdayカラムを基準にして、teachersテーブルを降順で並べ替える。

SELECT *
FROM teachers
ORDER BY birthday DESC;

生年月日が新しい順に並べ替えることができました。


3.文字列型のカラムを基準にして並べ替える。

文字列型のカラムを基準にした場合、文字コードの大小を比較します。
昇順であれば文字コードの小さい方から大きい方へ、降順であれば文字コードの大きい方から小さい方へと並べ替えます。
※文字コード…コンピュータ内部で文字を表すのに使う数値のこと。

例3.nameカラムを基準にして、teachersテーブルを昇順で並べ替える。

SELECT *
FROM teachers
ORDER BY name ASC;

nameカラムに格納されているデータの先頭の文字である「タ」、「ナ」、「ハ」、「テ」の文字コードを昇順で並べると「タ」、「テ」、「ナ」、「ハ」の順になるので上の画像のような結果が得られます。
先頭の文字が同じである場合は二番目の文字を比較します。
二番目の文字も同じなら三番目の文字を…というように、先頭から順に大小比較していきます。


4.ORDER BY句でカラムを複数指定した場合

ORDER BY句でカラムを複数指定することもできます。
カラムを複数指定した場合、最初に指定したカラムを基準に並べ替えを行い、値が同じものに関しては次に指定したカラムを基準に並べ替えを行います。
カラムごとに昇順、降順を指定します。

例4.teachersテーブルのstudentsカラムは降順、ageカラムは昇順で並べ替えを行う。

SELECT *
FROM teachers
ORDER BY students DESC, age ASC;

最初にstudentsカラム基準で並べ替え(降順)を行い、値が重複しているところ(students = 10)はageカラム基準で並べ替え(昇順)を行っています。


学習のポイント

・ORDER BY句を使用することで、基準となるカラムを指定して並べ替えを行うことができる。

・昇順の場合はASC、降順の場合はDESCを指定する。


練習問題

問題として使用するデータは「SQL練習問題」のものを使用しています。
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。

worldcup2014.zip

CREATE DATABASE worldcup2014;

use worldcup2014

source C:\worldcup2014.sql

1.2014年ワールドカップで行われた試合を時系列に沿って表示してください。
pairings_tmpテーブル(kickoff,my_country,enemy_countryの3つのカラムで構成されている)を使って答えを導いてください。

答え
  • このエントリーをはてなブックマークに追加

PAGE TOP