データの並べ替え(ORDER BY)
「ORDER BY」を使う事によってデータの並べ替えができます。ここでは、「ORDER BY」の使い方について見てみましょう。
目次
1. はじめに
ここでは、商品テーブル(Shouhin)を使って各種条件を指定してみましょう。
まずは、Shouhinの内容を確認してください。
SELECT * FROM Shouhin;
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
1 | アスパラガス | あすぱらがす | 1 | 256 |
2 | かぼちゃ | かぼちゃ | 1 | 300 |
3 | キャベツ | きゃべつ | 1 | 128 |
・ ・ ・ |
Shouhinの全データ(全行)が取得されました。
このデータに対して、「ORDER BY」を使用して行の並べ替えをしていきます。
2. 「ORDER BY」の使い方
「ORDER BY」を使う事によって、取り出した行の並べ替えができます。
「並べ替え」は「ソート」などと呼ばれます。
構文
注意点として「ORDER BY」は、ほとんどの場合SQLの最後に指定します。
例えば、「WHERE句」などのあるSQLでは、以下のように指定します。
「ORDER BY」は、指定した条件などで絞り込まれた行に対して「ソート(並べ替え)」が実施されるからです。
また、「ソートする列名」は、「,(カンマ)」区切りで複数指定することができます。
3. 並び順について
データの並び順には、「昇順」と「降順」の2種類があります。
「1,2,3,4,5」というデータがあったとします。
「昇順」でソートした場合の結果は、「1,2,3,4,5」となります。
「昇順」は、値の小さい順にソートされた状態を言います。
「降順」でソートした場合の結果は、「5,4,3,2,1」となります。
「降順」は、値の大きい順にソートされた状態を言います。
下で「昇順」、「降順」それぞれのソート(並べ替え)を見てみましょう。
3-1. 昇順でのソート(ASC)
昇順でのソートには、「ASC」を使います。
「ASC」は、省略も可能です。
「ASC」を省略した場合は、昇順でのソートとなります。
構文
または、
SELECT 列名 FROM テーブル名 ORDER BY ソートする列名 ASC
「昇順」でソートする場合は、「ASC」を省略することが多いです。
Shouhinテーブルから値段が安い順(値が小さい順=昇順)にソートして商品を取得してみます。
下のSQLはどちらも同じ結果になります。
「ASC」省略
SELECT
*
FROM
Shouhin
ORDER BY price
「ASC」あり
SELECT
*
FROM
Shouhin
ORDER BY price ASC
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
10 | ほうれん草 | ほうれんそう | 1 | 100 |
3 | キャベツ | きゃべつ | 1 | 128 |
9 | レタス | れたす | 1 | 128 |
・ ・ ・ |
||||
26 | セット商品 | せっとしょうひん | 4000 |
値段が昇順にソートされた商品一覧が取得できました。
次は、商品の「よみがな(name_kana)」を昇順(あいうえお順)にソートしてみます。
下のSQLはどちらも同じ結果になります。
「ASC」省略
SELECT
*
FROM
Shouhin
ORDER BY name_kana
「ASC」あり
SELECT
*
FROM
Shouhin
ORDER BY name_kana ASC
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
1 | アスパラガス | あすぱらがす | 1 | 256 |
11 | いちご | いちご | 2 | 380 |
12 | オレンジ | おれんじ | 2 | 350 |
・ ・ ・ |
||||
9 | レタス | れたす | 1 | 128 |
「よみがな」が昇順にソートされた商品一覧が取得できました。
3-2. 降順でのソート(DESC)
昇順でのソートには、「DESC」を使います。
構文
Shouhinテーブルから値段が高い順(値が大きい順=降順)にソートして商品を取得してみます。
SELECT
*
FROM
Shouhin
ORDER BY price DESC
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
26 | セット商品 | せっとしょうひん | 4000 | |
27 | セット商品2 | せっとしょうひん2 | 3000 | |
18 | ドリアン | どりあん | 2 | 2000 |
・ ・ ・ |
||||
10 | ほうれん草 | ほうれんそう | 1 | 100 |
値段が降順にソートされた商品一覧が取得できました。
次は、商品の「よみがな(name_kana)」を降順(おえういあ順)にソートしてみます。
SELECT
*
FROM
Shouhin
ORDER BY name_kana DESC
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
9 | レタス | れたす | 1 | 128 |
19 | リンゴ | りんご | 2 | 200 |
17 | メロン | めろん | 2 | 980 |
・ ・ ・ |
||||
1 | アスパラガス | あすぱらがす | 1 | 256 |
「よみがな」が降順にソートされた商品一覧が取得できました。
4. 複数列を指定してのソート
ここまでは、1つの列を指定してソートをしてきましたが、ここでは複数列を指定してのソートを見てみましょう。
ソート対象の列を複数指定する場合は、「ORDER BY」で指定する「ソートする列名」を「,(カンマ)」で区切ります。
複数指定された列のソートされる優先順位は、左が最も高く右へ行くにしたがって低くなります。
そして、区切った列名それぞれに、「ASC」と「DESC」を付けることができます。
先ほど、値段が安い順(値が小さい順=昇順)にソートして商品を取得した時のshouhin_id列を見てみると、「128円」の商品が3つあります。
SELECT
*
FROM
Shouhin
ORDER BY price
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
10 | ほうれん草 | ほうれんそう | 1 | 100 |
3 | キャベツ | きゃべつ | 1 | 128 |
9 | レタス | れたす | 1 | 128 |
13 | キウイ | きうい | 2 | 128 |
・ ・ ・ |
||||
26 | セット商品 | せっとしょうひん | 4000 |
この表に対して値段のほかに別の列もソート対象にしたい場合もありますよね?
要するに、「値段が安い順で、同じ値段の場合は、よみがなをあいうえお順でソート」といった場合です。
そのようなときに、ソート対象の列を複数指定します。
下は、「値段と、よみがな」でソートする例です。
SELECT
*
FROM
Shouhin
ORDER BY price, name_kana
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
10 | ほうれん草 | ほうれんそう | 1 | 100 |
13 | キウイ | きうい | 2 | 128 |
3 | キャベツ | きゃべつ | 1 | 128 |
9 | レタス | れたす | 1 | 128 |
・ ・ ・ |
||||
26 | セット商品 | せっとしょうひん | 4000 |
「ORDER BY」には「price, name_kana」と指定されているので、最初に値段が安い順にソートされ、次に同じ値段の商品のよみがなでソートされていることがわかります。
また、ソート対象の列には、個々に「ASC」や「DESC」を付けることができます。
例えば、「値段が高い順で、同じ値段の場合は、よみがなをあいうえお順でソート」したい場合は次のようにします。
SELECT
*
FROM
Shouhin
ORDER BY price DESC, name_kana
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
26 | セット商品 | せっとしょうひん | 4000 | |
・ ・ ・ |
||||
13 | キウイ | きうい | 2 | 128 |
3 | キャベツ | きゃべつ | 1 | 128 |
9 | レタス | れたす | 1 | 128 |
10 | ほうれん草 | ほうれんそう | 1 | 100 |
「ORDER BY」には「price DESC, name_kana」と指定されているので、最初に値段が高い順にソートされ、次に同じ値段の商品のよみがなでソートされていることがわかります。
5. まとめ
データの並べ替えについて「ORDER BY」の使い方を見てきました。
「ORDER BY」には、ソート対象の列名を指定します。
並び順には、「ASC(昇順)」と「DESC(降順)」があります。
通常、昇順にソートする場合、「ASC」を省略することが多いです。
ソート対象の列は、「,(カンマ)」区切りで複数指定できます。
複数指定した列個々に、「ASC」や「DESC」を指定することができます。
次は、「グループ単位での集計(GROUP BY)」についてです。