超经典的20道SQL题目(附加解题思路)

2023-05-16

最近学了SQL的内容,老师也给我们发了练习题,感觉在做题的过程中得到了提高,所以将题目和我自己的答案分享一下,希望对大家有所帮助。我使用的是SQL Server 2014 Management Studio。

---学生表
create table student(
sno varchar(10) primary key,              	--学号
sname varchar(20),                            	--姓名
sage numeric(2),		            	--年龄
ssex varchar(5)			--性别
);
----教师表
create table teacher(
tno varchar(10) primary key,          	---教师编号
tname varchar(20)			---教师姓名
);
----课程表
create table course(			
cno varchar(10),			---课程号
cname varchar(20),		--课程名
tno varchar(20),			--教师编号
constraint pk_course primary key (cno,tno)
);
---成绩表
create table sc(			
sno varchar(10),			---学号
cno varchar(10),			---课程号
score numeric(4,2),			---学生成绩
constraint pk_sc primary key (sno,cno)
);
/*******初始化学生表的数据******/
insert into student values ('s001','张三',23,'男');
insert into student values ('s002','李四',23,'男');
insert into student values ('s003','吴鹏',25,'男');
insert into student values ('s004','琴沁',20,'女');
insert into student values ('s005','王丽',20,'女');
insert into student values ('s006','李波',21,'男');
insert into student values ('s007','刘玉',21,'男');
insert into student values ('s008','萧蓉',21,'女');
insert into student values ('s009','陈萧晓',23,'女');
insert into student values ('s010','陈美',22,'女');

/******************初始化教师表***********************/
insert into teacher values ('t001', '刘阳');
insert into teacher values ('t002', '谌燕');
insert into teacher values ('t003', '胡明星');

/***************初始化课程表****************************/
insert into course values ('c001','J2SE','t002');
insert into course values ('c002','Java Web','t002');
insert into course values ('c003','SSH','t001');
insert into course values ('c004','Oracle','t001');
insert into course values ('c005','SQL SERVER 2005','t003');
insert into course values ('c006','C#','t003');
insert into course values ('c007','JavaScript','t002');
insert into course values ('c008','DIV+CSS','t001');
insert into course values ('c009','PHP','t003');
insert into course values ('c010','EJB3.0','t002');

/***************初始化成绩表***********************/
insert into sc values ('s001','c001',78.9);
insert into sc values ('s002','c001',80.9);
insert into sc values ('s003','c001',81.9);
insert into sc values ('s004','c001',60.9);
insert into sc values ('s001','c002',82.9);
insert into sc values ('s002','c002',72.9);
insert into sc values ('s003','c002',81.9);
insert into sc values ('s001','c003','59');

1、 查询“c001”课程比“c002”课程成绩高的所有学生的学号;
解题思路:我需要查询的数据都在同一个表里面,所以这里我使用的是自连接

select a.sno from dbo.sc a
inner join dbo.sc b
on a.sno=b.sno
where a.cno='c001' and b.cno='c002'
and a.score>b.score

2、 查询平均成绩大于60 分的同学的学号和平均成绩;
解题思路: 这里使用了聚合函数求平均值avg

select sno,avg(score) from dbo.sc
group by sno
having avg(score)>60

3、查询所有同学的学号、姓名、选课数、总成绩;
解题思路:使用了聚合函数sum求和、count个数,以及左连接来查询出所有同学的信息

select xs.sno,sname,sum(score),count(cno)from dbo.student xs
left join dbo.sc cj
on xs.sno=cj.sno
group by xs.sno,sname

4、 查询姓“刘”的老师的个数;
解题思路:这里使用了like模糊查询,通配符百分比( % ):任何零个或多个字符的字符串

select count(tname)from dbo.teacher
where tname like'刘%'

5、 查询没学过“谌燕”老师课的同学的学号、姓名;
解题思路:这里我使用了嵌套子查询来查询没学过‘谌燕’老师的课,‘没学过’用not in,所以这里学生表要用 not in

select sno,sname from dbo.student 
where sno not in(
select sno from dbo.sc
where cno in(
select cno from dbo.teacher
where tname='谌燕'
))

6、 查询学过“c001”并且也学过编号“c002”课程的同学的学号、姓名;
解题思路:使用了子查询和自连接,以及使用and查找满足两个条件的行

select sno,sname from dbo.student
where sno in(
select a.sno from dbo.sc a
inner join dbo.sc b
on a.sno=b.sno
where a.cno='c001' and b.cno='c002'
)

7、 查询学过“谌燕”老师所教的所有课的同学的学号、姓名;
解题思路:跟上面的第五题差不多,只是把‘没学过’not in 改成‘学过’ in

select sno,sname from dbo.student 
where sno  in(
select sno from dbo.sc
where cno in(
select cno from dbo.teacher
where tname='谌燕'
))

