使用SQL语句查询学生数据库中学生信息 —14条基本查询语句
Posted 小凡同学zero
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用SQL语句查询学生数据库中学生信息 —14条基本查询语句相关的知识,希望对你有一定的参考价值。
SQL语句不区分大小写
调用数据库(数据库创建见上一篇文章)
use STU_Information
go
1.查询各位学生的学号、班级和姓名
--1.查询各位学生的学号、班级和姓名
select SNo,ProClass,SN from Stu
2.查询课程的全部信息
--2.查询课程的全部信息
select * from Course
3.查询数据库中有哪些专业班级
distinct查询的结果中去掉重复行
--3.查询数据库中有哪些专业班级
select distinct ProClass from Stu --distinct查询的结果中去掉重复行
4.查询学时数大于60的课程信息
比较运算符后面的数字不加单引号
--4.查询学时数大于60的课程信息
select * from Course where CHour>60 --比较运算符后面的数字不加单引号
5.查询在1986年出生的学生学号、姓名和出生日期
--5.查询在1986年出生的学生学号、姓名和出生日期
select SNo,SN,Birthday from Stu where Birthday between '1986-1-1' and '1986-12-31'
--select SNo,SN,Birthday from Stu where Birthday like '1986%'--必须字符型才可以 %匹配任意多个字符串
--select * from Stu where datename(year,Birthday) ='1986'
6.查询三次作业成绩都在80分以上的学号、课程号
--6.查询三次作业成绩都在80分以上的学号、课程号
select SNo,CNo from StuWork where WScore1>=80 and WScore2>=80 and WScore3>=80
7.查询姓张的学生的学号、姓名和专业班级
select SNo,SN,ProClass from Stu where SN like '张%'
--7.查询姓张的学生的学号、姓名和专业班级
select SNo,SN,ProClass from Stu where SN like '张%'
8.查询05级的男生信息
--8.查询05级的男生信息
select * from Stu where ProClass like '%05'
9.查询没有作业成绩的学号和课程号
--9.查询没有作业成绩的学号和课程号
select SNo,CNo from StuWork where WScore1 is null or WScore2 is null or WScore3 is null
10.查询学号为0538的学生的作业1总分
10.查询学号为0538的学生的作业1总分
select sum(WScore1) from StuWork where SNo=0538
select sum(WScore1) as Score1_Sum from StuWork where SNo=0538 --有列名
11.查询选修了K001课程的学生人数
--11.查询选修了K001课程的学生人数
select count(distinct SNo) as 选修人数 from StuWork where CNo='K001' --有列名 distinct消除重复行
select count(distinct SNo) from StuWork where CNo='K001'
12.查询数据库中共有多少个班级
--12.查询数据库中共有多少个班级
select count(distinct ProClass) from Stu
select count(distinct ProClass) as 班级总数 from Stu --有列名
--13.查询选修三门以上(含三门)课程的学生的学号和作业1平均分、作业2平均分和作业3平均分
--13.查询选修三门以上(含三门)课程的学生的学号和作业1平均分、作业2平均分和作业3平均分
select SNo,count(*) as 选修课数目, round (avg(WScore1),2) as 作业1平均分,round (avg(WScore2),2) as 作业2平均分,round(avg(WScore3),2) as 作业3平均分
from StuWork
group by SNo
having count(*)>=3
--round (avg(WScore1),2) 作业1平均分 保留小数点后2位
14.查询于兰兰的选课信息,列出学号、姓名、课程号(使用两种连接查询的方式)
--14.查询于兰兰的选课信息,列出学号、姓名、课程号(使用两种连接查询的方式)
select Stu.SNo,Stu.SN,Course.CN from Stu,Course,StuWork
where StuWork.CNo=Course.CNo and StuWork.SNo=Stu.SNo and Stu.SN='于兰兰'
select Stu.SNo,Stu.SN,Course.CN from Course inner join StuWork on Course.CNo=StuWork.CNo
inner join Stu on StuWork.SNo=Stu.SNo
where Stu.SN='于兰兰'
select distinct Stu.SNo,Stu.SN,Course.CN
from Stu
join StuWork
on Stu.SNo=StuWork.SNo
join Course
on StuWork.CNo=Course.CNo
where Stu.SN='于兰兰'
--------------------------------------------------------------------------------------------------------------------------------
SQL常用语句例子
一、单表查询练习
1、查询<学生信息表>,查询学生"张三"的全部基本信息 Select *
from A_studentinfo
where sname=张三
2、查询<学生信息表>,查询学生"张三"和”李四”的基本信息 Select *
from A_studentinfo
where sname=张三 or sname=李四
3、查询<学生信息表>,查询姓"张"学生的基本信息 Select *
from A_studentinfo
where sname like 张%
4、查询<学生信息表>,查询姓名中含有"四"字的学生的基本信息 Select *
from A_studentinfo where sname like %四%
5、查询<学生信息表>,查询姓名长度为三个字,姓“李”,且最后一个字是“强”的全部学生信息。 select *
from A_studentinfo where sname like 李_强
6、查询<学生信息表>,查询姓"张"或者姓”李”的学生的基本信息。 Select *
from A_studentinfo where sname like 张% or sname like 李%
7、查询<学生信息表>,查询姓"张"并且"所属省份"是"北京"的学生信息 Select *
from A_studentinfo
where sname like 张% and province=北京
8、查询<学生信息表>,查询"所属省份"是"北京"、”新疆”、”山东”或者"上海"的学生的信息 Select *
from A_studentinfo
where province in (北京,上海,新疆,山东)
9、查询<学生信息表>,查询姓"张",但是"所属省份"
不是"北京"的学生信息 Select *
from A_studentinfo
where sname like 张% and province !=北京
10、查询<学生信息表>,查询全部学生信息,并按照“性别”排序,性别相同的情况下按照“所属省份”排序,所属省份相同的情况下再按照“班级”排序 select *
from A_studentinfo
order by sex,province,class
11、查询<学生信息表>,查询现有学生都来自于哪些不同的省份
select distinct province as 省份 from A_studentinfo
12、查询<学生选修信息表>,查询没有填写成绩的学生的学号、课程号和成绩 Select *
from A_studentcourse where score is null
13、查询<学生选修信息表>,查询全部填写了成绩的学生的选修信息,并按照“成绩”从高到低进行排序 Select *
from A_studentcourse where score is not null order by score desc
二、聚合函数练习
1、统计<学生信息表>,统计共有多少个学生 Select count (*) as 学生数量 from A_studentinfo
2、统计<学生信息表>,统计年龄大于20岁的学生有多少个
Select count(*) as 学生数量 from A_studentinfo
where (2008-yearofbirth)>20
3、统计<学生信息表>,统计入学时间在1980年至1982年的学生人数
select count(*) as 学生数量 from A_studentinfo
where enrollment between 1998-01-01 and 2003-12-30
对比以下查询方式,看看有何不同,为什么? select count(*) as 学生数量
from A_studentinfo
where enrollment between 1998 and 2003
4、统计<学生选修信息表>,统计学号为"S001"的学生的平均成绩
Select avg(score) as 平均成绩 from A_studentcourse where sno=S001
5、统计<学生选修信息表>,统计学号为"S001"的学生的总成绩
select sum(score) as 总成绩 from A_studentcourse where sno =S001
6、统计<学生选修信息表>,查询课程号为”C001”的课程的最高成绩
select max(score) as 最高成绩 from A_studentcourse where cno=C001
7、统计<学生信息表>,查询所有学生中的最大年龄是多少
select 2008-min(yearofbirth) as 最大年龄 from A_studentinfo
三、分组查询练习
1、统计<学生选修信息表>,统计每个课程的选修人数 select cno,count(*) as 学生数量 from A_studentcourse group by cno
2、统计<学生选修信息表>,统计每个同学的总成绩 select sno,sum(score) as 总成绩 from A_studentcourse group by sno
3、统计<学生信息表>,统计每个班级中每种性别的学生人数,并按照班级排序
select class as 班级,sex as 性别, count(*) as 人数 from A_studentinfo group by class,sex order by class
4、统计<学生选修信息表>,统计每门课程的平均成绩,并按照成绩降序排序
Select cno,avg(score) as 平均成绩 from A_studentcourse
group by cno
order by avg(score) desc
5、统计<学生选修信息表>,显示有两门以上课程不及格的学生的学号
Select sno as 不及格学生学号 from A_studentcourse where score<60 group by sno
having count(*)>1
6、统计<学生信息表>,统计每个班级中的最大年龄是多少
select class as 班级, 2008-min(yearofbirth) as 最大年龄 from A_studentinfo group by class
四、嵌套查询练习
1、用子查询实现,查询选修“高等数学”课的全部学生的总成绩
select sum(score) as 高等数学总成绩 from A_studentcourse where cno= (select cno
from A_courseinfo
where subject=高等数学 )
2、用子查询实现,统计<学生选修信息表>,显示学号为"S001"的学生在其各科成绩中,最高分成绩所对应的课程号和成绩 select score,cno
from A_studentcourse where sno=S001 and score =
(select max(score)
from A_studentcourse where sno =S001)
思考:如果该学号学生有两个课程分数都为最高的100分,查询会有什么结果 3、用子查询实现,查询2班选修"数据库技术"课的所有学生的成绩之和
select sum(score) as 数据库技术总成绩 from A_studentcourse where cno = (select cno
from A_courseinfo
where subject=数据库技术) and sno in (select sno
from A_studentinfo where class="2")
4、用子查询实现,查询3班"张三"同学的"测试管理"成绩
select score
from A_studentcourse where cno= (select cno
from A_courseinfo
where subject=测试管理 ) and sno in ( select sno
from A_studentinfo where class="3" and sname=张三)
五、联接查询练习
1、查询"张三"的各科考试成绩,要求显示姓名、课程号和成绩
select sname as 姓名,cno as 课程号,score as 成绩 from A_studentinfo,A_studentcourse
where A_studentinfo.sno=A_studentcourse.sno
and sname=张三 2、查询"张三"的各科考试成绩中,哪科没有记录考试成绩,要求显示姓名、课程号和成绩
select sname as 姓名,cno as 课程号,score as 成绩 from A_studentinfo,A_studentcourse
where A_studentinfo.sno=A_studentcourse.sno and sname=张三 and score is null
3、查询"张三"的各门课程成绩,要求显示姓名、课程名称和成绩
select sname as 姓名,subject as 课程名称,score as 成绩 from A_studentinfo,A_courseinfo,A_studentcourse where A_studentcourse.sno=A_studentinfo.sno and A_studentcourse.cno=A_courseinfo.cno
and A_studentinfo.sname=张三
4、查询3班"张三"的"测试管理"成绩,要求显示姓名、成绩
select sname as 姓名,score as 成绩
from A_studentcourse,A_courseinfo,A_studentinfo where A_studentcourse.cno=A_courseinfo.cno and A_studentcourse.sno=A_studentinfo.sno and subject=测试管理 and class="3"
and sname=张三
5、查询所有2000年以前入学的,各班男生的各科考试平均成绩
select class as 班级,avg(score) as 男生平均成绩 from A_studentcourse,A_courseinfo,A_studentinfo where A_studentcourse.cno=A_courseinfo.cno and A_studentcourse.sno=A_studentinfo.sno
and sex=男
and enrollment<2000-01-01 group by class 六、外联接查询
查询李坚强所有课程的成绩,并显示学号、姓名、课程号和成绩,没有成绩记录的学号包括:(S009,S010,S011) 1、使用左联接
select A_studentinfo.sno as 学生表学号,sname as 姓名,A_studentcourse.sno as 成绩表学号, cno as 课程号,score as 成绩 from A_studentinfo
left join A_studentcourse
on A_studentinfo.sno=A_studentcourse.sno
where sname=李坚强 2、使用右联接
select A_studentinfo.sno as 学生表学号,sname as 姓名,A_studentcourse.sno as 成绩表学号, cno as 课程号,score as 成绩
from A_studentcourse
right join A_studentinfo
on A_studentinfo.sno=A_studentcourse.sno where sname=李坚强 3、对比等值连接 select sname,score
from A_studentinfo,A_studentcourse
where A_studentinfo.sno=A_studentcourse.sno and sname=李坚强
七、补充提高
1、查询“张三”比“王三”入学早几年
select A.sname as 姓名,year(A.enrollment) as 入学时间 ,
B.sname as 姓名,year(B.enrollment) as 入学时间,
datediff(year,A.enrollment,B.enrollment) as 年差 from A_studentinfo A,A_studentinfo B
where A.sname=张三 and B.sname=王三
2、查询所在班级和该班内学生的年龄之和,其中每个人的年龄都大于20岁,每个班的年龄之和大于60岁 select class as 班级,sum(2008-yearofbirth) as 年龄和 from A_studentinfo
where (2008-yearofbirth) >20 group by class
having sum(2008-yearofbirth)>60 order by class
以上是关于使用SQL语句查询学生数据库中学生信息 —14条基本查询语句的主要内容,如果未能解决你的问题,请参考以下文章