sql同一张表不同日期比较_SQL基础--复杂查询

更新时间:2023-06-19 07:33:02 阅读: 评论:0

sql同⼀张表不同⽇期⽐较_SQL基础--复杂查询
1.视图
(1)什么是视图
表中存放的是实际数据,⽽视图中存放的是SQL查询语句。使⽤视图时,会运⾏视图⾥的SQL查询语句创建出⼀张临时表。(2)如何创建和使⽤视图
创建视图
create view 视图名称(<;视图列名1>,<;视图列名2>,......) as <lect 查询语句>;
例:create view 按性别汇总(性别,⼈数) as lect 性别,count(*) from student group by 性别;中医五味
使⽤视图
lect 性别,⼈数 from 按性别汇总;
在from⼦句中使⽤视图名称代替表名称
(3)视图有什么⽤?
⼀些SQL语句需要频繁的使⽤时,使⽤视图可以提⾼效率。
视图的数据会随着原表的数据⾃动更新,保证最新状态。
视图不需要保存数据,减少保存数据所使⽤的内存。
同州端午
(4)注意事项
避免在视图的基础上再次添加视图
不能往视图⾥插⼊数据
2.⼦查询
(1)什么是⼦查询
在from⼦句中直接写定义视图的SQL查询语句
例:SELECT 性别,⼈数 FROM (
SELECT 性别,COUNT(*) as ⼈数
FROM student
GROUP BY 性别
) as 按性别汇总;
尤泥先运⾏⼦查询,再运⾏外部语句
(2)如何使⽤⼦查询
in⼦查询
例:找出每个课程⾥成绩最低的学号
⾸先,先找出每个课程⾥成绩的最低分
SELECT 课程号,MIN(成绩) FROM score GROUP BY 课程号;
然后,在成绩表⾥查找这些值对应的学号
SELECT 学号,成绩 FROM score WHERE 成绩 in (80,60,80);
最终将两次查询进⾏组合
公司治理理论
SELECT 学号,成绩 FROM score WHERE 成绩 in ( SELECT MIN(成绩) FROM score GROUP BY 课程号);
那么在这⾥,第⼀步就为第⼆步的⼦查询
any⼦查询
例:哪些学⽣的成绩⽐课程0002的全部成绩⾥的任意⼀个⾼呢?
⾸先,查询课程0002的全部成绩
SELECT 成绩 FROM score WHERE 课程号 ='0002';
然后,某个学成的成绩⼤于任意⼀个第⼀步⾥的成绩,就符合条件。
SELECT 学号,成绩 FROM score WHERE 成绩 > ANY(SELECT 成绩 FROM score WHERE 课程号 ='0002');那么,在这⾥,第⼀步就为第⼆步的⼦查询
all⼦查询
例:哪些学⽣的成绩⽐课程0002的全部成绩⾥的都⾼呢?
这⾥和any⼦查询的例⼦类似,只需要把any改成all就可以了
SELECT 学号,成绩 FROM score WHERE 成绩 > ALL(SELECT 成绩 FROM score WHERE 课程号 ='0002');(3)⼦查询有什么⽤?
偶尔使⽤:⽤⼦查询⽐较⽅便
频繁使⽤:⽤视图⽐较⽅便
我是鱼(4)注意事项
a>3*all(b) 这种写法时错误的,可以写成a/3>all(b)
避免层层嵌套⼦查询,会降低查询效率
⼦查询的as关键字和名称可以省略,但是为了⽅便看懂,不建议省略
3.标量⼦查询
(1)什么是标量⼦查询
当要查询“⼤于平均成绩学⽣的学号和成绩”时,容易写成下⾯这样
lect 学号,成绩 from score where 成绩 > avg(成绩);
但是,这么写是不对的,因为where中不能使⽤汇总函数,因此可以这样
lect 学号,成绩 from score where 成绩 > (lect avg(成绩) from score);
这⾥的“lect avg(成绩) from score”就是标量⼦查询,其返回的结果是⼀⾏⼀列的结果,单⼀的值
(2)如何使⽤?
标量⼦查询并不知限于where⾥⾯,通常任何使⽤单⼀值的地⽅都可以使⽤标量⼦查询
例:lect 学号,成绩,(lect avg(成绩) from score) as 平均成绩 from score;
(3)有什么⽤?
因为标量⼦查询返回的单⼀的值,因此它可以和⽐较运算符,in,any,all,between⼀起使⽤。
(4)注意事项
不能返回多⾏结果
4.关联⼦查询
(1)什么是关联⼦查询?如何使⽤?
查找每个课程中⼤于对应课程平均成绩的学⽣
⾸先,查找出每门课程的平均成绩
lect avg(成绩) from score group by 课程号;
然后运⽤关联⼦查询
lect 学号,课程号,成绩 from score as s1 where 成绩 > (lect avg(成绩) from score as s2 where s1.课程号 = s2.课程号 group by 课程号);
注意以下⼏点:
这⾥起关键作⽤的就是关联条件:s1.课程号 = s2.课程号。表⽰的意思就是按课程号对表进⾏分组,同⼀组的数据依次和该组的平均值进⾏⽐较。
因为是在同⼀张表score中进⾏查询,为了区别为表起了两个别名s1和s2。
关联条件只能写在⼦查询中,别名s2只在⼦查询中有效。
(3)有什么⽤?
管理年
当在每个组⾥进⾏⽐较时使⽤关联⼦查询
5.各种函数
(1)汇总函数
count(列名):求某列的⾏数
sum(列名):对某列的数据求和,只能对数值类型的列计算
avg(列名):对某列的数据求平均值,只能对数值类型的列计算
max(列名):求某列数据的最⼤值
min(列名):求某列数据的最⼩值
(2)算数函数
round(数值,保留⼩数的位数):对数据进⾏四舍五⼊
abs(数值):绝对值
mod(被除数,除数):求余数
(3)字符串函数
海棠山>fly复数length(字符串):字符串长度
lower(字符串):⼤写转换为⼩写
upper(字符串):⼩写转换为⼤写
concat(字符串1,字符串2):字符串拼接
replace(字符串,被替换的字符串,⽤什么字符串替换):字符串替换substring(字符串,截取的起始位置,截取长度):字符串截取
(4)⽇期函数
current_date:当前⽇期
current_time:当前时间
current_timestamp:当前⽇期和时间
year(⽇期):获取⽇期的年份
mouth(⽇期):获取⽇期的⽉份
day(⽇期):获取⽇期
dayname(⽇期):⽇期对应的星期⼏

本文发布于:2023-06-19 07:33:02,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/989364.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:查询   视图   课程   数据   成绩   字符串   只能   名称
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图