Oracle练习题&&部分高校Oracle实验题

Oracle练习题&&部分高校Oracle实验题

一、
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;

Oracle练习题&&部分高校Oracle实验题_第1张图片

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;

你可能感兴趣的:(Oracle练习题&&部分高校Oracle实验题)