一、
1、登陆scott 用户基于 EMP 表和 DEPT 表创建视图 EMPDEPTVIEW,要求关联两张表,包括部门的名称和部门所在地 员工的部门编号和员工的名字;
2、登录scott用户,针对EMPDEPTVIEW 创建同义词epv;
3、通过同义词,查询到部门20的所有员工信息。
二、
创建序列,从50开始,要求运用序列给部门表中添加部门编号为50,名称为BUSINES地点为CHINA; 添加部门编号为60, 名称为PMO,地点为CHINA;
三
1.创建表emp_bak,复制emp表结构以及所有的数据.
2.给表emp_bak增加主键约束。
3.在emp_bak表的ename字段上创建索引
4.在emp_bak表的deptno和job的组合上创建索引
/*一、
1、登陆scott?用户基于?EMP?表和?DEPT?表创建视图?EMPDEPTVIEW,要求关联两张表,包括部门的名称和部门所在地?员工的部门编号和员工的名字;?
*/
SQL> grant create any view to scott;
授权成功。
SQL> conn scott/321321
已连接。
SQL> create or replace view empdeptview as
2 select ename,emp.deptno,dname,loc
3 from emp,dept
4 where emp.deptno=dept.deptno
5 with read only;
视图已创建。
SQL> select * from empdeptview;
ENAME DEPTNO DNAME LOC
---------- ---------- -------------- -------------
CLARK 10 ACCOUNTING NEW YORK
KING 10 ACCOUNTING NEW YORK
MILLER 10 ACCOUNTING NEW YORK
JONES 20 RESEARCH DALLAS
FORD 20 RESEARCH DALLAS
ADAMS 20 RESEARCH DALLAS
SMITH 20 RESEARCH DALLAS
SCOTT 20 RESEARCH DALLAS
WARD 30 SALES CHICAGO
TURNER 30 SALES CHICAGO
ALLEN 30 SALES CHICAGO
ENAME DEPTNO DNAME LOC
---------- ---------- -------------- -------------
JAMES 30 SALES CHICAGO
BLAKE 30 SALES CHICAGO
MARTIN 30 SALES CHICAGO
已选择14行。、
/*2、登录scott用户,针对EMPDEPTVIEW?创建同义词epv;?*/
SQL> show user;
USER 为 "SCOTT"
SQL> conn system/321321
已连接。
SQL> grant create any synonym to scott;
授权成功。
SQL> create or replace synonym epv for scott.empdeptview;
同义词已创建。
SQL> conn scott/321321
已连接。
SQL> create or replace synonym epv for scott.empdeptview;
同义词已创建。
/*3、通过同义词,查询到部门20的所有员工信息。*/
SQL> select * from epv
2 where deptno=20;
ENAME DEPTNO DNAME LOC
---------- ---------- -------------- -------------
SMITH 20 RESEARCH DALLAS
JONES 20 RESEARCH DALLAS
SCOTT 20 RESEARCH DALLAS
ADAMS 20 RESEARCH DALLAS
FORD 20 RESEARCH DALLAS
/*二、
创建序列,从50开始,要求运用序列给部门表中添加部门编号为50,名称为BUSINES地点为CHINA;?添加部门编号为60,?名称为PMO,地点为CHINA;
*/
SQL> show user;
USER 为 "SCOTT"
SQL> create sequence seq_dept
2 start with 50
3 increment by 10
4 nomaxvalue
5 nocycle
6 nocache;
序列已创建。
SQL> insert into dept(deptno,dname,loc)
2 values (seq_dept.nextval,'BUSINESS','CHINA');
已创建 1 行。
SQL> insert into dept(deptno,dname,loc)
2 values (seq_dept.nextval,'PMO','CHINA');
已创建 1 行。
/*三、
1.创建表emp_bak,复制emp表结构以及所有的数据.?
2.给表emp_bak增加主键约束。
3.在emp_bak表的ename字段上创建索引?
4.在emp_bak表的deptno和job的组合上创建索引?
*/
SQL> create table emp_bak as select * from emp;
表已创建。
SQL> alter table emp_bak add constraint emp_empno_pk
2 primary key(empno);
表已更改。
SQL> create index emp_empno_index on emp_bak(ename);
索引已创建。
SQL> create index emp_deptnojob_index on emp_bak(deptno,job);
索引已创建。
SQL> spool off;
根据要求写出查询语句
1、工资在2000到2500的员工的员工姓名,部门编号,工资
2、显示每个雇员的年薪(12月的工资+奖金,注意判断奖金是否为空),并根据年薪排序
3、查找1982.1.1后入职的员工信息,并根据入职时间排序(注意时间类型的处理,可以用指定格式字符串自动转换也可以使用转换函数)
4、显示名字中包含A的员工姓名和工资(like模糊查询)
5、显示所有员工中最高工资和最低工资(统计函数)
6、显示每个部门的每种岗位的平均工资和最高工资(分组)
7、查询SMITH部门和岗位相同的雇员信息
8、显示高于自己部门平均工资的员工信息
9、要求查询出雇员的姓名, 工作, 雇员的直接上级领导姓名以及部门名称
10、查询同部门中工资高于1000 的员工数量超过2人的部门名称和人数
11、查询20号部门的员工号、员工名及其部门名称,和所有其他部门的员工号、员工名。(分别用左外连接和右外连接实现)
12、查询至少有一个雇员的经理信息。
/*根据要求写出查询语句*/
/*1、工资在2000到2500的员工的员工姓名,部门编号,工资*/
SQL> select ename,deptno,sal
2 from emp
3 where sal between 2000 and 2500;
ENAME DEPTNO SAL
---------- ---------- ----------
CLARK 10 2450
/*2、显示每个雇员的年薪(12月的工资+奖金,注意判断奖金是否为空),并根据年薪排序*/
SQL> select ename,(sal*12+comm)as nianxin
2 from emp
3 order by nianxin;
ENAME NIANXIN
---------- ----------
WARD 15500
MARTIN 16400
TURNER 18000
ALLEN 19500
SCOTT
KING
ADAMS
JAMES
FORD
MILLER
BLAKE
ENAME NIANXIN
---------- ----------
JONES
SMITH
CLARK
已选择14行。
/*3、查找1982.1.1后入职的员工信息,并根据入职时间排序(注意时间类型的处理,可以用指定格式字符串自动转换也可以使用转换函数)*/
SQL> select ename
2 from emp
3 where hiredate > to_date('1982/01/01','yyyy/mm/dd');
ENAME
----------
SCOTT
ADAMS
MILLER
/*4、显示名字中包含A的员工姓名和工资(like模糊查询)*/
SQL> select ename
2 from emp
3 where ename like'%A' or ename like'A%';
ENAME
----------
ALLEN
ADAMS
/*5、显示所有员工中最高工资和最低工资(统计函数)*/
SQL> select max(sal),min(sal)
2 from emp;
MAX(SAL) MIN(SAL)
---------- ----------
5000 800
/*6、显示每个部门的每种岗位的平均工资和最高工资(分组)*/
SQL> select avg(sal),max(sal)
2 from emp
3 group by deptno,job;
AVG(SAL) MAX(SAL)
---------- ----------
950 1100
1400 1600
2975 2975
950 950
5000 5000
2850 2850
1300 1300
2450 2450
3000 3000
已选择9行。
/*7、查询SMITH部门和岗位相同的雇员信息*/
SQL> select *
2 from emp
3 where deptno=(select deptno from emp where ename='SMITH') and
4 job=(select job from emp where ename='SMITH');
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- -------------- ---------- ----------
DEPTNO
----------
7369 SMITH CLERK 7902 17-12月-80 800
20
7876 ADAMS CLERK 7788 23-5月 -87 1100
20
/*8、显示高于自己部门平均工资的员工信息*/
SQL> select *
2 from emp
3 where sal>(select avg(sal) from emp);
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- -------------- ---------- ----------
DEPTNO
----------
7566 JONES MANAGER 7839 02-4月 -81 2975
20
7698 BLAKE MANAGER 7839 01-5月 -81 2850
30
7782 CLARK MANAGER 7839 09-6月 -81 2450
10
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- -------------- ---------- ----------
DEPTNO
----------
7788 SCOTT ANALYST 7566 19-4月 -87 3000
20
7839 KING PRESIDENT 17-11月-81 5000
10
7902 FORD ANALYST 7566 03-12月-81 3000
20
已选择6行。
/*9、要求查询出雇员的姓名, 工作, 雇员的直接上级领导姓名以及部门名称*/
SQL> select A.ename,A.job,B.ename,C.dname
2 from emp A,emp B,dept C
3 where A.mgr=B.empno and A.deptno=C.deptno;
ENAME JOB ENAME DNAME
---------- --------- ---------- --------------
CLARK MANAGER KING ACCOUNTING
MILLER CLERK CLARK ACCOUNTING
SMITH CLERK FORD RESEARCH
JONES MANAGER KING RESEARCH
ADAMS CLERK SCOTT RESEARCH
SCOTT ANALYST JONES RESEARCH
FORD ANALYST JONES RESEARCH
BLAKE MANAGER KING SALES
MARTIN SALESMAN BLAKE SALES
JAMES CLERK BLAKE SALES
WARD SALESMAN BLAKE SALES
ENAME JOB ENAME DNAME
---------- --------- ---------- --------------
ALLEN SALESMAN BLAKE SALES
TURNER SALESMAN BLAKE SALES
已选择13行。
/*10、查询同部门中工资高于1000 的员工数量超过2人的部门名称和人数*/
SQL> select d.dname,count(e.empno)
2 from dept d,emp e
3 where e.sal>1000 and d.deptno=e.deptno
4 group by d.dname
5 having count(e.empno)>2;
DNAME COUNT(E.EMPNO)
-------------- --------------
ACCOUNTING 3
RESEARCH 4
SALES 5
/*11、查询20号部门的员工号、员工名及其部门名称,和所有其他部门的员工号、员工名。(分别用左外连接和右外连接实现)*/
SQL> select e.empno,e.ename,d.dname
2 from emp e left join dept d on e.deptno=d.deptno
3 where e.deptno=20;
EMPNO ENAME DNAME
---------- ---------- --------------
7902 FORD RESEARCH
7876 ADAMS RESEARCH
7788 SCOTT RESEARCH
7566 JONES RESEARCH
7369 SMITH RESEARCH
SQL> select e.empno,e.ename,d.dname
2 from emp e right join dept d on e.deptno=d.deptno
3 where e.deptno not in(20);
EMPNO ENAME DNAME
---------- ---------- --------------
7499 ALLEN SALES
7521 WARD SALES
7654 MARTIN SALES
7698 BLAKE SALES
7782 CLARK ACCOUNTING
7839 KING ACCOUNTING
7844 TURNER SALES
7900 JAMES SALES
7934 MILLER ACCOUNTING
已选择9行。
/*12、查询至少有一个雇员的经理信息。*/
SQL> select *
2 from dept
3 where deptno in(select deptno from emp);
DEPTNO DNAME LOC
---------- -------------- -------------
20 RESEARCH DALLAS
30 SALES CHICAGO
10 ACCOUNTING NEW YORK
SQL> spool off;
SQL> set serveroutput on;
SQL> declare
2 sum_i int:=0;
3 i int:=0;
4 begin
5 loop
6 i:=i+1;
7 sum_i:=sum_i+i;
8 exit when i=100;
9 end loop;
10 dbms_output.put_line(sum_i);
11 end;
12 /
5050
PL/SQL 过程已成功完成。
SQL> set serveroutput on;
SQL> declare
2 sum_i int:=0;
3 i int:=0;
4 begin
5 while i<=99 loop
6 i:=i+1;
7 sum_i:=sum_i+i;
8 end loop;
9 dbms_output.put_line(sum_i);
10 end;
11 /
5050
PL/SQL 过程已成功完成。
SQL> set serveroutput on;
SQL> declare
2 sum_i int:=0;
3 begin
4 for i in reverse 1..100
5 loop
6 if mod(i,1)=0 then
7 sum_i:=sum_i+i;
8 end if;
9 end loop;
10 dbms_output.put_line(sum_i);
11 end;
12 /
5050
PL/SQL 过程已成功完成。
SQL> create or replace procedure pro1(v_in_empno in number) is
2 v_job emp.job%type;
3 begin
4 select job into v_job from emp where empno=v_in_empno;
5 if v_job='PRESIDENT' then
6 update emp set sal=sal+1000 where empno=v_in_empno;
7 elsif v_job='MANAGER'then
8 update emp set sal=sal+500 where empno=v_in_empno;
9 else
10 update emp set sal=sal+200 where empno=v_in_empno;
11 end if;
12 end;
13 /
过程已创建。
SQL> spool off;
SQL> create tablespace MYTBS
2 datafile 'D:\MYTBS1.DBF' size 50m
3 autoextend on next 10m maxsize 500m,
4 'D:\MYTBS2.DBF' size 50m
5 autoextend on next 10m maxsize 500m
6 extent management local autoallocate;
表空间已创建。
SQL> create profile userprofile limit
2 cpu_per_session 10000
3 cpu_per_call 1000
4 failed_login_attempts 3
5 password_life_time 30
6 password_lock_time 2;
配置文件已创建
SQL> create user fwn identified by 1815925279
2 default tablespace MYTBS
3 quota 20m on MYTBS
4 profile userprofile;
用户已创建。
SQL> select default_tablespace from dba_users;
DEFAULT_TABLESPACE
------------------------------
SYSTEM
SYSTEM
SYSTEM
SYSAUX
SYSAUX
USERS
USERS
MYTBS
SYSTEM
SYSAUX
SYSAUX
DEFAULT_TABLESPACE
------------------------------
SYSAUX
SYSAUX
SYSAUX
SYSAUX
SYSAUX
SYSAUX
SYSAUX
SYSAUX
SYSAUX
SYSAUX
SYSAUX
DEFAULT_TABLESPACE
------------------------------
SYSAUX
SYSAUX
SYSAUX
USERS
USERS
USERS
USERS
USERS
USERS
USERS
USERS
DEFAULT_TABLESPACE
------------------------------
USERS
USERS
USERS
USERS
已选择37行。
SQL> grant connect to fwn;
授权成功。
SQL> grant create any table,create any index to fwn;
授权成功。
SQL> conn fwn/1815925279;
已连接。
SQL> show user;
USER 为 "FWN"
SQL> spool off;