sql练习
自己写了一个sql测试网页,现在分享出来,一次随机抽取5道练习题,自己试了后可以对答案,全部习题及答案在下面可以看到
数据库sql 百度云: 链接: https://pan.baidu.com/s/1nWCGeWujQyPG0vZOo8LUYQ 提取码: 6j8h (直接用工具执行即可自动建库并插入数据)
sql测试网址 http://35.221.248.16:8080/ (大部分答案都测试过正确,复制网页上答案时 注意有的地方需要加空格)
![](https://i-blog.csdnimg.cn/blog_migrate/1cd3808dad419311510d2c49d10028c9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8584c5bfdd6bb4b5b47efa24e0fccb4b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8584c5bfdd6bb4b5b47efa24e0fccb4b.png)
您的打赏,会给我提供更大的前行动力,谢谢!
![](https://i-blog.csdnimg.cn/blog_migrate/25ccac9351b2d08076267d9bd848646f.jpeg)
学生表: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