create table sc( sno varchar2(10), cno varchar2(10), score number(4,2), primary key (sno,cno) );
3) 为各表输入数据。代码如下: /*******初始化学生表的数据******/
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;
4) 查询每门课程被选修的学生数。代码如下: SELECT cno,count(sno) FROM sc GROUP BY cno Order by cno;
5) 查询出只选修了一门课程的全部学生的学号和姓名。代码如下: SELECT sc.sno,student.sname FROM sc,student Where sc.sno= student.sno
GROUP BY sc.sno,student.sname HAVING count(cno)=1 ; 6) 查询男生、女生人数。代码如下: SELECT ssex,COUNT(SSEX) FROM STUDENT GROUP BY SSEX;
7) 查询姓“张”的学生名单。代码如下: Select sname From student
Where sname like ’张%’;
8) 查询同名同姓学生名单,并统计同名人数。代码如下:
select sname,count(*) from student
group by sname having count(*)>1;
9) 查询1981 年出生的学生名单。代码如下:
Select sname From student
where to_char(sysdate,'yyyy')-sage =1981;
10) 查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,
按课程号降序排列。代码如下: Select cno,cname, (select Avg(Score) From sc
Where cno=course.cno) 平均成绩 From course
Order by 平均成绩,cno Desc;
11) 查询平均成绩大于85 的所有学生的学号、姓名和平均成绩。代码如下:
select st.sno,st.sname,avg(score) from student st left join sc on sc.sno=st.sno
group by st.sno,st.sname having avg(score)>85;
12) 统计每门课程的学生选修人数(超过10 人的课程才统计)。要求输出课
程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。代码如下:
Select distinct cno, Count sno From sc
Group by cno having count(sno)>10 Order by 2,cno desc;
13) 查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最
低分。代码如下: Select cno,
(Select Max(Score) From sc Where sc.cno= Course.cno ) 最高分, (Select Min(Score) From sc Where sc.cno=course.cno ) 最低分 From Course;
14) 按各科平均成绩从低到高和及格率的百分数从高到低顺序。代码如下:
select cno,avg(score),sum(case when score>=60 then 1 else 0 end)/count(*)*100||'%'as 及格率 from sc
group by cno
order by abg(score),及格率 desc; 15) 统计各科分数段人数,请以下列格式显示:
课程ID,课程名称, [100-85],[85-70],[70-60],[ <60]。
代码如下:
Select sc.cno,c.cname,
sum(case when score between 85 and 100 then 1 else 0 end) AS \
sum(case when score between 70 and 85 then 1 else 0 end) AS \
sum(case when score between 60 and 70 then 1 else 0 end) AS \
sum(case when score <60then 1 else 0 end) AS \ from sc,course c where sc.cno=c.cno
group by sc.cno,c.cname;
小结:
通过这次上机实验,我有以下收获:
对表的创建有了更深层次的了解,知道如何创建表,对表的查询
等操作更加熟悉,另外,Oracle的相关查询操作和SQL语句大同小异,很容易理解,对格式的要求更加精简。
但是还上机操作过程中还存在以下几个方面的不足:
语句调试过程中出现了很多类似的错误,select语句没写完就接了
下个语句,符号经常中英文混淆,基本函数不了解,比如调用系统时间年份的sysdate等,以后要加强对细节的注意,细节决定成败。
指导老师评议:
成绩: 指导老师签名:
年 月 日
实 验 报 告
实验名称:PL/SQL编程 实验课时:4课时 实验地点:
实验时间: 年 月 日 星期 第 周 实验目的及要求:
1) 熟练掌握PL/SQL程序设计的基本知识。
2) 熟练掌握PL/SQL中控制结构的使用。具体包括选择结构语句(IF语句和
CASE语句),循环结构(四种循环结构)。 3) 熟练使用PL/SQL中系统函数。 4) 掌握PL/SQL中异常处理语句的使用
5) 掌握PL/SQL中SELECT语句和DML语句的综合运用。
实验环境:
1) 硬件设备:PC机一台 2) 操作系统:Windows XP 3) 应用工具:Oracle 10g
实验内容:(算法、程序、步骤和方法)
1) 2)
以SYS用户登录系统。代码如下:
Sqlplus sys/123 as sysdba
创建用户,指定密码、表空间。用户名命名以本人姓名的缩写+‘_’+学号最后两位。代码如下: Create user ty_06 identified by 123
default tablespace users temporary tablespace temp;
为该用户授予sysdba、connect、resource权限。代码如下:
Grant sysdba to ty_06; Grant connect to ty_06; Grant resource to ty_06;
以自己的用户身份登录。代码如下:
Connect ty_06/123 as sysdba
在本用户方案中创建表departments, 并为该表输入若干数据。
3)
4)
5)