【SQL】CREATE VIEW文を3分でわかりやすく解説

Database

SQLでビューを定義する際に利用する CREATE VIEW文 について解説します。

CREATE VIEW ビュー名称 AS (SELECT文);

そもそもビューとは何か?という方でも理解できるよう前提となる知識も含め、図解付き・サンプルコード付きでわかりやすく解説します。

このページで学べる内容
  • CREATE VIEW の構文ルール/注意点
    • 【前提知識①】ビューとは?
    • 【前提知識②】SELECT文の基本
    • ビューのカラム名を指定する方法
  • CREATE VIEW の利用方法

データベースエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識です。是非最後までご覧ください。

スポンサーリンク

前提:ビューとは?

ビュー(View)は1つ以上のテーブルから必要な要素のみを取得して作成される仮想的なテーブルのようなもの

ビューとは わかりやすく
前提①:ビューとは

上記のように1つのテーブルから必要な列だけ(ID列~Math列)を抜き取って仮想的なテーブルのように作成したのがビューの例です。

毎回同じようなSELECT文を書いてレコードを取得するよりも、あらかじめビューとして定義することで開発の効率化が期待できるなどのメリットがあります。

ビューの定義を行う際に利用するのが今回の主題CREATE VIEW文です。

CREATE VIEW:構文ルール

CREATE VIEW文 の構文ルールは以下の通り。

CREATE VIEW ビュー名称 AS (SELECT文);

CREATE VIEW に続いてビュー名称を指定し、AS句に続いてSELECT文を記述します。

ポイントはビューはあくまでも1つのSELECT文を保存しているというのがポイントです。

どういうことが理解できるようにテーブル「PointList」をもとに実際にビュー「MathPointList」を作成するSQL文を見ていきましょう。

ビューとは わかりやすく
図3:サンプルビュー

MathPointListというビューを作成したいので、CREATE VIEWに続けて「MathPointList」を記述。AS句にはSELECT文を記述します。

-- ビューの定義
CREATE VIEW MathPointList 
         AS SELECT ID, Name, Class, Math FROM PointList;

-- ビューに対するSELECT
SELECT * FROM MathPointList;

/* SELECT文の結果
+----+------+-------+------+
| ID | Name | Class | Math |
+----+------+-------+------+
|  1 | 佐藤 | A     |  100 |
|  2 | 鈴木 | A     |   70 |
|  3 | 高橋 | A     |   70 |
|  4 | 中村 | A     |   65 |
|  5 | 小林 | B     |   90 |
|  6 | 山口 | B     |   85 |
|  7 | 田中 | B     |   90 |
|  8 | 伊藤 | B     |   90 |
+----+------+-------+------+
*/

ご覧のように、PointListからID列,Name列,Class列,Math列のみを抽出するビューを作成することができました。

CREATE VIEW文の構文自体は非常に簡単です。初心者の方がCREATE VIEWに対して苦手意識を持ってしまうのは、結局はAS句に記述するSELECT文がしっかり理解できていない場合が多いのです。

CREATE VIEW:ビューのカラム名を指定する

ビューのカラム名称は作成元のテーブルのカラム名称がそのままの形で引き継がれます。ですが、あえて分かりやすくするために、ビュー独自にカラム名を指定することも可能です。

Math列を「数学」列として定義

構文ルール自体は簡単で、ビュー名称の後に( )でカラム名を指定するだけ。

CREATE VIEW ビュー名称 (カラム名1,カラム名2,カラム名3,・・・・)  AS (SELECT文);

実際にビューのカラム名を指定してビュー定義を行うサンプルコードがこちら。

-- ビュー定義
CREATE VIEW MathPointList (ID,Name,Class,数学)
         AS SELECT ID, Name, Class, Math FROM PointList;

-- ビューの確認
SELECT * FROM MathPointList;
+----+------+-------+------+
| ID | Name | Class | 数学 |←ビュー定義上Math列は「数学」列として定義されている
+----+------+-------+------+
|  1 | 佐藤 | A     |  100 |
|  2 | 鈴木 | A     |   70 |
|  3 | 高橋 | A     |   70 |
|  4 | 中村 | A     |   65 |
|  5 | 小林 | B     |   90 |
|  6 | 山口 | B     |   85 |
|  7 | 田中 | B     |   90 |
|  8 | 伊藤 | B     |   90 |
+----+------+-------+------+

作成するビューの構造が複雑になればなるほどカラム名をあえて変更する場面も増えていきます。

2つ以上のテーブルからビューを作成する場合

CREATE VIEW文の基本をより深く理解できるように2つ以上のテーブルをもとにビューを作成する例を見ていきましょう。

まずは、以下のような2つのテーブルを用意します。PointListテーブルには主要3教科の点数が、SubPointListテーブルには他2教科の点数が格納されています。

※それぞれのテーブル定義(CREATE TABLE文)は以下の通りです。参考までに記載しておきます。

