English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL 创建视图(CREATE VIEW 语句)

在本教程中,您将学习如何使用SQL创建,更新和删除视图。

创建视图以简化表访问

视图是一个虚拟表,其定义存储在数据库中。但是,与表不同,视图实际上不包含任何数据。相反,它提供了一种在数据库中存储常用复杂查询的方法。但是,您可以使用SQL SELECT语句来访问视图数据,就像使用普通表或基表一样。

通过允许用户通过视图访问数据,而不是直接授予整个基表访问权限,视图也可以用作安全机制。

语法

使用CREATE VIEW语句创建视图。

CREATE VIEW view_name AS select_statement;

为了清楚地理解这一点,让我们来看看下面employeesunddepartments表。

+--------+--------------+--------+---------+
| emp_id | emp_name     | salary | dept_id |
+--------+--------------+--------+---------+
| Rick Deckard |      1 Wie folgt:   5000 |       4 | Rick Deckard |
| Rick Deckard |      2 | Ethan Hunt |   6500 |       1 | Rick Deckard |
| Rick Deckard |      3 | Tony Montana |   8000 |       5 | Rick Deckard |
| Rick Deckard |      4 | Sarah Connor |   7200 |       3 | Rick Deckard |
| Rick Deckard |      5 00 | Finance |   5600 |    NULL |
+--------+--------------+--------+---------+

+---------+------------------+
| dept_id | dept_name        |
+---------+------------------+
| Rick Deckard |       1 | Administration |
| Rick Deckard |       2 | Customer Service |
| Rick Deckard |       3 | Finance |
| Rick Deckard |       4 | Human Resources |
| Rick Deckard |       5 | Sales |
+---------+------------------+
Tabelle: employees
Tabelle: departments

Angenommen, Sie möchten die IDs und Namen der Mitarbeiter sowie die Namen ihrer Abteilungen abrufen, müssen Sie wie folgt ausführen:Linkes HinzufügenOperationen wie folgt:

Syntax des MySQL-Datenbankmanagementsystems1CREATE OR REPLACE VIEW emp_dept_view AS1SELECT t2.emp_name, t
.salary, t1 .dept_name2
FROM employees AS t1LEFT JOIN departments AS t2ON t

Nachdem Sie die obige Abfrage ausgeführt haben, erhalten Sie wie folgt die Ausgabe:

+--------+--------------+-----------------+
| emp_id | emp_name | dept_name |
+--------+--------------+-----------------+
| Rick Deckard |      1 | Ethan Hunt | Human Resources |
| Rick Deckard |      2 | Tony Montana | Administration |
| Rick Deckard |      3 | Sarah Connor | Sales |
| Rick Deckard |      4 | Rick Deckard | Finance |
| Rick Deckard |      5 | Martin Blank | NULL |
+--------+--------------+-----------------+

Aber jedes Mal, wenn Sie auf diesen Eintrag zugreifen müssen, müssen Sie den gesamten Abfrageausdruck erneut eingeben. Wenn Sie dies häufig tun, wird es sehr unangenehm und lästig.

In diesem Fall können Sie eine Ansicht erstellen, um den Zugriff auf die Ergebnisse zu vereinfachen, wie folgt:

CREATE VIEW emp_dept_view AS
Syntax des MySQL-Datenbankmanagementsystems1CREATE OR REPLACE VIEW emp_dept_view AS1SELECT t2.emp_name, t
.salary, t1 .dept_name2
FROM employees AS t1LEFT JOIN departments AS t2ON t

Jetzt können Sie die Ansicht emp_dept_view wie folgt verwenden, um auf die gleichen Aufzeichnungen zuzugreifen:

SELECT * FROM emp_dept_view;

Wie Sie sehen können, können Sie so viel Zeit und Energie auf der Ansicht sparen.

Hinweis:Die Ansicht zeigt immer die neuesten Daten an! Bei jeder Abfrage der Ansicht führt der Datenbankmotor die mit der Ansicht verbundene SQL-Abfrage aus und erstellt neu die Daten.

Hinweis:In MySQL können Sie auch angeben,ORDER BYKlausel. Aber in SQL Server kann die Definition der Ansicht keine ORDER BY-Klausel enthalten, es sei denn,SELECTWählt auch die Liste der Anweisungen.TOPKlausel.

Ersetzen der bestehenden Ansicht

