数据库实验—单表查询

在这里插入图片描述
上述的表属性可能漏了一些,但是具体情况就具体分析,题目要求的就写进去即可,不用管上表是否有这些属性。

  • 请写出“查询课程表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
    
  • 请写出“查询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'
    
posted @ 2023-06-29 00:05  竹等寒  阅读(38)  评论(0编辑  收藏  举报  来源