视图
表存实际数据,视图存的是SQL查询语句,临时表
create view视图名称呢(列名1,列名2)
as
select 列名,列名
视图和select的列名可以不一样,但是是一一对应的
使用视图
select 性别,人数------是view里面的列名
from 按性别汇总;
作用
1提高效率
2代码从原表中取数据,自动更新
3节约空间
注意事项
1 不能视图中加视图
2 不能往视图里插入数据
子查询
SQL运行顺序:先运行子查询
in
可能会用到后面的内容
any(子查询)与some(子查询)一样的
all
注意:
all函数得到是一个集合,不是数字
a>3*all(b) 错误
a/3>all(b) 正确
2.避免嵌套多层子查询
3. select...from...
子查询 as 子查询名称(不要省略)
小结:sql运行顺序
1.先运行子查询
2.每个查询语句里运行顺序
1)先运行from... where...group by...having...
2)select 子句
3)最后运行红框里的子句
标量子查询
where函数中,不能用汇总函数,只能通过标量子查询(可能有多个值),但返回一个值做对比
select 子句中也可用标量子查询,都是返回一个值
标量子查询因为返回一个值,可以用比较运算符(between,any,in,all)
练习:实战练习
from后是一张表
where后的子查询是一个确定的数据或值,不是一张表(只能是标量子查询)
select后的嵌套子查询也是返回确定的一个值,而不是多个值(只能是标量子查询)
关联子查询
当需要在组内比较时,用关联子查询
子查询里的关联条件,例如
where s1.课程号=s2.课程号,意思是以子查询里面筛出的课程号对应的值,来在外查询里面对应的课程号作为比较识别。按课程号分组比较
如何用SQL解决业务问题
1翻译成大白话 2写出分析思路 3写出对应的sql子句
报错信息?
逐一排查,先子查询运行
SQLZOO练习