CREATE TABLE PointList (
ID       INT(3),
Name     VARCHAR(50),
Class    VARCHAR(1),
Japanese INT(3),
Math     INT(3),
English  INT(3)
);

/* 出来上がったテーブルがこちら
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| ID       | int(3)      | YES  |     | NULL    |       |
| Name     | varchar(50) | YES  |     | NULL    |       |
| Class    | varchar(1)  | YES  |     | NULL    |       |
| Japanese | int(3)      | YES  |     | NULL    |       |
| Math     | int(3)      | YES  |     | NULL    |       |
| English  | int(3)      | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
*/


CREATE TABLE SubPointList (
ID             INT(3),
Name           VARCHAR(50),
Class          VARCHAR(1),
Science        INT(3),
SocialStudies  INT(3)
);

/*
+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| ID            | int(3)      | YES  |     | NULL    |       |
| Name          | varchar(50) | YES  |     | NULL    |       |
| Class         | varchar(1)  | YES  |     | NULL    |       |
| Science       | int(3)      | YES  |     | NULL    |       |
| SocialStudies | int(3)      | YES  |     | NULL    |       |
+---------------+-------------+------+-----+---------+-------+
*/

今回は2つのテーブルをもとに「ALLPointList」というビューを定義してみます。

2つ以上のテーブルをもとにビューを作成するといっても、基本はAS句にそれを実現するSELECT文を記述するというだけ。今回はLEFT OUTER JOINを利用して2つのテーブルを結合していきます。

出来上がるCREATE VIEW文は以下の通りです。

-- ビューの定義
CREATE VIEW ALLPointList AS
  SELECT PointList.*,SubPointList.Science,SubPointList.SocialStudies
    FROM PointList
    LEFT OUTER JOIN SubPointList
                 ON PointList.ID = SubPointList.ID;

/* 定義されたビューの構成
+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| ID            | int(3)      | NO   |     | NULL    |       |
| Name          | varchar(50) | NO   |     | NULL    |       |
| Class         | varchar(1)  | YES  |     | NULL    |       |
| Japanese      | int(3)      | YES  |     | 0       |       |
| Math          | int(3)      | YES  |     | 0       |       |
| English       | int(3)      | YES  |     | 0       |       |
| Science       | int(3)      | YES  |     | NULL    |       |
| SocialStudies | int(3)      | YES  |     | NULL    |       |
+---------------+-------------+------+-----+---------+-------+
*/

-- ビューに対するSELECT文
SELECT * FROM ALLPointList;

/* 結果
+----+------+-------+----------+------+---------+---------+---------------+
| ID | Name | Class | Japanese | Math | English | Science | SocialStudies |
+----+------+-------+----------+------+---------+---------+---------------+
|  1 | 佐藤 | A     |      100 |  100 |      85 |      90 |            75 |
|  2 | 鈴木 | A     |       90 |   70 |      70 |      90 |            70 |
|  3 | 高橋 | A     |       85 |   70 |      65 |      85 |            70 |
|  4 | 中村 | A     |       90 |   65 |      85 |      40 |             0 |
|  5 | 小林 | B     |       70 |   90 |      65 |    NULL |            90 |
|  6 | 山口 | B     |       90 |   85 |      85 |    NULL |            85 |
|  7 | 田中 | B     |       70 |   90 |      65 |    NULL |            90 |
|  8 | 伊藤 | B     |       70 |   90 |    NULL |      70 |            90 |
+----+------+-------+----------+------+---------+---------+---------------+
*/

ご覧のように、CREATE VIEW文自体は非常に簡単な構文ルールです。

ですが、通常ビュー定義をする際はAS句に記述するSELECT文が複雑になってくるため、初心者のうちは苦手意識を持ってしまいがち。

再度、CREATE VIEW文の構文ルールを掲載しておきます。

CREATE VIEW ビュー名称 AS (SELECT文);
CREATE VIEW文のまとめ
  • CREATE VIEW文はビューの定義を行う
  • CREATE VIEW の直後でビュー名称を指定
  • AS句にSELECT文を記述する
-- ビューの定義
CREATE VIEW MathPointList 
         AS SELECT ID, Name, Class, Math FROM PointList;

-- ビューに対するSELECT
SELECT * FROM MathPointList;

/* SELECT文の結果
+----+------+-------+------+
| ID | Name | Class | Math |
+----+------+-------+------+
|  1 | 佐藤 | A     |  100 |
|  2 | 鈴木 | A     |   70 |
|  3 | 高橋 | A     |   70 |
|  4 | 中村 | A     |   65 |
|  5 | 小林 | B     |   90 |
|  6 | 山口 | B     |   85 |
|  7 | 田中 | B     |   90 |
|  8 | 伊藤 | B     |   90 |
+----+------+-------+------+
*/

システムエンジニアを目指したい方は

システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。

正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。

タイトルとURLをコピーしました