SQL Server Create View

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」でした。