资源描述
数据库原理及应用-Oracle实验报告姓名: 李奕 学号: 12600120 班级: 计非121班 实验一: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 salALL(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 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 salall(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 salany (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.deptnob.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 commsal*0.6;21、 找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料. 22、找出不收取佣金或收取的佣金低于100的员工. select ename from emp where comm is null or comm100;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、学会对角色的管理。
展开阅读全文