【楽しく学ぶSQL入門】第4章:検索結果の加工

公開日:
更新日:

システム開発の現場では、データベースから抽出したデータをそのまま使うだけでなく、用途に合わせて見やすく整形したい場面が多々あります。SQLのSELECT文には、取得した結果を柔軟に加工するための便利な指示を追加できます。今回は、実務でも特によく使われる「検索結果の加工キーワード」を3つに厳選して見ていきましょう。

重複行の除外

SELECTの直後にDISTINCTを指定すると、抽出結果の中で内容が重複している行を自動的に1つにまとめて除外してくれます。

① 例)収支テーブルの費目を重複なく取得する。

SELECT DISTINCT expense
FROM income_and_expenditure;

expense
飲食費
交通費
娯楽費

行のソート

これまでの解説では、データは単にテーブルへ格納されている順に表示されていましたが、実務では「金額の高い順」や「日付の新しい順」に並んでいないと不便なことも多いですよね。そこで活躍するのが、SELECT文の末尾に記述するORDER BY句です。指定した列の値を基準にして、検索結果をきれいに並び替えることができます。

ORDER BYの構文

SELECT 列名
FROM テーブル名
[WHERE 条件式]
ORDER BY ソート基準列 [ASC | DESC]

昇順(小さい順・辞書順)を意味する「ASC」と、降順(大きい順・逆順)を意味する「DESC」の2種類から指定します。なお、何も指定しない場合はデフォルトで昇順として扱われるため、ASCは省略しても構いません。記述位置は常にSELECT文の「一番最後」になる点、および並び替えの基準を複数指定したい場合はカンマ区切りで列名を並べればよい点を押さえておきましょう。

ここで、基本的な「昇順(値が小さい順、順番通り)」の並び方の具体的な例を整理しておきます。
・数字なら…1, 2, 3, 4, 5, 6, 7, 8, 9, 10
・ひらがななら…五十音順(例えば、大阪の「お」は東京の「と」よりも先に来ますね)
・英語なら…A, B, C, D, E, F, G
・日付なら…過去から未来(古い順)への流れ

② 例)社員テーブルから男性で年齢が高い順に並べて取得する。

SELECT name1, name2, sex_id, age
FROM employee
WHERE sex_id = 1
ORDER BY age DESC;

name1 name2 sex_id age
佐藤 健蔵 1 57
田中 1 44
山田 1 29

先頭から数件だけを取得する

ORDER BY句による並び替えに続けてLIMIT句を組み合わせることで、検索結果として表示する件数をピンポイントで制限できます。

③ 例)社員テーブルから年齢が高い順に社員を10人取得する。

SELECT name1, name2, age
FROM employee
ORDER BY age DESC
LIMIT 10;

name1 name2 age
佐藤 健蔵 57
鈴木 花帆 48
田中 44
…(以下、指定した上位10件まで表示)

参考サイト:MySQL 公式サイト(SELECT statement)

お問い合わせ

CONTACT

業務システムに関するお困りごと、WEBサイトの制作など、
まずはお気軽にお問い合わせください。

会員サイト
CONTACT
06-6305-2278
採用サイトはこちらRECRUIT