データの並べ替え(ORDER BY)| プログラミングの砂場

プログラミング学習やタイピング練習に役立つツールを公開しているサイトです。

データの並べ替え(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」を使う事によって、取り出した行の並べ替えができます。

「並べ替え」は「ソート」などと呼ばれます。

構文

SELECT 列名 FROM テーブル名 ORDER BY ソートする列名

注意点として「ORDER BY」は、ほとんどの場合SQLの最後に指定します。

例えば、「WHERE句」などのあるSQLでは、以下のように指定します。

SELECT 列名 FROM テーブル名 WHERE 条件 ORDER BY ソートする列名

「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 ソートする列名

または、

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」を使います。

構文

SELECT 列名 FROM テーブル名 ORDER BY ソートする列名 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」で指定する「ソートする列名」を「,(カンマ)」で区切ります。

SELECT 列名 FROM テーブル名 ORDER BY 列名1,列名2,....列名n

複数指定された列のソートされる優先順位は、左が最も高く右へ行くにしたがって低くなります。

そして、区切った列名それぞれに、「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)」についてです。


TOP