更新日:
システム開発の現場では、データベースから抽出したデータをそのまま使うだけでなく、用途に合わせて見やすく整形したい場面が多々あります。SQLのSELECT文には、取得した結果を柔軟に加工するための便利な指示を追加できます。今回は、実務でも特によく使われる「検索結果の加工キーワード」を3つに厳選して見ていきましょう。
重複行の除外
SELECTの直後にDISTINCTを指定すると、抽出結果の中で内容が重複している行を自動的に1つにまとめて除外してくれます。
① 例)収支テーブルの費目を重複なく取得する。
| expense |
|---|
| 飲食費 |
| 交通費 |
| 娯楽費 |
行のソート
これまでの解説では、データは単にテーブルへ格納されている順に表示されていましたが、実務では「金額の高い順」や「日付の新しい順」に並んでいないと不便なことも多いですよね。そこで活躍するのが、SELECT文の末尾に記述するORDER BY句です。指定した列の値を基準にして、検索結果をきれいに並び替えることができます。
ORDER BYの構文
昇順(小さい順・辞書順)を意味する「ASC」と、降順(大きい順・逆順)を意味する「DESC」の2種類から指定します。なお、何も指定しない場合はデフォルトで昇順として扱われるため、ASCは省略しても構いません。記述位置は常にSELECT文の「一番最後」になる点、および並び替えの基準を複数指定したい場合はカンマ区切りで列名を並べればよい点を押さえておきましょう。
ここで、基本的な「昇順(値が小さい順、順番通り)」の並び方の具体的な例を整理しておきます。
・数字なら…1, 2, 3, 4, 5, 6, 7, 8, 9, 10
・ひらがななら…五十音順(例えば、大阪の「お」は東京の「と」よりも先に来ますね)
・英語なら…A, B, C, D, E, F, G
・日付なら…過去から未来(古い順)への流れ
② 例)社員テーブルから男性で年齢が高い順に並べて取得する。
| name1 | name2 | sex_id | age |
|---|---|---|---|
| 佐藤 | 健蔵 | 1 | 57 |
| 田中 | 充 | 1 | 44 |
| 山田 | 務 | 1 | 29 |
先頭から数件だけを取得する
ORDER BY句による並び替えに続けてLIMIT句を組み合わせることで、検索結果として表示する件数をピンポイントで制限できます。
③ 例)社員テーブルから年齢が高い順に社員を10人取得する。
| name1 | name2 | age |
|---|---|---|
| 佐藤 | 健蔵 | 57 |
| 鈴木 | 花帆 | 48 |
| 田中 | 充 | 44 |
| …(以下、指定した上位10件まで表示) | ||

