ゼロからはじめるデータベース操作 SQL を読んだメモ

個人の学習で、バックログを作成して基本的な部分の本を読んでいます。
その際にとったメモをさらしていこうと思います。
メモなので、体裁は考えられていないです。

今回読んだ本はこちらです。

順序立てられていて、例とか、メリット、注意などが書かれていてとてもわかりやすい本でした。
以下、自分のわかってなかった部分のメモです(基本的なところは飛ばしてあります)

GROUP BY

注意

  • 条件指定はできない
  • ASは使えない
  • GROUP BYに書かれてないカラムをSELECT文に指定できない
  • 条件指定に集約関数を使えない

INSERT

使い方

  • INSERT INTO テーブル名(カラム名1, カラム名2, カラム名3) VALUES (値1, 値2, 値3)

UPDATE

  • UPDATE テーブル名 SET カラム名 = 値 WHERE 条件

ビュー

何が嬉しいか

  • どこにも保存していないので、容量を節約できる
  • 一度ビューを作っておけば、それを呼び出すだけで結果を得られる

使い方

  • 作る
    • create view ビュー名 as select文
  • 使う
    • select文の、fromにビュー名を書く
  • 消す
    • drop view ビュー名

注意

  • ビューを重ねることはできるけど、しないほうがいい
  • ビューのselect文の中で order by は使えない

ビューに対する更新

使える条件

  • distinctがない
  • fromのテーブルがひとつ
  • group by を使ってない
  • having を使ってない

サブクエリ

何が嬉しいか

  • 使い捨てのビュー(よくわからない)
  • 別のテーブルからselect文を発行できる
  • 例えば、全体の平均以上の商品だけ取り出すというときに、WHERE句には集約関数を使えないのがサブクエリでできる

使い方

  • select 文のwhere句の後にカッコ書きでselect文を書く
    • where カラム名 = (select…)
  • 定数や列名をかけるところ全てに書ける

注意

  • サブクエリが複数行返してはいけない

述語

何が嬉しいか

使い方

4つある

  • IN
    • サブクエリで返ってきた内容とORでマッチさせる
    • where カラム名 IN (select…)
  • EXISTS

  • LIKE

    • gsubみたいにパターンで検索できる
    • % 任意の文字列
    • _ 任意の一文字
    • where カラム名 like ‘%hoge%’
  • BETWEEN
    • 範囲で抽出できる
    • where カラム名 between 100 and 200

結合

内部結合(INNER JOIN)

別々のテーブルから、共通のカラムを使ってテーブルを結合すること

使い方

  • FROM テーブル名1 as A INNER JOIN テーブル名2 as B
  • ON A.結合したいキー1 = B.結合したいキー2

疑問

  • 値がなかったら全てNULLになる?→表示されない

外部結合(OUTER JOIN)

  • どちらか一方のテーブルに存在していれば出力される
  • 片方のテーブルに存在していなかったら、NULLとして出力される

使い方

  • FROM テーブル名1 as A LEFT OUTER JOIN テーブル名2 as B
    • 左側のテーブルをマスターにする
  • ON A.結合したいキー1 = B.結合したいキー2

クロス結合(CROSS JOIN)

別々のテーブルを組み合わせる際、全てのカラムの組み合わせで出力する
集合演算の一部

注意

出力結果が多くなるので、実行速度が遅くなるのと、マシンパワーが必要になる