SQL经典练习题随机测试

这是一系列关于SQL查询的实战练习题,涵盖了各种复杂场景,如对比不同课程成绩、查询平均分、查找特定条件的学生等。题目涉及到学生、课程、教师等多个表的联接操作,包括自连接、子查询等高级技巧。通过这些练习,可以提升SQL查询和数据操作的能力。
摘要由CSDN通过智能技术生成

sql练习

自己写了一个sql测试网页,现在分享出来,一次随机抽取5道练习题,自己试了后可以对答案,全部习题及答案在下面可以看到
数据库sql 百度云: 链接: https://pan.baidu.com/s/1nWCGeWujQyPG0vZOo8LUYQ 提取码: 6j8h (直接用工具执行即可自动建库并插入数据)
sql测试网址 http://35.221.248.16:8080/ (大部分答案都测试过正确,复制网页上答案时 注意有的地方需要加空格)

您的打赏,会给我提供更大的前行动力,谢谢!

学生表:Student(编号sid,姓名sname,年龄sage,性别ssex)
课程表:Course(课程编号cid,课程名称cname,教师编号tid)
成绩表:Sc(学生编号sid,课程编号cid,成绩score)
教师表:Teacher(教师编号tid,姓名tname)

1,插入学生数据
学号 姓名 年龄 性别
1001 张三 10 男
1002 李四 11 女
1003 王五 12 男
1004 马六 19 女
1005 孙七 22 女
1006 钱八 18 男
1007 赵九 11 女
1008 周公 19 男
2,插入老师数据
教师编号 教师姓名
1 叶平
2 李浩然
3 胡平原
4 朱清时
5 赛先生
6 宋三东
3,插入课程数据
课程编号 课程名 教师编号
001 PHP 1
002 C# 1
003 C++ 2
004 JAVA 3
005 Python 4
006 R 5
007 HTML 6
4,插入成绩数据
学号 课程编号 成绩
1001 001 89
1002 001 80
1003 001 30
1004 001 78
1005 001 68
1006 001 93
1007 001 62
1001 002 67
1002 002 86
1003 002 67
1004 002 77
1005 002 66
1006 002 84
1007 002 72
1001 003 82
1002 003 85
1003 003 32
1004 003 73
1005 003 64
1006 003 87
1007 003 77
1008 003 94
1001 004 39
1002 004 80
1003 004 80
1004 004 88
1005 004 68
1006 004 59
1007 004 42
1008 004 64
1001 005 89
1002 005 70
1003 005 60
1004 005 58
1005 005 38
1006 005 89
1007 005 72
1008 005 64
1001 006 49
1002 006 90
1003 006 70
1004 006 48
1005 006 98
1006 006 59
1007 006 72
1008 006 74
1001 007 49
1002 007 50
1003 007 70
1004 007 88
1005 007 78
1006 007 99
1007 007 82

1.查询“001”课程比“002”课程成绩高的所有学生的学号;

自连接

SELECT sid FROM sc a WHERE cid = ‘1’ AND score >(SELECT score FROM sc b WHERE cid = ‘2’ AND a.sid = b.sid) ;

输出两个表后再比较

SELECT a.sid FROM
(SELECT sid,score FROM sc WHERE cid=‘1’) a INNER JOIN
(SELECT sid,score FROM sc WHERE cid=‘2’) b
ON a.sid=b.sid
WHERE a.score>b.score;

2.查询平均成绩大于60分的同学的学号和平均成绩;

SELECT AVG(score) c,sid FROM sc GROUP BY sid HAVING AVG(score) >60

3.查询所有同学的学号、姓名、选课数、总成绩;

第一种

SELECT sc.sid,sname,COUNT(*),SUM(score) FROM sc,student WHERE sc.sid=student.sid GROUP BY sc.sid ;

第二种

SELECT sc.sid,sname,COUNT(*),SUM(score) FROM sc INNER JOIN student ON sc.sid=student.sid GROUP BY sid;

