网上太多这样的实验题目,但是都木有答案,弄的我只能自己慢慢查找资料慢慢敲,现在贴出来供大家学习参考。
==============================================================================================
华丽丽的分割线。。。
==============================================================================================
实验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 #",ename "Employee",job "Job",hiredate "Hire Date" FROM 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 "Employee and Title" From emp;
6. 创建一个查询,用逗号将表中所有字段的信息连接作为一个整体输出,输出的列标题为THE_OUTPUT。
答:SELECT empno||ename||job||mgr||hiredate||sal||comm||deptno "THE_OUTPUT" FROM emp;
实验2 使用WHERE和ORDER BY子句
实验要求
(1) 掌握WHERE子句的用法。
(2) 掌握ORDER BY子句的用法。
实验条件 自我实践
实验时间 大约60分钟
1.练习1FOLLOW ME
l 时间20分钟
l 实验步骤
(1) 观看第2章教学视频。
(2) 实践视频中的实例。
2.练习2
l 时间40分钟
l 实验步骤
(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<comm;
思考练习题
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;
3. 显示在10号和30号部门工作的雇员的姓名及其部门编号,并以字母顺序排列。
答: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);
9. 显示工作为Clerk或Analyst并且工资不等于$1000、$3000、$5000的雇员的姓名、工资及工资。
答:SELECT ename,job,sal FROM emp WHERE LOWER(job) IN ('clerk','analyst') AND sal NOT IN (1000,3000,5000);
实验3 在SELECT语句中使用单行函数
实验要求
掌握常用的单行函数的用法。
实验条件 自我实践
实验时间 大约60分钟
1.练习1FOLLOW ME
l 时间20分钟
l 实验步骤
(1) 观看第3章教学视频。
(2) 实践视频中的实例。
2.练习2
l 时间40分钟
l 实验步骤
(1) 显示雇员的编号、姓名、工资以及工资增长15%后的整数值(以New Salary作为列标题),将该查询保存为脚本文件p3q1.sql,并执行该脚本文件。
答:SELECT empno,ename,sal,sal*1.15 "New Salary" FROM emp;
(2) 修改p3q1.sql,增加一个列Increase显示new salary和salary的差值,另存为p3q2.sql,并返回查询结果。
答:SELECT empno,ename,sal,sal*1.15 "New Salary",sal*0.15 "Increase" FROM emp;
(3) 创建一个脚本文件p3q3.sql,显示雇员姓名并以*为指示符代表工资数额(列标题为EMPLOYEE_AND_THEIR_SALARIES),一个指示符代表一百美元,并以工资数额降序排列。
答:SELECT ename||RPAD('*',TRUNC(sal/100),'*')
AS "EMPLOYEE_AND_THEIR_SALARIES" FROM emp;
思考练习题
1. 编写一个显示当期日期的查询,列标题为Date。
答:SELECT sysdate "Date" FROM dual;
2. 显示雇员姓名、受雇日期及工资复审日期(复审日期为受雇后6个月后的第一个星期一),复审日期以列标题REVIEW显示,并且显示的日期形式为“Sunday,the Seventh of September,1981.”。
答:SELECT ename,hiredate,
TO_CHAR(NEXT_DAY
(ADD_MONTHS(hiredate,6),'星期一') ,
'DAY","DDSPTH" of "MONTH","YYYY','nls_date_language=american')
AS "REVIEW" FROM emp;
3. 显示每个雇员的姓名并计算出从受雇日期起到目前一共工作了多少个月,以列标题MONTHS_WORKED显示月数(四舍五入),输出以月数升序排列。
答:SELECT ename,ROUND(MONTHS_BETWEEN(sysdate,hiredate) )
"MONTHS_WORKED" FROM emp ORDER BY "MONTHS_WORKED";
4. 编写一个以下面的形式输出的查询:
<employee name> earns <salary> monthly but wants <3 times salary>.
列标题为Dream Salaries。
答:SELECT ename ||' earns '||sal||' monthly but wants '||sal*3 AS "Dream Salaries"
FROM emp;
5. 创建一个查询显示每个雇员的姓名及工资(列标题为SALARY),工资的显示模式为:占15个字符的宽度,对于不够位数的以$填充。
答:SELECT ename,LPAD(sal,15,'$') "SALARY" FROM emp;
6. 编写一个查询显示名字以J、A、M开头的雇员的姓名及姓名所占的字符数,姓名的显示格式为第一个字母大写其他字母小写,为每个列设置合适的列标题。
答:SELECT INITCAP(ename),LENGTH(ename) FROM emp
WHERE SUBSTR(ename,1,1) IN('J','A','M');
7. 显示雇员的姓名、受雇日期及受雇当天是星期几(列标题为DAY),并以DAY升序排列。
答:SELECT ename,hiredate,TO_CHAR(hiredate,'DAY') "DAY" FROM emp ORDER BY
TO_CHAR(hiredate,'D');
8. 创建一个查询显示雇员姓名及其奖金(列标题为COMM),如果该雇员不能获得奖金则以“No Commission.”显示。
答:
答:SELECT ename, CASE WHEN comm>0 THEN TO_CHAR(comm,'9999999')
ELSE 'No Commission' END "COMM" FROM emp;
转载来源http://blog.sina.com.cn/s/blog_7766de3f010116ro.html