テーブルの並び順を決める時にはOrder By(オーダーバイ)を使用します。
Order byを使いこなしてテーブルの並び順を自由自在に操れるようになりたいと思います。
動作環境
SQL FIDDLEでMySQL5.6、PostgreSQL9.6、SQLiteで動作確認しました。
下記文章は主にPostgreSQLで仕様で調べています。
Order By とは
Order By(オーダーバイ)は並び順を決める際に利用します。sort(ソート/整列)する時に使うとも言われます。
順番には昇順(ASC/小さい方から大きい方へ並べる)と降順(DESC/大きい方から小さい方へ並べる)があります。デフォルトは昇順です。
構文
SELECT文の例。
SELECT * FROM テーブル名 order by 列名 ASC/DESC
昇順(ASC)はデフォルトであるため省略した場合、ASC/DESCの記載を昇順になります。
ちなみにASCはAscending(上に向かう)、DEDCはDescending(下がっていく)の省略系です。
Order By を使ってみよう!
Order Byのサンプルコードを見てみましょう。
準備
以下のテーブルを使用します。
ItemID | ItemName | Stock | ArriveDate |
---|---|---|---|
1 | ゼリー | 40 | 2020-04-20 |
2 | プリン | 65 | 2020-04-20 |
3 | ティラミス | 40 | 2020-04-22 |
4 | ヨーグルト | 10 | 2020-04-20 |
上記テーブルの作成用コードです。
— CREATE文 stockControl テーブル
CREATE TABLE stockControl (
ItemID numeric(8, 0) unique not null,
ItemName character varying (20),
Stock numeric(8, 0),
ArriveDate DATE,
primary key(ItemID)
);
— stockControlテーブル用INSERT文
insert into stockControl
values(0001, ‘ゼリー’, 40, ‘2020-04-20’),
(0002, ‘プリン’, 65, ‘2020-04-20’),
(0003, ‘ティラミス’, 40, ‘2020-04-22’),
(0004, ‘ヨーグルト’, 10, ‘2020-04-20’);
Order Byで昇順で並べてみる
ArriveDateを基に昇順で並べてみます。
SELECT
*
FROM
stockControl
order by
ArriveDate
昇順はデフォルトなのでASCは省略しています。
■ 結果
ItemID | ItemName | Stock | ArriveDate |
---|---|---|---|
1 | ゼリー | 40 | 2020-04-20 |
2 | プリン | 65 | 2020-04-20 |
4 | ヨーグルト | 10 | 2020-04-20 |
3 | ティラミス | 40 | 2020-04-22 |
日付が綺麗に昇順で並びました。
Order Byで降順で並べてみる
Stockが多い順(降順)に並べます。
SELECT
*
FROM
stockControl
order by
Stock Desc
■ 結果
ItemID | ItemName | Stock | ArriveDate |
---|---|---|---|
2 | プリン | 65 | 2020-04-20 |
1 | ゼリー | 40 | 2020-04-20 |
3 | ティラミス | 40 | 2020-04-22 |
4 | ヨーグルト | 10 | 2020-04-20 |
Stockで降順で並びました。
Order byで複数指定してみる
Order byでは複数列を指定することができます。
はじめに書いた方が優先度が高いです。
SELECT
*
FROM
stockControl
order by
ArriveDate Desc,
Stock Desc
それぞれの列に昇順か降順か指定します。わかりやすく降順にしています。
ItemID | ItemName | Stock | ArriveDate |
---|---|---|---|
3 | ティラミス | 40 | 2020-04-22 |
2 | プリン | 65 | 2020-04-20 |
1 | ゼリー | 40 | 2020-04-20 |
4 | ヨーグルト | 10 | 2020-04-20 |
ArriveDate(日付順)で並べ、さらにStock(在庫)が多い順に並んでいます。
おわり
何回書いてもASCとDEDCの英単語を忘れてしまいます。