本記事の第3回「レコードの選択と整列~SELECT命令をしっかり理解する」でORDER BY句の基本について解説しました。ここでは、ORDER BY句の複数指定について補足しておきます。
- 整列キーは左から評価される -
ORDER BY句による整列で指定するキーフィールドは、「,」で区切って複数列挙できます。書式は以下のようになります。
SELECT <フィールド名>(, <フィールド名>, <フィールド名>...)
FROM <テーブル名> ORDER BY <キーフィールド名> [ASC | DESC]
(,<キーフィールド名> [ASC | DESC] ...)
キーフィールドを複数指定した場合、左側から順に整列が行われます。例えば、「商品_mr」テーブルを「販売単価」の低い順に並べ、同じ販売単価のレコードが複数あった場合には、それらの中で「在庫数」の多い順に並べるなら、以下のようにします。
SELECT * FROM 商品_mr
ORDER BY 販売単価 ASC, 在庫 DESC
この場合、レコードはまず左側の「販売単価 ASC」によって「販売単価の昇順」に並べられ、販売単価が同じレコードが複数存在する場合に限って、右側の「在庫 DESC」に従ってそれらを並べ替えます。
- 順序を入れ替えると結果が変わる -
以下のようにキーフィールドの順序を逆にすると、まず全体を「在庫数」の降順に並べ、同じ在庫数のレコードを「販売単価」の昇順に並べ替えます。
SELECT * FROM 商品_mr
ORDER BY 在庫 DESC, 販売単価 ASC
順序が異なると結果がまったく違うものになることに注意しましょう。画面5と画面6の結果を見比べてください。
以下の例は、WHERE句で「在庫数が20以下の商品」を抽出し、それらをまず在庫数の多い順に並べ替えた上で、同じ在庫数のレコードを「商品ID」の昇順に並べ替えます。
SELECT * FROM 商品_mr WHERE 在庫 <= 20 ORDER BY 在庫 DESC, 商品ID
|
|
|