视图
视图如何使用:在from字句中使用视图名称代替表的名称,当学生表里面的数据更新之后,视图也会随着更新
视图的日常使用:
1、如果有的SQL查询语句频繁使用,可以保存成视图,不用每次重复写SQL,特别是在汇总以及复杂的查询条件导致SQL非常庞大的时候,视图可以帮助我们提高效率
2、视图中的数据会随着原表之间的变化自动更新,能保证数据的最新状态,视图中存放的是SQL查询语句,每次查询会从原表中取数
3、视图不需要保存数据,节省设备空间
视图使用注意事项
1、避免在视图的基础上再创建视图,多重视图会降低SQL的效率
2、不能往视图里面插入数据
子查询
一次性的视图,在SQL查询子句中直接写定义视图的SQL查询语句,就是在select查询语句中嵌套了另一个select查询语句
子查询可以放到where子句里面与运算符in、any、all一起使用,构建出复杂的查询条件
使用方法: in(子查询)、any(子查询)、all(子查询),在in、any、all括号里面放入子查询
any、all必须跟比较运算符一起使用,any(子查询)与some(子查询)相同,>any(子查询)表示大于子查询任一条件,>all(子查询)表示大于子查询里面的所有条件
使用子查询的注意事项:
1、若两个数据比较,a>3*b 等价于 a/3>b 但是在数据库 mysql里all得到的不是一个数值而是一个集合,也就是得到的是N行的数据,不能写成a>3*all(b) 只能写成a/3>all(b)
2、避免使用多层嵌套子查询
3、子查询的as关键字和子查询的名称都是可以省略的,自己写最好不省略
练习部分:
找出每个课程里成绩最低的学号:
哪些学生的成绩比课程0002的全部成绩里的任意一个高呢:
哪些学生的成绩比课程0002的全部成绩里的都高呢:
标量子查询
标量子查询在子查询上面做了一个特殊的限制:必须只能返回一行一列的查询结果,返回的是一个单一的值
由于标量子查询返回的结果是单一的值,标量子查询他的返回值可以和比较运算符(例如'='等一起去使用)
差生:成绩<=60 ,优等生>80 求介于差生平均成绩和优等生平均成绩之间的学生有哪些
通常任何使用单一值的地方都可以使用单一子查询
使用标量子查询不返回多行结果,如果返回多行就是普通子查询不能使用在比较运算符一起使用
练习部分:
大于平均成绩学生的学号和成绩
差生(成绩<=60) 优等生(成绩>80)有多少学生的成绩介于优等生平均成绩和差生平均成绩之间
关联子查询
在每个组里进行比较的时候使用关联子查询
如何用SQL解决业务问题
各种函数
练习部分
4、是错误的