数据库实验3

-- 实验3
# 1. 嵌套查询
#
# (1)在stuinfo表中查找与“刘东阳”性别相同的所有学生的姓名、出生日期。
select 姓名, 出生日期
from stuinfo
where 性别 = (select 性别
              from stuinfo
              where 姓名 = '刘东阳');
# (2)使用IN查找所修课程编号为002、005的学生学号、姓名、性别。
select 学号, 姓名, 性别
from stuinfo
where 学号 in (select 学号
               from grade
               where 课程编号 = '002'
                  or 课程编号 = '005');
# (3)在grade表中查找分数比学号为2020002的学生的某个分数高的学生信息。
select 分数
from grade
where 分数 > (select min(分数)
              from grade
              where 学号 = '2020002');
# (4)在grade表中查找分数比学号为2020002的学生的最高成绩还要高的学生信息。
select*
from stuinfo s
         join grade g
where 分数 > (select max(分数)
              from grade
              where 学号 = '2020002')
  and s.学号 = g.学号;

# (5)把stuinfo表中姓“刘”的学生的学号、姓名与姓“张”的学生的学号、姓名合并一个表中。
create table zl as (select 姓名, 学号
                    from stuinfo
                    where 姓名 like '刘%'
                       or 姓名 like '张%');
# (6)查询分数在80-90范围内的学生的学号、姓名、分数。
select s.学号, 姓名, 分数
from stuinfo s
         join grade g
where g.分数 between 80 and 90;
# (7)使用INNER JOIN查询学习了“数据库原理及应用”课程的学生学号、姓名、课程名称和分数。
select s.学号, 姓名, c.课程名称, g.分数
from stuinfo s
         inner join grade g
         inner join course c
                    on s.学号 = g.学号 and c.课程编号 = g.课程编号 and c.课程名称 = '数据库原理及应用';
# (8)查询每个学生所选课程的最高成绩,要求列出学号、姓名、最高成绩。
select s.学号, 姓名, 分数
from stuinfo s,
     grade g
where s.学号 = g.学号
  and 分数 in (select max(分数)
               from grade
               group by grade.学号);

# (9)使用左外连接查询每个学生的总成绩,要求列出学号、姓名、总成绩,没有选修课程的学生的总成绩为空。
select s.学号, 姓名, 分数
from stuinfo s
         left join grade g
                   on g.学号 = s.学号;
# (10)为grade表添加数据行:学号为2020004、课程编号为006、分数为76。
insert into grade
values ('2020004', '006', 76);
# (11)用EXISTS查询跟刘东阳不在同一个系的同学的姓名和系部信息。
-- 题目错误
# (12)查询选修了001和002号课程的学生姓名和年龄。
SELECT s.姓名, YEAR(CURDATE()) - YEAR(s.出生日期) AS 年龄
FROM stuinfo s
         JOIN grade g ON s.学号 = g.学号
WHERE g.课程编号 IN ('001', '002');
# (13)查询比计算机系任何一个学生年龄都小的学生姓名、年龄。
select 姓名, YEAR(CURDATE()) - YEAR(s.出生日期) AS 年龄
from stuinfo s
where 出生日期 = (select max(出生日期)
                  from stuinfo);
# (14)查询年龄比所有女生年龄大的男生的学号、年龄。
select 学号, YEAR(CURDATE()) - YEAR(s.出生日期) as 年龄
from stuinfo s
where 出生日期 > (select min(stuinfo.出生日期)
                  from stuinfo
                  where stuinfo.姓名='女');
# (15)查询比数学系任何一个学生年龄都大的学生姓名、年龄。
-- 不存在该字段
# (16)查询刘晨没选的所有课程的课程号。
select 课程编号
from grade
where grade.课程编号 not in(select 课程编号
                        from grade,stuinfo
                        where stuinfo.学号=grade.学号
                        and stuinfo.姓名='刘晨');
# (17)使用右外连接查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,course表中没有的课程查询表中的列值为空。
select c.课程编号,c.课程名称,count(g.学号)as 选修人数
from  course c right join grade g
on g.课程编号=c.课程编号
group by c.课程编号,c.课程名称;

你可能感兴趣的:(数据库,oracle,sql)