SQL ビュー

概要: このチュートリアルでは、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-statementCode language: SQL (Structured Query Language) (sql)

まず、CREATE VIEW句の後にビューの名前を指定します。

次に、複数のテーブルからデータをクエリするSELECTステートメントを作成します。

たとえば、次のステートメントは、employeesテーブルとdepartmentsテーブルのデータに基づいて、従業員連絡先のビューを作成します。

emp_dept_tables
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)
SQL View Example

もちろん、次のようにフィルタリングまたはグループ化を適用できます。

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 Querying View

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 Modify View Example

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 ビューとその実用的な使用法について学習しました。これで、ビューとは何か、データベースでビューを作成、変更、削除する方法を知っているはずです。