第一部分:视图
WHAT:表中存放的是实际数据,视图中存放的是 sql查询语句,使用视图时,会运行视图里的sql查询语句创建出一张临时表。
HOW:如何创建视图:create view 视图名称(视图列名1,....)as WHY: 频繁使用庞大的查询语句;原表数据更新,视图也会同步更新;视图不需要保存数据,节省内存空间。
注意事项:避免在视图的基础上再次创建视图,多重视图会降低sql的性能和效率;不能往视图里插入数据,否在会报错。
第二部分:子查询
WHAT:在select查询语句中直接写定于视图的语句(在from子句中直接写定义视图的sql查询语句)
HOW:先运行子查询-得到一个临时表,再运行外部的查询语句(from从临时表里继续查询)。子查询可以放在from和where中 搭配 in any all eg:select 列名1 from 表名1 where 列名1>any(子查询)
注意事项:a>3*all(b)----错误,因为all得到的结果是集合,n行数据,不能进行计算, a/3>all(b) 这样是对的避免from(子查询(子查询))层层嵌套子查询的as 关键词是可以省略的
第三部分:标量子查询
WHAT: 子查询可以返回多个(行)结果,而标量子查询只能返回一行一列的结果(单一的值)因为返回是单一的值,则可以跟比较运算符搭配使用。如果标量子查询返回了多行结果,那么它不再是标量子查询。
where子句不能使用汇总函数,则可以搭配标量子查询使用
注意事项:标量子查询只返回一行,select查询中不能使用多行结果。
第四部分:关联子查询
在对表中某一部分记录的集合进行比较时,就可以使用关联子查询。关联子查询在每个组内比较,需要指定的关联条件。
第五部分:如何使用SQL解决业务问题翻译成大白话写出分析思路写出对应的sql语句
第六部分:各种函数
汇总函数
count 求某列的行数
sum 求某列数据求和,只能对数值类型的列计算
avg 求某列数据求平均值,只能对数据类型的 列计算
max 求某列数据的最大值
min 求某列数据的最小值
算数函数
round(数值,保留小数的位数):对数据进行四舍五入 eg:round(1234.456,1)->12345
abs(数据):绝对值
mod(被除数,除数):求余数 mod(5,2)->1
字符串函数
length(字符串):字符串长度
lower(字符串):大写转小写
upper(字符串):小写转大写
concat(字符串1,字符串2):字符串拼接 eg:concat("调音师","真好看")->调音师真好看
replace(字符串,被替换字符串,用什么替换字符串):字符串替换 eg: replace("调音师真好看","真好看","真棒")-> 调音师真棒
substring(字符串,截取的起始位置,截取长度):字符串截取 eg: substring("12345",2,2)-> 23
日期函数
current_date :当前日期 eg: current_date ->2020-05-02
current_time:当前时间
current_timestamp:当前日期和时间
year(日期)
month(日期)
day(日期) eg: year('2020-05-09') -> 2020
dayname(日期) 日期对应的星期几 eg:dayname('2020-05-02 10:41:23') ->星期六
练习输出: