SQL Serverでは、ビューとしてクエリを実行できます。ビューは、セキュリティ、使いやすさ、利便性など、さまざまな理由で有益です。
SQL Serverでは、ビュー 内容がクエリによって定義される仮想テーブルです。これは基本的に、データベースに保存される事前に作成されたクエリです。
ビューはSELECT
で構成されます ステートメントを作成し、ビューに対してクエリを実行すると、テーブルを開いたときと同じように結果が表示されます。ビューは、複数のテーブルからデータをまとめたり、データを集約したりして、単一のテーブルであるかのように表示できるため、仮想テーブルと呼ばれます。
ビューのメリット
ビューは、アクセスレベルが異なる複数のユーザーがいて、すべてのユーザーがデータベース内のデータの一部(必ずしもすべてのデータである必要はない)を表示する必要がある場合に役立ちます。ビューは次のことを実行できます:
- テーブル内の特定の行へのアクセスを制限する
- テーブル内の特定の列へのアクセスを制限する
- 複数のテーブルの列を結合して、単一のテーブルの一部であるかのように表示します
- 集計情報(
COUNT()
の結果など)を提示します 機能)
ビューを作成する方法
CREATE VIEW
を使用してビューを作成します ステートメントの後にSELECT
が続きます ステートメント。
CREATE VIEW ViewName AS SELECT ...
前のクエリからビューを作成します。
-
ビューをデザインする
前の例のクエリを取得し、プレフィックスとして CREATE VIEW RelativeAlbums AS を付けます。 。
ORDER BY
も削除します ビューはこの句をサポートしていないため(TOP
を除く) 、OFFSET
またはFOR XML
も指定されています。また、ステートメントターミネータとして、ステートメントの最後にセミコロンを追加します(詳細は以下を参照)。
サンプルコード
以下は、
ORDER BY
を使用した例のコードです。 句が削除され、ステートメントターミネータとしてセミコロンが追加されました。また、読みやすくするために少し再フォーマットしました。
CREATE VIEW RecentAlbums AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - 10, GETDATE()));
この例では、ビューの最後にセミコロンを追加しました。クエリデザイナにはこれは含まれていませんが、含めることをお勧めします。
セミコロンはANSISQL-92規格の一部です。ステートメントターミネーター文字です。
また、Microsoftは、セミコロンで終了しないTransact-SQLステートメントがSQL Server 2016で非推奨になり、将来のバージョンではサポートされないことを発表しました(SQLServerはこれまで
GO
を使用してきました。 セミコロンの代わりにステートメントターミネータとしてのキーワード)。 -
ビューを実行する
次に、他のクエリを実行するのと同じようにビューを実行します。
実行をクリックします ツールバー上。
これで、オブジェクトエクスプローラーのビューに移動できます。展開すると、列とそのデータ型およびプロパティがテーブルであるかのように表示されます。
-
ビューのクエリ
ビューが作成されたので、
SELECT
を実行してビューをクエリできます。 それに対する声明。したがって、
SELECT * FROM RecentAlbums;
を使用して、新しく作成したビューをクエリできます。 。 -
ビューをフィルタリングする
ビューの良い点の1つは、ビューに対して独自のフィルタリング基準を適用できることです。結果をさらにフィルタリングできます。
たとえば、
WHERE Genre = 'Pop'
を追加できます。 、ビューが popのみを返すようにします 過去10年間のアルバム。
ビューを変更する
ALTER VIEW
を使用してビューを変更できます CREATE VIEW
の代わりにステートメント ステートメント。
-
変更されたビューを設計する
ここでは、ビューを変更して、10年だけでなく過去20年間のアルバムを返します。
かなり古い学校のコレクションなので、過去20年以内にリリースされたアルバムはすべて「最近」に分類されます:)
また、別の列を返します: Artists.ActiveFrom
サンプルコード
例で使用するコードは次のとおりです。
ALTER VIEW RecentAlbums AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName, Artists.ActiveFrom FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - 20, GETDATE()));
-
ビューのクエリ
これで、ビューをクエリすると、20年分のアルバムが返されます。アーティストがアクティブだった日付も表示されます。