4.查询姓“李”的老师的个数;

#还需要去重
SELECT COUNT(DISTINCT(tname)) FROM teacher WHERE tname LIKE ‘李%’;

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

SELECT sid,sname FROM student WHERE sid NOT IN (
SELECT sid FROM sc WHERE cid IN (
SELECT cid FROM course WHERE tid = (
SELECT tid FROM teacher WHERE tname =‘叶平’)));

SELECT sid,sname FROM student WHERE sid NOT IN(
SELECT sc.sid FROM sc INNER JOIN course ON sc.cid=course.cid INNER JOIN teacher ON course.tid=teacher.tid WHERE tname=‘叶平’);

6.查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;

SELECT student.sid,sname FROM student INNER JOIN sc ON student.sid=sc.sid WHERE cid=‘001’ AND student.sid IN (SELECT student.sid FROM student INNER JOIN sc ON student.sid=sc.sid WHERE cid=‘002’);

SELECT sid,sname FROM student WHERE sid IN(
SELECT sid FROM sc WHERE cid = ‘001’ AND sid IN(
SELECT sid FROM sc WHERE cid=‘002’));

SELECT * FROM (SELECT student.sid,student.sname FROM student,sc WHER

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第二天 1、查询客户表,统计每个机构2000年之前开户数、2000~2005开户数(含头不含尾)、2005~2010开户数(含头不含尾)、2010之后开户数 展示字段:机构号、2000年之前开户数、2000~2005年开户数、2005~2010年开户数、2010年之后开户数 2、查询客户表,按年份统计,每年、每个机构开户数占全年开户数的占比 展示字段:年份、机构号、开户数、开户占比百分比(百分比) 3、统计所有客户的客户号、存款账户数、2011.12.31日的存款余额、2011.12存款月日均、贷款账户数、2011.12.31日的贷款余额、2011.12贷款月日均 备注:null置为0 第三天 1、统计所有客户的2011.12.31日的存款余额、存款比上日余额、存款比上月余额、、存款比上年余额 备注:存款比上日余额 = 2011.12.31日的存款余额-2011.12.30日的存款余额 存款比上月余额 = 2011.12.31日的存款余额-2011.11.30日的存款余额 存款比上年余额 = 2011.12.31日的存款余额-2010.12.31日的存款余额 只有2011.12.31这个日期可以写死,其他日期要通过2011.12.31这个日期来生成。 2、统计所有2011年存款年日均大于100的客户号、客户名称、存款账户数、2011年年日均 第四天 1、统计所有2011年存款年日均和2011年贷款年日均都大于100的客户号、存款账户数、2011年存款年日均、贷款账户数、2011年贷款年日均 2、统计所有客户的客户号、 存款标志(有存款账户的客户置为1、没存款账户的客户置为0)、 贷款标志(有贷款借据的客户置为1、没贷款借据的客户置为0)、 存款质量分类(2011年存款年日均>=10000置为优质、2011年存款年日均>=1000<10000 置为良好、2011年存款年日均=10000置为优质、2011年贷款年日均>=1000<10000 置为良好、2011年贷款年日均<1000置为普通)、 2011年贷款年日均 第五天 1、根据《事件表.xlsx》来建表,然后将excel中的数据导入到目标表中 2、根据客户表、存款信息表、事件表,统计每个客户2017年的客户号、 交易账户数(客户下有多少个账户有交易就是多少)、 当年有交易的天数(如果2017年有5天有过交易,则有交易天数为5)、 当年有交易总月数(如果2017的1、3、5月有交易,则有交易总月数为3)、 最大的月交易总金额(按月统计交易金额,存放最大的月交易金额)、 最大月交易金额的月份(按月统计交易金额,存放交易金额最大的月份)、 年总交易金额、 年交易金额排名(按客户排名,如果总交易金额为0,则不参与排名,排名置为9999)、 年总手续费、 年总手续费排名(按客户排名,如果总手续费为0,则不参与排名,排名置为9999)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值