《Oracle数据库》实验报告三

广东金融学院实验报告

课程名称:Oracle数据库

 

第二篇:Oracle数据库实验报告1—2

《数据库原理及应用

-Oracle》

姓名: 李奕 学号: 12600120 班级:

实验一:Oracle平台下基本SQL语言的

应用

1、列出至少有一个员工的全部部门及人数。

SQL> select deptno ,count(ename) from emp group by deptno having count(ename)>1;

2、列出薪金比“SMITH”多的全部员工。

SQL> select ename from emp where sal>ALL(select sal from emp where ename='SMITH');

3、列出全部员工的姓名及其直接上级的姓名

SQL> SELECT 员工.ENAME,上级.ENAME FROM EMP 员工,emp 上级 WHERE 员工.MGR=上级.EMPNO;

4、列出受雇日期早于其直接上级的全部员工。

SQL> SELECT e.ename FROM emp e,emp m WHERE e.mgr = m.empno AND e.hiredate < m.hiredate;

5、列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。 select d.dname,ename,empno,job,hiredate,sal from emp e right join dept d on e.deptno=d.deptno;

6、列出全部 “CLERK”(做事员)的姓名及其部门名称。

select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno and e.job='CLERK';

7、列出最低薪金大于1500的种种工作 。

SQL> select job from emp group by job having min(sal)>1500;

8、列出在部分门“SALES”(贩卖部)做事的员工的姓名,假定不知道贩卖部的部门编号。

select ename from emp where deptno=(select deptno from dept where dname='SALES');

SELECT e.ename FROM emp e,dept d WHERE e.deptno = d.deptno AND d.dname='SALES';

SELECT e.ename FROM emp e JOIN dept d ON e.deptno = d.deptno AND d.dname='SALES';

9、列出薪金高于公司平均薪金的全部员工。

select ename from emp where sal>all(select avg(sal) from emp);

10、列出与“SCOTT”从事相同工作的全部员工。

select ename,empno from emp where job=(select job from emp where ename='SCOTT');

11、列出薪金是部门30中员工的薪金的全部员工的姓名和薪金。 select ename,sal from emp where deptno=30;

12、列出薪金高于在部门30做事的全部员工的薪金的员工姓名和薪金。

select ename,sal from emp where sal>any (select sal from emp where deptno=30);

13、列出在每个部门做事的员工数量 、均匀收入、平均做事限期。

select count(ename),avg(sal),AVG((SYSDATE-hiredate)/365) from emp group by(deptno);

14、列出全部员工的姓名、部门名称和收入。

select e.ename,d.dname,e.sal from emp e,dept d where e.deptno=d.deptno;

15、列出从事同一种工作但属于不同部门的员工。

select a.ename, b.ename, a.job, b.job, a.deptno, b.deptno from emp a,emp b where a.job=b.job and a.deptno<>b.deptno;

16、列出全部部门的具体信息和部门人数。

select dept.*,(select count(*) from emp where dept.deptno = emp.deptno) as pop from dept;

17、列出种种工作的最低收入。

select job,min(sal) from emp group by job ;

18、列出各个部门的MANAGER(jing理)的最低薪金。

select deptno,min(sal) from emp where job='MANAGER' group by deptno; 19、列出全部员工的年收入 ,按年薪从低到高排序。

select ename,12*(sal+nvl(comm,0))as year_sal from emp order by year_sal;

20、找出佣金高于薪金的60%的员工.

select ename from emp where comm>sal*0.6;

21、找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料.

22、找出不收取佣金或收取的佣金低于100的员工.

select ename from emp where comm is null or comm<100;

23、 找出各月倒数第3天受雇的所有员工.

select ename from emp where hiredate=last_day(hiredate)-3;

24、 显示正好为5个字符的员工的姓名.

select ename from emp where length(ename)=5;

25、 显示不带有"R"的员工的姓名.

select ename from emp where ename not like '%R%';

26、 显示所有员工姓名的前三个字符.

select substr(ename,1,3)from emp;

