sql语句练习50题(我自己写的答案,还没写完)

Student(Sid,Sname,Sage,Ssex) 学生表
Course(Cid,Cname,Tid) 课程表
SC(Sid,Cid,score) 成绩表
Teacher(Tid,Tname) 教师表
练习内容:
1.查询“某1”课程比“某2”课程成绩高的所有学生的学号;
SELECT a.Sid
FROM SC AS a ,SC AS b
Where a.Cid IN (SELECT Cid
FROM Course
Where Cname="某1")
AND b.Cid IN (SELECT Cid
FROM Course
Where Cname="某2")
AND a.score>b.score
AND a.Sid=b.Sid

2.查询平均成绩大于60分的同学的学号和平均成绩;
SELECT Sid ,avg(score)
FROM SC
GROUP BY Sid
HAVING avg(score)>60

3.查询所有同学的学号、姓名、选课数、总成绩
SELECT Sid,
Sname,
(SELECT count(*)
FROM SC
WHERE SC.Sid=Student.Sid),
(SELECT count(score)
FROM SC
WHERE SC.Sid=Student.Sid),
FROM Student;
用联结表:
SELECT Student.Sid,
Student.Sname,
count(SC.Cid)
sum(SC.score)
FROM Student LEFT OUTER JOIN SC
ON Student.Sid=SC.Sid
GROUP BY Student.Sid,Student.Sname;

4.查询姓“李”的老师的个数;
SELECT count(*)
FROM Teacher
WHERE Tname LIKE "李%";

5.查询没学过“叶平”老师课的同学的学号、姓名;

SELECT DISTINC Student.Sid, DISTINCT Student.Sname
FROM Student,Course,SC,Teacher
WHERE Student.Sid=SC.Sid
AND SC.Cid=Course.Cid
AND Course.Tid=Teacher.Tid
AND Tname != "叶平";

6.查询学过“```”并且也学过编号“```”课程的同学的学号、姓名;
使用子查询
SELECT Sid,Sname
FROM Student
WHERE Sid IN (SELECT Sid
FROM SC
WHERE Cid="1")
AND Sid IN (SELECT Sid
FROM SC
WHERE Cid="2");
使用联结表
SELECT Student.Sid,Student.Sname
FROM Student,SC AS a,SC AS b
WHERE a.Sid =Student.Sid
AND b.Sid =Student.Sid
AND a.Cid="1"
AND b.Cid="2";

7.查询学过“叶平”老师所教的所有课的同学的学号、姓名;
SELECT Sid,Sname
FROM Student
WHERE Sid IN (SELECT Sid
FROM SC,Course,Teacher
WHERE SC.Cid=Course.Cid
AND Course.Tid=Teacher.Tid
AND Teacher.Tname="叶平"
GROUP BY Sid
HAVING count(Cid)=(SELECT count(Cid)
FROM Course,Teacher
WHERE Course,Tid=Teacher.Tid
AND Teacher.Tname="叶平"));

8.查询课程编号“”的成绩比课程编号“”课程低的所有同学的学号、姓名;
SELECT a.Sid,a.Sname
FROM (SELECT Student.Sid,Student.Sname,SC.score
FROM Student,SC
WHERE Student.Sid=SC.Sid
AND SC.Cid=1)a,
(SELECT Student.Sid,Student.Sname,SC.score
FROM Student,SC
WHERE Student.Sid=SC.Sid
AND SC.Cid=2)b,
WHERE a.score<b.score

9.查询所有课程成绩小于60分的同学的学号、姓名;
SELECT DISTINCT Sid,DISTINCT Sname
FROM (SELECT Sid,Sname,count(Cid)
FROM Student,SC
WHERE Student.Sid=SC.Sid
AND SC.score<60
GROUP BY Sid,Sname
HAVING count(Cid)=(SELECT count(Cid)
FROM Student,SC
WHERE Student.Sid=SC.Sid
GROUP BY Sid,Sname))a;
另一种解法:
SELECT Sid,Sname
FROM Student
WHERE Sid NOT IN (SELECT Sid,Sname
FROM Student,SC
WHERE Student.Sid=SC.Sid
AND SC.score>60);
10.查询没有学全所有课的同学的学号、姓名;
SELECT DISTINCT Sid,DISTINCT Sname
FROM (SELECT Sid,Sname,count(Cid)
FROM Student,SC
WHERE Student.Sid=SC.Sid
GROUP BY Sid,Sname
HAVING count(Cid)<(SELECT count(Cid)
FROM SC))a;
11.查询至少有一门课与学号为“”的同学所学相同的同学的学号和姓名;

12.查询至少学过学号为“”同学所有一门课的其他同学学号和姓名;

13.把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;

14.查询和“”号的同学学习的课程完全相同的其他同学学号和姓名;

15.删除学习“叶平”老师课的SC表记录;

16.向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“”课程的同学学号、课程的平均成绩;

17.按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分;(没做出来)

18.查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分;

19.按各科平均成绩从低到高和及格率的百分数从高到低顺序

26.查询每门课程被选修的学生数

27.查询出只选修了一门课程的全部学生的学号和姓名

