Open6
SQL を学習する

CASE 式と CHECK 制約
命題の書き方

IN の中でサブクエリを利用する
select * from テーブル名 where カラム名 in (サブクエリ);

LIKE では 「_」アンダースコアも書ける
「_」アンダースコアは任意の文字列を意味する。
// hoge + 任意の2文字を持つ値を検索する
select * from テーブル名 where カラム名 like 'hoge__';

WHERE と HAVING
このように考える
- WHERE: 行に対する条件指定
- HAVING: グループに対する条件指定
両方ともかける条件は同じである。
- 定数
- 集約関数
- GROUP BY で指定した列名(集約キー)
しかし、基本的に WHERE句に書ける条件は WHERE 句に書いた方が良い。
なぜならそっちの方が速いケースが多いから。
速い理由1
ソートする行数が少なくなるから。
ソート処理はかなりマシンに負荷をかける「重い」処理である。
COUNT関数などを使って、条件を指定するとソートがされる。そのため、なるべくソートする行は少ない方が良い。
なので、先にWHEREでデータを絞り込みして少なくしておいた方が速くなる。
速い理由2
インデックスを利用できるから。
WHERE 句で条件指定している列にインデックスがあれば、インデックスを効かせた検索ができるため速度向上を期待できる。

相関サブクエリ
ウィンドウ関数 partition by

SQL の実行順序
- from
- where
- group gy
- 集計関数
- having
- select
- order by
- limit