数据库实验—单表查询
上述的表属性可能漏了一些,但是具体情况就具体分析,题目要求的就写进去即可,不用管上表是否有这些属性。
-
请写出“查询课程表Courses中,所有课程的详细记录”的SQL语句
select * from Courses
-
请写出“查询所有学生的学号、姓名、出生日期以及入学年份,查询结果用中文显示列名”的SQL语句
select Sno '学号',Sname '姓名', Sbirth '出生日期',left(Sno,4) '入学年份' from Students
-
请写出“查询授课表Tutor中,每位教师都给哪些班级讲授过课程”的SQL语句
- distinct:这里必须要去重,因为一个老师可能教一个班的多门课程
select distinct Tno, Sclass from Tutors
-
请写出“查询考试成绩有不及格的学生的学号”的SQL语句
- distinct:这里必须要去重,因为学生可能多门课程不及格
select distinct Sno from Reports where Grade < 60
-
请写出“查询教师T003在2015学年第1学期的授课情况”的SQL语句
select * from Tutors where Tno='T003' and Tacademicyear=2015 and Rterm=1
-
请写出“查询前序课程编号是’112p0015’或’112p0055’的课程的编号、课程名”的SQL语句
第一种写法 select Cno, Cname from Courses where Pre_Cno='112p0015' or Pre_Cno='112p0055' 第二种写法 select Cno, Cname from Courses where Pre_Cno in ('112p0015','112p0055')
-
请写出“查询工资(Tsal)在3000元以上的教师的姓名和职称”的SQL语句
select Tname, Tprof from Teachers where Tsal>3000
-
请写出“查询授课表中,对教师有评分(Tevaluation)的教师编号、课程编号、评分和备注(Tmemo)”的SQL语句
select Tno, Cno, Tevaluation ,Tmemo
from Reports
where Tevaluation is not null
-
请写出“查询院号为11和12的学生的学号、姓名、院号、专业号,结果按院号升序、专业号降序、姓名的汉语拼音升序排序”的SQL语句
select Sno, Sname, Dno, Mno from Department where Dno in ('11', '12') order by Dno asc, Mno desc, Sname asc -- 所有的asc可以不写,因为默认是升序 -- 因此order by可以写成:order by Dno,Mno desc,Sname
-
请写出“查询课程名中包含了’计算机’或’原理’的课程的所有信息”的SQL语句
select * from Courses where Cname like '%计算机%' or Cname like '%原理%'
-
请写出“查询名字中第二个字为“一”的男学生的姓名和出生年份”的SQL语句
select Sname,Sbirth from Students where Sname like '_一%' and Sgender='男'
-
请写出“查询生源地既不在“广东潮州”,也不在“山东”的学生的学生编号、学生姓名及生源地”的SQL语句
select Sno, Sname,Snative from Students where Snative != '广东潮州' and Snative not like '%山东%'
-
请写出“查询学号为’2014112103’的学生在2015学年选修的各门课程的课程编号及成绩”的SQL语句
select Cno,Grade from Reports where Sno='2014112103' and Racademicyear=2015
-
请写出“查询2014级的学生在读大二时,都有哪些教师给他们上过课,结果显示班级编号、教师编号、课程号、学年和学期,并用中文显示属性列名”的SQL语句
select Sclass '班级编号', Tno '教师编号', Cno '课程号', Tacademicyear '学年', Tterm '学期' from Tutors where left(Sno,4) = '2014' and Tacademicyear = 2015
-
请写出“查询各门课程(Cno)的选课情况,结果显示课程编号、选课人数、平均分、最高分和最低分,按课程编号降序排序,并用中文显示属性列名”的SQL语句
select Cno '课程编号', count(Sno) '选课人数', avg(Grade) '平均分', max(Grade) '最高分', min(Grade) '最低分' from Reports group by Cno order by Cno desc
-
请写出“查询至少有5个’11’学院的学生选修的课程的课程编号、选修的人数和平均成绩”的SQL语句
- substring(Sno,5,2)=‘11’
因为学号中含有学院号,所以截取出来即可,由于在本实验中使用的是单表查询所以不可以用Department表来进行多表查询(当然另一种方法肯定是多表查询)
其次:substring第一个参数表示要截取的字符串,第二个参数表示开始截取的字符下标,第三个参数表示要截取的长度
(说明:在这里第二个参数是从字符串下标为1开始数,不是从0开始数,因此这里写的5表示字符串中第五个开始截取,包含第五个字符,然后往后再截取,即将第5、6个字符截取出来)
select Cno '课程编号', count(Sno) '选修人数', avg(Grade) '平均成绩' from Reports where substring(Sno,5,2)='11' group by Cno having count(Sno) >= 5
- substring(Sno,5,2)=‘11’
-
请写出“查询20141121班中各位学生(Sno)每个学年所修课程的平均分,结果显示学生编号、学年、课程平均分,按学号、学年升序排序”的SQL语句
select Sno '学号', Racademicyear '学年', avg(Grade) '平均分' from Reports where subtring(Sno,1,8) = '20141121' group by Sno, Racademicyear order by Sno, Racademicyear --升序可以省略
-
请写出“查询各位老师(Tno)每个学年上的课程(Cno)门数,结果显示教师编号、学年、所上课程门数,按教师编号升序排序”的SQL语句
- 因为一个老师可以给不同班级上同一门课程,这样就会导致在授课表中有两条记录是同课程号但不同班级的,由于题目要求的只是显示这个老师在每个学年授课的课程门数,也就是说课程不可以重复。因此统计count之前需要将其去重 ,使用distinct
select Tno, Tacademicyear, count(distinct Cno) from Tutors group by Tno,Tacademicyear order by Tno -- 升序可以省略
-
请写出“查询2016学年上了两门课程的教师信息,结果显示教师编号和评价(Tevaluation)的平均分”的SQL语句
- 由于一个老师可能出现同一门课教授不同班级,所以统计的时候需要将其去重,使用distinct
select Tno, avg(Tevaluation) from Tutors where Tacademicyear=2016 group by Tno having count(distinct Cno) = 2
-
请写出“查询每门课程都有几位老师授课,结果显示课程编号和授课人数”的SQL语句
select Cno, count(distinct Tno) from Tutors group by Cno
-
请写出“查询所有选修了课程号为112p0024并且有成绩的学生的考试情况,结果要求显示学生的学号、课程号和成绩等级(‘优’、‘良’、'中、'及格’和’不及格),并按成绩降序排序(提示:CASE WHEN)”的SQL语句
select Sno,Cno, case when Grade > 90 then '优' when Grade between 80 and 90 then '良' when Grade between 70 and 80 then '中' when Grade between 60 and 70 then '及格' when Garde < 60 then '不及格' from Reports where Cno='112p0024'
本文来自博客园,作者:竹等寒,转载请注明原文链接。