情弱エンジニアのなかのblog

一人前のエンジニアになる為のブログです

SQLのビューとサブクエリについて

検索を楽に行うために

1.ビューの概念説明

2.ビューの作り方

3.サブクエリの概念説明

4.サブクエリの作り方

1.ビューの概念説明

まずビューとは概念的にはテーブルと同じようなものなのですが、違いは実際のデータを保存しているかどうかになります。

通常のデータ保存方法をおさらいすると、 INSERT文を使ってレコードを追加するとそのデータは記憶装置等に保存されます。 そしてそのデータをSELECT文などでデータを検索します。

一方ビューの場合、データを記憶装置に保存しません。ビューが保存しているのは「SELECT文」そのものになります。 ビューは参照されるたびに一時的に仮想のテーブルを作ります。

メリットは二つあります。 1.記憶容量を大きく圧迫しない 2.SELECT文をいちいち書かなくてよい

ビューが含むデータは元のテーブルと連動して自動的に最新の状態に更新されます。 ビューを実行するとはつまり「そのSELECT文を実行する」ということになります。

  • よく使うSELECT文はビューにして使いまわしましょう

2.ビューの作り方

ビューを作るには「 CREATE VIEW 文 」を使います 使い方は以下のようになります。

CREATE VIEW ビュー名 (<ビューの列名1>,<ビューの列名2>, ...)
AS
<SELECT文>

ASキーワードの後にはSELECT文を使います。 SELECT文の列とビューの列は並び順で一致し、SELECT分の二番目の列はビューの二番目の列になります。 ビューの列名は、ビューの後ろのリストで定義します。

  • 重要なポイントは一度書いたSELECT文を何度も書かなくてよいという点になります。

さらにビューを元にさらにビューを作ることもできます。これを「多段ビュー」といいます。 ただし多くのビューを重ねることはパフォーマンスを下げるので推奨されません。

またビュー定義でORDER BY句は使えません。

まとめるとビューとはデータそのものを保存するのではなく、データを取り出すSELECT文だけを保存することで ユーザーの利便性を高めるものです。

3.サブクエリの概念説明

サブクエリとは一言でいうと「使い捨てのビュー」です。ビューとは異なり、SELECT文の実行終了後に消去されます。 ビューのように記憶装置に保存されることはなくSELECT文の実行終了後には消えてなくなります。

サブクエリ(subquery)とは「下位の(sub)」の「問合せ(query)」という意味です。 SELECT文が入れ子構造になっていてまずFROM句の中のSELECT文が実行され、そのあとに外側のSELECT文が実行される、という順番になります。

4.サブクエリの作り方

ではそのサブクエリの作り方の例を説明します。

SELECT <ビューの列名1> ,<ビューの列名2>, ...
FROM (SELET <フィールド名1> , COUNT(*) AS <ビューの列名2>
FROM <テーブル名>
GROUP BY <フィールド名1> ) AS <ビュー名>

といった形になります。順番としては 1. まず枠のFROM()の中のSELECT文が実行されます 2. 1の結果に対して外側のSELECT文が実行されます。

サブクエリの階層数には原則制限がないので、サブクエリの中のFROM句にさらにサブクエリを使って、その中のFROM句にサブクエリを使って、その中のFROM句にサブクエリを、、、 といくらでも入れ子を作ることが可能です。 ただしサブクエリの階層が深くなればなるほどSQL文が読みにくくなりますし、パフォーマンスにも悪影響を与えるため階層を深くしすぎることは避けましょう。

以上で簡単なビューとサブクエリの説明を終わりたいと思います。 また改めて更新したいと思います。