oracle数据库综合练习题及答案写法

时间:2023-02-24 07:35:10

/*create table Z_COURSE

(

  id          NUMBER not null,

  cour_code   VARCHAR2(20),

  cour_name   VARCHAR2(20),

  p_cour_code VARCHAR2(20)

);

comment on column Z_COURSE.cour_code

  is '课程代码';

comment on column Z_COURSE.cour_name

  is '课程名称';

comment on column Z_COURSE.p_cour_code

  is '父级课程代码';

alter table Z_COURSE

  add constraint PK_Z_COURSE primary key (ID);

alter table Z_COURSE

  add constraint UK_Z_COURSE unique (COUR_CODE);

 

create table Z_STUDENT

(

  id       NUMBER not null,

  name     VARCHAR2(20),

  code     VARCHAR2(20),

  sex      CHAR(1),

  birthday DATE,

  major    VARCHAR2(20),

  note     VARCHAR2(300)

);

comment on column Z_STUDENT.name

  is '学生姓名';

comment on column Z_STUDENT.code

  is '学生学号';

comment on column Z_STUDENT.sex

  is '性别';

comment on column Z_STUDENT.birthday

  is '生日';

comment on column Z_STUDENT.major

  is '专业';

comment on column Z_STUDENT.note

  is '备注';

alter table Z_STUDENT

  add constraint PK_Z_STUDENT primary key (ID);

 

create table Z_STU_COUR

(

  id        NUMBER not null,

  stu_code  VARCHAR2(20),

  cour_code VARCHAR2(20),

  agree     NUMBER(4,1)

);

comment on column Z_STU_COUR.stu_code

  is '学生学号';

comment on column Z_STU_COUR.cour_code

  is '课程代码';

comment on column Z_STU_COUR.agree

  is '课程分数';

 

alter table Z_STU_COUR

  add constraint PK_Z_STU_COURT primary key (ID);

 

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (1, 'LAU-100', '汉语言文学专业', null);

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (2, 'C-LAU-101', '语言学概论', 'LAU-001');

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (3, 'C-LAU-102', '现代汉语', 'LAU-001');

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (4, 'C-LAU-103', '中国当代文学史', 'LAU-001');

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (5, 'C-LAU-104', '大学英语', 'LAU-001');

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (6, 'NEWS-100', '国际新闻专业', null);

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (7, 'C-NEWS-101', '新闻采访', 'NEWS-100');

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (8, 'C-NEWS-102', '报纸编辑', 'NEWS-100');

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (9, 'C-NEWS-103', '电视新闻', 'NEWS-100');

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (10, 'HIS-121', '历史学专业', null);

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (11, 'C-HIS-335', '中国古代史', 'HIS-121');

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (12, 'C-HIS-336', '世界古代史', 'HIS-121');

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (13, 'C-HIS-337', '中国近代史', 'HIS-121');

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (14, 'ADV-609', '广告学专业', null);

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (15, 'C-ADV-239', '广告文案写作', 'ADV-609');

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (16, 'C-ADV-240', '基础美术', 'ADV-609');

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (17, 'C-ADV-241', '平面广告设计与制作', 'ADV-609');

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (18, 'C-ADV-242', '市场营销学', 'ADV-609');

insert into Z_COURSE (id, cour_code, cour_name, p_cour_code)

values (19, 'C-ADV-243', '大众传播学', 'ADV-609');

commit;

insert into Z_STUDENT (id, name, code, sex, birthday, major, note)

values (1, '陈迪', 'stu-1011', '1', to_date('14-04-1993', 'dd-mm-yyyy'), 'LAU-100', '1');

insert into Z_STUDENT (id, name, code, sex, birthday, major, note)

values (2, '肖东菁', 'stu-1014', '1', to_date('15-02-1992', 'dd-mm-yyyy'), 'HIS-121', '1');

insert into Z_STUDENT (id, name, code, sex, birthday, major, note)

values (3, '汪佳丽', 'stu-1017', '2', to_date('16-08-1990', 'dd-mm-yyyy'), 'NEWS-100', '1');

insert into Z_STUDENT (id, name, code, sex, birthday, major, note)

values (19, '车晓', 'stu-1042', '1', to_date('18-03-1990', 'dd-mm-yyyy'), 'ADV-609', '1');

insert into Z_STUDENT (id, name, code, sex, birthday, major, note)

values (5, '王聪', 'stu-1023', '1', to_date('18-03-1990', 'dd-mm-yyyy'), 'ADV-609', '1');

insert into Z_STUDENT (id, name, code, sex, birthday, major, note)

values (6, '李璇', 'stu-1026', '2', to_date('19-05-1991', 'dd-mm-yyyy'), 'HIS-121', '1');

insert into Z_STUDENT (id, name, code, sex, birthday, major, note)

values (7, '马舒滟', 'stu-1029', '1', to_date('20-01-1990', 'dd-mm-yyyy'), 'NEWS-100', '1');

insert into Z_STUDENT (id, name, code, sex, birthday, major, note)

values (20, '张光北', 'stu-1018', '1', to_date('15-02-1992', 'dd-mm-yyyy'), 'HIS-121', '1');

insert into Z_STUDENT (id, name, code, sex, birthday, major, note)

values (9, '徐丹', 'stu-1035', '2', null, 'NEWS-100', '1');

insert into Z_STUDENT (id, name, code, sex, birthday, major, note)

values (11, '田野', 'stu-1041', '1', null, 'ADV-609', '1');

insert into Z_STUDENT (id, name, code, sex, birthday, major, note)

values (12, '彭亚光', 'stu-1044', '2', to_date('25-11-1990', 'dd-mm-yyyy'), 'HIS-121', '1');

insert into Z_STUDENT (id, name, code, sex, birthday, major, note)

values (14, '黄欢', 'stu-1050', '1', to_date('27-06-1990', 'dd-mm-yyyy'), 'ADV-609', '1');

insert into Z_STUDENT (id, name, code, sex, birthday, major, note)

values (15, '庞琳', 'stu-1053', '1', to_date('28-05-1989', 'dd-mm-yyyy'), 'HIS-121', '1');

insert into Z_STUDENT (id, name, code, sex, birthday, major, note)

values (16, '张子腾', 'stu-1056', '2', to_date('18-03-1990', 'dd-mm-yyyy'), 'LAU-100', '1');

insert into Z_STUDENT (id, name, code, sex, birthday, major, note)

values (17, '姜春阳', 'stu-1059', '2', to_date('30-05-1988', 'dd-mm-yyyy'), 'HIS-121', '1');

insert into Z_STUDENT (id, name, code, sex, birthday, major, note)

values (18, '陈冰若', 'stu-1062', '1', to_date('31-10-1990', 'dd-mm-yyyy'), 'NEWS-100', '1');

commit;

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (1, 'stu-1011', 'C-LAU-101', 35);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (2, 'stu-1011', 'C-LAU-102', 65);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (3, 'stu-1011', 'C-LAU-103', 25);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (4, 'stu-1011', 'C-LAU-104', 97);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (5, 'stu-1014', 'C-HIS-335', 53);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (6, 'stu-1014', 'C-HIS-336', 35);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (7, 'stu-1014', 'C-HIS-337', 65);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (8, 'stu-1017', 'C-NEWS-101', 25);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (9, 'stu-1017', 'C-NEWS-102', 65);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (10, 'stu-1017', 'C-NEWS-103', 25);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (11, 'stu-1023', 'C-ADV-239', 33);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (12, 'stu-1023', 'C-ADV-240', 42);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (13, 'stu-1023', 'C-ADV-241', 66);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (14, 'stu-1023', 'C-ADV-242', 69);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (15, 'stu-1023', 'C-ADV-243', 82);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (16, 'stu-1026', 'C-HIS-335', 37);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (17, 'stu-1026', 'C-HIS-336', 77);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (18, 'stu-1026', 'C-HIS-337', 34);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (19, 'stu-1029', 'C-NEWS-101', 35);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (20, 'stu-1029', 'C-NEWS-102', 75);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (21, 'stu-1029', 'C-NEWS-103', 32);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (22, 'stu-1035', 'C-NEWS-101', 19);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (23, 'stu-1035', 'C-NEWS-102', 11);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (24, 'stu-1035', 'C-NEWS-103', 93);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (25, 'stu-1041', 'C-ADV-239', 99);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (26, 'stu-1041', 'C-ADV-240', 88);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (27, 'stu-1041', 'C-ADV-241', 89);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (28, 'stu-1041', 'C-ADV-242', 63);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (29, 'stu-1041', 'C-ADV-243', 44);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (30, 'stu-1044', 'C-HIS-335', 73);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (31, 'stu-1044', 'C-HIS-336', 65);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (32, 'stu-1044', 'C-HIS-337', 25);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (33, 'stu-1050', 'C-ADV-239', 33);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (34, 'stu-1050', 'C-ADV-240', 42);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (35, 'stu-1050', 'C-ADV-241', 25);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (36, 'stu-1050', 'C-ADV-242', 33);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (37, 'stu-1050', 'C-ADV-243', 42);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (38, 'stu-1053', 'C-HIS-335', 66);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (39, 'stu-1053', 'C-HIS-336', 69);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (40, 'stu-1053', 'C-HIS-337', 35);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (41, 'stu-1056', 'C-LAU-101', 65);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (42, 'stu-1056', 'C-LAU-102', 25);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (43, 'stu-1056', 'C-LAU-103', 97);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (44, 'stu-1056', 'C-LAU-104', 53);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (45, 'stu-1059', 'C-HIS-335', 35);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (46, 'stu-1059', 'C-HIS-336', 25);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (47, 'stu-1059', 'C-HIS-337', 97);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (48, 'stu-1062', 'C-NEWS-101', 32);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (49, 'stu-1062', 'C-NEWS-102', 19);

insert into Z_STU_COUR (id, stu_code, cour_code, agree)

values (50, 'stu-1062', 'C-NEWS-103', 11);

commit;*/

 

