SQL ビュー (Views)
SQL のビュー (View) は、SQL ステートメントの結果セット (Result-set) に基づいた仮想テーブル (Virtual table) です。
ビューは、実際のテーブルと同様に「行」と「列」で構成されます。ビュー内のフィールドは、データベース内にある 1 つ以上の実際のテーブルから取得されたものです。
ビューには SQL ステートメントや関数を追加することができ、あたかも 1 つのテーブルからデータが提供されているかのように提示することが可能です。
1. SQL CREATE VIEW ステートメント
ビューは CREATE VIEW ステートメントを使用して作成します。
1.1 CREATE VIEW の構文
CREATE VIEW ビュー名 AS
SELECT カラム1, カラム2, ...
FROM テーブル名
WHERE 条件;注記: ビューは常にリアルタイムデータを表示します。データベースエンジンは、データそのもののコピーを保存するのではなく、ビューの「定義」(SELECT ステートメント)のみを保存します。
1.2 CREATE VIEW の使用例
以下の SQL は、ブラジルの顧客のみを表示する「Brazil Customers」という名前のビューを作成します。
-- ブラジルの顧客を表示するビューを作成
CREATE VIEW [Brazil Customers] AS
SELECT CustomerName, ContactName
FROM Customers
WHERE Country = 'Brazil';作成したビューに対してクエリを実行するには、以下の SQL 構文を使用します。
-- ビューを通常のテーブルのように検索
SELECT * FROM [Brazil Customers];次の SQL は、平均価格よりも高い価格の製品を「Products」テーブルから選択する「Products Above Average Price」という名前のビューを作成します。
-- 平均価格以上の製品を表示するビューを作成
CREATE VIEW [Products Above Average Price] AS
SELECT ProductName, Price
FROM Products
WHERE Price > (SELECT AVG(Price) FROM Products);このビューをクエリするには、以下の SQL 構文を使用します。
-- ビューを検索
SELECT * FROM [Products Above Average Price];2. ALTER VIEW ステートメント (SQL Server)
SQL Server では、ALTER VIEW ステートメントを使用して既存のビューを更新(再定義)できます。
2.1 ALTER VIEW の構文
ALTER VIEW ビュー名 AS
SELECT カラム1, カラム2, ...
FROM テーブル名
WHERE 条件;以下の SQL は、「Brazil Customers」ビューに「City」カラムを追加します。
-- ビュー定義を更新し、Cityカラムを追加
ALTER VIEW [Brazil Customers] AS
SELECT CustomerName, ContactName, City
FROM Customers
WHERE Country = 'Brazil';3. CREATE OR REPLACE VIEW ステートメント (MySQL と Oracle)
MySQL および Oracle では、CREATE OR REPLACE VIEW ステートメントを使用してビューを更新します。
3.1 CREATE OR REPLACE VIEW の構文
CREATE OR REPLACE VIEW ビュー名 AS
SELECT カラム1, カラム2, ...
FROM テーブル名
WHERE 条件;以下の SQL は、「Brazil Customers」ビューに「City」カラムを追加します。
-- ビューが存在すれば置換し、Cityカラムを追加
CREATE OR REPLACE VIEW [Brazil Customers] AS
SELECT CustomerName, ContactName, City
FROM Customers
WHERE Country = 'Brazil';4. DROP VIEW ステートメント
ビューを削除するには、DROP VIEW ステートメントを使用します。
4.1 DROP VIEW の構文
DROP VIEW ビュー名;以下の SQL は、「Brazil Customers」ビューを削除します。
-- ビューを削除
DROP VIEW [Brazil Customers];