Skip to main content
Version: nightly

View

In SQL, a view is a virtual table based on the result set of an SQL statement. It contains rows and columns just like a real table. The query of a view is run every time the view is referenced in a query.

In the following situations, you can use views:

  • Simplifying complex queries, avoiding the need to repeatedly write and send complex statements for every query.
  • Granting read permissions to specific users while restricting access to certain columns and rows to ensure data security and isolation.

A view is created with the CREATE VIEW statement.

View examples

CREATE VIEW cpu_monitor AS
SELECT cpu, host, ts FROM monitor;

The view name is cpu_monitor, and the query statement after AS is the SQL statement to present the data. Query the view:

SELECT * FROM cpu_monitor;
+------+-----------+---------------------+
| cpu | host | ts |
+------+-----------+---------------------+
| 0.5 | 127.0.0.1 | 2023-12-13 02:05:41 |
| 0.3 | 127.0.0.1 | 2023-12-13 02:05:46 |
| 0.4 | 127.0.0.1 | 2023-12-13 02:05:51 |
| 0.3 | 127.0.0.2 | 2023-12-13 02:05:41 |
| 0.2 | 127.0.0.2 | 2023-12-13 02:05:46 |
| 0.2 | 127.0.0.2 | 2023-12-13 02:05:51 |
+------+-----------+---------------------+

Query view by WHERE:

SELECT * FROM cpu_monitor WHERE host = '127.0.0.2';
+------+-----------+---------------------+
| cpu | host | ts |
+------+-----------+---------------------+
| 0.3 | 127.0.0.2 | 2023-12-13 02:05:41 |
| 0.2 | 127.0.0.2 | 2023-12-13 02:05:46 |
| 0.2 | 127.0.0.2 | 2023-12-13 02:05:51 |
+------+-----------+---------------------+

Create a view that queries data from two tables:

CREATE VIEW app_cpu_monitor AS
SELECT cpu, latency, host, ts FROM monitor LEFT JOIN app_monitor
ON monitor.host = app_monitor.host AND monitor.ts = app_monitor.ts

Then query the view as if the data were coming from one single table:

SELECT * FROM app_cpu_monitor WHERE host = 'host1'

Update View

CREATE OR REPLACE VIEW to update a view, if it doesn't exist, it will be created:

CREATE OR REPLACE VIEW memory_monitor AS
SELECT memory, host, ts FROM monitor;

Shows the view definition

Shows the CREATE VIEW statement that creates the named view by SHOW CREATE VIEW view_name:

SHOW CREATE VIEW cpu_monitor;
+-------------+--------------------------------------------------------------+
| View | Create View |
+-------------+--------------------------------------------------------------+
| cpu_monitor | CREATE VIEW cpu_monitor AS SELECT cpu, host, ts FROM monitor |
+-------------+--------------------------------------------------------------+

List Views

SHOW VIEWS statement to find all the views:

> SHOW VIEWS;

+----------------+
| Views |
+----------------+
| cpu_monitor |
| memory_monitor |
+----------------+

of course, just like SHOW TABLES, it supports LIKE and WHERE:

> SHOW VIEWS like 'cpu%';
+-------------+
| Views |
+-------------+
| cpu_monitor |
+-------------+
1 row in set (0.02 sec)

> SHOW VIEWS WHERE Views = 'memory_monitor';
+----------------+
| Views |
+----------------+
| memory_monitor |
+----------------+

Drop View

Use DROP VIEW statement to drop a view:

DROP VIEW cpu_monitor;

To be quiet if it does not exist:

DROP VIEW IF EXISTS test;