题目及答案:

--()简单查询

--查询学生表中的所有内容

select * from z_student;

--查询学生表中的姓名,专业

select s.name,s.major from z_student s;

--查询学生表中各种专业

SELECT DISTINCT (SELECT c.cour_name FROM z_course c WHERE c.cour_code=s.major) FROM z_student s

--查询表中前五个同学的姓名,专业

SELECT s.* FROM (SELECT * FROM z_student ORDER BY ID) s WHERE ROWNUM < 6

--查询各学生的学号和姓名以及截止到现在各学生的年龄

SELECT s.code, s.name, to_char(SYSDATE, 'yyyy')-to_char(s.birthday,'yyyy') 年龄 FROM z_student s

--查询专业为国际新闻的学生的所有信息

SELECT *

  FROM Z_STUDENT S

 WHERE S.MAJOR = (SELECT C.COUR_CODE

                    FROM Z_COURSE C

                   WHERE C.COUR_NAME LIKE '%国际新闻%')

                  

SELECT s.*

  FROM Z_STUDENT S, Z_COURSE C

 WHERE S.MAJOR = C.COUR_CODE

   AND C.COUR_NAME LIKE '%国际新闻%'

--查询1991年出生的学生姓名和专业

SELECT * FROM z_student s WHERE to_char(s.birthday, 'yyyy')='1991'

