ビューとは
SELECT ステートメントで結合するテーブルが増えてくると、記述が複雑になってきます。このよ うな場合に、SELECT ステートメントを 1 つのパッケージとして保存できる機能があります。そ れが「ビュー」(View)機能です。ビューを作成するには、CREATE VIEW ステートメントを利 用します。構文は、次のとおりです。
CREATE VIEW ビュー名 AS
SELECT ステートメント
CREATE VIEW に続けてビュー名を記述し、AS 以下へ SELECT ステートメントを記述するだ けで、ビューを作成することができます。
Let's Try
それでは、実際にビューを作成してみましょう。
1. まずは、「受注」と「受注明細」、「商品」、「商品区分」テーブルを結合する SELECT ステー トメントに対して、「受注商品一覧」という名前のビューを作成してみましょう。
CREATE VIEW 受注商品一覧 AS
SELECT * FROM 受注明細
INNER JOIN 受注 ON 受注明細.受注コード = 受注.受注コード INNER JOIN 商品 ON 受注明細.商品コード = 商品.商品コード INNER JOIN 商品区分 ON 商品.区分コード = 商品区分.区分コード
結果はエラーになります。ビューを作成する場合は、SELECT で取得する列に同じ名前の列が
CREATE VIEW 受注商品一覧 AS
SELECT 受注.受注コード, 受注日, 受注明細.単価, 数量, 商品名, 区分名 FROM 受注明細
INNER JOIN 受注 ON 受注明細.受注コード = 受注.受注コード INNER JOIN 商品 ON 受注明細.商品コード = 商品.商品コード INNER JOIN 商品区分 ON 商品.区分コード = 商品区分.区分コード
結果ウィンドウへ「コマンドは正常に完了しました」と表示されれば、ビューの作成が完了し ています。このようにビューを作成する場合は、列名を指定することに注意してください(も し、同じ列名を取得する場合には、AS を使って別名を付けて取得するようにします)。
2. 作成したビューは、次のようにオブジェクト エクスプローラーの[ビュー]フォルダーを展 開すると確認することができます。
Note: バッチの先頭ではない場合のエラー
CREATE VIEW ステートメントは、バッチの先頭で実行しないと、次のエラーが発生します。
バッチの区切りは、「go」コマンドで行えるので、CREATE VIEW ステートメントを実行する上へ「go」を追加す れば、このエラーを回避することができます。
バッチについては、本自習書シリーズの「Transact-SQL 入門」で詳しく説明しています。
ビューの参照
1. 作成したビューを参照するには、テーブルを利用する場合と同じように SELECT ステートメ ントの FROM 句で指定します。
SELECT * FROM 受注商品一覧 ORDER BY 受注コード
バッチの区切りとなる
「go」を記述する
2. 次に、GROUP BY 句を利用して、"区分ごとの受注金額の合計" を取得してみましょう。
SELECT 区分名, SUM(単価*数量) FROM 受注商品一覧 GROUP BY 区分名 ORDER BY 区分名
わずか 2 行のステートメントだけで、区分ごとに受注金額の合計を取得できたことを確認で きます。このように、ビューを利用すれば、複雑な JOIN を記述することなく、複数のテー ブルをまたがったデータ取得を簡単に行えるようになります。なお、ビューは、テーブルと同 じように利用できるので “仮想表” とも呼ばれています。
Note: ACCESS のクエリ機能に相当
ビューは、Access の「クエリ」機能に相当します。ただし、Access のクエリとまったく同じというわけではあり ません。Access のクエリには、“パラメーター化” を行う機能がありますが、ビューにはないからです。SQL Server でパラメーター化クエリを作成したい場合は、「ストアド プロシージャ」機能を利用する必要があります。ストア ド プロシージャについては、本自習書シリーズの「開発者のための Transact-SQL 応用」編で詳しく説明して いますので、こちらもぜひご覧いただければと思います。
Note: Management Studio でのビューの作成: ビュー デザイナー
Management Studio の「ビュー デザイナー」機能を利用すると、Access でクエリを作成するのと同じような 感覚で、GUI 操作でビューを作成することができます。これは、次のように操作します。
Note: ビュー経由の更新
ビューに対して、UPDATE や INSERT、DELETE など、更新系のステートメントを実行することも可能です。た だし、ビュー内で GROUP BY や集計関数、DISTINCT 処理を行っていたり、演算結果を行っている列に対して は、更新系のステートメントを実行することはできません。なお、このような場合に「INSTEAD OF トリガー」
と呼ばれるトリガーを作成すると、ビューに対して更新系のステートメントが実行されたときに、別の処理を記述 できるようになります(ビューのもとになっているテーブルを直接更新するようなステートメントを記述できるよ うになります)。
Goal !
以上ですべての操作が完了です。最後までこの自習書の内容を試された皆さま、いかがでしたでし ょうか? 今回は「SQL 基礎の基礎」ということで、SQL の基本的な利用方法のみを説明しまし たが、実際のアプリケーションの開発には、Transact-SQL ステートメントを習得しておくことが 非常に重要になります。開発者の方は、本自習書シリーズの「Transact-SQL 入門」と「開発者の ための Transact-SQL 応用」にも、ぜひチャレンジしてみていただければと思います。
Transact-SQL 入門
SQL Server を操作するための独自の言語「Transact-SQL」について、詳しく学ぶことがで きる自習書です。データ型や照合順序、関数、変数など、SQL Server を利用したアプリケー ションを開発する上では必須となる機能を説明しています。また、SQL Server を運用管理す
1
開発者のための Transact-SQL 応用
Transact-SQL の応用編です。動的 SQL や、ストアド プロシージャ、トランザクション、
エラー処理といった、応用的な Transact-SQL の利用方法を学ぶことができます。
このあとも、さらに順序立てて SQL Server を学びたいという方のために、以下の自習書を用意 していますので、ぜひチャレンジしてみてください。
データのコピーと現場で役立つ操作集
データやテーブルを単純にコピーする方法や、CSV(カンマ区切り)ファイルへの出力/入力、
外部データに対するクエリの実行方法、一括インポート時の MERGE ステートメント連携な ど、現場で役立つ便利な操作方法について学ぶことができます。
ログイン認証とオブジェクト権限
SQL Server のユーザー管理機能(認証モードやログイン アカウント)と、オブジェクト(テ ーブルなど)に対するアクセス権限の基本について学ぶことができる、入門者向けの自習書で す。
バックアップと復元
SQL Server のバックアップと復元機能について、詳しく学ぶことができる自習書です。より 実践的な運用管理手法を学ぶことができます。
監視ツールの基本操作
SQL Server でのパフォーマンス監視およびトラブル シューティング ツールの利用方法を 学ぶことができる自習書です。パフォーマンス チューニングに従事される方や、日々の性能 監視の仕方を学びたい方に役立つ内容となっています。