27、显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金

排序.

Select ename,job,sal from emp order by job desc,sal asc;

28、 对于每个员工,显示其加入公司的天数.

Select ename,sysdate-hiredate from emp;

29、 显示姓名字段的任何位置包含"A"的所有员工的姓名.

select ename from emp where ename like'%A%';

30、 查询和“李建国”是同一部门的职工姓名。(使用子查询)

select ename from emp where deptno=(select deptno from emp where ename='李建国');

31、查询“Research”和”Manager”部门的职工姓名(UNION)

(select ename from emp WHERE JOB='RESEARCH')union(select ename from emp WHERE JOB='MANAGER');

一、 疑难点分析

1、分组查询是通过加入Group by 字句实现的。

2、聚合函数的使用规范。

3、连接查询中的相等连接、自身连接、不等连接、左外连接、右外连接、全外连接,连接查询的实际使用,清楚各个连接语句的规则。

4、子查询语句,语句之间的嵌套。

二、 实验体会

1、通过学习本次实验,掌握了Oracle数据库经常用且必须掌握的关系数据库标准语言SQL,select/create/update/alter/drop/insert/delete等基本语句的用法。

2、学会了创建表格、创建视图以及对表格的修改及其他一些对表格的操作语法。

3、重点学习了数据库中使用频率最高的select语句。可以从表中获取目的数据。

实验二:Oracle基本操作与用户权限基

本管理

上机题1:连接命令

connect system/sys;

disconnect system/sys;

show user;

exit;

上机题2:创建用户

connect system/sys;

create user zhao identified by zhao;

grant create session to zhao;

grant unlimited tablespace to zhao;

grant create table to zhao;

connect zhao/zhao;

create table Student

(id number(10),

name varchar2(20),

age number(4));

select * from user_sys_privs;

上机题3:限制用户和密码修改

alter user zhao account lock;

alter user zhao account unlock;

alter user zhao password expire;

drop user zhao;

create user qian identified by qian;

alter user qian identified by "qianqian";

上机题4:对象权利的管理

grant select on emp to qian;

connect qian/qianqian;

select * from scott.emp;

connect system/sys;

grant delete,update on emp to qian;

connect qian/qianqian;

update scott.emp set sal=2000 where ename='ALLEN';

上机题5:权限的传递

connect system/sys;

create user sun identified by sunsun;

grant create any table to sun with admin option;

grant create session to sun;

grant unlimited tablespace to sun;

connect sun/sunsun;

create table student

( id number(10),

name varchar2(20));

select * from user_tab_privs;

create user li identified by li;新建一个用户“李”。

grant create session to li;

grant unlimited tablespace to li;给这个用户登录和不受限制的权利。 connect scott/tiger;连接scott用户。

grant select on emp to sun with grant option;把对emp表查询的权限给sun并给他传递权限的权限。

connect sun/sunsun;连接sun。

grant select on scott.emp to li;把查询权限给li。

connect li/li;连接li。

select * from scott.emp;查询scott下的emp表。

实验证明:查询成功,说明权限的传递成功。

上机题6:角色的管理

connect system/sys;连接到system.

create role mydear;新建一个角色。

grant create session to mydear;给角色登录的权限。

grant create table to mydear;给角色建表的权限。

create user nuer identified by nuer;新建一个nuer用户。 grant mydear to nuer;将mydear角色的两个权限给nuer.

select * from role_sys_privs where role='MYDEAR';查询mydear

角色的系统权限。

select * from role_sys_privs;查询nuer的系统权限。

一、疑难点分析

1、查询用户的各类权限。

2、角色的创建及权限的给予和传递。

3、对Oracle提供的多种系统权限理解使用。

4、当用户数量和角色足够多时,对赋予的各个角色权利易混淆。

二、 实验体会

1、学会了各个角色之间权限的分配问题。

2、创建新用户,可以修改用户相关信息。

3、权限的给予和传递,能让角色或用户实现不同的功能。

4、学会对角色的管理。

相关推荐