一个SQL查询出每门课程的成绩都大于80的学生姓名

更新时间:2023-07-11 20:15:10 阅读: 评论:0

⼀个SQL查询出每门课程的成绩都⼤于80的学⽣姓名
name  kecheng    fenshu顺理成章的意思
张三语⽂    81
欧亨利短篇小说读后感
resist张三数学    75
李四语⽂    76
李四数学    90
王五语⽂    81
户外活动教案小班王五数学    100
王五英语    90
⽅法⼀:无花果干功效
  思路:如果能获得⼀张表,由学⽣姓名,语⽂成绩,数学成绩,英语成绩的表,剩下的就是在WHERE条件中筛选及可以获得想要的结果。
  具体办法:通过⾃连接的办法,以“姓名”为连接条件,⾃连接三次,便可以获得包含⼜姓名和三门课程成绩的数据⾏。虽然可以得到想要的数据列。但会有很多冗余重复列!
  点评:此⽅法是根据题⽬,依题解题,中规中矩!不过多张表连接⾮常耗费时间。⽽且SQL语句也⽐较复杂,需要注意事项很多。
SELECT  D.name  FROM (
SELECT  S.name,S.score AS ITEM1,S1.score AS ITEM2,S2.score AS ITEM3
FROM Student S
inner join Student S1 on S.name = S1.name ur <> S1.cour
inner join Student S2 on S.name = S2.name ur <> S2.cour
WHERE S.score>=80 and S1.score>=80 and S2.score>=80
) D
GROUP BY D.name
  易错点:内表的 score字段必须要取别名,否则会报错。
  ⽅法⼆:
  思路:采⽤逆向思维想想。。。。。。求三门成绩都⼤于80的⼈,也可以是使先查出有成绩⼩于80 的⼈,再除去这些⼈不就是三门成绩都⼤于80的⼈了么?以前学过的数学逻辑逆向思维还真是有⽤的阿!!
  具体办法:先扫描表,查出有成绩⼩于80的⼈的姓名,然后再次扫描表,⽤not in 或not exists ⽅法。
  点评:此⽅法采⽤逆向思维,能快速写出⾼效且简单的 SQL语句。
//not in
SELECT DISTINCT A.name FROM Student A
WHERE A.name not in(
SELECT Distinct S.name FROM Student S WHERE S.score <80)
/
/not exists
SELECT DISTINCT A.name From Student A
where not exists (SELECT 1 From Student S Where  S.score <80 AND S.name =A.name) /*exists 详解
取出外表第⼀条数据,然后与内表根据连接条件,
形成⼀条或多条数据,判断这些⽣成的数据中是否存在
或者是不存在符合where条件的。结果为ture的那条外表
记录旧被查询出来!
实例过程:取出外表的第⼀条记录,
和内表通过姓名条件连接,这时候产⽣2两记录,
根据 not exists是判断不存在。条件是 score<80 .
⽽这两条记录存在⼀条记录⼩于80,所以于not exists 不符合,
滴字组词该条记录不被查出。
*/
荣耀平板电脑
花的诗词  ⽅法三:
SELECT S.name
FROM Student S
GROUP BY S.name
Having MIN(S.score)>=80

本文发布于:2023-07-11 20:15:10,感谢您对本站的认可!

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

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

标签:成绩   条件   连接   姓名   记录   数据   存在
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图