sql练习

表如下:

Student(s#,Sname,Sage,Ssex);学生表

Course(c#,Cname,T#);课程表

SC(s#,c#,score);成绩表

Teacher(t#,Tname);老师表

 

1.查出所有课程001成绩比课程002成绩好的学生的学号

 

2.查出所有平均成绩大于60的学生的学号,平均成绩;

 

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

 

4.查出姓李的老师的个数

 

5.查出所有未选“叶平”的课的同学的学号,姓名;

 

6.查出所有同时选了课程001,002的同学的学号,姓名;

 

7.查出所有选了"叶平"的课的同学的学号,姓名;

 

8.查出所有课程001的成绩低于课程002成绩的同学的学号,姓名

 

9.查出所有其每个课程的成绩都小于60的同学的学号,姓名

 

10.查出未选所有课的学生的学号姓名

 

 

 

思路如下:

1,6,8相关联;5,7正好相反;4相对简单;2,3,9,10;

 

1.

select s# from SC sc1

inner join SC sc2

on sc1.s#=sc2.s#

where sc1.c#=001 and sc2.c#=002 and sc1.score>sc2.score;

 

4.

select count(t.t#) from Teacher t where t.Tname like "李%";

 

6.

select s# from SC sc1

inner join SC sc2

on sc1.s# = sc2.s#

where sc1.c#=001 and sc2.c#=002;

 

7.

1)查出c#

select c.c# from Course c

inner join Teacher t

on c.t# = t.t#

where t.Tname = "叶平"

inner join SC sc

on c.c# = sc.c#

 

 

 

8.

select s# from SC sc1

inner join SC sc2

on sc1.s#=sc2.s#

where sc1.c#=001 and sc2.c#=002 and sc1.score<sc2.score;

### 关于SQL练习题及答案 以下是关于SQL的相关练习题以及解答,这些题目可以帮助初学者更好地理解SQL的基础语法和实际应用。 #### 题目一:查询两门及其以上不及格课程的同学的学号、姓名及其平均成绩 此问题可以通过嵌套子查询来实现。具体逻辑如下: 1. 找到所有不及格的成绩记录。 2. 使用 `GROUP BY` 和 `HAVING COUNT(*) >= 2` 来筛选出至少有两门课不及格的学生。 3. 计算这些学生的平均成绩并返回其学号和姓名。 代码示例如下: ```sql SELECT s.Sid, s.Sname, AVG(sc.Degree) AS AvgDegree FROM Student s JOIN SC sc ON s.Sid = sc.Sid WHERE sc.Degree < 60 GROUP BY s.Sid, s.Sname HAVING COUNT(sc.Cid) >= 2; ``` 上述语句实现了所需功能[^1]。 --- #### 题目二:查询Score表中的最高分的学生学号和课程号 通过使用子查询找到最大分数,并将其与原始数据匹配即可得到目标学生的信息。 代码示例如下: ```sql SELECT Sno, Cno FROM Score WHERE Degree = (SELECT MAX(Degree) FROM Score); ``` 这段代码能够有效解决该问题[^2]。 --- ### SQL学习资源推荐 对于希望深入学习SQL的人群来说,除了完成各种类型的练习题外,还可以参考以下几种方式获取更多知识: 1. **在线平台** - LeetCode 提供了大量的SQL挑战题目,适合不同层次的学习者尝试。 - W3Schools 是一个非常友好的入门网站,它提供了详尽的SQL教程和实例演示。 2. **书籍资料** 推荐《SQL必知必会》这本书籍作为基础读物;另外,《高性能MySQL》则更侧重性能优化方面的话题,适用于有一定经验的技术人员进一步提升自己能力水平。 3. **实践操作环境搭建** 安装本地数据库服务器如 MySQL 或 PostgreSQL ,创建虚拟项目场景来进行反复试验也是极为重要的环节之一 。可以利用Docker快速部署所需的测试环境。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值