--查询历史, 广告, 国际新闻专业的所有学生信息

SELECT *

  FROM Z_STUDENT S

 WHERE S.MAJOR IN (SELECT C.COUR_CODE

                     FROM Z_COURSE C

                    WHERE C.COUR_NAME LIKE '%历史%'

                       OR C.COUR_NAME LIKE '%广告%'

                       OR C.COUR_NAME LIKE '%国际新闻%')

--查询姓名是两个字的姓王, 姓陈, 姓李的所有学生信息

SELECT *

  FROM Z_STUDENT S

 WHERE S.NAME LIKE '王_'

    OR S.NAME LIKE '陈_'

    OR S.NAME LIKE '李_'

--查询没有学分的学生信息

SELECT *

  FROM Z_STUDENT S LEFT JOIN Z_STU_COUR SC

 ON S.CODE = SC.STU_CODE

   WHERE SC.DEGREE IS /*NOT*/ NULL

 

SELECT *

  FROM Z_STUDENT S

 WHERE S.CODE NOT IN (SELECT SC.STU_CODE FROM Z_STU_COUR SC)

--查询国际新闻专业的没有记录生日的学生信息

SELECT *

  FROM Z_STUDENT S

 WHERE S.MAJOR = (SELECT C.COUR_CODE

                    FROM Z_COURSE C

                   WHERE C.COUR_NAME LIKE '%国际新闻%')

   AND S.BIRTHDAY IS NULL