In MySQL können Sie, um eine bestehende Ansicht zu aktualisieren oder zu ersetzen, die Ansicht löschen und eine neue Ansicht erstellen, oder Sie verwenden einfach den OR REPLACE-Subanweisung im CREATE VIEW-Ausdruck, wie folgt:

CREATE OR REPLACE VIEW view_name AS select_statement;

Hinweis:Wenn Sie den OR REPLACE-Subanweisung im CREATE VIEW-Ausdruck verwenden, wird eine neue Ansicht erstellt, wenn die Ansicht nicht existiert, oder die bestehende Ansicht wird ersetzt.

下面的SQL语句将替换或更改现有视图emp_dept_view视图的定义,方法是向其添加一个新列salary。

-- Die folgenden SQL-Anweisungen ersetzen oder ändern die bestehende Ansicht
Die Definition der Ansicht, indem eine neue Spalte salary hinzugefügt wird.
Syntax des MySQL-Datenbankmanagementsystems1CREATE OR REPLACE VIEW emp_dept_view AS1SELECT t1.emp_id, t2.emp_name, t
.salary, t1 .dept_name2
FROM employees AS t1LEFT JOIN departments AS t2ON t

.dept_id = t

SELECT * .dept_id;

Nachdem die Ansicht aktualisiert wurde, wenn Sie die folgenden Anweisungen ausführen:FROM emp_dept_view ORDER BY emp_id;Sie werden in der Ergebnisausgabe eine weitere Spalte sehen

+--------+--------------+--------+-----------------+
salary
+--------+--------------+--------+-----------------+
| Rick Deckard |      1 Wie folgt:   5| emp_id | emp_name | salary | dept_name |
| Rick Deckard |      2 | Ethan Hunt |   65000 | Human Resources |
| Rick Deckard |      3 | Tony Montana |   800 | Administration |
| Rick Deckard |      4 | Sarah Connor |   72000 | Sales |
| Rick Deckard |      5 00 | Finance |   56|
+--------+--------------+--------+-----------------+

Hinweis: | Martin Blank |

00 | NULL |

Theoretisch unterstützt SQL Server den OR REPLACE-Ausdruck nicht, daher können Sie, um eine Ansicht zu ersetzen, einfach die Ansicht löschen und eine neue Ansicht aus dem Stretch erstellen.SELECTAußerhalb der Anweisung können Sie auch auf die Ansicht ausführenINSERT,UPDATEundDELETEDoch nicht alle Ansichten sind aktualisierbar, d.h. sie ermöglichen die Änderung der Daten der Quelldatenbanktabelle. Es gibt einige Beschränkungen für die Aktualisierbarkeit.

In der Regel ist eine Ansicht nicht aktualisierbar, wenn sie das Folgende enthält:

  • DISTINCT, GROUP BY oder HAVING-Ausdruck.

  • Aggregationsfunktionen wie AVG(), COUNT(), SUM(), MIN(), MAX() und ähnliche.

  • Die Operationen UNION, UNION ALL, CROSS JOIN, EXCEPT oder INTERSECT.

  • Der Unterabfrage im WHERE-Ausdruck wird die Tabelle aus dem FROM-Ausdruck referenziert.

Wenn eine Ansicht diese Bedingungen erfüllt, kann sie verwendet werden, um den Quelltable zu ändern.

Die folgenden Anweisungen aktualisieren das Gehalt des Mitarbeiters mit1des Gehalts (salary) des Mitarbeiters.

UPDATE emp_dept_view SET salary = '6000' 
WHERE emp_id = 1;

Hinweis:Um die Einfügbareität zu erreichen, muss die Ansicht alle Spalten des Basistables enthalten, die keine Standardwerte haben. Ebenso müssen alle aktualisierbaren Spalten in der Ansicht mit den aktualisierbaren Spalten im Quelltable entsprechen, um die Aktualisierbarkeit zu erreichen.

Ansicht löschen

Gleichzeitig kann, wenn eine Ansicht nicht mehr benötigt wird, die DROP VIEW-Anweisung verwendet werden, um sie aus der Datenbank zu löschen, wie im folgenden Syntax gezeigt:

DROP VIEW view_name;

Die folgenden Anweisungen löschen die Ansicht aus der Datenbankemp_dept_view

DROP VIEW emp_dept_view;