SQL Server Create View
新しいビュー(VIEW) を作ります。
ビューとは、テーブルの特定部分のデータを抜き出したり複数テーブルを結合し必要なデータセットを取得するための仮想的なテーブルです。
create table文で作成する物理的なテーブルとは異なり、ビューの実体はデータを持たちません。
構文
create table ビュー名 as selectステートメント
例文
従業員テーブルと部門テーブル、配属テーブルを結合させてあたかも1つのテーブルのように見せます。
SET NUMERIC_ROUNDABORT OFF; SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS ON; --従業員テーブルの作成とデータ挿入 create table EMPLOYEE_V ( EMPLOYEE_ID nchar(5) , NAME nvarchar(20) NOT NULL , KANANAME nvarchar(20) , BATHDAY DATE , SEX nchar(1) , JOIN_DATE DATE , POST_CODE nchar(7) , ADDRESS nvarchar(100) , TEL nvarchar(11) ) insert into [dbo].[EMPLOYEE_V] values('T0001','太郎','タロウ','1997-08-2','1','2013-03-30','2005347','住所','09001239876') insert into [dbo].[EMPLOYEE_V] values('T0002','花子','ハナコ','1997-08-2','1','2013-03-30','2005347','住所','09001239876') insert into [dbo].[EMPLOYEE_V] values('T0003','次郎','ジロウ','1997-08-2','1','2013-03-30','2005347','住所','09001239876') insert into [dbo].[EMPLOYEE_V] values('T0004','三郎','サブロウ','1997-08-2','1','2013-03-30','2005347','住所','09001239876') --部門テーブルの作成とデータ挿入 create table BUMON_V( BUMON_CD nchar(3) , BUMON_NAME nvarchar(20) , primary key CLUSTERED (BUMON_CD) ) insert into [dbo].[BUMON_V] values('001','営業部') insert into [dbo].[BUMON_V] values('002','業務部') insert into [dbo].[BUMON_V] values('003','製造部') insert into [dbo].[BUMON_V] values('004','総務部') --配属テーブルの作成とデータ挿入 create table HAIZOKU_V( EMPLOYEE_ID nchar(5) , START_DATE date , END_DATE date , BUMON_CODE nchar(3) , primary key CLUSTERED (EMPLOYEE_ID, START_DATE) ) insert into [dbo].[HAIZOKU_V] values('T0001','2019/04/02','2020/06/09','004') insert into [dbo].[HAIZOKU_V] values('T0002','2020/04/02','2020/06/09','002') insert into [dbo].[HAIZOKU_V] values('T0003','2020/04/02',null,'002') insert into [dbo].[HAIZOKU_V] values('T0004','2020/04/02',null,'002') insert into [dbo].[HAIZOKU_V] values('T0001','2020/06/10',null,'001') insert into [dbo].[HAIZOKU_V] values('T0002','2020/06/10',null,'003') GO --Viewの作成 create View dbo.View_HAIZOKU with schemabinding as select TH.EMPLOYEE_ID , TH.BUMON_CODE , TB.BUMON_NAME , TE.NAME , TE.KANANAME from dbo.HAIZOKU_V TH inner join dbo.EMPLOYEE_V TE on TH.EMPLOYEE_ID = TE.EMPLOYEE_ID inner join dbo.BUMON_V TB on TH.BUMON_CODE = TB.BUMON_CD where TH.end_date is null GO --インデックの作成(従業員ID) create UNIQUE CLUSTERED index IDX_View_HAIZOKU on View_HAIZOKU (EMPLOYEE_ID) GO --インデックの作成(部門コード) create NONCLUSTERED index IDX_View_HAIZOKU2 on View_HAIZOKU (BUMON_CODE) GO --ビューからデータを取得 select BUMON_NAME , NAME , KANANAME from View_HAIZOKU order by BUMON_CODE /* drop view View_HAIZOKU drop table EMPLOYEE_V drop table BUMON_V drop table HAIZOKU_V */
Viewの参照はテーブルと同じようにできます。
上の例の80-85行を参考にしてください。
ViewにINDEXを付ける
ViewにもINDEXを付けて高速化することができます。
上の例の68-76行を参考にしてください。
INDEXを作成するにはいくつ条件が有るので、エラーが出たらメッセージを確認して対応してください。
良く引っかかるのが次のことです。
1-3行のSET オプション。
Viewを作成する時に schemabinding キーワードを付ける必要があります。
上の例の場合、dboを付けてあるようにスキーマ名を付ける必要があります。
INDEXを付ける時に NONCLUSTERED で作成する前に、UNIQUE CLUSTERED で作成する必要があります。
他にも有るかも知れませんが、エラーが出たらその都度調べてください。
私はあまり View を使わないのでこの程度のことしかわかりません、参考になれば幸いです。
以上、「SQL Server Create View」でした。