创建SQL视图:逐步解释
我们使用sql或结构化查询语言与关系型数据库进行通信,并创建sql视图。
那么,什么是sql视图?它们是虚拟表,可以合并和存储来自您创建的实际数据库表的数据。反过来,您可以获得对数据集的安全和简化访问,同时隐藏底层的表结构和实现。
那么,这是如何工作的呢?您已经知道 sql 查询用于创建sql视图。当创建sql视图时,底层的sql查询被存储。当您使用sql查询从多个表中查找数据时,查询将被执行,并帮助从相应的数据库表中获取数据。同样,当您查询已创建的sql视图时,首先获取存储的查询,然后执行。
创建sql视图有什么用处?
由于sql视图是由存储的sql查询支持的,它们有助于使您的数据库更安全。它们还简化了复杂的查询,并提高了查询性能,带来了其他一些好处。让我们看看创建sql视图如何对数据库和应用程序有益:
#1. 提供数据库安全性
sql视图充当虚拟表,隐藏了实际数据库表的结构。因此,仅仅通过查看视图,无法知道有多少表以及表中的不同列。另外,您可以为数据库添加访问控制限制,以便用户只能查询视图而不能查询实际表。
#2. 简化复杂查询
通常情况下,您的sql查询涉及多个带有复杂连接条件的表。如果您经常使用这样复杂的查询,您可以利用创建sql视图的功能。您可以将复杂的查询存储在sql视图中。有了这个功能,您只需查询视图而不必运行整个复杂的查询。
#3. 减轻架构更改的影响
如果底层表结构发生更改,例如添加或删除列,那么视图不受影响。如果您依赖sql视图进行所有查询,您就不必担心架构更改。作为虚拟表,您创建的sql视图将继续无缝工作。
#4. 提高查询性能
当您创建sql视图时,数据库引擎会优化底层查询并存储它们。存储的查询运行速度比直接运行相同查询要快。因此,使用sql视图查询您的数据可以获得更好的性能和更快的结果。
如何创建sql视图?
要创建sql视图,您可以使用create view
命令。视图包含一个select语句。这个语句将存储在视图中。语法如下:
create view view_name as
select
column_1,
column_2,
column_3...
from
table_name_1, table_name_2
where
condition_clause
让我们通过一个例子来理解。假设您创建了两个表department
和employee
。 department
表保存了部门的名称和id。相应地,employee
表包含了员工的名称、id以及他们所属的部门的id。您将使用这两个表来创建sql视图。
创建数据库表
department_id | department_name |
---|---|
1 | 财务 |
2 | 技术 |
3 | 商业 |
如果您使用的是mysql,可以使用以下查询来创建该表:
create table `department` (
`department_id` int,
`department_name` varchar(255),
primary key (`department_id`)
);
使用以下sql将数据插入到您创建的表中:
insert into department values (1, '财务');
insert into department values (2, '技术');
insert into department values (3, '商业');
employee_id | employee_name | department_id |
---|---|---|
100 | 约翰 | 3 |
101 | 玛丽 | 1 |
102 | 娜塔莉娅 | 3 |
103 | 布鲁斯 | 2 |
使用准备好并填充了数据的department
表,使用以下mysql查询创建employee
表:
create table `employee` (
`employee_id` int,
`employee_name` varchar(255),
`department_id` int,
foreign key (`department_id`) references department(department_id)
);
接下来,将员工记录插入到您的表中。请记住,由于department_id列与department
表有外键引用,您不能插入不在另一个表中的department_id。
insert into employee values (100, '约翰', 3);
insert into employee values (101, '玛丽', 1);
insert into employee values (102, '娜塔利娅', 3);
insert into employee values (103, '布鲁斯', 1);
查询数据库表
让我们在数据库查询中使用这些表。考虑这样一种情况,您需要查询所有员工的employee_id、employee_name和department_name。在这种情况下,您需要使用两个表,并使用共同列department_id将它们连接起来。因此,您的查询如下:
select
employee_id,
employee_name,
department_name
from
employee,
department
where
employee.department_id = department.department_id;
创建sql视图
现在,您可能经常查找或引用这些数据。此外,随着表中记录的增加,查询时间会逐渐增加。在这种情况下,您可以创建与此查询相对应的sql视图。
使用以下查询创建名为employee_info
的视图:
create view employee_info as
select
employee_id,
employee_name,
department_name
from
employee,
department
where
employee.department_id = department.department_id;
通过创建这个视图,您可以直接查询它。因此,您的查询简化为:
select
*
from
employee_info;
查询sql视图会给出与运行原始查询相同的输出。然而,您的查询现在更容易维护。视图隐藏了查询的复杂性,而且结果和性能没有任何妥协。
如何替换sql视图?
如果您有一个具有特定名称的视图,想要修改或替换它,那么使用create or replace view
命令。使用这个命令,您可以修改用于创建视图的select语句,而保持视图名称不变。此外,如果视图不存在,您可以创建一个新的sql视图。
您可以使用以下语法替换sql视图:
create or replace view view_name as
select
new_column_1,
new_column_2,
new_column_3 ...
from
new_table_name_1,
new_table_name_2 ...
where
new_condition_clause
通过一个例子更好地理解。考虑department
和employee
表。从它们创建了一个employee_info
sql视图,其中包含了employee_id、employee_name和department_name列。
考虑到安全问题,您可能希望在此视图中删除employee_id。此外,您可能还想更改列名以隐藏实际的数据库列。您可以使用以下sql查询对现有视图进行这些更改:
create or replace view employee_info as
select
employee_name as name,
department_name as department
from
employee,
department
where
employee.department_id = department.department_id;
一旦视图被替换,当你使用之前使用的相同查询时,你将得到不同的结果。例如,在查询结果中,你会发现有一个列已经被删除了。除此之外,列名已经从employee_name和department_name分别修改为name和department。
利用创建sql视图的威力
创建sql视图不仅可以简化查询和加快数据查找,还可以提供安全性和保护以应对模式更改。创建sql视图非常直接。你可以将任何现有的查询转化为sql视图。
使用上述的逐步指南创建sql视图并利用其优势。通过sql视图,你可以使你的数据库应用程序简单、安全,并提高其性能。
如果你想管理自己的sql服务器,请查看sql server management studio (ssms)。