8.7.1 mysql 内置功能

一 视图

视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用。

使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用

mysql> select * from teacher;
+-----+-------+
| tid | tname |
+-----+-------+
|   1 | 张三  |
|   2 | 李四  |
|   3 | 王五  |
|   4 | 李坤  |
+-----+-------+
4 rows in set (0.00 sec)

mysql> select * from course;
+-----+-------+------------+
| cid | cname | teacher_id |
+-----+-------+------------+
|   1 | 生物  |          1 |
|   2 | 体育  |          1 |
|   3 | 物理  |          2 |
|   4 | 数学  |          1 |
|   5 | 美术  |          3 |
+-----+-------+------------+
5 rows in set (0.00 sec)
#查询张三老师教授的课程名
SELECT cname FROM course WHERE teacher_id = ( SELECT tid FROM teacher WHERE tname = '张三' );
mysql> SELECT
    ->  cname
    -> FROM
    ->  course
    -> WHERE
    ->  teacher_id = (
    ->          SELECT
    ->                  tid
    ->          FROM
    ->                  teacher
    ->          WHERE
    ->                  tname = '张三'
    ->  );
+-------+
| cname |
+-------+
| 生物  |
| 体育  |
| 数学  |
+-------+
3 rows in set (0.00 sec)
#子查询出临时表,作为teacher_id等判断依据
SELECT tid FROM teacher WHERE tname = '张三' 

 

原文地址:https://www.cnblogs.com/caimengzhi/p/8586375.html