--查询按照专业降序,学号升序排列所有学生信息

SELECT * FROM z_student s ORDER BY s.major DESC, s.code

--查询表中前三个的学生的姓名,专业,到现在的年龄并按照年龄降序排列

SELECT S.NAME,

       S.MAJOR,

       (TO_CHAR(SYSDATE, 'yyyy') - TO_CHAR(S.BIRTHDAY, 'yyyy')) 年龄

  FROM Z_STUDENT S

 WHERE ROWNUM < 4 ORDER BY 3 DESC

--(二)数据汇总

--******查询所有的课程代码和每个课程的平均成绩并按照课程号排序再剔除课程代码不是C-ADV-240的课程

SELECT SC.COUR_CODE, AVG(SC.DEGREE)

  FROM Z_STU_COUR SC

 GROUP BY SC.COUR_CODE

HAVING SC.COUR_CODE != 'C-ADV-240'

 ORDER BY SC.COUR_CODE

 

SELECT SC.COUR_CODE, AVG(SC.DEGREE)

  FROM Z_STU_COUR SC

 WHERE SC.COUR_CODE != 'C-ADV-240'

 GROUP BY SC.COUR_CODE

 ORDER BY SC.COUR_CODE

--查询出每个课程代码的最高分和最低分

SELECT SC.COUR_CODE, MAX(SC.DEGREE), MIN(SC.DEGREE)

  FROM Z_STU_COUR SC

 GROUP BY SC.COUR_CODE

--查询学号为stu-1023的学生的各课成绩

SELECT sc.cour_code, sc.degree FROM z_stu_cour sc WHERE sc.stu_code='stu-1023'

--查询出历史学专业有多少人

SELECT COUNT(*)

  FROM Z_STUDENT S

 WHERE S.MAJOR =

       (SELECT C.COUR_CODE FROM Z_COURSE C WHERE C.COUR_NAME LIKE '%历史%')

--查询各专业各有多少人

SELECT s.major, COUNT(*)

  FROM Z_STUDENT S GROUP BY s.major

--查询出各专业里男女生各有多少人

SELECT S.MAJOR, S.SEX, COUNT(1) FROM Z_STUDENT S GROUP BY S.MAJOR, S.SEX

 

SELECT S.MAJOR,

       SUM(DECODE(S.SEX, 1, 1, 2, 0)) 男,

       SUM(DECODE(S.SEX, 1, 0, 2, 1)) 女

  FROM Z_STUDENT S

 GROUP BY S.MAJOR

--查询出学生所有课程的平均分在50分以上的学生学号

SELECT SC.STU_CODE

  FROM Z_STU_COUR SC

 GROUP BY SC.STU_CODE

HAVING AVG(SC.DEGREE) > 50

--查询每个学生有几门课成绩高于80

SELECT SC.STU_CODE, COUNT(SC.DEGREE)

  FROM Z_STU_COUR SC

 WHERE SC.DEGREE > 80

 GROUP BY SC.STU_CODE

 

SELECT SC.STU_CODE, SUM(CASE WHEN sc.degree>80 THEN 1 ELSE 0 END)

  FROM Z_STU_COUR SC GROUP BY SC.STU_CODE

 

--(三)连接查询

--查询所有学生的学号,姓名,专业课程号,成绩

SELECT S.CODE, S.NAME, SC.COUR_CODE, SC.DEGREE

  FROM Z_STUDENT S

  LEFT JOIN Z_STU_COUR SC

    ON S.CODE = SC.STU_CODE

--查询课程号为C-HIS-336的学生的姓名和成绩

 

--查询选修基础美术这门课程的学生学号,姓名,成绩