8、查询所有课程成绩小于60 分的同学的学号、姓名;
解题思路:使用了两个内连接和where条件查询子句

select xs.sno sname from dbo.student xs
inner join dbo.sc cj
on xs.sno=cj.sno
inner join dbo.course kc
on kc.cno=cj.cno
where cj.score<60

9、 查询没有学全所有课的同学的学号、姓名;
解题思路:使用子查询

select*from dbo.student
where sno not in (
select sno from dbo.sc
)

10、 查询至少有一门课与学号为“s001”的同学所学相同的同学的学号和姓名;
解题思路:使用嵌套子查询和where子句

select*from dbo.student
where sno in(
select sno from dbo.sc
where cno in(
select cno from dbo.student
where sno='s001'
)
)

11、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分
解题思路:使用聚合函数 min最小值 max最大值

select cno 课程ID,max(score)最高分,min(score)最低分
 from dbo.sc
 group by cno

12、查询每门课程被选修的学生数
解题思路:使用聚合函数count个数

select cno ,count(*) from dbo.sc
group by cno

13、查询出只选修了一门课程的全部学生的学号和姓名
解题思路:这里只需要查询出只选修一门课的学生,首先我使用了内连接,其次是使用having子句来根据指定的条件列表过滤分组

select xs.sno,xs.sname,count(cno) from dbo.student xs
inner join dbo.sc cj
on xs.sno=cj.sno
group by xs.sno,xs.sname
having count(cno)=1

14、1981 年出生的学生名单(注:Student 表中Sage 列的类型是numeric)
解题思路:getdate获取当前时间datediff是计算日期时间。它有三个值datepart/startdate/Enddate,第一个是规定了应在日期的哪一部分计算差额的参数;第二个是计算的开始日期;第三个是计算的终止日期

select*from dbo.student
where sage=datediff(yyyy,'1981',getdate())

15、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列
解题思路:使用聚合函数,其次是asc升序和desc降序

select cno,avg(score)from dbo.sc
group by cno
order by avg(score) asc,cno desc

16、查询平均成绩大于85 的所有学生的学号、姓名和平均成绩
解题思路:使用了内连接和聚合函数

select xs.sno,sname,avg(score)from dbo.student xs
inner join dbo.sc cj
on xs.sno=cj.sno
group by xs.sno,sname
having avg(score)>85

17、查询课程编号为c001 且课程成绩在80 分以上的学生的学号和姓名;
解题思路:使用了内连接,以及使用and查找满足两个条件的行

select xs.sno,sname,score from dbo.student xs
inner join dbo.sc cj
on xs.sno=cj.sno
where cno='c001' and score>80

18、查询两门以上不及格课程的同学的学号及其平均成绩
解题思路:这里查询两门不及格的学生,使用where子句直接小于60,再通过having来判断是否大于1

select sno, avg(score) from dbo.sc
where score<60 
group by sno
having count(*)>1

19、检索“c004”课程分数小于60,按分数降序排列的同学学号
解题思路:直接使用and来满足where查询出课程号为c004和分数小于60

select sno from dbo.sc
where cno='c004' 
and score<60
order by score desc

20、删除“s002”同学的“c001”课程的成绩

 delete from dbo.sc
 where  sno='s002' and cno='c001'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

超经典的20道SQL题目(附加解题思路) 的相关文章

