Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのorder by についてまとめています。

order byはselect文で抽出したレコードを、指定したキーに従った昇順または降順にソートします。

SQL order byの構文

以下は、employees(社員)テーブルをbirth_date(誕生日)でソートする例です。

mysql> select * from employees order by birth_date limit 10;
+--------+------------+------------+--------------+--------+------------+
| emp_no | birth_date | first_name | last_name    | gender | hire_date  |
+--------+------------+------------+--------------+--------+------------+
| 207658 | 1952-02-01 | Kiyokazu   | Whitcomb     | M      | 1988-07-26 |
|  87461 | 1952-02-01 | Moni       | Decaestecker | M      | 1986-10-06 |
|  65308 | 1952-02-01 | Jouni      | Pocchiola    | M      | 1985-03-10 |
| 406121 | 1952-02-01 | Supot      | Remmele      | M      | 1989-01-27 |
|  91374 | 1952-02-01 | Eishiro    | Kuzuoka      | M      | 1992-02-12 |
| 237571 | 1952-02-01 | Ronghao    | Schaad       | M      | 1988-07-10 |
|  33131 | 1952-02-02 | Reinhold   | Savasere     | M      | 1998-01-30 |
|  51486 | 1952-02-02 | Jianwen    | Sigstam      | F      | 1989-07-20 |
|  61382 | 1952-02-02 | Kristof    | Ranft        | M      | 1989-04-21 |
|  59884 | 1952-02-02 | Fan        | Przulj       | M      | 1991-09-25 |
+--------+------------+------------+--------------+--------+------------+
10 rows in set (0.13 sec)

また、desc指定で降順、asc指定で昇順ソートになります。無指定だとデフォルトで、昇順ソートになります。

mysql> select * from employees order by birth_date asc limit 10;
+--------+------------+------------+--------------+--------+------------+
| emp_no | birth_date | first_name | last_name    | gender | hire_date  |
+--------+------------+------------+--------------+--------+------------+
| 207658 | 1952-02-01 | Kiyokazu   | Whitcomb     | M      | 1988-07-26 |
|  87461 | 1952-02-01 | Moni       | Decaestecker | M      | 1986-10-06 |
|  65308 | 1952-02-01 | Jouni      | Pocchiola    | M      | 1985-03-10 |
| 406121 | 1952-02-01 | Supot      | Remmele      | M      | 1989-01-27 |
|  91374 | 1952-02-01 | Eishiro    | Kuzuoka      | M      | 1992-02-12 |
 :
 :
mysql> select * from employees order by birth_date desc limit 10;
+--------+------------+------------+-----------------+--------+------------+
| emp_no | birth_date | first_name | last_name       | gender | hire_date  |
+--------+------------+------------+-----------------+--------+------------+
| 500000 | 1970-01-04 | TARO       | Yamada          | M      | 2001-04-07 |
|  60091 | 1965-02-01 | Surveyors  | Bade            | F      | 1988-05-01 |
|  66702 | 1965-02-01 | Deniz      | Thibadeau       | F      | 1986-03-11 |
|  33293 | 1965-02-01 | Adamantios | Vanwelkenhuysen | M      | 1987-12-12 |
|  59869 | 1965-02-01 | Zsolt      | Riefers         | M      | 1987-09-25 |
 :
 :

【関連記事】
SQLで昇順・降順でデータをソート!SQLの並び替えをマスターする | 

SQLのorder byで、抽出条件が異なる複数のselect文をソート

order byとサブクエリ、union allを組み合わせて、条件が異なるselect文の結果をorder byでソートすることができます。

select * from 
(select emp_no, first_name, last_name, hire_date from employees where birth_date > 1970-01-01 and gender = 'F'
union all
select emp_no, first_name, last_name, hire_date from employees where birth_date < 1960-01-01 and gender = 'M'
) t1
order by last_name, emp_no
limit 100;

+--------+------------+-----------+------------+
| emp_no | first_name | last_name | hire_date  |
+--------+------------+-----------+------------+
|  12516 | Sreenivas  | Aamodt    | 1990-03-06 |
|  12982 | Sachem     | Aamodt    | 1992-01-11 |
|  17400 | Basim      | Aamodt    | 1991-09-15 |
|  18182 | Dekang     | Aamodt    | 1988-05-25 |
|  27188 | Vasilii    | Aamodt    | 1996-10-12 |
|  27413 | Phuoc      | Aamodt    | 1987-08-28 |
|  28387 | Nahla      | Aamodt    | 1997-02-15 |
|  29182 | Arumugam   | Aamodt    | 1986-01-09 |
 :
 :

【関連記事】
SQLのorder byで複数条件を指定する union allとサブクエリで複雑な条件にも対応 | 

Oracleのorder byの構文

ORDER BY <Attr|Exp> [ASC|DESC] [,<Attr|Exp> [ASC|DESC]]*

関連)Oracle公式ドキュメント:ORDER BY句

以下は、Oracleでの実行例です。employee(社員)テーブルから、hire_date(雇用日)の降順にレコードを抽出しています。

SQL> select first_name, last_name, hire_date, salary
  2    from employee
  3  ORDER BY hire_date DESC;

FIRST_NAME            LAST_NAME             HIRE_DATE            SALARY
———————————           —————————————————     ————————————————     ————————
Roger                 Friedli               16-MAY-07             60000
Betsy                 James                 16-MAY-07             60000
Matthew               Michaels              16-MAY-07             70000
Donald                Newton                24-SEP-06             80000
Frances               Newton                14-SEP-05             75000
Emily                 Eckhardt              07-JUL-04            100000

6 rows selected.

SQL Serverのorder byの構文

以下は、SQL Serverでのorder byの例です。Production.Productテーブルから、Nameが「Lock Washer」で始まるレコードのProductID(製品ID)を昇順にソートして抽出します。

USE AdventureWorks2012;  
GO  
SELECT ProductID, Name FROM Production.Product  
WHERE Name LIKE 'Lock Washer%'  
ORDER BY ProductID;  

参考)ORDER BY 句 (Transact-SQL) – SQL Server | Microsoft Docs

MySQLのorder byの構文

MySQLでgroup byを指定したときの自動ソートを無効化するには、order by NULLを指定します。insert into ~ selectを使用する際など、ソートを無視したい場合に利用できます。

INSERT INTO foo
SELECT a, COUNT(*) FROM bar GROUP BY a ORDER BY NULL;

関連)MySQL :: MySQL 5.6 リファレンスマニュアル :: 8.2.1.15 ORDER BY の最適化

PostgreSQLのorder byの構文

PostgreSQLのorder byの機能拡張は2つあります。一つは、order byに式を指定できる点。

SELECT a, b FROM table1 ORDER BY a + b;

もうひとつは、asでつけた別名をorder byで使用できる点です。

SELECT a AS b FROM table1 ORDER BY a;

上記は、標準SQLではエラーとなります。

関連)PostgreSQL公式ドキュメント:行のソート

まとめ

ポテパンダの一言メモ
  • order byは抽出結果をソートする。昇順、降順の指定が可能
  • 複数のselect文の結果を、union allとサブクエリを使ってソートすることが可能
  • 一部のDBMSでは、カラム名だけではなく式や別名でのソート指定が可能

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。