はじめに
さて今回もやってきます!スッキリわかるSQL3章です!
本記事もこの家計簿テーブルを題材としています。
検索結果の加工
実はSELECT文だけに可能な修飾があります。
抽出した検索文を加工(並び替えや重複削除など)できます。
検索結果を加工する主なキーワード
比較演算子 | 意味 |
---|---|
DISTINCT | 検索結果から重複行を除外する |
ORDERBY | 検索結果の順序を並び替える |
LIMIT | 検索結果から件数を限定して取得する |
UNION | 検索結果にほかの検索結果を足し合わせる |
EXCEPT | 検索結果からほかの検索結果を差し引く |
INTERSECT | 検索結果とほかの検索結果で重複する部分を取得する |
いっぱいありますね! さくっと書き方説明します。
DISTINCT -重複行を除外する
SELECT DISTINCT 入金額
FROM 家計簿
これで抽出した結果は、重複されません!
ORDERBY -検索結果を並び替える
ASCで昇順,DESCで降順の設定ができる。
ただし、デフォルトはASC(昇順)なので、ASCは書かなくてもいいです!
SELECT *
FROM 家計簿
ORDER BY 出金額
家計簿テーブルの出金額が低い順に並び変えられて出力されます。
SELECT *
FROM 家計簿
ORDER BY 出金額 DESC ←DESCを追加
家計簿テーブルの出金額が高い順に並び変えられて出力されます。
複数の列で並び替える
たとえば入金額の降順で並び替える。入金額が等しい行については
さらに出金額の降順に並び替えるという複数の列の並び替えができます
SELECT *
FROM 家計簿
ORDER BY 入金額 DESC, 出金額 DESC ←複数の列
列番号を指定した並び替え
ORDER BYでは、並び替えの基準とする列を列名ではなく列番号で指定ることも可能。
列番号とは、選択例リストにおける列の順番のことで、SELECT命令に記述した順に1から数えます。
SELECT *
FROM 家計簿
ORDER BY 4 DESC, 5 DESC
(ORDER BY 入金額 DESC, 出金額 DESC )この文と同じです。
LIMIT -先頭から数行だけ取得する
LIMIT 取得行数 (OFFSET 先頭から除外する行数)
実際にやってみます。
出金額の高い順に3件取得する
SELECT 費目, 出金額
FROM 家計簿
ORDER BY 出金額 DESC LIMIT 3
3番目に高い出金額だけを取得する
SELECT 費目, 出金額
FROM 家計簿
ORDER BY 出金額 DESC LIMIT 1 OFFSET 2
ここからは 2つのテーブルを扱う時に使う集合演算子の紹介
データ数が多くなって、テーブル2つに分ける際に、SELECT文を2つのテーブルにあてるのは面倒なので
一気にやっちゃおう!ができるもの
※集合演算子は、選択列リストと列数のそれぞれのデータ型が一致していないといけない。
UNION -2つの結果を足し合わせたもの
家計簿テーブルと家計簿アーカイブテーブルが2つあった時。
SELECT 費目,入金額,出金額 FROM 家計簿
UNION
SELECT 費目,入金額,出金額 FROM 家計簿アーカイブ
ORDER BY 2,3,1
EXCEPT(エクセプト) -最初の検索結果から次の検索結果と重複するものを取り除いたモノ
SELECT 費目 FROM 家計簿
EXCEPT
SELECT 費目 FROM 家計簿アーカイブ
INTERSECT -2つの検索結果で重複するもの(共通する行を集める)
SELECT 費目 FROM 家計簿
INTERSECT
SELECT 費目 FROM 家計簿アーカイブ
まとめ
・検索結果を加工し、取得データを色々加工できる。
・集合演算子を使って、2つのテーブルから簡単にデータを取得できる。
参考記事
- スッキリわかるSQL入門ドリル