随机推荐

  • 自动控制原理中matlab的应用

    知识点汇总 生成传递函数 sys 61 tf xff08 num xff0c den xff09 xff1b num为分子多项式系数 xff0c den为分母的多项式系数多项式乘法 den 61 conv xff08 den1 xff0c
  • 解决 linux下编译.sh文件报错 “[: XXXX: unexpected operator” 问题

    原因 xff1a linux下能正常执行的脚本 xff0c 在ubuntu系统中都会编译报错 xff0c 因为二者使用的解释器不一同导致 Linux xff1a sh ubuntu dash 因为ubuntu默认的sh是连接到dash的 又
  • 刚下好ROS,如何从零开始实现px4的无人机仿真

    刚刚入门ROS开发 xff0c 作为刚刚挺过艰难的ubuntu安装 ros安装的萌新来说 xff0c 你应该正处于ROS开发的初始过渡阶段 一方面 xff0c 你庆幸你解决了许多安装新系统的许多bug xff0c 跨过了阻拦了无数人入门RO
  • 信号与系统——matlab

    一 信号的matlab表示与绘图 1 连续信号绘图 xff0c 例 xff1a t 61 0 0 0001 5 a 61 5 b 61 0 8 x 61 a exp b t sin pi t 注意是 plot t x 绘制出信号关于变量t的
  • 无人车仿真:带反馈的绕圈路径实现

    前期入门ros xff0c 无论是无人机还是无人车等的控制 xff0c 基本都是先以仿真学习为主 xff0c 成熟的仿真理解与功能实现 xff0c 再搬到现实世界的无人车无人机就变得简单随意 xff0c 也能减少许多不必要的硬件损坏 但是很
  • stm32中C语言知识巩固

    此文知识来源于江科大老师b站视频讲解 C语言数据类型 需要注意的是 xff0c 在51单片机中int是16位的 xff0c 32单片机中int是32位的 后面两行是对其重命名 xff0c 因为左边的数据类型名字比较长 xff0c 且有很多名
  • Rviz中控制机器人模型运动(arbotix)

    前言 xff1a 通过 URDF 结合 rviz 可以创建并显示机器人模型 xff0c 不过 xff0c 当前实现的只是静态模型 xff0c 如何控制模型的运动呢 xff1f 在此 xff0c 可以调用 Arbotix 实现此功能 简介 A
  • Gazebo仿真环境搭建(04)

    Gazebo 中创建仿真实现方式有两种 1 直接添加内置组件创建仿真环境 1 1启动 Gazebo 并添加组件 1 2保存仿真环境 添加完毕后 xff0c 选择 file gt Save World as 选择保存路径 功能包下 world
  • 树莓派4b安装ubuntu18.04和ros-melodic(一)

    因为用到了树莓派这个集成计算机 xff0c 所以买了张sd卡自己配置了一下环境 每个人环境都不一样 xff0c 但是大体方法流程都是一样 xff0c 我用了一周的时间配置好的 xff0c 说实话真的很麻烦所以在这里我把方法分享给大家 xff
  • 集成学习详解

    入门小菜鸟 xff0c 希望像做笔记记录自己学的东西 xff0c 也希望能帮助到同样入门的人 xff0c 更希望大佬们帮忙纠错啦 侵权立删 目录 一 集成学习的产生原因与相关定义 1 产生原因 2 相关定义 xff08 1 xff09 同质
  • 深度学习之优化算法

    入门小菜鸟 xff0c 希望像做笔记记录自己学的东西 xff0c 也希望能帮助到同样入门的人 xff0c 更希望大佬们帮忙纠错啦 侵权立删 目录 一 优化算法与深度学习 1 优化算法对于深度学习的意义 2 优化算法与深度学习的关系 3 优化
  • Redis常用命令(超详细整理)

    1 字符串string操作命令 Redis中字符串类型常用命令 xff1a SET key value 设置指定的key值 GET key 获取指定key的值 SETEX key seconds value 设置指定key的值 xff0c
  • linux/android中aplay/arecord用法以及命令

    linux xff1a 1 查看声卡 xff1a root 64 sos dom0 aplay l List of PLAYBACK Hardware Devices card 0 broxtontdf8532 broxton tdf853
  • linux怎么查看防火墙状态

    1 通过SSH连接登录linux系统 2 输入如下命令 xff1a systemctl status firewalld 3 敲回车即可查看防火墙的状态 xff0c 如下状态表示防火墙已经关闭 4 又或输入命令 xff1a service
  • 一闪一闪的星星特效效果

    首先让我们看一下一闪一闪的星星特效效果如下图 xff1a 让我们先看一下布局 xff1a span class token tag span class token tag span class token punctuation lt s
  • 实现红绿灯的效果

    首先看一下效果如下 xff1a html部分 xff1a span class token tag span class token tag span class token punctuation lt span div span spa
  • 图书管理系统数据库SQL设计思路

    1 x1f58d 需求分析 一个图书管理系统包括用户信息维护 图书馆信息 图书信息维护 书籍借出 书籍归还 借书记录 支付查询等 此系统功能用户可以借书 续借 归还 查询书籍 增加 修改和删除 2 x1f58b 需求 1 用户信息维护 xf
  • jQuery夹娃娃小游戏

    点击开始 xff0c 爪子开始往下移夹娃娃首先让我们看一下它的效果图如下 xff1a 页面布局代码如下 xff1a span class token tag span class token tag span class token pun
  • 酒店管理系统数据库SQl设计思路

    第一节 x1f58d 需求分析 一个酒店管理系统包括很多个模块 xff0c 首先我们先要分析一下需求 一 实时房态图 动态生成实时房态图 在房态图上进行房态修改 换房操作 xff0c 续住操作 选择房间进行散客 团队预定 散客 团队入住 散
  • 超经典的20道SQL题目(附加解题思路)

    最近学了SQL的内容 xff0c 老师也给我们发了练习题 xff0c 感觉在做题的过程中得到了提高 xff0c 所以将题目和我自己的答案分享一下 xff0c 希望对大家有所帮助 我使用的是SQL Server 2014 Management