创建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

让我们通过一个例子来理解。假设您创建了两个表departmentemployeedepartment表保存了部门的名称和id。相应地,employee表包含了员工的名称、id以及他们所属的部门的id。您将使用这两个表来创建sql视图。

创建数据库表

department_id department_name
1 财务
2 技术
3 商业
表1:department

如果您使用的是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
表2:employee

使用准备好并填充了数据的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_idemployee_namedepartment_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

通过一个例子更好地理解。考虑departmentemployee表。从它们创建了一个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_namedepartment_name分别修改为namedepartment

利用创建sql视图的威力

创建sql视图不仅可以简化查询和加快数据查找,还可以提供安全性和保护以应对模式更改。创建sql视图非常直接。你可以将任何现有的查询转化为sql视图。

使用上述的逐步指南创建sql视图并利用其优势。通过sql视图,你可以使你的数据库应用程序简单、安全,并提高其性能。

如果你想管理自己的sql服务器,请查看sql server management studio (ssms)

类似文章