Webサイト制作コースのお申し込みはこちら

SQLのview作成についてまとめています。

SQLのview作成は、create view

create view文で、指定したselect文の結果を仮想的なテーブル(view)として設定できます。作成済みのviewはテーブルと同等に扱いが可能です。ただし、読み取り専用となります。

mysql> create view emp_view1 as select emp_no, first_name, last_name from employees;
Query OK, 0 rows affected (0.01 sec)

mysql> select * from emp_view1 limit 10;
+--------+------------+-----------+
| emp_no | first_name | last_name |
+--------+------------+-----------+
|  10001 | Georgi     | Facello   |
|  10002 | Bezalel    | Simmel    |
|  10003 | Parto      | Bamford   |
|  10004 | Chirstian  | Koblick   |
|  10005 | Kyoichi    | Maliniak  |
|  10006 | Anneke     | Preusig   |
|  10007 | Tzvetan    | Zielinski |
|  10008 | Saniya     | Kalloufi  |
|  10009 | Sumant     | Peac      |
|  10010 | Duangkaew  | Piveteau  |
+--------+------------+-----------+
10 rows in set (0.00 sec)

元となるテーブルが存在しない場合でも、viewの作成は可能です。以下の例は、カラム名hello、値Hello Worldが格納されたviewを作成しています。

drop viewで、格納されたデータごとviewを削除することが可能です。

mysql> CREATE VIEW vista AS SELECT 'Hello World' as hello;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from vista;
+-------------+
| hello       |
+-------------+
| Hello World |
+-------------+
1 row in set (0.00 sec)
mysql> drop view vista;
Query OK, 0 rows affected (0.02 sec)
mysql> select * from vista;
ERROR 1146 (42S02): Table 'employees.vista' doesn't exist
mysql> 

viewには複数条件を指定したjoinを使ったselect文など、複雑なSQLを指定可能です。

create view jointest as SELECT 
	employees.emp_no, 
	first_name, 
	last_name, 
	dept_name 
FROM 
	employees 
	left join dept_emp on employees.emp_no = dept_emp.emp_no and first_name like 'G%'
	left join departments on dept_emp.dept_no = departments.dept_no
Query OK, 0 rows affected (0.04 sec)

mysql> select * from jointest limit 10;
+--------+------------+-----------+-------------+
| emp_no | first_name | last_name | dept_name   |
+--------+------------+-----------+-------------+
|  10001 | Georgi     | Facello   | Development |
|  10002 | Bezalel    | Simmel    | NULL        |
|  10003 | Parto      | Bamford   | NULL        |
|  10004 | Chirstian  | Koblick   | NULL        |
|  10005 | Kyoichi    | Maliniak  | NULL        |
|  10006 | Anneke     | Preusig   | NULL        |
|  10007 | Tzvetan    | Zielinski | NULL        |
|  10008 | Saniya     | Kalloufi  | NULL        |
|  10009 | Sumant     | Peac      | NULL        |
|  10010 | Duangkaew  | Piveteau  | NULL        |
+--------+------------+-----------+-------------+
10 rows in set (0.00 sec)

【関連記事】
SQLのONは、JOINの条件を記述 複数条件はANDやORで接続する

以下のように、サブクエリとunionを使って結果を連結したselect文も、viewとして作成可能です。

create view subquerytest as select * from 
(select emp_no, first_name, last_name, hire_date from employees where birth_date > 1970-01-01 and gender = 'F'
union all
select emp_no, first_name, last_name, hire_date from employees where birth_date < 1960-01-01 and gender = 'M'
) t1
order by last_name, emp_no
mysql> select * from subquerytest limit 10;
+--------+------------+-----------+------------+
| emp_no | first_name | last_name | hire_date  |
+--------+------------+-----------+------------+
|  12516 | Sreenivas  | Aamodt    | 1990-03-06 |
|  12982 | Sachem     | Aamodt    | 1992-01-11 |
|  17400 | Basim      | Aamodt    | 1991-09-15 |
|  18182 | Dekang     | Aamodt    | 1988-05-25 |
|  27188 | Vasilii    | Aamodt    | 1996-10-12 |
|  27413 | Phuoc      | Aamodt    | 1987-08-28 |
|  28387 | Nahla      | Aamodt    | 1997-02-15 |
|  29182 | Arumugam   | Aamodt    | 1986-01-09 |
|  31701 | Carrsten   | Aamodt    | 1985-10-07 |
|  35101 | Christ     | Aamodt    | 1990-02-05 |
+--------+------------+-----------+------------+

【関連記事】
SQLのorder byで複数条件を指定する union allとサブクエリで複雑な条件にも対応

PostgreSQLでは、再帰的(Recursive)ビューが設定可能

PostgreSQLでは、リカーシブ指定で再帰的な構造のビューを設定可能です。

postgres=# CREATE RECURSIVE VIEW nums_1_100 (n) AS
    VALUES (1)
UNION ALL
    SELECT n+1 FROM nums_1_100 WHERE n < 100;
CREATE VIEW
postgres=# select * from nums_1_100;
  n  
-----
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
 :
 :
  100
(100 rows)

PostgreSQLのviewは、recursive指定やtemporary指定など、他のデータベース管理ソフトに比べると、比べると拡張された部分があるようです。

まとめ

ポテパンダの一言メモ
  • viewはselect文の結果を仮想的なテーブルとして作成できる
  • joinやサブクエリを使った複雑なSQL、テーブル実体のないviewも設定可能
  • PostgreSQLでは、recursive(再帰)やtemporary(一時的)viewの設定が可能

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。