zoukankan      html  css  js  c++  java
  • Oracle表管理实验

    一、创建如下表

    学生表:student

    字段名称    字段类型        约束       

    sno                     varchar2(10)             主键

    sname                varchar2(20)

    sage                    number(2)

    ssex                    varchar2(5)

    教师表:teacher

    tno                      varchar2(10)             主键

    tname                varchar2(20)

    课程表:course

    cno                     varchar2(10)             与tno联合做主键

    cname               varchar2(20)

    tno                      varchar2(20)

    成绩表:sc

    sno                     varchar2(10)             与cno联合做主键

    cno                     varchar2(10)

    score                  number(4,2)

    create table student(
    sno varchar2(10) primary key,
    sname varchar2(20),
    sage varchar2(20),
    ssex varchar2(5)
    )
    
    
    create table teacher(
    tno varchar2(10) primary key,
    tname varchar2(20)
    )
    
    
    create table course(
    cno varchar2(10),
    cname varchar2(20),
    tno varchar2(20) ,
    primary key(cno,tno)
    )
    
    
    create table sc(
    sno varchar2(10),
    cno varchar2(10),
    score number(4,2),
    primary key(sno,cno)
    )

    二、为各表输入数据

    insert into student values ('s001','张三',23,'');
    insert into student values ('s002','李四',23,'');
    insert into student values ('s003','吴鹏',25,'');
    insert into student values ('s004','琴沁',20,'');
    insert into student values ('s005','王丽',20,'');
    insert into student values ('s006','李波',21,'');
    insert into student values ('s007','刘玉',21,'');
    insert into student values ('s008','萧蓉',21,'');
    insert into student values ('s009','陈萧晓',23,'');
    insert into student values ('s010','陈美',22,'');
    commit;
    
    insert into teacher values ('t001', '刘阳');
    insert into teacher values ('t002', '谌燕');
    insert into teacher values ('t003', '胡明星');
    commit;
    
    insert into course values ('c001','J2SE','t002');
    insert into course values ('c002','Java Web','t002');
    insert into course values ('c003','SSH','t001');
    insert into course values ('c004','Oracle','t001');
    insert into course values ('c005','SQL SERVER 2005','t003');
    insert into course values ('c006','C#','t003');
    insert into course values ('c007','JavaScript','t002');
    insert into course values ('c008','DIV+CSS','t001');
    insert into course values ('c009','PHP','t003');
    insert into course values ('c010','EJB3.0','t002');
    commit;
    
    insert into sc values ('s001','c001',78.9);
    insert into sc values ('s002','c001',80.9);
    insert into sc values ('s003','c001',81.9);
    insert into sc values ('s004','c001',60.9);
    insert into sc values ('s001','c002',82.9);
    insert into sc values ('s002','c002',72.9);
    insert into sc values ('s003','c002',81.9);
    insert into sc values ('s001','c003','59');
    commit;

    三、按下列要求完成查询

    1、查询每门课程被选修的学生数。

    SELECT cno,COUNT(sno) 
    FROM sc 
    GROUP BY cno;

    2、查询出只选修了一门课程的全部学生的学号和姓名。

    SELECT sno,sname
    FROM  student 
    WHERE sno in(
    SELECT sno
    FROM  sc
    GROUP by sno
    HAVING COUNT(cno)=1
    );

    3、查询男生、女生人数。

    SELECT count(ssex) as 男生人数 FROM student WHERE ssex='';
    SELECT count(ssex) as 女生人数 FROM student WHERE ssex='';

    4、查询姓“张”的学生名单。

    SELECT * FROM student WHERE sname LIKE '张%';

    5、查询同名同姓学生名单,并统计同名人数。

    SELECT sname,count(*) as NUM 
    FROM student
    GROUP BY sname 
    HAVING COUNT(*)>1

    6、1981 年出生的学生名单。

    7、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列。

    SELECT c.cname,c.cno,AVG(sc.score) 
    FROM course c,sc 
    WHERE c.cno = sc.cno
    GROUP BY c.cname,c.cno
    ORDER BY AVG(sc.score) DESC,c.cno ASC;

    8、查询平均成绩大于85 的所有学生的学号、姓名和平均成绩。

    SELECT s.sno,s.sname,AVG(score) 
    FROM student s,sc 
    WHERE s.sno=sc.sno 
    GROUP BY s.sno,s.sname 
    HAVING AVG(score)>85;

    9、统计每门课程的学生选修人数(超过10 人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。

    SELECT cno,COUNT(*) 
    FROM sc 
    GROUP BY cno
    HAVING COUNT(*)>10
    ORDER BY COUNT(*) DESC,cno;

    10、查询各科成绩最高和最低的分,以如下形式显示:课程ID,最高分,最低分。

    SELECT cno as 课程ID,MAX(score) as 最高分,min(score) as 最低分 
    FROM sc 
    GROUP BY cno;

    11、按各科平均成绩从低到高和及格率的百分数从高到低顺序。

    SELECT c.cno,c.cname,round(avg(sc.score),2) avg ,round(
    (SELECT COUNT(*) 
    FROM sc WHERE cno = c.cno and score>=60)/(
    SELECT COUNT(*) 
    FROM sc 
    WHERE cno= c.cno
    )*100,2)||'%' AS path_rate 
    FROM course c,sc 
    WHERE c.cno = sc.cno 
    GROUP BY c.cname,c.cno 
    ORDER BY avg, path_rate DESC;

    12、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]。

    SELECT c.cno AS 课程ID,c.cname AS 课程名,
    SUM(CASE
    WHEN sc.score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) 
    AS "[100-85]",
    SUM(CASE
    WHEN sc.score BETWEEN 70 AND 84 THEN 1 ELSE 0 END) 
    AS "[84-70]",
    SUM(CASE
    WHEN sc.score BETWEEN 60 AND 69 THEN 1 ELSE 0 END) 
    AS "[69-60]",
    SUM(CASE
    WHEN sc.score BETWEEN 0 AND 59 THEN 1 ELSE 0 END) 
    AS "[<60]"
    FROM course c,sc 
    WHERE c.cno = sc.cno 
    GROUP BY c.cno,c.cname;
  • 相关阅读:
    python https请求报错:SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED]
    python打包为exe文件
    文件自定义扫描工具
    pandas 的常用方法
    cisco应用
    Cisco 模拟配置
    python 识别图片上的数字
    OpenSSL
    OpenSSL
    OpenSSL
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/13533786.html
Copyright © 2011-2022 走看看