Open6

SQL を学習する

match1124match1124

IN の中でサブクエリを利用する

select * from テーブル名 where カラム名 in (サブクエリ);
match1124match1124

LIKE では 「_」アンダースコアも書ける

「_」アンダースコアは任意の文字列を意味する。

// hoge + 任意の2文字を持つ値を検索する
select * from テーブル名 where カラム名 like 'hoge__';
match1124match1124

WHERE と HAVING

このように考える

  • WHERE: 行に対する条件指定
  • HAVING: グループに対する条件指定

両方ともかける条件は同じである。

  • 定数
  • 集約関数
  • GROUP BY で指定した列名(集約キー)

しかし、基本的に WHERE句に書ける条件は WHERE 句に書いた方が良い。
なぜならそっちの方が速いケースが多いから。

速い理由1

ソートする行数が少なくなるから。

ソート処理はかなりマシンに負荷をかける「重い」処理である。
COUNT関数などを使って、条件を指定するとソートがされる。そのため、なるべくソートする行は少ない方が良い。
なので、先にWHEREでデータを絞り込みして少なくしておいた方が速くなる。

速い理由2

インデックスを利用できるから。
WHERE 句で条件指定している列にインデックスがあれば、インデックスを効かせた検索ができるため速度向上を期待できる。

match1124match1124

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

match1124match1124

SQL の実行順序

  1. from
  2. where
  3. group gy
  4. 集計関数
  5. having
  6. select
  7. order by
  8. limit