1.出比所在部门平均工资高的员工信息
2.出既学课程号C1又学课程号C2的女同学的姓名
3.出既不学课程号C1又不学课程号C2的学生姓名
4.出有一们课程成绩为95分的女同学的姓名
5.出选课数量大于3门的女同学的姓名
6.出平均成绩大于80分的男同学的姓名
7.出冯老师所教的每一门课程的平均成绩
8.出男同学每一个年龄组的人数,要求按人数升序输出人数超过20人的年龄组
9.出每门课程成绩都大于90分的学生姓名
10.出比所有女同学年龄要大的男同学的姓名
11.出没选C2课程的女同学的姓名
12.出所有课程成绩都及格的学生姓名
13.出选修课所有课程的学生姓名
14.出平均成绩最高的学生姓名
Oracle11G综合练习
1、创建数据库和数据表
利用OEM(Oracle Enterprise Manager)创建Study数据库,并在其中建立6张表(第三章中已有介绍)
(1)学生基本信息表student,结构如下:
字段名 | 字段类型 | 约束条件 | 字段含义说明 |
sno | number(8) | Primary key | 学号 |
sname | Varchar2(8) | Not null | 姓名 |
ssex | Varchar2(2) | ‘男’或’女’ | 性别 |
sbirthday | date | 出生日期 | |
classno | varchar(6) | Foreign key | 班级号 |
(2)班级信息表class,结构如下:
字段名 | 字段类型 | 约束条件 | 字段含义说明 |
classno | varchar(6) | Primary key | 班级号 |
classname | Varchar(20) | Not null | 班级名称 |
classspecial | Varchar2(20) | 所属专业 | |
Classdept | Varchar2(20) | 所属系别 | |
(3)课程信息表course,结构如下:
字段名 | 字段类型 | 约束条件 | 字段含义说明 |
cno | Number(6) | Primary key | 课程号 |
cname | Varchar2(30) | Not null | 课程名称 |
score | Number(6,2) | 学分 | |
(4)学修课程信息表SC,结构如下:
字段名 | 字段类型 | 约束条件 | 字段含义说明 |
sno | Number(8) | Foreign key | 学号 |
cno | Number(6) | Foreign key | 课程号 |
grade | Number(6,1) | 成绩 | |
(5)教师信息表teacher,结构如下:
字段名 | 字段类型 | 约束条件 | 字段含义说明 |
tno | Number(6) | Primary key | 教师号 |
tname | Varchar2(8) | Not null | 教师姓名 |
tsex | Varchar2(2) | ‘男’或’女’ | 性别 |
tbirthday | date | 出生日期 | |
ttitle | Varchar2(10) | 职称 | |
(6)教师任课情况表teaching,结构如下:
字段名 | 字段类型 | 约束条件 | 字段含义说明 |
tno | Number(6) | Foreign key | 教师号 |
cno | Number(6) | Foreign key | 课程号 |
2、利用OEM,向以上建立的6张数据表中分别输入以下内容。
(1)学生基本信息表student表的内容如下:
sno | sname | ssex | sbirthday | classno |
李在 | 男 | 1991-10-1 | Rj0801 | |
葛畅 | 男 | 1990-8-8 | Rj0801 | |
刘晶 | 女 | 1990-5-22 | Rj0801 | |
杨敏 | 女 | 1989-1-8 | Rj0801 | |
胡贤斌 | 男 | 1990-10-8 | Rj0801 | |
赵鸿泽 | 男 | 1989-6-6 | Rj0802 | |
王威 | 男 | 1990-6-10 | Rj0802 | |
赵玮 | 女 | 1990-8-21 | Rj0803 | |
王娜娜 | 女 | 1991-9-23 | Rj0803 | |
秦键 | 男 | 1989-3-1 | Rj0803 | |
田邦仪 | 女 | 1990-2-26 | Rj0804 | |
赵心砚 | 男 | 1991-4-25 | Rj0805 | |
杨青 | 女 | 1989-11-15 | Rj0805 | |
杨玲玲 | 女 | 1990-12-12 | Rj0806 | |
(2)班级信息表class的内容如下:
classno | classname | classspecial | classdept |
Rj0801 | 软件0801 | 软件工程 | 软件开发 |
Rj0802 oracle11g 创建数据库 | 软件0802 | 软件工程 | 软件开发 |
Rj0803 | 软件0803 | 软件工程 | 数字媒体 |
Rj0804 | 软件0804 | 软件工程 | 软件开发 |
Rj0805 | 软件0805 | 软件工程 | 数字媒体 |
Rj0806 | 软件0806 | 软件工程 | 软件开发 |
(3)课程信息表course的内容如下:
cno | cname | score |
计算机基础 | 4 | |
程序设计语言 | 4 | |
数据结构 | 4 | |
数据库原理与应用 | 4 | |
计算机网络 | 3 | |
微机原理与应用 | 4 | |
(4)选修课程情况表sc的内容如下:
sno | cno | grade |
88 | ||
91 | ||
78 | ||
95 | ||
67 | ||
58 | ||
89 | ||
71 | ||
(5)教师信息表teacher的内容如下:
tno | tname | tsex | tbirthday | ttitle |
李英 | 女 | 1975-11-3 | 讲师 | |
王大山 | 男 | 1969-3-2 | 副教授 | |
张朋 | 男 | 1970-2-13 | 讲师 | |
陈为军 | 男 | 1985-8-14 | 助教 | |
宋浩然 | 男 | 1976-4-23 | 讲师 | |
许红霞 | 女 | 1966-2-12 | 副教授 | |
徐永军 | 男 | 1962-1-24 | 教授 | |
李桂菁 | 女 | 1960-12-15 | 教授 | |
王一凡 | 女 | 1974-12-8 | 讲师 | |
田峰 | 男 | 1988-1-18 | 助教 | |
(6)教师任课情况表teaching的内容如下:
cno | tno |
3、利用OEM中的逻辑备份将上述数据表和数据备份到U盘,以备后面使用。
4、简单的数据查询
(1)查询所有同学的所有基本信息。
(2)查询所有同学的学号和姓名
(3)查询所有男同学的学号、姓名、出生日期
(4)查询所有在“1990-01-01”之前出生的女同学的学号、姓名、性别、出生日期
(5)查询所有姓“李”的男同学的学号、姓名、性别、出生日期
(6)查询所有姓名中含有“一”字的同学的学号、姓名
(7)查询所有职称不是“讲师”的教师的教师号、姓名、职称
(8)查询虽然选修了课程,但未参加考试的所有同学的学号
(9)查询所有考试不及格的同学的学号、成绩,并按成绩降序排列
(10)查询课程号、、的所有课程号、课程名称(用IN运算符)
(11)查询在1970年出生的教师的教师号、姓名、出生日期
(12)查询各个课程号及相应的选课人数
(13)查询教授2门课以上的教师号
(14)查询选修了课程的学生平均分数、最低分数和最高分数
(15)查询1960年以后出生的,职称为讲师的教师的姓名、出生日期,并按出生日期升序排列。
5、复杂数据查询
(1)查询所有同学的选课及成绩情况,显示学号、姓名、课程号、成绩
(2)查询所有同学的选课及成绩情况,显示学生的姓名、课程名称、成绩,并将查询结果存放到一个新的数据表new_table中
(3)查询“软件0801”班的同学的选课及成绩情况,显示学号、姓名、课程号、课程名称、成绩
(4)查询所有同学的学分情况(假设课程成绩>=60时可获得该门课程的学分),显示学号、姓名、总学分(用JOIN)
(5)查询所有同学的平均成绩及选课门数,显示学号、姓名、平均成绩、选课门数
(6)查询所有选修了课程但未参加考试的所有同学及相应的课程,显示学号、姓名课程号、课程名称
(7)查询所有选修了课程但考试不及格的所有同学及相应的课程,显示学号、姓名、课程号、课程名称、成绩
(8)查询选修了课程名为“程序设计语言”的所有同学及成绩情况,显示学生姓名、课程成绩(用ANY运算符)
(9)查询“软件开发系”的所有同学及成绩情况,显示学号、姓名、班级名称、课程号、课程名称、成绩
(10)查询所有教师的任课情况,显示教师姓名、课程名称;
(11)查询所有教师的任课门数,显示教师姓名、任课门数
(12)查询和“葛畅”在同一班级的同学的姓名(使用子查询)
(13)查询没有选修“计算机基础”课程的学生姓名(用NOT EXISTS)
(14)查询主讲“数据库原理与应用”和主讲“数据结构”的教师姓名(用UNION)
(15)查询讲授了所有课程的教师的姓名
6、在OEM下用PL/SQL语句定义存储过程
(1)创建一个能向学生表student中插入一条记录的存储过程insert_student,该过程需要5个参数,分别用来传递学号、姓名、性别、出生日期、班级号。
(2)写出调用存储过程insert_student的SQL语句,向数据表student中插入一个新同学,并提供相应的实参值。
(3)创建一个向课程表course中插入一门新课程的存储过程insert_course,该存储过程需要三个参数,分别用来传递课程号、课程名、学分,但允许参数“学分”的默认值为4,即当调用存储过程insert_course时,未给第三个参数“学分”提供实参值时,存储过程将按默认值4进行运算。
(4)调用存储过程insert_course,向课程表course中插入一门新课程。分两种情况(给出第三个参数和未给出第三个参数)写出相应的SQL命令,并比较结果。
(5)创建一个名称为query_student的存储过程,该存储过程的功能是从数据表student中根据学号查询某一同学的姓名、性别、出生日期、班级号。
(6)调用存储过程query_student,查询学号为“”的姓名、性别、出生日期、班级号,并写
出完成此功能的SQL命令。
7、在OEM下用PL/SQL语句定义触发器
(1)创建一个当向学生表student中插入一新同学时能自动列出全部同学信息的触发器display_trigger。
(2)执行存储过程insert_student,向学生表中插入一个新同学,看触发器display_trigger是否被触发。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论