概要: このチュートリアルでは、SQL ビューの概念を紹介し、データベースでビューを管理する方法を示します。
SQL ビューの概要
リレーショナルデータベースは、従業員、部門、職種などの複数の関連テーブルで構成されています。これらのテーブルのデータを確認したい場合は、SELECT ステートメントとJOINまたはUNION句を使用します。
SQL には、ビューを使用することによってデータを表示する別の方法があります。ビューは、クエリを実行することによって生成される仮想テーブルのようなものです。リレーショナルデータベース管理システム (RDBMS) は、ビューをデータベースカタログに名前付きのSELECT
として保存します。
ビュー名を含む SELECT
ステートメントを発行すると、RDBMS はビュー定義クエリを実行して仮想テーブルを作成します。その仮想テーブルは、クエリのソーステーブルとして使用されます。
なぜビューを使用する必要があるのか
ビューを使用すると、複雑なクエリをデータベースに保存できます。たとえば、データを確認するたびに複雑な SQL クエリを発行する代わりに、次のような簡単なクエリを発行するだけで済みます。
SELECT column_list
FROM view_name;
Code language: SQL (Structured Query Language) (sql)
ビューは、特定のユーザーグループ向けにデータをまとめるのに役立ちます。たとえば、財務部門の従業員の給与データのビューを作成できます。
ビューは、データベースのセキュリティを維持するのに役立ちます。ユーザーにデータベーステーブルへのアクセスを許可するのではなく、必要なデータのみを明らかにするビューを作成し、ユーザーにビューへのアクセスを許可します。
SQL ビューの作成
ビューを作成するには、次のようにCREATE VIEW
ステートメントを使用します。
CREATE VIEW view_name
AS
SELECT-statement
Code language: SQL (Structured Query Language) (sql)
まず、CREATE VIEW
句の後にビューの名前を指定します。
次に、複数のテーブルからデータをクエリするSELECTステートメントを作成します。
たとえば、次のステートメントは、employees
テーブルとdepartments
テーブルのデータに基づいて、従業員連絡先のビューを作成します。

CREATE VIEW employee_contacts AS
SELECT
first_name, last_name, email, phone_number, department_name
FROM
employees e
INNER JOIN
departments d ON d.department_id = e.department_id
ORDER BY first_name;
Code language: SQL (Structured Query Language) (sql)
デフォルトでは、ビューの列の名前は、SELECT
ステートメントで指定された列と同じです。ビューの列の名前を変更する場合は、次のようにCREATE VIEW
句の後に新しい列名を含めます。
CREATE VIEW view_name(new_column_list)
AS
SELECT-statement;
Code language: SQL (Structured Query Language) (sql)
たとえば、次のステートメントは、列名が基本テーブルの列名と同じではないビューを作成します。
CREATE VIEW payroll (first_name , last_name , job, compensation) AS
SELECT
first_name, last_name, job_title, salary
FROM
employees e
INNER JOIN
jobs j ON j.job_id= e.job_id
ORDER BY first_name;
Code language: SQL (Structured Query Language) (sql)
ビューからのデータのクエリ
ビューからのデータのクエリは、テーブルからのデータのクエリと同じです。次のステートメントは、employee_contacts
ビューからデータを選択します。
SELECT
*
FROM
employee_contacts;
Code language: SQL (Structured Query Language) (sql)

もちろん、次のようにフィルタリングまたはグループ化を適用できます。
SELECT
job,
MIN(compensation),
MAX(compensation),
AVG(compensation)
FROM
payroll
WHERE
job LIKE 'A%'
GROUP BY job;
Code language: SQL (Structured Query Language) (sql)

SQL ビューの変更
ビューを変更するには、ビューに新しい列を追加したり、ビューから列を削除したりするには、同じCREATE OR REPLACE VIEW
ステートメントを使用します。
CREATE OR REPLACE view_name AS
SELECT-statement;
Code language: SQL (Structured Query Language) (sql)
このステートメントは、ビューが存在しない場合はビューを作成し、ビューがすでに存在する場合は現在のビューを変更します。
たとえば、次のステートメントは、部門列を追加し、給与列をsalary列に名前を変更することによって、給与ビューを変更します。
CREATE OR REPLACE VIEW payroll (first_name , last_name , job , department , salary) AS
SELECT
first_name, last_name, job_title, department_name, salary
FROM
employees e
INNER JOIN
jobs j ON j.job_id = e.job_id
INNER JOIN
departments d ON d.department_id = e.department_id
ORDER BY first_name;
Code language: SQL (Structured Query Language) (sql)
SELECT
*
FROM
payroll;
Code language: SQL (Structured Query Language) (sql)

SQL ビューの削除
データベースからビューを削除するには、DROP VIEW
ステートメントを使用します。
DROP VIEW view_name;
Code language: SQL (Structured Query Language) (sql)
DROP VIEW
ステートメントは、ビューのみを削除し、基本テーブルは削除しません。
たとえば、給与ビューを削除するには、次のステートメントを使用します。
DROP VIEW payroll;
Code language: SQL (Structured Query Language) (sql)
このチュートリアルでは、SQL ビューとその実用的な使用法について学習しました。これで、ビューとは何か、データベースでビューを作成、変更、削除する方法を知っているはずです。