ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sql语句练习

2021-04-18 22:06:04  阅读:196  来源: 互联网

标签:语句 cid 练习 score sql sid sc WHERE select


select Cid from sc order by Sid HAVING score >
#查询" 01 “课程比” 02 "课程成绩高的学生的信息及课程分数
select s.,a.,b.* from student s,
(select Sid,score from sc where Cid =‘01’ ) a,
(select Sid,score from sc where Cid =‘02’ ) b
WHERE a.Sid = b.Sid and a.score > b.score and s.Sid = a.Sid

#查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩

select s.,c. ,AVG(score) as se from student s, sc c
WHERE s.Sid = c.Sid
GROUP BY s.Sid HAVING se >60

#查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null ) where 返回得值 不会是NULL
select * from student s LEFT JOIN sc on sc.Sid = s.Sid GROUP BY s.Sid – 返回得值 会包括NULL
select * from student s ,sc WHERE sc.Sid = s.Sid GROUP BY s.Sid – 返回得值 不会是NULL

select s.sid, s.sname, count(cid) as 选课总数, sum(score) as 总成绩
from student as s left join sc
on s.sid = sc.sid
group by s.sid

#查有成绩的学生信息
select s.sid, s.sname, count(*) as 选课总数, sum(score) as 总成绩,
sum(case when cid = 01 then score else null end) as score_01,
sum(case when cid = 02 then score else null end) as score_02,
sum(case when cid = 03 then score else null end) as score_03
from student as s, sc
where s.sid = sc.sid
group by s.sid

#查询「李」姓老师的数量
select count(*)from teacher where Tname like ‘李%’

#查询学过「张三」老师授课的同学的信息
SELECT
*
FROM
student s
WHERE sid IN (
SELECT sid FROM sc WHERE cid IN (
SELECT cid FROM course WHERE tid IN (
SELECT tid FROM teacher WHERE tname = ‘张三’
)
)
)
select * from student where sid in (
select sid from sc, course, teacher
where sc.cid = course.cid
and course.tid = teacher.tid
and tname = ‘张三’
)

#查询没有学全所有课程的同学的信息
select * from student WHERE sid not in (
select sid from sc group by sid HAVING COUNT(cid) = (select COUNT(*) from course)
)

select * from student where sid in (select sid from sc group by sid having count(cid) < 3)

#查询和" 01 "号的同学学习的课程完全相同的其他同学的信息
select * from student WHERE sid not in (
select sid from sc group by sid HAVING COUNT(cid) = (select COUNT(*) from course WHERE sid = ‘01’)
)

select * from student WHERE sid in(
select sid from sc where cid in(
select cid from sc WHERE sid = ‘01’
) group by sid HAVING count(1) = (select count(1) from course) and sid != ‘01’
)

#查询至少有一门课与学号为" 01 "的同学所学相同的同学的信息
select * from student WHERE sid in(
select sid from sc WHERE cid in (
select cid from sc WHERE sid = ‘01’
)group by sid HAVING count(1) <= (select count(1) from course) and sid != ‘01’
)

#查询没学过"张三"老师讲授的任一门课程的学生姓名
select * from student WHERE sid in (
select sid from sc WHERE cid not in (
select cid from course WHERE tid in (
select tid from teacher WHERE tname = ‘张三’
)
)
)

select sname from student
where sname not in (
select s.sname
from student as s, course as c, teacher as t, sc
where s.sid = sc.sid
and sc.cid = c.cid
and c.tid = t.tid
and t.tname = ‘张三’
)

#查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
select s.sid ,s.sname,AVG(score) from student s,sc
WHERE s.sid = sc.sid and s.sid in ( select sid from sc WHERE score <60)
group by s.sid HAVING count(score)>=2

select s.sid ,s.sname,AVG(score) from student s,sc
WHERE s.sid = sc.sid and score <60
GROUP BY s.sid HAVING count(score)>=2\

#检索" 01 "课程分数小于 60,按分数降序排列的学生信息
select * from student s ,sc
WHERE s.sid = sc.sid and score <60 and cid = ‘01’ ORDER BY score DESC

#按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
select s.*,
sum(case when sc.cid = ‘01’ then sc.score else null end ) as 001_cid,
sum(case when sc.cid = ‘02’ then sc.score else null end ) as 002_cid,
sum(case when sc.cid = ‘03’ then sc.score else null end ) as 003_cid,
AVG(score) as avscore from student s,sc
WHERE s.sid = sc.sid
GROUP BY s.sid ORDER BY avscore DESC

#查询各科成绩最高分、最低分和平均分,以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,
#及格率,中等率,优良率,优秀率(及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90)。

select c.cid,c.cname, MAX(score),MIN(score),AVG(score) ,
sum(case WHEN score >=60 then 1 else 0 END)/count() as 及格,
sum(case when score >=70 and score <80 then 1 ELSE 0 END)/COUNT(
) as 中等,
sum(case when score >=80 and score <90 then 1 ELSE 0 END)/COUNT() as 良好,
sum(case when score >=90 and score <100 then 1 ELSE 0 END)/COUNT(
) as 优秀
from sc ,course c
WHERE sc.cid = c.cid GROUP BY sc.cid 、

#查询各科成绩前三名的记录
select * from (select *, rank() over(partition by cid order by sc desc) as graderank from sc) A
where A.graderank <= 3

select s.* from (select distinct student.*,a.cid, a.score, count( distinct b.score)+1 as rank
from sc a
left join sc b on a.cid=b.cid and a.score<b.score
left join student on(a.sid=student.sid)
group by a.cid, a.sid
order by a.cid, a.score desc) s
where s.rank between 1 and 3;

#查询出只选修两门课程的学生学号和姓名
select * from student s,sc
WHERE s.sid = sc.sid
GROUP BY s.sid HAVING count(cid)= 2

#查询名字中含有「风」字的学生信息
select * from student WHERE sname LIKE ‘%风’ or ‘%风%’

#查询 1990 年出生的学生名单
select * from student WHERE year(sage) = ‘1990’

标签:语句,cid,练习,score,sql,sid,sc,WHERE,select
来源: https://blog.csdn.net/weixin_42738506/article/details/115840772

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有