32.查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

37.查询不及格的课程,并按课程号从大到小排列

38.查询课程编号为且课程成绩在分以上的学生的学号和姓名;

40.查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩

41.查询各个课程及相应的选修人数

44.统计每门课程的学生选修人数(超过人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,查询结果按人数降序排列,若人数相同,按课程号升序排列

45.检索至少选修两门课程的学生学号

rownum的用法
查询所有成绩第二名到第四名的成绩

47.查询没学过“叶平”老师讲授的任一门课程的学生姓名

48.查询两门以上不及格课程的同学的学号及其平均成绩

49.检索“”课程分数小于,按分数降序排列的同学学号

50.删除“”同学的“”课程的成绩

时间: 2024-10-14 14:50:06

sql语句练习50题(我自己写的答案,还没写完)的相关文章

sql语句练习50题

sql语句练习50题 Student(Sid,Sname,Sage,Ssex) 学生表 Course(Cid,Cname,Tid) 课程表 SC(Sid,Cid,score) 成绩表 Teacher(Tid,Tname) 教师表 练习内容: 1.查询“某1”课程比“某2”课程成绩高的所有学生的学号: SELECT a.sid FROM (SELECT sid,score FROM SC WHERE cid=1) a,(SELECT sid,score FROM SC WHERE cid=3) b

sql语句练习50题(Mysql版) 围观

表名和字段 –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id,c_name,t_id) – –课程编号, 课程名称, 教师编号 –3.教师表 Teacher(t_id,t_name) –教师编号,教师姓名 –4.成绩表 Score(s_id,c_id,s_score) –学生编号,课程编号,分数 测试数据 --建表 --学生表 CREATE TABLE `Student`( `s_

sql 经典查询50题 思路(一)

因为需要提高一下sql的查询能力,当然最快的方式就是做一些实际的题目了.选择了这个sql的50题,这次大概做了前10题左右,把思路放上来,也是一个总结. 具体题目见: https://zhuanlan.zhihu.com/p/72223558 第一部分的题目主要使用的技术是连表查询和子查询,难倒不难,主要是要把思路转换过来. 首先画出一个各个表之间的关系图(没画图之前关系老是搞不清) 1.查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数 学生的信息

新闻发布系统、、、还没写完,请看下集

真希望你笑的时候,旁边坐着的是一个能和你一起笑的人.合适的圈子,会接纳你所有的好事却不生嫉妒.在真正的朋友面前,她从不会认为你显摆,只会由衷的为你高兴.总有些人看不得你好.但你却从此看清了哪些是真正的朋友,哪些只是过客.生活无需过多陪衬,三观不和的朋友多了,越热闹越冷清. 第一项:BaseDAO public class BaseDAO { public static final String driver="com.mysql.jdbc.Driver"; public static

组合博弈入门(还没写好)

(1)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜. (2)威佐夫博奕(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. (3)尼姆博奕(Nimm Game):有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 题目:http://acm.hdu.edu.cn/showpro

Xamarin University-----Xamarin Mobile Certification Exam考试经历(还没写完)

我是在2017年8月7日通过的Xamarin Certification Exam(Xamarin认证考试), 然后今年8月底,Xamarin考试就改革了,考试改革页面在这里 我简单介绍一下改革前的考试规则:考试范围:20门课程. 考试语言: 英语 考试时间: 180分钟(3个小时) 考题数量: 150道题 考试题型: 单项选择题,多项选择题,判断题. 通过分数: 最低要求80分(满分100分) 是否开卷: 开卷. 考试次数限制: 你最多只能参加三次考试,如果你三次都不通过,我就不知道了....

Xamarin University-----学习经历(还没写完)

首先要感谢微软,毕竟收购Xamarin是大功一件. 微软大土豪,直接把Xamarin University的价格砍了一半,原来是一年一付,2000美元   !!!再次感谢土豪! Xamarin University在今年3月3日实行了新的定价策略(按月支付,只要83.25美元, 但还是需要VISA信用卡等外币信用卡)-------价格页面在这里. 课程设置: 在线课堂: 老师:

18.2.26深信服Web实习生补坑(已拿到offer)----持续更新中,还没写完

26号晚上8点左右收到电话,面试大概一小时左右,发挥的一般,问到的大部分都答出来了,有些没有讲好.然后面试官说等通知,问了评价,面试官说我现在大三懂这么多已经很不错了,表达能力需要加强,有点紧张口吃.30分钟后收到实习生offer邮件.这里只记录下几个答的不好的点. 1.var和不var的区别? 先问了作用域相关,然后问如果不用var声明一个变量是属于什么变量,这个是全局变量,肯定一下子答上来,然后又问那么不var的和用var声明的变量有什么区别? js里面的属性是有权限设置的,比如我们直接创建

mysql 通过慢查询日志查写得慢的sql语句

MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启动时,mysqld 会写一个包含所有执行时间超过long_query_time 秒的SQL语句的日志文件,通过查看这个日志文件定位效率较低的SQL . 慢查询日志在查询结束以后才记录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态.是否锁表等,可以实时地查看SQ