サーチ…


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));


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow