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 = '张三'