一、视图
视图作用:链接数据库与客户;查询时候表中存放的是临时数据,视图可以存放SQL查询语句,避免重复反复输入,降低工作量;
*SQL语句范例:
create view 按性别汇总(性别,人数)
as
select 性别,count(*)
from student
group by 性别
*如何使用
select 性别,人数
from 按性别汇总
练习:
二、子查询:
在一个select 查询语句嵌套了另一个select查询语句(from/in/any/all),可以看成一个临时表
子查询先运行,再运行查询语句。
为什么用子查询而不用分组
*分组结果得到的结果里只会有分组条件,其他会随机匹配。
select 学号,成绩
from score
where 成绩 in (
select min(成绩)
from score
group by 课程号
)
select 列名1
from 表名1
where 列名1 > any(子查询)
*举例:
select 学号,成绩
from score
where 成绩> any
(select 成绩
from score
where 课程号= '0002'
)
注意:
1、all得到的是集合,不能a>3*all(b) 而是a/3>all(b)
2、避免无限嵌套;子查询的as可以省略,但是最好不要省略。
练习:
三、标量子查询
由于where子句不能使用汇总函数,需要采用标量子查询(返回值是单一只)
select 学号,成绩
from score
where 成绩> (
select avg(成绩)
from score
)
练习:
注:这里如果直接用avg(成绩),则只会返回一行;用标量子查询才会返回多行
四、关联子查询
当每个组里进行比较的时候,使用关联子查询
select 学号,课程号,成绩
from score as s1
where 成绩 > (select avg(成绩)
from score as s2
where s1.课程号=s2.课程号 */ 关联条件
group by 课程号
)
练习:
五、如何利用SQL解决业务问题:
SQLZOO答案:
>>反思:这里最关键在于name <= all;字母也可用all语句,小于所有name就等于name里面最"小"的一个