SELECT S.CODE, S.NAME, SC.COUR_CODE, SC.DEGREE

  FROM Z_STUDENT S, Z_STU_COUR SC

 WHERE S.CODE = SC.STU_CODE

   AND S.MAJOR = (SELECT C.P_COUR_CODE

                    FROM Z_COURSE C

                   WHERE C.COUR_NAME LIKE '%基础美术%')

--查询选修课程号为C-NEWS-101这门课的所有学生信息和成绩

SELECT * FROM z_student s, z_stu_cour sc WHERE s.code=sc.stu_code AND sc.cour_code='C-NEWS-101'

--查询生日是同一天的学生信息

SELECT *

  FROM Z_STUDENT T

 WHERE T.NAME IN (SELECT DISTINCT (T.NAME)

                    FROM Z_STUDENT T, Z_STUDENT S

                   WHERE T.BIRTHDAY = S.BIRTHDAY

                     AND T.CODE != S.CODE)

 ORDER BY T.BIRTHDAY

--查询各课的课程名,课程号,每门课所有学生的平均成绩

SELECT (SELECT C.COUR_NAME FROM Z_COURSE C WHERE C.COUR_CODE = SC.COUR_CODE) 课程名,

       SC.COUR_CODE,

       AVG(SC.DEGREE)

  FROM Z_STU_COUR SC

 GROUP BY SC.COUR_CODE

 

SELECT R.COUR_CODE, C.COUR_NAME, R.AVG

  FROM (SELECT SC.COUR_CODE COUR_CODE, AVG(SC.degree) AVG

          FROM Z_STU_COUR SC

         GROUP BY SC.COUR_CODE) R

  LEFT OUTER JOIN Z_COURSE C

    ON R.COUR_CODE = C.COUR_CODE

 ORDER BY R.COUR_CODE

 

select sc.cour_code, c.cour_name, avg(sc.degree)

  from z_stu_cour sc, z_course c

 where sc.cour_code = c.cour_code

 group by sc.cour_code, c.cour_name

 

SELECT SC.COUR_CODE, C.COUR_NAME, AVG(SC.degree)

  FROM Z_STU_COUR SC

  LEFT JOIN Z_COURSE C

    ON SC.COUR_CODE = C.COUR_CODE

 GROUP BY SC.COUR_CODE, C.COUR_NAME;

--查询所有学生的平均成绩

SELECT S.CODE, S.NAME, AVG(nvl(SC.DEGREE, 0))

  FROM Z_STUDENT S

  LEFT JOIN Z_STU_COUR SC

    ON S.CODE = SC.STU_CODE

 GROUP BY S.CODE, S.NAME

--查询每个专业的每个课程的平均分是多少

SELECT AVG(sc.degree) FROM z_stu_cour sc GROUP BY sc.cour_code

--查询平均分大于40分的国际新闻专业的每个学生姓名,学号和各课的平均分

SELECT r.name, r.code, sc.cour_code, AVG(sc.degree)

  FROM Z_STU_COUR SC

  RIGHT JOIN (SELECT S.*

               FROM Z_STUDENT S

              WHERE S.MAJOR = (SELECT C.COUR_CODE

                                 FROM Z_COURSE C

                                WHERE C.COUR_NAME LIKE '%国际新闻%')) R

    ON SC.STU_CODE = R.CODE GROUP BY r.name, r.code, sc.cour_code HAVING AVG(sc.degree) > 40;

   

SELECT R.NAME, R.CODE, T.AVGDEGREE

  FROM (SELECT *

          FROM Z_STUDENT S

         WHERE S.MAJOR = (SELECT C.COUR_CODE

                            FROM Z_COURSE C

                           WHERE C.COUR_NAME LIKE '%国际新闻%专业')) R

  LEFT OUTER JOIN (SELECT SC.STU_CODE CODE, AVG(SC.degree) AVGDEGREE

                     FROM Z_STU_COUR SC WHERE sc.degree > 40

                    GROUP BY SC.STU_CODE) T

    ON R.CODE = T.CODE

 ORDER BY R.CODE

 

