oracle实验以及答案 下载本文

内容发布更新时间 : 2024/5/24 1:53:43星期一 下面是文章的全部内容请认真阅读。

实验1 SQL*Plus的使用和基本SELECT语句

实验目的

通过该实验使学员掌握简单查询语句的基本使用方法以及别名的指定方法,能够创建和执行SQL脚本。 实验要求

(1) 掌握SQL*Plus的基本使用 (2) 掌握SELECT语句的简单用法。 实验步骤

(1) 登录到SQL*Plus,初始用户名为:SCOTT,口令为TIGER。

答:打开sql plus,输入用户名和密码登陆;也可以从dos窗口输入命令sqlplus Scott/tiger

连接数据库

(2) 分别显示EMP、DETP、SALGRADE表结构,并察看表中的数据。

答:DESC emp;

DESC dept; DESC salgrade;

(3) 创建一个查询显示每个雇员的姓名、工作、受雇日期及雇员编号,并且要将雇员编

号作为第一列显示。最后将该SQL语句保存成文件p1q1.sql,并执行该脚本文件。 答:SELECT empno,ename,job,hiredate FROM emp;

(4) 将脚本文件p1q1.sql调取到SQL缓冲区,并将列标题设置为Emp #,Employee,

Job及Hire Date,将该SQL语句保存成文件p1q2.sql,最后返回查询结果。 答:SELECT empno \

emp;

思考练习题

1.SQL*Plus命令是用于访问数据库的吗?

答:可以访问数据库。

2.下面的SELECT语句能成功执行吗?

SQL>SELECT

ename,job,sal Salary

2 FROM emp; 答:可以成功执行。

3.下面的语句有3处错误,请纠正它们。

SQL>SELECT

empno,ename

2 Salary x 12 ANNUAL SALARY 3 FROM emp;

答:A.表中没有Salary项,改为sal;

B.ename后缺少逗号。

C.别名中含有大写字母和空格,需加双引号,改为“ANNUAL SALARY”

4.创建一个查询从EMP表中检索出不重复的工作名称。

答:SELECT DISTINCT job FROM emp;

5.用一个逗号和一个空格将姓名和工作连接后作为一个整体输出,显示的列标题为

Employee and Title。

答:SELECT ename||', '||job \

6.创建一个查询,用逗号将表中所有字段的信息连接作为一个整体输出,输出的列标题为

THE_OUTPUT。

答:SELECT empno||ename||job||mgr||hiredate||sal||comm||deptno \

实验2

实验要求

使用WHERE和ORDER BY子句

(1) 掌握WHERE子句的用法。 (2) 掌握ORDER BY子句的用法。

实验条件 实验时间 ? 时间

自我实践 大约60分钟 20分钟

1.练习1 FOLLOW ME ? 实验步骤

(1) 观看第2章教学视频。 (2) 实践视频中的实例。 2.练习2 ? 时间

40分钟

? 实验步骤

(1) 创建一个查询显示工资大于2850美元的雇员的姓名及工资。将该查询保存成脚本文

件p2q1.sql,并执行该文件。

答:SELECT ename,sal FROM emp WHERE sal>2850;

(2) 修改脚本文件p2q1.sql,显示工资不在1500到2850美元之间的雇员的姓名及工资,

并以q2q2.sql文件重新保存该查询。

答:SELECT ename,sal FROM emp WHERE sal NOT BETWEEN 1500 AND 2850;

(3) 修改文件p2q2.sql,显示在10和30部门工作并且工资大于1500美元的雇员的姓名

和工资,列标题显示为Employee和Monthly Salary,最后以p2p3.sql重新保存该文件,返回查询结果。

答:SELECT ename,sal FROM emp WHERE sal>1500 AND deptno IN(10,30);

(4) 修改脚本文件p2q3.sql显示奖金比工资多10%以上的雇员的姓名、工资及奖金。将

该查询保存成p2q4.sql脚本文件,并返回查询结果。 答:SELECT ename,sal,comm FROM emp WHERE sal*1.1

思考练习题

1.创建一个查询显示雇员编号为7566的雇员的姓名和部门编号。

答:SELECT ename,deptno FROM emp WHERE empno=7566;

