• 数据库实验二


    --①查询信息管理系学生的学号和姓名。
    --select sno,sname from Student where sdept = 'IS'

    --②查询选修了课程的学生的学号。
    --select distinct sc.sno from sc,student

    --③查询选修了课程号为C001的学生的学号和成绩,并对查询结果按成绩降序排列,如果成绩相同,则按学号升序排列。
    --SELECT sc.sno, sc.grade 
    --FROM sc 
    --JOIN course ON sc.cno = course.cno 
    --JOIN student ON sc.sno = student.sno 
    --WHERE sc.cno = 'C001' 
    --ORDER BY sc.grade DESC, sc.sno ASC;

    --④查询选修课程号为C001的成绩在80-90分的学生的学号和成绩,并将成绩乘以系数0.8输出。
    --select sc.Sno,sc.grade*0.8 as grade
    --from sc 
    --JOIN course ON sc.cno = course.cno 
    --join student ON sc.sno = student.sno 
    --where sc.cno = 'C001' and sc.grade between 80 and 90

    --⑤查询通信工程系或计算机系中姓张的学生的信息。
    --select *from student where (sdept = 'IM' or sdept = 'IS') and sname like '张%'
    --⑥查询缺少了成绩的学生的学号和课程号。
    --select sno,Cno from sc where grade is null

    --⑦查询成绩最高的前3名学生的学号、成绩。
    --select top 3 sno,grade from sc order by grade desc 

    --⑧查询选修了课程号为C001的课程的成绩最差的3名学生的学号和成绩。
    --select top 3 sno,grade from sc where cno = 'C001' order by grade asc

    --⑨统计各系2000年以后出生的学生的总人数,并按总人数进行降序排列。
    --SELECT sdept, COUNT(*) as total_students
    --FROM student
    --WHERE DATEDIFF(YEAR, '2000-01-01', GETDATE()) - sage >= 0
    --GROUP BY sdept
    --ORDER BY total_students DESC;

    --(2)连接查询:参见实验指导书P40
    --①查询每个学生的情况以及他(她)所选修的课程。
    --select student.sno,sname,sgender,sage,sc.cno,cname,Ccredit,grade from sc 
    --JOIN course ON sc.cno = course.cno 
    --join student ON sc.sno = student.sno 

    --②查询学生的学号、姓名、选修的课程名及成绩。
    --SELECT student.sno, student.sname, course.cname, sc.grade
    --FROM student
    --JOIN sc ON student.sno = sc.sno
    --JOIN course ON sc.cno = course.cno;
     
    --③查询选修了JAVA课程且成绩在90分以上的学生的学号、姓名及成绩。
    --select sc.sno,sname,grade from sc 
    --join student on sc.sno = student.Sno 
    --join course on sc.cno = course.cno
    --and cname = 'JAVA' and grade>90

    --④查询每一门课程的间接先修课(即先修课的先修课)。
    --select b.Cpno from course a,course b where a.Cpno = b.cno

    --⑤查询选修了课程名以“计算机”开头的课程的学生信息。
    --select sc.sno,sname,sgender,sage,sdept from sc 
    --join student on sc.sno = student.Sno 
    --join course on sc.cno = course.cno
    --where cname like '计算机%'

    --⑥查询各系各门课程的平均成绩。
    --select Sdept,cname,AVG(grade) from sc 
    --join student on sc.sno = student.Sno
    --join course on sc.cno = course.cno 
    --group by Sdept,cname

    --⑦查询选修Java和计算机文化学的学生的学号、姓名和这两门课的平均成绩。
    --SELECT sc.sno, student.sname, 
    --  (AVG(CASE WHEN course.cname = 'JAVA' THEN sc.grade ELSE NULL END) + 
    --   AVG(CASE WHEN course.cname = '计算机文化学' THEN sc.grade ELSE NULL END)) / 2 AS avg_grade
    --FROM sc
    --JOIN student ON sc.sno = student.sno
    --JOIN course ON sc.cno = course.cno
    --WHERE course.cname IN ('Java', '计算机文化学')
    --GROUP BY sc.sno, student.sname
    --HAVING COUNT(DISTINCT course.cname) >= 2;

    --⑧统计每个学生的选课门数(包括没选课的学生),列出学号、选课门数和选课情况,其中选课情况显示规则为:
    --a.如果选课门数大于或等于6门,则选课情况为:较多;
    --b.如果选课门数在3-5门之间,则选课情况为:一般;
    --c.如果选课门数在1-2门,则选课情况为:较少;
    --d.如果没有选课,则选课情况为:未选课。
    --select student.sno,count(sc.cno),
    --(case when count(sc.Cno)>=6 then '较多' 
    --when count(sc.Cno)>=3 and count(sc.Cno)<=5 then'一般'
    -- when count(sc.Cno)>=1 and count(sc.Cno)<=2 then'较少'
    --  else '未选课' end)from student 
    -- LEFT JOIN sc ON student.sno = sc.sno
    --group by student.sno

    --(3)嵌套查询:参见实验指导书P40
    --①查询选修了JAVA课程的学生的学号和姓名。
    --方法一
    --select sc.sno,sname from sc
    --join student on sc.sno = student.sno 
    --join course on course.cno = sc.cno
    --and cname = 'JAVA'

    --方法二
    --select sno,sname from student where sno = 
    --(select sno from sc where cno = 
    --(select cno from course where cname = 'JAVA') )

    --②查询其它系中年龄小于计算机系年龄最大者的学生信息。
    --select  * from student where sage<(select max(sage) from student where sdept = 'IS') and sdept !='IS'
    --③查询其它系中比计算机系的学生年龄都小的学生信息。
    --select  * from student where sage<(select min(sage) from student where sdept = 'IS') and sdept !='IS'
    --④查询选修课程号为C001的课程的成绩高于张海的学生的学号和成绩。
    --select sno,grade from sc where cno = 'C001'
    -- and grade>(select grade from sc where cno = 'C001' 
    -- and sno =(select sno from student where sname = '张海'))
    -- 子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,
    -- 或子查询用作表达式时,这种情况是不允许的。

    --⑤查询和李勇的高等数学课程分数相同的学生的学号。
    --select sno from sc where grade = 
    --(select grade from sc where sno = 
    --(select sno from student where sname = '李勇')
    --and cno = (select cno from course where cname = '高等数学'))

    --⑥查询没有选修c002课程的学生的姓名。
    --select sname from student where sno!=(select sno from sc where cno = 'C002')

    --⑦查询年龄大于女同学平均年龄的男同学的姓名和年龄。
    --select sname,sage from student where
    -- sage>(select AVG(sage) from student where sgender = '女') and sgender = '男'

    --⑧查询选修JAVA课程的学生成绩比此课程的平均成绩高的学生的学号和成绩。
    --select sno,grade from sc where
    -- grade>(select AVG(grade) from sc 
    -- where cno = (select cno from course where cname = 'JAVA')) 
    -- and cno = (select cno from course where cname = 'JAVA')

    --(4)增加、删除、修改记录
    --① 向表Student中插入一个学生元组,属性值自拟。
    --insert into student values ('98008','刘备','男','35','MA')

    --② 从表SC中删除尚无成绩的选课元组。
    --delete sc where grade is null

    --③ 检索每门课程成绩都大于80分的学生学号、姓名和性别,结果存入Stu表。
    --SELECT student.sno, sname, sgender
    --FROM student 
    --JOIN sc ON student.sno = sc.sno
    --GROUP BY student.sno, sname, sgender
    --HAVING MIN(grade) > 80;
    -- group by 有一个原则,就是 select 
    -- 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面。

    --④ 把低于总平均成绩的女同学成绩提高5%。
    --UPDATE sc
    --SET grade = grade * 1.05
    --WHERE sno IN (
    --  SELECT sno
    --  FROM student
    --  WHERE sgender = '女'
    --) AND grade < (
    --  SELECT AVG(grade)
    --  FROM sc
    --  JOIN student ON sc.sno = student.sno
    --  WHERE student.sgender = '女'
    --);


    --⑤ 把钱小平同学的有关信息全部删掉。
    --delete from student where sname = '钱小平'
    --⑥ 把选修JAVA课不及格的成绩全改为0。
    --update sc set grade = 0 where grade<60 and
    -- cno = (select cno from course where cname='JAVA')

  • 相关阅读:
    云原生强大且灵活的持续集成CI开源框架Tekton实战-上
    slice扩容机制分析
    STM32配置看门狗
    Python 疫情数据可视化(爬虫+数据可视化)(Jupyter环境)
    Cannot read properties of undefined (reading ‘resetFields‘)“ 报错解决
    【硬件架构的艺术】学习笔记(2)同步和复位
    海尔智家:“超预期”成为“新常态”
    RabbitMQ-发布确认(高级)、零碎概念(幂等性/惰性队列/集群)
    框架中的单例模式
    Elasticsearch版本和Spring Data Elasticsearch版本对应关系
  • 原文地址:https://blog.csdn.net/format_push/article/details/134406223