SELECT S.NAME, SC.STU_CODE, SC.COUR_CODE, AVG(SC.degree)

  FROM Z_STUDENT S, Z_COURSE C, Z_STU_COUR SC

 WHERE SC.STU_CODE IN (SELECT SC.STU_CODE

                         FROM Z_STU_COUR SC

                        GROUP BY SC.STU_CODE

                       HAVING AVG(SC.degree) > 40)

   AND S.CODE = SC.STU_CODE

   AND S.MAJOR = C.COUR_CODE

   AND C.COUR_NAME = '国际新闻专业'

 GROUP BY S.NAME, SC.STU_CODE, SC.COUR_CODE

--(四)子查询的使用

--查询平均分大于等于课程号为C-ADV-239的课程号和平均分

SELECT sc1.cour_code, AVG(sc1.degree)

  FROM Z_STU_COUR SC1

 GROUP BY SC1.COUR_CODE

HAVING AVG(SC1.DEGREE) >= (SELECT AVG(SC.DEGREE)

                             FROM Z_STU_COUR SC

                            WHERE SC.COUR_CODE = 'C-ADV-239'

                            GROUP BY SC.COUR_CODE)

--查询历史学专业下的课程的及格率(课程得分在50以上的人数除以总人数)

SELECT SC.COUR_CODE,

       SUM(CASE

             WHEN SC.degree > 50 THEN

              1

             ELSE

              0

           END) / COUNT(*) 及格率

  FROM Z_STU_COUR SC

 WHERE SC.COUR_CODE IN

       (SELECT C.COUR_CODE

          FROM Z_COURSE C

        CONNECT BY PRIOR C.COUR_CODE = C.P_COUR_CODE

         START WITH C.COUR_NAME LIKE '%历史%')

 GROUP BY SC.COUR_CODE

 

SELECT SCC.COUR_CODE, SCCC.COUU / SCC.COU * 100

  FROM (SELECT SC.COUR_CODE, COUNT(SC.COUR_CODE) COUU

          FROM Z_STU_COUR SC

         WHERE SC.DEGREE > 50

         GROUP BY SC.COUR_CODE) SCCC,

       (SELECT SC.COUR_CODE, COUNT(SC.COUR_CODE) COU

          FROM Z_STU_COUR SC

         GROUP BY SC.COUR_CODE) SCC

 WHERE SCCC.COUR_CODE = SCC.COUR_CODE

   AND SCC.COUR_CODE IN

       (SELECT C.COUR_CODE

          FROM Z_COURSE C

         WHERE C.P_COUR_CODE =

               (SELECT C.COUR_CODE

                  FROM Z_COURSE C

                 WHERE C.COUR_NAME = '历史学专业'))

                

SELECT ZP.COUR_NAME, 及格人数 / 总人数 及格率

  FROM (SELECT C.COUR_NAME, COUNT(SC.DEGREE) 总人数

          FROM Z_COURSE C

          LEFT JOIN Z_STU_COUR SC

            ON C.COUR_CODE = SC.COUR_CODE

         WHERE C.P_COUR_CODE =

               (SELECT C.COUR_CODE

                  FROM Z_COURSE C

                 WHERE C.COUR_NAME = '历史学专业')

         GROUP BY C.COUR_NAME, SC.COUR_CODE) ZP

  LEFT JOIN (SELECT C.COUR_NAME, COUNT(SC.DEGREE) 及格人数

               FROM Z_COURSE C

               LEFT JOIN Z_STU_COUR SC

                 ON C.COUR_CODE = SC.COUR_CODE

              WHERE C.P_COUR_CODE =

                    (SELECT C.COUR_CODE

                       FROM Z_COURSE C

                      WHERE C.COUR_NAME = '历史学专业')

                AND SC.DEGREE > 50

              GROUP BY C.COUR_NAME, SC.COUR_CODE) JP

    ON ZP.COUR_NAME = JP.COUR_NAME

--查询没有选修C-NEWS-101这门课程的学生信息和课程信息

SELECT S.*, SC.COUR_CODE

  FROM Z_STUDENT S, Z_STU_COUR SC

 WHERE S.CODE = SC.STU_CODE

   AND SC.COUR_CODE != 'C-NEWS-101'