Microsoft SQL Server
CREATE VIEW
サーチ…
CREATE VIEW
CREATE VIEW view_EmployeeInfo
AS
SELECT EmployeeID,
FirstName,
LastName,
HireDate
FROM Employee
GO
ビューからの行は、表のように選択できます。
SELECT FirstName
FROM view_EmployeeInfo
計算された列を含むビューを作成することもできます。計算された列を追加することで、上記のビューを次のように変更できます。
CREATE VIEW view_EmployeeReport
AS
SELECT EmployeeID,
FirstName,
LastName,
Coalesce(FirstName,'') + ' ' + Coalesce(LastName,'') as FullName,
HireDate
FROM Employee
GO
このビューは、そこから行をSELECT
すると表示される追加の列を追加します。この追加の列の値は、 Employee
テーブルのFirstName
およびLastName
フィールドに依存し、フィールドが更新されると自動的に舞台裏を更新します。
CREATE VIEW with Encryption
CREATE VIEW view_EmployeeInfo
WITH ENCRYPTION
AS
SELECT EmployeeID, FirstName, LastName, HireDate
FROM Employee
GO
INNER JOINを使用してVIEWを作成する
CREATE VIEW view_PersonEmployee
AS
SELECT P.LastName,
P.FirstName,
E.JobTitle
FROM Employee AS E
INNER JOIN Person AS P
ON P.BusinessEntityID = E.BusinessEntityID
GO
ビューは、ジョインを使用して、表、表関数、または他のビューのような多数のソースからデータを選択できます。この例では、PersonテーブルのFirstName列とLastName列とEmployeeテーブルのJobTitle列を使用します。
このビューを使用して、データベース内のマネージャーに対応するすべての行を表示できるようになりました。
SELECT *
FROM view_PersonEmployee
WHERE JobTitle LIKE '%Manager%'
CREATE INDEXED VIEW
索引付きのビューを作成するには、 WITH SCHEMABINDING
キーワードを使用してビューを作成する必要があります。
CREATE VIEW view_EmployeeInfo
WITH SCHEMABINDING
AS
SELECT EmployeeID,
FirstName,
LastName,
HireDate
FROM [dbo].Employee
GO
クラスタ化されたインデックスまたはクラスタ化されていないインデックスを作成できるようになりました。
CREATE UNIQUE CLUSTERED INDEX IX_view_EmployeeInfo
ON view_EmployeeInfo
(
EmployeeID ASC
)
インデックス付きのビューにはいくつかの制限があります。
ビュー定義は、同じデータベース内の1つ以上のテーブルを参照できます。
一意のクラスタ化インデックスが作成されると、追加の非クラスタ化インデックスをビューに対して作成できます。
挿入、更新、削除、および切り捨てを含め、基礎となる表のデータを更新できます。
基礎となる表と列は変更できません。ビューはWITH SCHEMABINDINGオプションを使用して作成されます。
COUNT、MIN、MAX、TOP、外部結合、または他のいくつかのキーワードまたは要素を含むことはできません。
インデックス付きビューの作成の詳細については、このMSDNの記事を参照してください。
グループ化されたビュー
グループ化されたVIEWは、GROUP BY句を持つクエリに基づいています。グループのそれぞれは、それが作成されたベース内に複数の行を持つ可能性があるため、必ず読み込み専用のビューです。このようなVIEWは、通常、1つ以上の集計関数を持ち、レポート目的で使用されます。また、SQLの弱点を回避するためにも便利です。各州で最大の売り上げを示すVIEWを考えてみましょう。クエリは簡単です:
https://www.simple-talk.com/sql/t-sql-programming/sql-view-beyond-the-basics/
CREATE VIEW BigSales (state_code, sales_amt_total)
AS SELECT state_code, MAX(sales_amt)
FROM Sales
GROUP BY state_code;
ユニオンエドのビュー
UNIONまたはUNION ALL操作に基づくVIEWは、基本表のいずれかの1つの行に変更をマップする単一の方法がないため、読み取り専用です。 UNION演算子は、重複行を結果から削除します。 UNIONおよびUNION ALL演算子はどちらも、行がどのテーブルから来たのかを隠します。そのようなVIEWは、UNION [ALL]の列には独自の名前がないため、aを使用する必要があります。理論的には、2つのディスジョイント・テーブルのUNIONは、どちらも重複する行を持たず、更新可能でなければなりません。
https://www.simple-talk.com/sql/t-sql-programming/sql-view-beyond-the-basics/
CREATE VIEW DepTally2 (emp_nbr, dependent_cnt)
AS (SELECT emp_nbr, COUNT(*)
FROM Dependents
GROUP BY emp_nbr)
UNION
(SELECT emp_nbr, 0
FROM Personnel AS P2
WHERE NOT EXISTS
(SELECT *
FROM Dependents AS D2
WHERE D2.emp_nbr = P2.emp_nbr));