2.显示受雇时间在February 20,1981和May 1,1981之间的雇员的姓名、工资、及受雇

时间,并以受雇时间升序排列。

答:SELECT ename,sal,hiredate FROM emp WHERE hiredate BETWEEN '20-2月-1981'

AND '1-3月-1981' ORDER BY hiredate DESC;

答:SELECT ename,deptno FROM emp WHERE deptno IN (10,30) ORDER BY ename; 4.显示所有受雇于1982年的雇员的姓名和受雇时间。

答:SELECT ename,hiredate FROM emp WHERE TO_CHAR(hiredate,'YYYY')=1982; 5.显示没有上级管理员的雇员的姓名及其工作。

答:SELECT ename,job FROM emp WHERE mgr IS NULL;

6.显示能挣得奖金的雇员的姓名、工资、奖金,并以工资和奖金降序排列。

答:SELECT ename,sal,comm FROM emp WHERE comm>0 ORDER BY sal DESC,

comm DESC;

7.显示姓名中第三个字母为A的雇员的姓名。

答:SELECT ename FROM emp WHERE ename LIKE '__A%';

8.显示姓名中两次出现字母L并且在30部门工作或者其管理员编号是7782的雇员的姓

名。

答:SELECT ename FROM emp WHERE ename LIKE '%L%L%' AND (deptno=30 OR

mgr=7782); 资及工资。

答:SELECT ename,job,sal FROM emp WHERE LOWER(job) IN ('clerk','analyst') AND

sal NOT IN (1000,3000,5000);

9.显示工作为Clerk或Analyst并且工资不等于$1000、$3000、$5000的雇员的姓名、工3.显示在10号和30号部门工作的雇员的姓名及其部门编号,并以字母顺序排列。

实验3

实验要求

在SELECT语句中使用单行函数

掌握常用的单行函数的用法。 实验条件 实验时间 ? 时间

自我实践 大约60分钟 20分钟

1.练习1 FOLLOW ME ? 实验步骤

(1) 观看第3章教学视频。 (2) 实践视频中的实例。 2.练习2

? 时间 40分钟

? 实验步骤

(1) 显示雇员的编号、姓名、工资以及工资增长15%后的整数值(以New Salary作为

列标题),将该查询保存为脚本文件p3q1.sql,并执行该脚本文件。 答:SELECT empno,ename,sal,sal*1.15 \

(2) 修改p3q1.sql,增加一个列Increase显示new salary和salary的差值,另存为

p3q2.sql,并返回查询结果。

答:SELECT empno,ename,sal,sal*1.15 \(3) 创建一个脚本文件p3q3.sql,显示雇员姓名并以*为指示符代表工资数额(列标题为

EMPLOYEE_AND_THEIR_SALARIES),一个指示符代表一百美元,并以工资数额降序排列。

答:SELECT ename||RPAD('*',TRUNC(sal/100),'*')

AS \

思考练习题

1.编写一个显示当期日期的查询,列标题为Date。

答:SELECT sysdate \

2.显示雇员姓名、受雇日期及工资复审日期(复审日期为受雇后6个月后的第一个星期

一),复审日期以列标题REVIEW显示,并且显示的日期形式为“Sunday,the Seventh of September,1981.”。 答:SELECT ename,hiredate,

TO_CHAR(NEXT_DAY

(ADD_MONTHS(hiredate,6),'星期一') ,

'DAY\ AS \

3.显示每个雇员的姓名并计算出从受雇日期起到目前一共工作了多少个月,以列标题

MONTHS_WORKED显示月数(四舍五入),输出以月数升序排列。 答:SELECT ename,ROUND(MONTHS_BETWEEN(sysdate,hiredate) ) \4.编写一个以下面的形式输出的查询:

earns monthly but wants <3 times salary>. 列标题为Dream Salaries。

答:SELECT ename ||' earns '||sal||' monthly but wants '||sal*3 AS \

FROM emp;

5.创建一个查询显示每个雇员的姓名及工资(列标题为SALARY),工资的显示模式为:

占15个字符的宽度,对于不够位数的以$填充。

答:SELECT ename,LPAD(sal,15,'$') \

6.编写一个查询显示名字以J、A、M开头的雇员的姓名及姓名所占的字符数,姓名的显