视图

将查询的结果创建为一个视图。

在视图中没有数据,只有查询语句,当需要通过查询视图中的数据时,根据查询语句到实际的表中查询到数据并显示。

语法:

MySQL视图查询效率 mysql 查询视图_数据

创建视图例子:

MySQL视图查询效率 mysql 查询视图_mysql 5.7视图子查询_02

使用:

SELECT * FROM empinfo

视图中没有数据,只有创建视图时的SQL语句定义。

在使用视图时才会去执行SQL语句,查询实际的数据。

将多表查询定义为视图,可以大大方便实际查询的日常使用。

使用视图不方便修改数据,容易出错,视图一般用于查看数据。

子查询

需求:

给在北京工作的员工涨工资10%,更新员工表,但工作地点北京在部门表里,通过部门表查询北京的部门编号,根据查询到的部门编号再到员工表中更新。

在某些情况下,增、删、改、查操作需要其他的SELECT语句结果。这个SELECT查询语句就称为子查询。

下面查询操作的为这三张中数据:

部门表dept

MySQL视图查询效率 mysql 查询视图_数据_03

员工表emp

MySQL视图查询效率 mysql 查询视图_连接查询_04

工资等级表salgrade

MySQL视图查询效率 mysql 查询视图_连接查询_05

单行单列的子查询结果

显示在北京上班的员工信息

查询在北京的部门编号

MySQL视图查询效率 mysql 查询视图_子查询_06

MySQL视图查询效率 mysql 查询视图_数据_07

显示在北京上班的员工信息

MySQL视图查询效率 mysql 查询视图_MySQL视图查询效率_08

MySQL视图查询效率 mysql 查询视图_mysql 5.7视图子查询_09

多行单列的子查询结果

子查询得到多行单列的多个结果值

显示在北京和上海的员工的信息

查询北京和上海的部门编号

MySQL视图查询效率 mysql 查询视图_数据_10

MySQL视图查询效率 mysql 查询视图_连接查询_11

显示在北京和上海的员工的信息

MySQL视图查询效率 mysql 查询视图_连接查询_12

MySQL视图查询效率 mysql 查询视图_数据_13

多行多列的子查询

案例:显示每个部门工资最多的员工信息

MySQL视图查询效率 mysql 查询视图_mysql 5.7视图子查询_14

MySQL视图查询效率 mysql 查询视图_子查询_15

子查询替换

显示员工工资超过北京平均工资的人员信息

找北京的部门编号

MySQL视图查询效率 mysql 查询视图_数据_16

MySQL视图查询效率 mysql 查询视图_子查询_17

找北京部门编号对应的员工的平均工资

MySQL视图查询效率 mysql 查询视图_mysql 5.7视图子查询_18

MySQL视图查询效率 mysql 查询视图_子查询_19

显示员工工资超过北京平均工资的人员信息

MySQL视图查询效率 mysql 查询视图_mysql 5.7视图子查询_20

MySQL视图查询效率 mysql 查询视图_连接查询_21

表连接实现:

MySQL视图查询效率 mysql 查询视图_数据_22

MySQL视图查询效率 mysql 查询视图_数据_23

比较表连接和子查询

子查询优点:思路简单理解方便,可以解决连接查询不能解决的问题。

子查询缺点:效率低,多个SQL语句,会多次连接数据库服务器发送多次请求。

表连接查询优点:显示效果好,可以显示多张表中的信息。效率高,请求次数少。

表连接查询缺点:连接情况复杂。