查询练习3

查询练习3

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

1、查询姓“王”的并且分数高于70分的学生信息

--模糊查询,条件筛选
select * from Student where RealName like '王%' and Score > 70

2、查询“刑天”同学的班级名称和老师名字

--三表联合查询
select c.ClassName,t.TeacherName from Student s inner join Classes c
on s.ClassId=c.Id inner join Teacher t
on c.TeacherId=t.Id where RealName='刑天';

3、现在将分数列换一种显示方式,分数小于60的显示不及格,
分数在60到80分(不包括)的显示良好,大于等于80分的显示优秀。

--分等级显示
select *,case 
when Score<60 then '不及格'
when Score<80 then '良好'
when Score>=80 then '优秀'
else '无' end as '成绩'
from Student;

4、现在将分数列换一种显示方式,分数小于60的显示不及格,分数在60到80分(不包括)的显示良好,大于等于80分的显示优秀。 并且显示各个分数段的人数

--在第3题基础上增加难度,将查询结果当作一个结果集进行查询
select a.CJ,COUNT(1) from 
(select *,case when score<=60 then '不及格'when score <80 then '良好'when score >=80 then '优秀' end as 'CJ' from Student) A 
group by a.CJ

5、查询各班级名称以及对应的学生人数,按照班级人数降序排序。

--首先两表连接,再根据班级名称分组,再调用系统内置的分组统计函数count,最后在进行排序 
select c.ClassName,count(1) as '人数' from Student s inner join Classes c 
on s.ClassId=c.Id group by c.ClassName order by count(1) desc;

--先查询学生表,根据班级id进行分组,调用函数count并进行order by排序,最后相关子查询
select COUNT(1) 人数,(select ClassName from Classes where 
Student.ClassId=Classes.Id) 班级 from Student 
group by ClassId order by COUNT(1) desc;

6、查询兴趣爱好种类不少于两种的班级信息

--COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目
--两表联查,调用count函数,having过滤
select c.ClassName,COUNT(distinct Likes) Likes from Student s left join Classes c
on s.ClassId=c.Id group by c.ClassName having COUNT(distinct Likes)>=2;
--查询学生表,根据班级id分组,调用函数count并进行having过滤,最后相关子查询
select  count(distinct Likes) likes ,(select ClassName from Classes where  
Classes.Id=Student.ClassId) ClassName from student 
group by ClassId having COUNT(distinct Likes)>=2

7、修改学号为”2019005”的姓名为“秦明”,性别改为“男“

----语法:UPDATE 表名 SET COLUMN1 = 新值 1,COLUMN2=新值 1  WHERE 条件
update Student set RealName='秦明',Sex='男'where StuCode='2019005';

8、删除学生表中id为7的学生信息

delete student where Id=7; 

9、查询没有带班的老师信息

select * from Classes c right join Teacher t on c.TeacherId=t.Id where c.Id is null;
select * from Teacher t left join Classes c on t.Id = c.TeacherId where c.TeacherId is null
select * from Teacher where id not in(select TeacherId from Classes);

10、查询”湛燕”老师所带的班级名称,以及每个班级的学生人数

--三表联查,查询湛燕老师的班级,根据班级进行分组,再调用函数count
select c.ClassName '班级',COUNT(StuCode) '人数' from Student s right join Classes c
on s.ClassId=c.Id right join Teacher t
on c.TeacherId=t.Id 
where t.TeacherName='湛燕' 
group by c.ClassName;

--先查询湛燕老师班级id,根据id再查询所教班级的信息,相关子查询根据班级id分组查出学生人数
select *,(select COUNT(1) from Student group by ClassId having Student.ClassId=Classes.Id) 人数 
from Classes where TeacherId=(select Id from Teacher where TeacherName='湛燕');

11、查询所带学生数量大于2的教师姓名

--三表联合查询,根据教师姓名进行分组,最后筛选出来数量大于2的教师
select t.TeacherName,COUNT(1) 人数 from Student s inner join Classes c
on s.ClassId=c.Id inner join Teacher t
on c.TeacherId=t.Id 
group by t.TeacherName
having COUNT(1)>2

12、查询所有的学生姓名以d及对应的组长姓名

--自连接
select s.RealName '组长',s2.RealName '组员' from Student s left join Student s2 
on s.Id=s2.LeaderId;

13、查询学生分数都高于60的班级名称

--内连接,根据班级名分组,再进行过滤成绩
select c.Id,c.ClassName from Student s inner join Classes c 
on s.ClassId=c.Id group by c.Id,c.ClassName having min(Score)>60;

--查询学生表 根据班级id分组 并查询最小成绩大于60的班级id,最后查询根据班级id查询班级名称
select * from Classes where Id in(select ClassId from Student group by ClassId having MIN(Score)>60);

--查询学生表 根据班级id分组 并查询最小成绩大于60的班级id,班级名称利用相关子查询
select (select ClassName from Classes where Classes.Id=Student.ClassId) from Student group by ClassId having MIN(Score)>60

14、请为各班学生生成一个班内排名列

select *,Row_number() over(partition by classid order by score desc) from Student  

15、请查询所有学生信息所在班级的班级人数

select c.ClassName, count(1) '人数'  from Student s inner join Classes c
on s.ClassId=c.Id
group by c.ClassName;

select (select ClassName from Classes where 
Classes.Id=Student.ClassId),COUNT(StuCode) '人数' from Student group by ClassId

16、请描述一下nvarchar(10)和varchar(10)的区别。

varchar(10)  十个字节(可以写5个汉字,10个英文字母、数字、字符)
nvarchar(10) 十个字符(字母、数字、字符、汉字都可以写10)

17、请描述一下内连接和左外连接的区别

内连接:显示共有的数据
左外连接:保证查出左表的所有数据,右表无法匹配的自动用null显示

查询练习1
查询练习2
查询练习4
查询练习5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1024节

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值