0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

達人に学ぶSQLのパターンを整理する

Posted at

はじめに

本棚に眠っていた達人SQLの本を読み直し、この書き方自分にも使えそうだなと思うものや、実務で使った書き方がいくつかあったので、個人用に簡単にまとめました。
本書では「リーダブルコード」のSQL版みたいな箇所やチューニングなどについても記載されていますが、そこは省きます。

目次

・CASE式
・ウィンドウ関数
・自己結合
・HAVING句

CASE式

SELECT 
    CASE WHEN REGION = '1' THEN NUMBER ELSE 0 END AS TOKYO
    CASE WHEN REGION = '2' THEN NUMBER ELSE 0 END AS OSAKA
FROM JAPAN
  • 何か
    • 取得結果から取得条件をさらに追加する
  • 用途
    • 複数の取得条件がある場合にSQLを複数書かなくても一つで完結できる
      • 汎用性が高い
    • 使い方によっては処理速度の向上が可能(チューニング)

ウィンドウ関数

関数名 OVER ( 
	PARTITION BY 列名 -- 指定した列をグループ化
	ORDER BY 列名 -- 順番の入れ替え
	RANGE|ROW BETWEEN -- 指定範囲を選択する
)	
  • 何か
  • 用途
    • 集計結果の内訳を表す際に重宝しそう
    • 抽出した内訳データの前後比較にも使用
  • 注意点
    • 実行計画はソートのため、チューニング対応によっては早くなったり遅くなったり分かれる

自己結合

SELECT SEME.name AS seme, MAMORI.name AS mamori
	FROM Janken SEME INNER JOIN Janken MAMORI
		ON hoge
  • 何か
    • 対象1テーブルを複数テーブルのように扱う
  • 用途
    • 1テーブル内で組み合わせパターンを出力したい場合に使用

HAVING句

SELECT hoge
	FROM Hoge
	GROUP BY hoge
	HAVING COUNT(*) = COUNT(hoge);
  • 何か
    • グループ化したデータに対して、さらに条件を追加する
  • 用途
    • WHERE句では絞り込めない具体的な抽出パターンがある際に使用

さいごに

改めて読み直してみると参考になる箇所が多くありました。
テーブル加工するSQL文もあったので、実務で使う機会があれば再度読み直して参考にさせていただこうと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?