1、视图
视图中存放的是sql查询语句,使用视图时,运行视图中的sql语句创建出临时表。
创建视图:
create view 视图名称(<视图列名1>,<视图列名2>,……) as
<select 查询语句>;
使用视图:在from字句中使用视图名称代替表名称。
视图数据会同步表数据,因为视图使用是执行sql语句。
删除视图:右键视图名称,选择删除。
为什么要使用视图:某一部分sql查询语句需要频繁使用,则可以保存为视图多次调用。
使用视图注意事项:
①、避免视图的基准上再创建视图,会降低使用性能和效率;
②、不能往视图里插入数据。
2、子查询——一次性的视图(select包含的其他子查询)
sql运行顺序:先运行子查询
应用函数后的分组结果没有包括学号,所以查询结果的学号不是正确结果,需要运用子查询查出正确学号。
用了老师的办法,但是因为语文的最低成绩和英语的非最低成绩重合了,所以查询出了错误的数据(最后一行)。
子查询后再加一次分组,没有错误的数据了,但是把语文同为最低成绩的另一个学号抹掉了,暂时没有想到解决办法==
3、ANY(子查询)与ALL(子查询)
(1)any(子查询)与some(子查询)相同
用法:SELECT 列名1 FROM 表名1 WHERE 列名1>any(子查询);
注意事项1:不能写成 a>3*all(b)
正确: a/3>all(b)
注意事项2:不要在子查询里嵌入子查询,不易读且会影响性能
注意事项3:注意备注子查询名称,方便事后回看或者其他人查看
SELECT……FROM……子查询 AS 子查询名称
4、标量子查询
什么是标量子查询?子查询结果返回一行一列,一个单一的值,就称为标量子查询。
可和比较运算符使用或in、any、all、between。
5、关联子查询 使用关联条件的子查询,需要在每个组里进行比较时使用
现学现用解决了2.2的问题
注意事项:关联条件要写在子查询中
6、如何用SQL解决业务问题
①将问题用易于理解的语言描述出来
②将问题拆解
③用SQL语言实现
如何看懂SQL报错信息
分解查询语句进行逐一排查,如有子查询则分别运行检验。
7、各种函数
①汇总函数:count(列名)—求某列的行数
sum(列名)—对某列数据求和,只能对数值类型的列进行计算
avg(列名)—对某列数据求平均值,只能对数值类型的列进行计算
max(列名)—求某列数据的最大值
min(列名)—求某列数据的最小值
②算数函数
round(数值,保留小数的位数)—对数值进行指定位数的四舍五入
abs(数值)—求绝对值
mod(被除数,除数)—求余数,eg:mod(5,2)=1
③字符串函数
length('字符串')—求字符串长度
lower(‘字符串’)—大写转换为小写
upper(‘字符串’)—小写转换为大写
concat(‘字符串1’,‘字符串2’)—字符串拼接
replace(‘字符串’,‘被替换的字符串’,‘用什么字符串替换’)—字符串替换
substring(‘字符串’,截取的起始位置,截取的长度)—字符串截取
④日期函数
current_date——当前日期
current_time——当前时间
current_timestamp——当前日期和时间
year(日期)——获取日期的年份
month(日期)——获取日期的月份
day(日期)——获取日期的日期
dayname(日期)——日期对应星期几
练习题
我对题目可能有什么误解==
这里一开始想用BETWEEN,错误,包含太多行,BETWEEN是两边闭集。
TEST 发布但是链接一直打不开,用文字结束试一下。