精华内容
下载资源
问答
  • 学生选课管理系统的需求分析 学生选课管理系统的ER图 学生选课管理系统的关系数据库模式 学生选课管理系统数据库建立
  • 数据库学习中经典的学生、课程、选课关系三者的数据库例程,sql文件,直接导入建立数据库,然后就可以开始学习,不再需要手工输入
  • SQL之学生选课数据库

    千次阅读 2013-04-07 08:07:32
    1、E-R图   2、关系模式 Student(Sno, Sname, Sage, Ssex, Sdept) Course(Cno, Cname, Cpno, Ccredit) SC(Sno, Cno,Grade) .../*建立学生表*/ create table Student( Sno varchar2(9) primary key, Sname var

    1、E-R图

     

    2、关系模式

    Student(Sno, Sname, Sage, Ssex, Sdept)
    Course(Cno, Cname, Cpno, Ccredit)
    SC(Sno, Cno,Grade)
    

    3、实现SQL

    /*建立学生表*/
    create table Student(
        Sno varchar2(9) primary key,
        Sname varchar2(20) unique,
        Ssex varchar2(2),
        Sage integer,
        Sdept varchar2(20)
    )
    /*建立课程表*/
    create table Course(
        Cno varchar(4) primary key,
        Cpno varchar(4),
        Cname varchar2(20),
        Ccredit integer,
        foreign key (Cpno) references Course(Cno)
        /*表级完整性约束,Cpno是外码,被参照表是Course,被参照列是Cno*/
    )
    /*建立学生选课表*/
    Create table SC(
        Sno varchar2(9),
        Cno varchar2(4),
        Grade integer,
        primary key(Sno,Cno),
        /*主码有两个属性,必须作为表级完整性进行定义*/
        foreign key (Sno) references Student(Sno),
         /*表级完整性约束,Sno是外码,被参照表是Student,被参照列是Sno*/
        foreign key (Cno) references Course(Cno)
        /*表级完整性约束,Cno是外码,被参照表是Course,被参照列是Cno*/
    )

    4、修改基本表

    alter table <列名>
    [ add <新列名> <数据类型> [完整性约束] ]
    [ Drop [完整性约束名] ]
    [ alter column <列名> <数据类型> ];

    4.1 为Student添加用户密码属性列

    alter table STUDENT add Spwd varchar2(20);

    4.2 增加课程名取唯一值约束

    alter table Course Add unique(Cname);

    4.3 将Spwd的数据类型由varchar2(20)改为varchar2(30)

    alter table STUDENT alter column Spwd varchar2(30);

    5、删除基本表

    drop table <表名> [ restrict|cascade ];

    Restrict说明删除是有条件的,cascade说明该表的删除没有任何限制。

    6、数据查询

    select [ all|distinct ] [ <目标列表达式> ]
    from <表名或者视图名>
    [ where <条件表达式> ]
    [ group by  <列名1> [ having <条件表达式> ] ]
    [ order by  <列名2> [ASC|DESC] ]
    

    6.1 查询全体学生的学号和姓名

    select sno,sname from STUDENT t

    6.2 查询学生的姓名和出生年

    select sname,(2013-Sage) as birthYear from STUDENT t

    6.3 查询学生的姓名和所在系名,并将系名转换为小写

    select sname,lower(sdept) from STUDENT t

    6.4 消除取值重复行

    select distinct cno from SC t

    6.5 查询GIS专业学生的学号和姓名

    select sno,sname from  STUDENT where sdept='GIS'

    6.6 查询年龄小于25的学生的学号和姓名

    select sno,sname from  STUDENT where sage<25

    6.7 查询年龄介于20-25之间的学生的学号和姓名

    select sno,sname from  STUDENT where sage between 20 and 25

    6.7 查询年龄不介于20-25之间的学生的学号和姓名

    select sno,sname from  STUDENT where sage not between 20 and 25

    6.8 查询GIS和RS系学生的学号和姓名

    select sno,sname from  STUDENT where sdept in ('GIS','RS')

    6.9  查询不在GIS和RS系学生的学号和姓名

    select sno,sname from  STUDENT where sdept not in ('GIS','RS')

    6.10 字符匹配

    [not] like '<匹配串>' [escape '<换码字符>']
    	%(百分号)代表任何长度的字符串;
    	_(下划线)代表任意单个字符。

    6.11 排序查询

    [ order by  <列名2> [ASC|DESC] ]
    	ASC为升序,默认;
    	DESC为降序排序。
    

    6.12 聚集函数

    count ( [distinct|all] * )   //统计元组个数
    count ( [distinct|all] <列名> )    //统计一列中值个数
    sum ( [distinct|all] <列名> )  //计算某一列值的和
    avg ( [distinct|all] <列名> )  //计算某一列值的平均值
    max ( [distinct|all] <列名> )  //计算某一列值的最大值
    min ( [distinct|all] <列名> )  //计算某一列值的最小值
    

    6.12.1 查询学生总人数

    select count(*) as Scount from student

    6.12.2 查询GIS课程的平均成绩

    select avg(grade) as gisAvg from sc where cno=(select cno from course where cname='GIS')

    6.12.2 查询学生牛一的平均成绩

    select avg(grade) as Niu1Avg
      from sc, course
     where sno = (select sno from student where sname = '牛一')
       and sc.cno = course.cno

    6.13 查询各个课程的课程号与选课人数

    select cno,count(sno) from SC group by cno

    6、复合查询

    6.14 查询选修2号课程且成绩在80分以上的学生

    select student.sno as sno, student.sname as sname
      from student, sc
     where student.sno = sc.sno
       and sc.cno = '2'
       and sc.grade > 80

    6.15 查询每个学生的学号、姓名、选修课程名以及成绩

    select student.sno   as sno,
           student.sname as sname,
           course.cname  as cname,
           sc.grade      as grade
      from student, course, sc
     where student.sno = sc.sno
       and sc.cno = course.cno

    6.16 查询和牛一在同一个系的学生

    select sno, sname
      from STUDENT
     where sdept = (select sdept from STUDENT where sname = '牛一')

    6.17 查询选修了GIS课程的学生

    select sno, sname
      from STUDENT
     where sno in
           (select sno
              from sc
             where cno in (select cno from course where cname = 'GIS'))

    7、数据更新

    7.1 插入数据

    insert into < 表名 > [ ( < 属性1 >[ ,< 属性2 > ...) ]
     values ( < 常量1 > [ ,< 常量2 > ...)

    7.2 修改数据

     update < 表名 >
        set < 列名 >= < 值 > [, < 列名 >= < 值 > ] 
    [ where < 条件 > ]

    7.3 删除数据

    delete from < 表名 > [ where < 条件 > ]

    附录:

    视图:从一个或者几个基本表(视图)导出的表,他是一个虚表。

    1、建立视图


    create view < 表名 > [ ( < 列名 > ,< 列名 > ] 
    as < 子查询 >
    [ with check option ]
    


    2、删除视图

    drop view < 视图名 > [ cascade ];

    3、视图的其他操作

    视图的其他操作与表的操作类似。

    4、视图的作用

    1、简化用户操作;
    2、使用户能以多种角度看同一数据;
    3、对重构数据库提供了一定的逻辑独立性;
    4、对机密数据提供安全保护;
    5、适当使用视图可以更清楚的表达查询。
    展开全文
  • 一、 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL...

    一、            设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。

                     1-1数据库的表结构

    表(一)Student (学生表)                        

    字段名

    数据类型

    可否为空

    含 义

    Sno

    Varchar2(3)

    学号(主键)

    Sname

    Varchar2(8)

    学生姓名

    Ssex

    Varchar2(2)

    学生性别

    Sbirthday

    Date

    学生出生年月

    SClass

    Varchar2(5)

    学生所在班级

    表(二)Course(课程表)

    属性名

    数据类型

    可否为空

    含 义

    Cno

    Varchar2(5)

    课程号(主键)

    Cname

    Varchar(10)

    课程名称

    Tno

    Varchar2(3)

    教工编号(外键)

    表(三)Score(成绩表)

    属性名

    数据类型

    可否为空

    含 义

    Sno

    Varchar2(3)

    学号(外键)

    Cno

    Varchar2(5)

    课程号(外键)

    Degree

    Number(4,1)

    成绩

    主键:Sno+ Cno

    表(四)Teacher(教师表)

    属性名

    数据类型

    可否为空

    含 义

    Tno

    Varchar2(3)

    教工编号(主键)

    Tname

    Varchar2(4)

    教工姓名

    Tsex

    Varchar2(2)

    教工性别

    Tbirthday

    Date

    教工出生年月

    Prof

    Varchar2(6)

    职称

    Depart

    Varchar(10)

    教工所在部门

    1-2数据库中的数据

    表(一)Student

     

    Sno

    Sname

    Ssex

    Sbirthday

    class

     

    108

    曾华

    1977/09/01

    95033

     

    105

    匡明

    1975/10/02

    95031

     

    107

    王丽

    1976/01/23

    95033

     

    101

    李军

    1976/02/20

    95033

     

    109

    王芳

    1975/02/10

    95031

     

    103

    陆君

    1974/06/03

    95031

     

    表(二)Course

     

    Cno

    Cname

    Tno

     

    3-105

    计算机导论

    825

     

    3-245

    操作系统

    804

     

    6-166

    数字电路

    856

     

    9-888

    高等数学

    831

    表(三)Score

     

    Sno

    Cno

    Degree

     

    103

    3-245

    86

     

    105

    3-245

    75

     

    109

    3-245

    68

     

    103

    3-105

    92

     

    105

    3-105

    88

     

    109

    3-105

    76

     

    101

    3-105

    64

     

    107

    3-105

    91

     

     

    108

    3-105

    78

     

     

    101

    6-166

    85

     

     

    107

    6-166

    79

     

     

    108

    6-166

    81

     

                   

    表(四)Teacher

     

    Tno

    Tname

    Tsex

    Tbirthday

    Prof

    Depart

     

    804

    李诚

    1958/12/02

    副教授

    计算机系

     

    856

    张旭

    1969/03/12

    讲师

    电子工程系

     

    825

    王萍

    1972/05/05

    助教

    计算机系

     

    831

    刘冰

    1977/08/14

    助教

    电子工程系

     

    建表:

    方法一:右击

    方法二:代码

     

     

    1、 查询Student表中的所有记录的Sname、Ssex和Class列。

    select t. from STUDENT t.    --t是别名,别名用也行,不用也行

     

    2、 查询教师所有的单位即不重复的Depart列。

    3、 查询Student表的所有记录。

    selext * from STUDENT

     

    4、 查询Score表中成绩在60到80之间的所有记录。

    select t.* from SCORE t where t.degree>60 and t.degree<80

    select * from SCORE  where  degree>60 and  degree<80  两种都可

     

    5、 查询Score表中成绩为85,86或88的记录。

    select * from SCORE  where  degree='85' or  degree='86' or degree='88'

     

    6、 查询Student表中“95031”班或性别为“女”的同学记录。

    select * from STUDENT a where a.sclass='95031'

    where后写条件表达式(逻辑判断),写好了查询效率才高。

     

    select * from STUDENT where sclass='95031' or ssex= '女'        --或符合一个即可

    select * from STUDENT where sclass='95031' and ssex= '女'     --和两个同时满足

     

    7、 以Class降序查询Student表的所有记录。

    8、 以Cno升序、Degree降序查询Score表的所有记录。

    9、 查询“95031”班的学生人数。

    10、 查询Score表中的最高分的学生学号和课程号。(子查询或者排序)

    11、 查询每门课的平均成绩。

    12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。

     

    13、查询分数大于70,小于90的Sno列。

    select t.* from SCORE t where sno>70 and sno<90

     

    14、查询所有学生的Sname、Cno和Degree列。

    15、查询所有学生的Sno、Cname和Degree列。

    16、查询所有学生的Sname、Cname和Degree列。

    17、 查询“95033”班学生的平均分。

    18、 假设使用如下命令建立了一个grade表:

    create table grade(low  number(3),upp  number (3),rank  char(1))

    insert into grade values(90,100,’A’)

    insert into grade values(80,89,’B’)

    insert into grade values(70,79,’C’)

    insert into grade values(60,69,’D’)

    insert into grade values(0,59,’E’)

    现查询所有同学的Sno、Cno和rank列。

    19、  查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。

    20、查询score中选学多门课程的同学中分数为非最高分成绩的记录。

    21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。

    22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。

    23、查询“张旭“教师任课的学生成绩。

    24、查询选修某课程的同学人数多于5人的教师姓名。

    25、查询95033班和95031班全体学生的记录。

    26、  查询存在有85分以上成绩的课程Cno.

    27、查询出“计算机系“教师所教课程的成绩表。

    28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。

    29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。

    30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.

    31、 查询所有教师和同学的name、sex和birthday.

    32、查询所有“女”教师和“女”同学的name、sex和birthday.

    33、 查询成绩比该课程平均成绩低的同学的成绩表。

    34、 查询所有任课教师的Tname和Depart.

    35 、 查询所有未讲课的教师的Tname和Depart.

    36、查询至少有2名男生的班号。

    37、查询Student表中不姓“王”的同学记录。

    38、查询Student表中每个学生的姓名和年龄。

    39、查询Student表中最大和最小的Sbirthday日期值。

    40、以班号和年龄从大到小的顺序查询Student表中的全部记录。

    41、查询“男”教师及其所上的课程。

    42、查询最高分同学的Sno、Cno和Degree列。

    43、查询和“李军”同性别的所有同学的Sname.

    44、查询和“李军”同性别并同班的同学Sname.

    45、查询所有选修“计算机导论”课程的“男”同学的成绩表。

      

    转载于:https://www.cnblogs.com/hanruyue/p/5943747.html

    展开全文
  • 学生选课数据库(oracle 11g)的设计与管理一、 实验目的及要求 1、 熟悉ORACLE的环境 2、 用SQL PLUS创建用户,并赋予其管理员权限。 3、 登陆创建的用户 4、 设计教师表、课程表、学生表,及其建立各个表之间的...

    学生选课数据库(oracle 11g)的设计与管理

    一、 实验目的及要求
    1、 熟悉ORACLE的环境
    2、 用SQL PLUS创建用户,并赋予其管理员权限。
    3、 登陆创建的用户
    4、 设计教师表、课程表、学生表,及其建立各个表之间的约束
    5、 用数据定义语言建立三个表及其约束
    6、 运用SQL,对上述三个表插入一定数量的记录(至少每个表要求插入10条记录);用SQL语句至少教两门课的教师信息的查询、至少选修了两门课的学生信息的查询、某个学生信息的查询、某个教师信息的查询、某门课程信息的查询、某个学生不及格的课程信息的查询。
    7、 运用 PL/SQL,查询教师的信息、学生的信息和课程的信息。
    8、 将上面的所有的插入操作和查询操作按照不同的内容划分到不同的文件中,当到某个操作时,在SQL PLUS下运行该文件即可。
    9、 设计函数或过程,统计学生的总成绩、平均成绩等内容。

    --创建course表并添加数据
    create table course(
    c_no number(5) primary key,
    c_name varchar2(20),
    c_credit number(2)      
    );
    insert all
    into course  values(1,'数据库',2)
    into course  values(2,'高数',3)
    into course  values(3,'信息系统',1)
    into course  values(4,'操作系统',4)
    into course  values(5,'数据结构',3)
    into course  values(6,'计算机网络',2)
    into course  values(7,'法语',2)
    into course  values(8,'软件体系结构',3)
    into course  values(9,'编程语言',4)
    into course  values(10,'大学写作',1)
    select *from dual;
    --创建student表并添加数据
    create table student(
    s_no number(5) ,
    s_name varchar2(8),
    s_sex varchar2(8),
    s_age number(3),
    s_dept varchar2(8),
    c_no number(5),
    constraint sc foreign key (c_no) references course (c_no),
    grade number(3)     
    );
    
    insert all
    into student(s_no,s_name,s_sex,s_age,s_dept,c_no,grade)  
    values(95001,'李勇','男',20,'CS',1,90)
    into student(s_no,s_name,s_sex,s_age,s_dept,c_no,grade)
    values(95001,'李勇','男',20,'CS',2,90)
    into student(s_no,s_name,s_sex,s_age,s_dept,c_no,grade)
    values(95001,'李勇','男',20,'CS',3,90)
    into student(s_no,s_name,s_sex,s_age,s_dept,c_no,grade)
    values(95002,'李白','男',20,'CS',4,59)
    into student(s_no,s_name,s_sex,s_age,s_dept,c_no,grade)
    values(95003,'刘琛','男',20,'CS',5,90)
    into student(s_no,s_name,s_sex,s_age,s_dept,c_no,grade)
    values(95002,'李白','男',20,'CS',1,50)
    into student(s_no,s_name,s_sex,s_age,s_dept,c_no,grade)
    values(95004,'王敏','女',19,'CS',6,92)
    into student(s_no,s_name,s_sex,s_age,s_dept,c_no,grade)
    values(95005,'章立','男',21,'CS',1,90)
    into student(s_no,s_name,s_sex,s_age,s_dept,c_no,grade)
    values(95006,'杨国','男',20,'CS',9,80)
    into student(s_no,s_name,s_sex,s_age,s_dept,c_no,grade)
    values(95006,'杨国','男',20,'CS',1,70)
    into student(s_no,s_name,s_sex,s_age,s_dept,c_no,grade)
    values(95007,'杨晓','女',20,'CS',10,90)
    into student(s_no,s_name,s_sex,s_age,s_dept,c_no,grade)
    values(95008,'赵瑜','女',23,'CS',10,50)
    into student(s_no,s_name,s_sex,s_age,s_dept,c_no,grade)
    values(95009,'陆游','男',22,'CS',8,100 )
    select * from dual;
    
    --创建teacher表并添加数据
    create table teacher(
    t_no number(5) not null,
    t_name varchar2(8),
    t_sex char(8),
    t_age number(3),
    c_no number(5),
    constraint tc foreign key (c_no) references course (c_no)    
    );
    
    insert all
    into teacher  values(10001,'李刚','男',35,1)
    into teacher  values(10001,'李刚','男',35,3)
    into teacher  values(10001,'李刚','男',35,4)
    into teacher  values(10002,'李大钊','男',30,2)
    into teacher  values(10003,'毕淑敏','女',32,10)
    into teacher  values(10004,'朱自清','男',54,5)
    into teacher  values(10005,'鲁迅','男',35,6)
    into teacher  values(10006,'高强','男',42,7)
    into teacher  values(10007,'杨澜','女',29,8)
    into teacher  values(10008,'姚雪曼','女',26,9)
    select * from dual;
    
    --使用SQL语句查询至少教两门课的教师信息的查询、至少选修了两门课的学生信息的查询、某个学生信息的查询、某个教师信息的查询、某门课程信息的查询、某个学生不及格的课程信息的查询。
    select * from student
    where s_no in(
    select s_no from student
    group by s_no
    having count(*)>=2
    );
    select * from teacher
    where t_no in(
    select t_no from teacher
    group by t_no
    having count(*)>2
    );
    
    select * from student
    where s_no='95001'
    ;
    select * from course
    where c_no='1'
    ;
    select * from teacher
    where t_no='10001'
    ;
    
    --使用PL/SQL语句查询
    --根据教师工号查询教师信息
    set serveroutput on
    declare
    t_no1 constant teacher.t_no%type:=10008;
    one_ter teacher%rowtype;
    begin
    select * into one_ter
    from teacher 
    where t_no=t_no1;
    dbms_output.put_line('----根据教师工号查询教师信息----');
    dbms_output.put_line('查询的教师工号为:'||one_ter.t_no);
    dbms_output.put_line('查询的教师姓名为:'||one_ter.t_name);
    dbms_output.put_line('查询的教师性别为:'||one_ter.t_sex);
    dbms_output.put_line('查询的教师年龄为:'||one_ter.t_age);
    dbms_output.put_line('查询的教师所教课程号为:'||one_ter.c_no);
    end;
    /
    
    --根据课程号查询课程信息
    set serveroutput on
    declare
    c_no1 constant course.c_no%type:=1; --c_no1参照来自course表中c_no列的类型
    one_cou course%rowtype; --one_cou参照来自course表中记录的类型
    begin
    select * into one_cou 
    from course 
    where c_no=c_no1;
    dbms_output.put_line('----根据课程号查询课程信息----');
    dbms_output.put_line('查询的课程名为:'||one_cou.c_no);
    dbms_output.put_line('查询的课程名为:'||one_cou.c_name);
    dbms_output.put_line('查询的课程的学分为:'||one_cou.c_credit);
    end;
    /
    
    --根据学号查询学生信息
    set serveroutput on
    declare
    s_no1 constant student.s_no%type:=95009;
    one_stu student%rowtype;
    begin
    select * into one_stu
    from student 
    where s_no=s_no1;
    dbms_output.put_line('----根据学号查询学生信息----');
    dbms_output.put_line('查询的学生学号为:'||one_stu.s_no);
    dbms_output.put_line('查询的学生姓名为:'||one_stu.s_name);
    dbms_output.put_line('查询的学生性别为:'||one_stu.s_sex);
    dbms_output.put_line('查询的学生年龄为:'||one_stu.s_age);
    dbms_output.put_line('查询的学生所在系为:'||one_stu.s_dept);
    dbms_output.put_line('查询的学生所选课程号为:'||one_stu.c_no);
    dbms_output.put_line('查询的学生所选课程得分为:'||one_stu.grade);
    end;
    /
    
    --使用游标查询学生信息
    set serveroutput on
    declare
    cursor stu_cursor(s_no1 number) 
    is select s_no,s_name,s_sex,s_age,s_dept,c_no,grade
    from student 
    where s_no=s_no1;
    stu_record stu_cursor%rowtype;
    begin
    open stu_cursor(95001);
    loop
    fetch stu_cursor into stu_record;
    exit when stu_cursor%notfound;
    dbms_output.put_line('当前检索第:'||stu_cursor%rowcount||'行'||chr(10)||
    '查询的学生学号为:'||stu_record.s_no||
    ',查询的学生姓名为:'||stu_record.s_name||
    ',查询的学生性别为:'||stu_record.s_sex||chr(10)||
    '查询的学生年龄为:'||stu_record.s_age||
    ',查询的学生所在系为:'||stu_record.s_dept||
    ',查询的学生所选课程为:'||stu_record.c_no||
    ',查询的学生所选课程的得分为:'||stu_record.grade||chr(10)
    );
    end loop;
    close stu_cursor;
    end;
    /
    --使用函数查询学生总成绩
    create or replace function get_sum(s_no1 number) return number
    as
    s_grade number(10);
    begin
    select sum(grade) into s_grade 
    from student
    where s_no=s_no1
    ;
    return s_grade
    ;
    end get_sum
    ;
    /
    --函数已创建
    set serveroutput on
    declare
    cursor stu_cursor(s_no2 number)
    is select s_no,s_name
    from student
    where s_no=s_no2;
    s_record stu_cursor%rowtype;
    grade number(10);
    begin
    open stu_cursor(95001);
    fetch stu_cursor into s_record;
    grade:=get_sum(s_record.s_no);
    dbms_output.put_line('学号为:'||s_record.s_no);
    dbms_output.put_line('姓名为:'||s_record.s_name);
    dbms_output.put_line('总成绩为:'||grade);
    close stu_cursor;
    end;
    /
    
    --使用过程查询学生平均成绩
    create or replace procedure get_avg
    as
    cursor stu_cursor(s_no1 number)
    is
    select avg(grade)
    from student where s_no=s_no1;
    s_grade number(9);
    begin
    open stu_cursor(95001);
    fetch stu_cursor into s_grade;
    dbms_output.put_line(s_grade);
    close stu_cursor;
    end
    get_avg;
    /
    --函数已创建
    
    set serveroutput on
    exec get_avg;
    
    展开全文
  • 数据库应用课程设计报告 设计题目 学生网上选课系统 班 级 学 号 姓 名 指导教师 完成日期 成绩 数据库应用课程设计 学生网上选课系统 摘要 本系统为学生网上选课系统其开发主要包括数据库建立和维护以及前端应用...
  • 一、 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL...

    一、            设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。

                     1-1数据库的表结构

    表(一)Student (学生表)                        

    字段名

    数据类型

    可否为空

    含 义

    Sno

    Varchar2(3)

    学号(主键)

    Sname

    Varchar2(8)

    学生姓名

    Ssex

    Varchar2(2)

    学生性别

    Sbirthday

    Date

    学生出生年月

    SClass

    Varchar2(5)

    学生所在班级

    表(二)Course(课程表)

    属性名

    数据类型

    可否为空

    含 义

    Cno

    Varchar2(5)

    课程号(主键)

    Cname

    Varchar(10)

    课程名称

    Tno

    Varchar2(3)

    教工编号(外键)

    表(三)Score(成绩表)

    属性名

    数据类型

    可否为空

    含 义

    Sno

    Varchar2(3)

    学号(外键)

    Cno

    Varchar2(5)

    课程号(外键)

    Degree

    Number(4,1)

    成绩

    主键:Sno+ Cno

    表(四)Teacher(教师表)

    属性名

    数据类型

    可否为空

    含 义

    Tno

    Varchar2(3)

    教工编号(主键)

    Tname

    Varchar2(4)

    教工姓名

    Tsex

    Varchar2(2)

    教工性别

    Tbirthday

    Date

    教工出生年月

    Prof

    Varchar2(6)

    职称

    Depart

    Varchar(10)

    教工所在部门

    1-2数据库中的数据

    表(一)Student

     

    Sno

    Sname

    Ssex

    Sbirthday

    class

     

    108

    曾华

    1977/09/01

    95033

     

    105

    匡明

    1975/10/02

    95031

     

    107

    王丽

    1976/01/23

    95033

     

    101

    李军

    1976/02/20

    95033

     

    109

    王芳

    1975/02/10

    95031

     

    103

    陆君

    1974/06/03

    95031

     

    表(二)Course

     

    Cno

    Cname

    Tno

     

    3-105

    计算机导论

    825

     

    3-245

    操作系统

    804

     

    6-166

    数字电路

    856

     

    9-888

    高等数学

    831

    表(三)Score

     

    Sno

    Cno

    Degree

     

    103

    3-245

    86

     

    105

    3-245

    75

     

    109

    3-245

    68

     

    103

    3-105

    92

     

    105

    3-105

    88

     

    109

    3-105

    76

     

    101

    3-105

    64

     

    107

    3-105

    91

     

     

    108

    3-105

    78

     

     

    101

    6-166

    85

     

     

    107

    6-166

    79

     

     

    108

    6-166

    81

     

                   

    表(四)Teacher

     

    Tno

    Tname

    Tsex

    Tbirthday

    Prof

    Depart

     

    804

    李诚

    1958/12/02

    副教授

    计算机系

     

    856

    张旭

    1969/03/12

    讲师

    电子工程系

     

    825

    王萍

    1972/05/05

    助教

    计算机系

     

    831

    刘冰

    1977/08/14

    助教

    电子工程系

     

     

     

     

    1、 查询Student表中的所有记录的Sname、Ssex和Class列。

    select t.sname,t.ssex,t.sclass from STUDENT t; ;   --t是别名,别名用也行,不用也行

     

     

    2、 查询教师所有的单位即不重复的Depart列。

    select distinct t.depart,t.prof from teacher t ;

    depart和prof同时重复才会去重,只有一个重复不会去掉。

     

    select distinct t.depart,t.prof from teacher t where t.tsex='男';

     先把where条件取结果集,然后再去重。

    3、 查询Student表的所有记录。

    select * from STUDENT;

     

     

    4、 查询Score表中成绩在60到80之间的所有记录。

    select t.* from SCORE t where t.degree>60 and t.degree<80;

    select * from SCORE  where  degree>60 and  degree<80;  两种都可

     

    上面的表格中 没有

     

     用select t.* from SCORE t where t.degree>60 and t.degree<105;

     

    between and  包含60和105 degree>=60 and degree<=105

    select * from SCORE  where degree between 60 and 105;

     

    5、 查询Score表中成绩为85,86或88的记录。

    select * from SCORE  where  degree='85' or  degree='86' or degree='88';

    或者select * from score where degree in (85,86,88);

     

     

    6、 查询Student表中“95031”班或性别为“女”的同学记录。

    select * from STUDENT a where a.sclass='95031';

    where后写条件表达式(逻辑判断),写好了查询效率才高。

     

     

    select * from STUDENT where sclass='95031' or ssex= '女'  ;      --或符合一个即可

     

     

    select * from STUDENT where sclass='95031' and ssex= '女' ;    --和两个同时满足

     

     

    7、 以Class降序查询Student表的所有记录。

    select t.*, t.rowid from STUDENT t order by sclass desc ;

     

     

     

    8、 以Cno升序、Degree降序查询Score表的所有记录。

    select t.*, t.rowid from Score t order by cno asc,degree desc;

    先按照cno排序,在这个基础上在排degree。空是最大的。比如同一序号3下,degree的顺序降序。

    排完序号3的降序,再排序号5的降序。不要只是单看degree列的数值,要结合cno。

     

    9、 查询“95031”班的学生人数。

    select count(sclass) from student where sclass='95031';

     

    10、 查询Score表中的最高分的学生学号和课程号。(子查询或者排序)

    select * from score where degree =(select max(degree)from score); 这样可以就是把in换成了=

    上面用的max

    排序:

    select * from (select * from score order by degree desc) where rownum=1; 

     

     

    11、 查询每门课的平均成绩。

    select cno,avg(degree) from SCORE t group by cno; 

     

     

    select cno,avg(degree),count(1),sum(degree),sum(degree)/count(1) 平均值,max(degree),min(degree) from SCORE t group by cno;

     

    12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。

     select cno,avg(degree)  from score where cno like '3%' group by cno having count(1)>=5;

     

    13、查询分数大于70,小于90的Sno列。

    select t.sno from SCORE t where degree>70 and degree<90;

     

     

    14、查询所有学生的Sname、Cno和Degree列。

     

     

     

     

    标准内连接join on

     

    15、查询所有学生的Sno、Cname和Degree列。

    select t.sno,t.cno,t.degree from score t,course c where t.cno=c.cno;
    select t.sno,t.cno,t.degree from score t join course c on t.cno=c.cno;

     

    16、查询所有学生的Sname、Cname和Degree列。

     

     

     

    17、 查询“95033”班学生的平均分。

     

     

    18、 假设使用如下命令建立了一个grade表:

    create table grade(low  number(3),upp  number (3),rank  char(1))

    insert into grade values(90,100,’A’)

    insert into grade values(80,89,’B’)

    insert into grade values(70,79,’C’)

    insert into grade values(60,69,’D’)

    insert into grade values(0,59,’E’)

    现查询所有同学的Sno、Cno和rank列。

     

     

     

    --不等值连接
    select t.sno,t.cno,t.degree,a.rank from score t join grade a on t.degree between a.low and a.upp

     

    19、  查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。

    select * from course c join score t on c.cno=t.cno where c.cno='3-105' and t.degree>76;

     

    select *from score where cno='3-105'

    and degree>(select degree from score t where sno='109' and cno='3-105');

     

     

    20、查询score中选学多门课程的同学中分数为非最高分成绩的记录。

    select * from score where sno in (select sno from score t group by t.sno having count(1)>1)
    and nvl(degree,0) ! =(select max(degree) from score);

     

     

    21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。

     

     

    22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。

     

     

     

     

     

     

    23、查询“张旭“教师任课的学生成绩。

    select s.* from teacher t, course c,score s where t.tname='张旭' and t.tno=c.tno and c.cno=s.cno;

     

    select te.tno,te.tname,c.cno,c.cname,s.sname,t.degree from course c
    join teacher te on te.tno=c.tno
    join score t on c.cno=t.cno
    join student s on s.sno=t.sno
    where te.tname='张旭';

     

     

    24、查询选修某课程的同学人数多于5人的教师姓名。

     

     

    25、查询95033班和95031班全体学生的记录。

    加个where sclass='95033' or sclass='95031'

     

     

    26、  查询存在有85分以上成绩的课程Cno.

    select distinct cno from Score where degree>85;

    用group by cno

    select cno from score where degree>85 group by cno;

     

     

    27、查询出“计算机系“教师所教课程的成绩表。

    分析:teacher tno depart tname

    course  tno cno 

    score degree cno

     

    select te.tno,te.tname,c.cno,c.cname,t.degree from teacher te
    join course c on c.tno=te.tno
    join score t on t.cno=c.cno

    where te.depart='计算机系';

     

    select * from score where cno in(select cno from course where tno in(select tno from teacher where depart ='计算机系'));

     

     

    28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。

     

    select tname,prof from teacher where prof not in
    (
    select a.prof from
    (select prof from teacher where depart ='电子工程系')a
    join
    (select prof from teacher where depart ='计算机系')b
    on a.prof=b.prof) and depart in('计算机系','电子工程系');

     

     

    select tname,prof from teacher where (depart='电子工程系'
    and prof not in(select prof from teacher where depart='计算机系'))
    or (depart='计算机系'
    and prof not in(select prof from teacher where depart='电子工程系'));

     

     

     

     

    29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。


    select cno,sno,degree from score where cno='3-105' and
    degree >(select min(degree) from score where cno='3-245')order by degree desc;

     

    select cno,sno,degree from score where cno='3-105' and
    degree > any (select min(degree) from score where cno='3-245');

    any的意思是大于里面的最小值

     

     

    30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.

    select cno,sno degree from score where cno='3-105' and

    degree>(select max(degree) from score where cno='3-245');

    select cno,sno degree from score where cno='3-105' ;

     

     

    31、 查询所有教师和同学的name、sex和birthday.

    要求其实就是合并结果集

     select  tname, tsex, tbirthday from teacher 

    union

    select  sname, ssex, sbirthday from student ;

     

     

    32、查询所有“女”教师和“女”同学的name、sex和birthday.

     

    select  tname, tsex, tbirthday  from teacher where tsex='女'

    union

    select  sname, ssex, sbirthday  from student where ssex='女';

     

    33、 查询成绩比该课程平均成绩低的同学的成绩表。

     

    select * from score s where degree <(select avg(degree) from score t where s.cno=t.cno);
    select cno,avg(degree) from score t group by cno;

     

     

    34、 查询所有任课教师的Tname和Depart.

    select tname,depart from teacher t

    where t.tno in (select tno from course c where c.cno in (select cno from score group by cno));

     

     

    35 、 查询所有未讲课的教师的Tname和Depart.

    select tname,depart from teacher t

    where t.tno not in (select tno from course c where c.cno in (select cno from score group by cno));

     

    36、查询至少有2名男生的班号。

     

     

    37、查询Student表中不姓“王”的同学记录。

     select sname from student where sname not like='王%';

     

     

    38、查询Student表中每个学生的姓名和年龄。

    select sname,sage from student;

     

    39、查询Student表中最大和最小的Sbirthday日期值。

     

    40、以班号和年龄从大到小的顺序查询Student表中的全部记录。

     

    41、查询“男”教师及其所上的课程。

    select cno,cname from course where tno in (select tno from teacher where tsex='男');

     

    42、查询最高分同学的Sno、Cno和Degree列。

     select sno,cno,degree from score where degree in (select max(degree) from score);

     

    43、查询和“李军”同性别的所有同学的Sname.

    select distinct sname from student where ssex in (select ssex from student where sname='李军');

    select sname from student where ssex in (select ssex from student where sname='李军');

     

    44、查询和“李军”同性别并同班的同学Sname.

    select sname from student where sclass in
    (select sclass from student where ssex in
    (select ssex from student where sname='李军'));

     

     

    45、查询所有选修“计算机导论”课程的“男”同学的成绩表。

      select c.cno,c.cname,t.degree from course c 

    join score t on t.cno=c.cno

    join student s on s.sno=t.sno

    where ssex='男';

     

    转载于:https://www.cnblogs.com/hanruyue/p/5951416.html

    展开全文
  • 学校学生选课系统数据库

    热门讨论 2009-12-29 14:58:53
    学校学生选课系统数据库,利用SQL SERVER MANAGEMENT STUDIO 创建数据库,名称为学生选课. 表的定义如下所示 学生(学号,姓名,性别,出生日期,院系名称,备注); 课程(课程号,课程名,先行课,学分); 选修...
  • 数据库应用课程设计报告 设计题目 学生网上选课系统 班 级 学 号 姓 名 指导教师 完成日期 成绩 摘要 本系统为学生网上选课系统其开发主要包括数据库建立和维护以及前端应用程序 的开发两个方面 经过分析 , 我使用...
  • 数据库应用课程设计汇报 设计题目 学生网上选课系统 班 级 学 号 姓 名 指导老师 完成日期 成绩 摘要 本系统为学生网上选课系统其开发关键包含数据库建立和维护和前端应用程序开发两个方面 经过分析,我使用了java...
  • --建立"商品管理数据库"数据库-- create database 商品管理数据库 on(name='商品管理数据库_m', filename='D:\商品管理系统\商品管理数据库_m.mdf', size=6mb,filegrowth=1mb,maxsize=unlimited) log on(name='...
  • 学生选课系统数据库设计

    万次阅读 多人点赞 2017-11-20 11:12:11
    计算机的数据库可以分为两类:非关系数据库和关系数据库。关系数据库中包含了多个数据表的信息,数据库含有各个不同部分的术语,如记录、域等。 SQLserver 2005就是关系数据库开发工具,数据库能汇集各种...
  • 1.创建学生选课数据库 CREATE DATABASE students; 2.在学生选课数据库中创建数据表 (1)创建学生表 CREATE TABLE studentlnfo -> ( sno CHAR(8) PRIMARY KEY NOT NULL, -> sname varchar(10) NOT NULL, ...
  • 学生选课系统数据库的设计与实现

    千次阅读 多人点赞 2016-06-23 10:38:30
    实现功能: 对于学生而言可以实现选课功能,日常学习中,我们选课的时候,需要登陆自己的学号,密码,然后进行... 学生的信息应该有 ... 教师的信息应该有 ... ...(课程号,课程名,先修课号,学分) ...学生选课 (学号,课程号,
  • 学生选课管理系统数据库建立 第六章续?数据库设计典型案例 在第?6?章里我们已经学习了有关数据库设计的基本理论和方法本章通过学生选课 管理系统数据库设计案例实际讲授数据库的设计方法加深对第七章的理解提高我
  • 学生选课系统数据库SQL语句练习题

    千次阅读 多人点赞 2018-05-24 15:35:59
    学生选课系统数据库SQL语句练习题 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的...
  • 当时带项老师直接给出了数据库,没有好好的分析数据库的合理性,现在回过头来详细分析,总结一下数据库的设计。 系统需求分析 学生可以选课。很明确。 教师可以查看自己任教的课程。 管理员可以管理课程,老师,学生...
  • 学生选课系统 数据库课程设计

    千次阅读 2014-04-01 14:18:20
    数据库课程设计报告 设计题目 学生选课系统专 业 计算机科学与技术班 级 计1101学 号 姓 名 寸利芳完成日期 2014目 录1 设计任务和要求32 需求分析32.1 功能需求32.2 性能需求32.3 数据需求32.4 运行需求33 系统设计...
  • 此系统方便学生选课和老师查看自己带课信息,学生选课系 统方案分析,开发主要包括后台SQL server2000数据库建立和维护,要求建立起数据一致性和完整性强、数据安全性好的库。
  • 选课数据库需求分析

    千次阅读 2018-07-10 22:33:36
    需求分析背景 全校性选修课开设的目的在于扩大学生的知识面、加强学生素质教育、培养复合型高级...但是,由于一般高校中的学生都比较多,因此带来了诸多如信息管理等问题,鉴于需要将学生信息、选课信息等信息数...
  • 用java+mysql写的一个学生选课系统,配好环境可以直接运行 内有:源码 + 数据库
  • 学生选课系统数据库SQL语句考试题

    千次阅读 2016-11-23 19:53:00
    一、 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL...
  • Sqlsever2012以上的课程设计,只有数据库,设计了一个简单的选课系统,含有数据库、文档、学习资料等。使用到了存储过程和触发器、试图、游标等知识点。参考
  • 数据库原理及应用课程设计 (学生选课系统) 绝对完整
  • 特殊时期,不能外出,整理一下本科期间做过的课程设计,学完数据库,设计一个学生选课管理信息系统,老师给的要求如下: 系统功能基本要求 教师信息,包括教师编号、教师姓名、性别、年龄、学历、职称、毕业院校,...
  • 数据库设计之学生选课系统

    千次阅读 2013-06-15 22:32:43
    一、概要设计 1.1 目的和意义  随着无纸化办公的普遍实现,信息的自动处理以及网络式的信息交互方式已经被人们... 学生选课系统作为一种现代化的教学技术,越来越受到人们的重视,是一个学校不可或缺的部分, 学生

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,091
精华内容 2,836
关键字:

建立学生选课数据库