RDBMS:ビューとサブクエリ

ビューとテーブル

テーブルを作る(CREATE TABLE)、検索する(SELECT)、更新する(INSERT,DELETE,UPDATE)を学んだが、新しい知識としてビュー(VIEW)を学ぶ。

ビューとは、『SELECT文を保存したもの』と覚えておけば良さそう。テーブルではデータを保存するが、ビューではSELECT文を記録する、つまり検索文を記憶したようなもの。検索文を記憶しておくと、その実行結果としてはテーブルデータが返ってくる。よって見た目としてはテーブルのデータと変わりないと言うことになる。

image.png

ビューの旨味

  • データを保持しないため記録域の節約ができる

    SELECT文によって表現できるテーブルの内容であれば、ビューを保持しておくだけで済むため、無駄に重複するデータを保持しなくて良くなる。

  • 作業効率が上がる

    頻繁に使うSELECT文を記録しておくことで、入力の手間が省けたり、体系化されたテーブルであればビューの使い回しもできる。

ビューを使う

ビューを作る

  • コマンド:CREATE VIEW ビュー名 (ビュー列名,..) AS SELECT文;
  • 実行例 image.png

ビューを実行する

使う時はFROM句にビュー名を指定してあげる。

  • 実行例 image.png

ビューを削除する

  • コマンド:DROP VIEW ビュー名;
  • 実行例
    image.png

サブクエリ

サブクエリとはその名の通り、『下位(Sub)の問い合わせ(Query)』なので1段レベルが下のSELECT文のこと。ビューはSELECT文を記録しFROM句に突っ込んでいたが、サブクエリではビューを用いずFROM句に直接SELECT文をつっこむ。

  • 実行例
    image.png

スカラ・サブクエリ

スカラ・サブクエリとは、「1行1列の戻り値を返す」と言う制限がついたサブクエリ。つまり返り値として単一の値が返ってくる。戻り値が単一の値なので、比較演算子の入力として利用できる。

例えば、『各レコードの値が、当該カラムの平均よりも高いものだけを抽出したい』というような時にスカラ・サブクエリは効果を発揮する。

上記をしたい場合には、AVG関数を用いると良いがWHERE句には使えない。そこでスカラ・サブクエリとして単一の値として利用する。

image.png

上記のようにスカラ・サブクエリは、定数やカラム名を書く場所に対して利用することができる。

相関サブクエリ

小分けにしたグループ内で比較する時に使用する。グループ分けした後に、各レコードデータとグループ内の平均を比較して条件に合うものだけを表示するみたいなことができるようになる。

例えば、下記のようなテーブルにおいて、各レコードが自身の商品分類の平均を超えるようなレコードを抽出する時を考える。商品分類毎の平均自体はDML文①のように抽出できる。 image.png

よって、どうにかDML文①をグループ毎のスカラ・サブクエリとして抽出できれば良い。それに対応させるようにDML文を構築したのが下記となる。 image.png

参考