SQL ビュー

❮ 前章へ 次章へ ❯

ビューは、仮想テーブルです。

この章では、ビューの作成、更新、削除方法を示します。


SQL CREATE VIEW 文

SQL では、ビューは SQL ステートメントの結果セットに基づいた仮想テーブルです。

ビューには、本物のテーブルのように、行と列が含まれています。ビューのフィールドは、データベース内の 1 つまたは複数の実テーブルからのフィールドです。

SQL 関数、WHERE および JOIN を追加し、データが 1 つのテーブルのものであるかのようにデータを表示することができます。

SQL CREATE VIEW 構文

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

注: ビューは、常に最新のデータを表示します!データベースエンジンは、ビューの SQL 文使用して、 ユーザーがビューを照会するたびに、データを再作成します。


SQL CREATE VIEW の例

Northwind データベースを使用している場合、デフォルトでインストールされた、いくつかのビューがあるのがわかります。

ビュー "Current Product List" は、 "Products" テーブルから全てのアクティブな製品 (廃止されていない製品)をリストします。ビューは、次の SQL を使用して作成されています:

CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No

上記ビューにおけるクエリは、以下のように書くことができます:

SELECT * FROM [Current Product List]

Northwind サンプルデータベースの他のビューには、"Products" テーブルから 平均単価よりも高い単価のすべての製品を選択するものがあります:

CREATE VIEW [Products Above Average Price] AS
SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products)

上記ビューにおけるクエリは、以下のように書くことができます:

SELECT * FROM [Products Above Average Price]

Northwind データベースの他のビューには、1997年の各カテゴリ別の累計販売が計算されます。 このビューは、"Product Sales for 1997" という別のビューからデータを選択していることに注意してください:

CREATE VIEW [Category Sales For 1997] AS
SELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySales
FROM [Product Sales for 1997]
GROUP BY CategoryName

上記ビューにおけるクエリは、以下のように書くことができます:

SELECT * FROM [Category Sales For 1997]

クエリに条件を追加することもできます。 いま、カテゴリ "Beverages": の累計販売だけを見たいとします:

SELECT * FROM [Category Sales For 1997]
WHERE CategoryName='Beverages'

SQL ビューの更新

次の構文を使用してビューを更新することができます:

SQL CREATE または REPLACE VIEW 構文

CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

いま、"Current Product List" ビューに "Category" 列を追加するものとします。 次の SQL によりビューを更新します:

CREATE OR REPLACE VIEW [Current Product List] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No

SQL ビューの削除

DROP VIEW コマンドでビューを削除できます。

SQL DROP VIEW 構文

DROP VIEW view_name

❮ 前章へ 次章へ ❯