数据查询:学生管理系统练习

前言

studentdb数据库还是用的上篇文章的, 害,一直以为列名要用英文,知道可以用汉字时,就把自设的英文都改成汉字,舒服了。上篇文章链接:https://blog.csdn.net/weixin_43912621/article/details/105517325.

(1)在studentdb数据库中,运行下列SQL语句将输出什么?

① select count(*) from grade
在这里插入图片描述
② select substring(姓名,1,2) from student_info
数据查询:学生管理系统练习_第1张图片
③ select sqrt(分数) from grade where 分数>=85
数据查询:学生管理系统练习_第2张图片
④ select year(getdate()),month(getdate()),day(getdate())
在这里插入图片描述

(2)在studentdb数据库中使用select语句进行基本查询。

①在student_info表中,查询每个学生的学号、姓名和出生日期信息。
②查询学号为’0002’的学生的姓名和家庭住址。
③找出所有男同学的学号和姓名。

select 学号,姓名,出生日期from student_info

select 姓名,家庭住址from student_info where 学号=0002

select 学号,姓名from student_info where 性别='男'
(3)使用select语句进行条件查询。

①在grade表中查找分数在70-90范围内的学生的学号和分数。
②在grade表中查询课程编号为0003的学生的平均分。
③在grade表中查询学习各门课程的人数。
④将学生信息按出生日期由大到小顺序排序。
⑤查询所有姓“张”的学生的学号和姓名。

select 学号,分数from grade where 分数between 70 and 90

select AVG(分数)as 平均分from grade where 课程编号='0003'

select 课程编号,count(*)as 课程人数from grade group by 课程编号

select* from student_info order by 出生日期

select 学号,姓名from student_info where 姓名like '张%'
(4)对student_info表,按性别顺序列出学生的学号、姓名、性别、出生日期及家庭住址,性别相同的按学号由小到大顺序排列。
select * from student_info order by 性别,学号
(5)使用group by子句列出各个学生的平均成绩。
select 学号,AVG(分数)as 同学平均分from grade group by 学号
(6)使用union运算符将student_info表中姓“张”的学生的学号和姓名与curriculum表的课程编号、课程名称返回在一个表中,且列名为u_编号、u_名称。
select 学号as u_编号,姓名as u_名称from student_info
where 姓名like'张%' union 
select 课程编号,课程名称from curriculum
(7)嵌套查询

① 在student_info表中查找与“刘卫平”性别相同的所有学生的姓名、出生日期。
② 使用in子查询查找所修课程编号为0002、0005的学生学号、姓名、性别。
③列出学号为0001的学生的分数比学号为0002号的学生的最低分数高的课程编号和分数。
④列出学号为0001的学生的分数比学号为0002号的学生的最高成绩还要高的课程编号和分数。

select 姓名,出生日期from student_info 
where 性别=( select 性别 from student_info where 姓名='刘卫平')

select a.学号,姓名,性别,课程编号from student_info a, grade b 
where a.学号=b.学号and 课程编号in(0002,0005)

select 课程编号,分数,学号from grade 
where 学号='0001' and 分数>any( select 分数from grade where 学号='0002')

select 课程编号,分数,学号from grade 
where 学号='0001' and 分数>all( select 分数from grade where 学号='0002')
(8)连接查询。

①查询分数在80-90范围内的学生的学号、姓名和分数信息。
②查询学习“C语言程序设计”课程的学生的学号、姓名和分数。
③查询所有男同学的选课情况,要求列出学号、姓名、课程名称和分数。
④查询每个学生的所选课程的最高成绩,要求列出学号、姓名、课程编号和分数。
⑤查询所有学生的总成绩,要求列出学号、姓名、总成绩,没有选修课程的学生的总成绩为空。
⑥ 为grade表添加数据行:学号为0004、课程编号为0006、分数为76。查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,curriculum表中没有的课程列值为空。

select s.学号,s.姓名,分数 from student_info s, grade g 
where s.学号=g.学号and g.分数between 80 and 90

select s.学号,s.姓名,课程名称,分数from student_info s 
inner join grade g on g.学号=s.学号 
inner join curriculum c on g.课程编号=c.课程编号
where c.课程名称='C语言程序设计'

select s.学号,姓名,课程名称,分数 from student_info s 
join grade g on s.学号=g.学号 
join curriculum c on g.课程编号=c.课程编号
where 性别='男'

select s.学号,姓名,课程编号,分数 from student_info s left 
join( select a.学号,课程编号,分数 from grade a,
( select 学号,MAX(分数)最高分from grade g group by 学号) b 
where a.学号=b.学号and a.分数=b.最高分)c on s.学号=c.学号

select s.学号,s.姓名,sum(分数) from student_info s 
left join grade g on s.学号=g.学号
left join curriculum c on g.课程编号=c.课程编号
group by s.学号,s.姓名

insert into grade
values('0004','0006',76,null)
select c.课程编号,课程名称, COUNT(*) from grade g 
right join curriculum c on c.课程编号=g.课程编号
group by c.课程编号,c.课程名称

你可能感兴趣的:(SQL)