Oracle数据库-2

来源:互联网 发布:天互数据张彦华 编辑:程序博客网 时间:2024/06/05 20:43
SQL> host cls

SQL> --查询工资比SCOTT高的员工信息
SQL> --1. SCOTT的工资
SQL> select sal from emp where ename='SCOTT';

       SAL                                                                     
----------                                                                     
      3000                                                                     

SQL> --2. 比3000高的员工
SQL> set linesize 200
SQL> select * from emp where sal > 3000;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                             
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                             
      7839 KING       PRESIDENT            17-11月-81           5000                    10                                                                                                             

SQL> 子查询所要解决的问题: 不能一步求解
SP2-0734: 未知的命令开头 "子查询所要..." - 忽略了剩余的行。
SQL> --子查询所要解决的问题: 不能一步求解
SQL> select *
  2  from emp
  3  where sal > (select sal
  4               from emp
  5               where ename='SCOTT');

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                             
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                             
      7839 KING       PRESIDENT            17-11月-81           5000                    10                                                                                                             

SQL> /*
SQL> 注意的问题:
SQL> 1. 括号
SQL> 2. 合理的书写风格
SQL> 3. 可以在where  select having from后面 都可以使用子查询
SQL> 4. 不可以在group by后面使用子查询
SQL> 5. 强调from后面的子查询
SQL> 6. 主查询和子查询可以不是同一张表;只要子查询返回的结果 主查询可以使用 即可
SQL> 7. 一般不在子查询中排序;但在top-n分析问题中,必须对子查询排序
SQL> 8. 一般先执行子查询,再执行主查询;但相关子查询例外
SQL> 9. 单行子查询只能使用单行操作符;多行子查询只能使用多行操作符
SQL> 10.子查询中的null
SQL> */
SQL> --3. 可以在where  select having from后面 都可以使用子查询
SQL> select empno,ename,sal,(select job from emp where empno=7839) 第四列
  2  from emp;

     EMPNO ENAME             SAL 第四列                                                                                                                                                                 
---------- ---------- ---------- ---------                                                                                                                                                             
      7369 SMITH             800 PRESIDENT                                                                                                                                                             
      7499 ALLEN            1600 PRESIDENT                                                                                                                                                             
      7521 WARD             1250 PRESIDENT                                                                                                                                                             
      7566 JONES            2975 PRESIDENT                                                                                                                                                             
      7654 MARTIN           1250 PRESIDENT                                                                                                                                                             
      7698 BLAKE            2850 PRESIDENT                                                                                                                                                             
      7782 CLARK            2450 PRESIDENT                                                                                                                                                             
      7788 SCOTT            3000 PRESIDENT                                                                                                                                                             
      7839 KING             5000 PRESIDENT                                                                                                                                                             
      7844 TURNER           1500 PRESIDENT                                                                                                                                                             
      7876 ADAMS            1100 PRESIDENT                                                                                                                                                             

     EMPNO ENAME             SAL 第四列                                                                                                                                                                 
---------- ---------- ---------- ---------                                                                                                                                                             
      7900 JAMES             950 PRESIDENT                                                                                                                                                             
      7902 FORD             3000 PRESIDENT                                                                                                                                                             
      7934 MILLER           1300 PRESIDENT                                                                                                                                                             

已选择 14 行。

SQL> --5. 强调from后面的子查询
SQL> --查询员工信息:员工号  姓名 月薪
SQL> select *
  2  from (select empno,ename,sal from emp);

     EMPNO ENAME             SAL                                                                                                                                                                       
---------- ---------- ----------                                                                                                                                                                       
      7369 SMITH             800                                                                                                                                                                       
      7499 ALLEN            1600                                                                                                                                                                       
      7521 WARD             1250                                                                                                                                                                       
      7566 JONES            2975                                                                                                                                                                       
      7654 MARTIN           1250                                                                                                                                                                       
      7698 BLAKE            2850                                                                                                                                                                       
      7782 CLARK            2450                                                                                                                                                                       
      7788 SCOTT            3000                                                                                                                                                                       
      7839 KING             5000                                                                                                                                                                       
      7844 TURNER           1500                                                                                                                                                                       
      7876 ADAMS            1100                                                                                                                                                                       

     EMPNO ENAME             SAL                                                                                                                                                                       
---------- ---------- ----------                                                                                                                                                                       
      7900 JAMES             950                                                                                                                                                                       
      7902 FORD             3000                                                                                                                                                                       
      7934 MILLER           1300                                                                                                                                                                       

已选择 14 行。

SQL> --查询员工信息:员工号  姓名 月薪 年薪
SQL> ed
已写入 file afiedt.buf

  1  select *
  2* from (select empno,ename,sal,sal*12 annsal from emp)
SQL> /

     EMPNO ENAME             SAL     ANNSAL                                                                                                                                                             
---------- ---------- ---------- ----------                                                                                                                                                             
      7369 SMITH             800       9600                                                                                                                                                             
      7499 ALLEN            1600      19200                                                                                                                                                             
      7521 WARD             1250      15000                                                                                                                                                             
      7566 JONES            2975      35700                                                                                                                                                             
      7654 MARTIN           1250      15000                                                                                                                                                             
      7698 BLAKE            2850      34200                                                                                                                                                             
      7782 CLARK            2450      29400                                                                                                                                                             
      7788 SCOTT            3000      36000                                                                                                                                                             
      7839 KING             5000      60000                                                                                                                                                             
      7844 TURNER           1500      18000                                                                                                                                                             
      7876 ADAMS            1100      13200                                                                                                                                                             

     EMPNO ENAME             SAL     ANNSAL                                                                                                                                                             
---------- ---------- ---------- ----------                                                                                                                                                             
      7900 JAMES             950      11400                                                                                                                                                             
      7902 FORD             3000      36000                                                                                                                                                             
      7934 MILLER           1300      15600                                                                                                                                                             

已选择 14 行。

SQL> /*
SQL> 思考:
SQL> select empno,ename,sal,sal*12 annsal from emp;
SQL> select * from (select empno,ename,sal,sal*12 annsal from emp);
SQL> 性能一样
SQL> */
SQL> --6. 主查询和子查询可以不是同一张表;只要子查询返回的结果 主查询可以使用 即可
SQL> --查询部门名称是SALES的员工
SQL> select *
  2  from emp
  3  where deptno=(select deptno from dept where dname='SALES');

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                             
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                             
      7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300         30                                                                                                             
      7521 WARD       SALESMAN        7698 22-2月 -81           1250        500         30                                                                                                             
      7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400         30                                                                                                             
      7698 BLAKE      MANAGER         7839 01-5月 -81           2850                    30                                                                                                             
      7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30                                                                                                             
      7900 JAMES      CLERK           7698 03-12月-81            950                    30                                                                                                             

已选择 6 行。

SQL> select e.*
  2  from emp e,dept d
  3  where e.deptno=d.deptno and d.dname='SALES';

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                             
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                             
      7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300         30                                                                                                             
      7521 WARD       SALESMAN        7698 22-2月 -81           1250        500         30                                                                                                             
      7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400         30                                                                                                             
      7698 BLAKE      MANAGER         7839 01-5月 -81           2850                    30                                                                                                             
      7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30                                                                                                             
      7900 JAMES      CLERK           7698 03-12月-81            950                    30                                                                                                             

已选择 6 行。

SQL> --SQL 优化 4. 尽量使用多表查询
SQL> host cls

SQL> --in 在集合中
SQL> --查询部门名称是SALES和ACCOUNTING的员工
SQL> select *
  2  from emp
  3  where deptno in (select deptno from dept where dname='SALES' or dname='ACCOUNTING');

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                             
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                             
      7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300         30                                                                                                             
      7521 WARD       SALESMAN        7698 22-2月 -81           1250        500         30                                                                                                             
      7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400         30                                                                                                             
      7698 BLAKE      MANAGER         7839 01-5月 -81           2850                    30                                                                                                             
      7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10                                                                                                             
      7839 KING       PRESIDENT            17-11月-81           5000                    10                                                                                                             
      7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30                                                                                                             
      7900 JAMES      CLERK           7698 03-12月-81            950                    30                                                                                                             
      7934 MILLER     CLERK           7782 23-1月 -82           1300                    10                                                                                                             

已选择 9 行。

SQL> --any: 和集合中的任意一个值比较
SQL> --查询工资比30号部门任意一个员工高的员工信息
SQL> select *
  2  from emp
  3  where sal > any (select sal from emp where deptno=30);

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                             
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                             
      7839 KING       PRESIDENT            17-11月-81           5000                    10                                                                                                             
      7902 FORD       ANALYST         7566 03-12月-81           3000                    20                                                                                                             
      7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20                                                                                                             
      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                                                                                                             
      7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300         30                                                                                                             
      7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30                                                                                                             
      7934 MILLER     CLERK           7782 23-1月 -82           1300                    10                                                                                                             
      7521 WARD       SALESMAN        7698 22-2月 -81           1250        500         30                                                                                                             
      7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400         30                                                                                                             

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                             
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                             
      7876 ADAMS      CLERK           7788 23-5月 -87           1100                    20                                                                                                             

已选择 12 行。

SQL> ed
已写入 file afiedt.buf

  1  select *
  2  from emp
  3* where sal > (select min(sal) from emp where deptno=30)
SQL> /

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                             
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                             
      7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300         30                                                                                                             
      7521 WARD       SALESMAN        7698 22-2月 -81           1250        500         30                                                                                                             
      7566 JONES      MANAGER         7839 02-4月 -81           2975                    20                                                                                                             
      7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400         30                                                                                                             
      7698 BLAKE      MANAGER         7839 01-5月 -81           2850                    30                                                                                                             
      7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10                                                                                                             
      7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20                                                                                                             
      7839 KING       PRESIDENT            17-11月-81           5000                    10                                                                                                             
      7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30                                                                                                             
      7876 ADAMS      CLERK           7788 23-5月 -87           1100                    20                                                                                                             
      7902 FORD       ANALYST         7566 03-12月-81           3000                    20                                                                                                             

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                             
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                             
      7934 MILLER     CLERK           7782 23-1月 -82           1300                    10                                                                                                             

已选择 12 行。

SQL> --all 和集合中的所有值比较
SQL>  --查询工资比30号部门所有员工高的员工信息
SQL> select *
  2  from emp
  3  where sal > all (select sal from emp where deptno=30);

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                             
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                             
      7566 JONES      MANAGER         7839 02-4月 -81           2975                    20                                                                                                             
      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                                                                                                             

SQL> ed
已写入 file afiedt.buf

  1  select *
  2  from emp
  3* where sal > (select max(sal) from emp where deptno=30)
SQL> /

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                             
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                             
      7566 JONES      MANAGER         7839 02-4月 -81           2975                    20                                                                                                             
      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                                                                                                             

SQL> host cls

SQL> --多行子查询中的null
SQL> --not in (10,20,null)
SQL> --查询不是老板的员工
SQL> select * from emp;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                             
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                             
      7369 SMITH      CLERK           7902 17-12月-80            800                    20                                                                                                             
      7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300         30                                                                                                             
      7521 WARD       SALESMAN        7698 22-2月 -81           1250        500         30                                                                                                             
      7566 JONES      MANAGER         7839 02-4月 -81           2975                    20                                                                                                             
      7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400         30                                                                                                             
      7698 BLAKE      MANAGER         7839 01-5月 -81           2850                    30                                                                                                             
      7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10                                                                                                             
      7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20                                                                                                             
      7839 KING       PRESIDENT            17-11月-81           5000                    10                                                                                                             
      7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30                                                                                                             
      7876 ADAMS      CLERK           7788 23-5月 -87           1100                    20                                                                                                             

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                             
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                             
      7900 JAMES      CLERK           7698 03-12月-81            950                    30                                                                                                             
      7902 FORD       ANALYST         7566 03-12月-81           3000                    20                                                                                                             
      7934 MILLER     CLERK           7782 23-1月 -82           1300                    10                                                                                                             

已选择 14 行。

SQL> select *
  2  from emp
  3  where empno not in (select mgr from emp);

未选定行

SQL> --查询是老板的员工
SQL> select *
  2  from emp
  3  where empno in (select mgr from emp);

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                             
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                             
      7902 FORD       ANALYST         7566 03-12月-81           3000                    20                                                                                                             
      7698 BLAKE      MANAGER         7839 01-5月 -81           2850                    30                                                                                                             
      7839 KING       PRESIDENT            17-11月-81           5000                    10                                                                                                             
      7566 JONES      MANAGER         7839 02-4月 -81           2975                    20                                                                                                             
      7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20                                                                                                             
      7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10                                                                                                             

已选择 6 行。

SQL> select *
  2  from emp
  3  where empno not in (select mgr from emp where mgr is not null);

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                             
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                             
      7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30                                                                                                             
      7521 WARD       SALESMAN        7698 22-2月 -81           1250        500         30                                                                                                             
      7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400         30                                                                                                             
      7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300         30                                                                                                             
      7934 MILLER     CLERK           7782 23-1月 -82           1300                    10                                                                                                             
      7369 SMITH      CLERK           7902 17-12月-80            800                    20                                                                                                             
      7876 ADAMS      CLERK           7788 23-5月 -87           1100                    20                                                                                                             
      7900 JAMES      CLERK           7698 03-12月-81            950                    30                                                                                                             

已选择 8 行。

SQL> spool off

SQL> /*
SQL> 查询10和20号部门的员工
SQL> 1. select * from emp where deptno in (10,20);
SQL> 2. select * from emp where deptno=10 or deptno=20;
SQL> 3. 集合运算
SQL>    select * from emp where deptno=10
SQL>      加上
SQL>    select * from emp where deptno=20
SQL> */
SQL> select * from emp where deptno=10
  2  union
  3  select * from emp where deptno=20;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                             
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                             
      7369 SMITH      CLERK           7902 17-12月-80            800                    20                                                                                                             
      7566 JONES      MANAGER         7839 02-4月 -81           2975                    20                                                                                                             
      7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10                                                                                                             
      7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20                                                                                                             
      7839 KING       PRESIDENT            17-11月-81           5000                    10                                                                                                             
      7876 ADAMS      CLERK           7788 23-5月 -87           1100                    20                                                                                                             
      7902 FORD       ANALYST         7566 03-12月-81           3000                    20                                                                                                             
      7934 MILLER     CLERK           7782 23-1月 -82           1300                    10                                                                                                             

已选择 8 行。

SQL> host cls

SQL> select deptno,job,sum(sal) from emp group by rollup(deptno,job);

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         
---------- --------- ----------                                                                                                                                                                         
        10 CLERK           1300                                                                                                                                                                         
        10 MANAGER         2450                                                                                                                                                                         
        10 PRESIDENT       5000                                                                                                                                                                         
        10                 8750                                                                                                                                                                         
        20 CLERK           1900                                                                                                                                                                         
        20 ANALYST         6000                                                                                                                                                                         
        20 MANAGER         2975                                                                                                                                                                         
        20                10875                                                                                                                                                                         
        30 CLERK            950                                                                                                                                                                         
        30 MANAGER         2850                                                                                                                                                                         
        30 SALESMAN        5600                                                                                                                                                                         

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         
---------- --------- ----------                                                                                                                                                                         
        30                 9400                                                                                                                                                                         
                          29025                                                                                                                                                                         

已选择 13 行。

SQL>  select deptno,job,sum(sal) from emp group by deptno,job
  2   union
  3   select deptno,sum(sal) from emp group by deptno
  4   union
  5   select sum(sal) from emp;
 select deptno,sum(sal) from emp group by deptno
 *
第 3 行出现错误:
ORA-01789: 查询块具有不正确的结果列数


SQL> /*
SQL> 注意的问题:
SQL> 1.参与运算的各个集合必须列数相同且类型一致
SQL> 2. 采用第一个集合作为最后的表头
SQL> 3. order by 永远在最后
SQL> 4. 括号
SQL> */
SQL>  select deptno,job,sum(sal) from emp group by deptno,job
  2   union
  3   select deptno,to_char(null),sum(sal) from emp group by deptno
  4   union
  5   select to_number(null),to_char(null),sum(sal) from emp;

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         
---------- --------- ----------                                                                                                                                                                         
        10 CLERK           1300                                                                                                                                                                         
        10 MANAGER         2450                                                                                                                                                                         
        10 PRESIDENT       5000                                                                                                                                                                         
        10                 8750                                                                                                                                                                         
        20 ANALYST         6000                                                                                                                                                                         
        20 CLERK           1900                                                                                                                                                                         
        20 MANAGER         2975                                                                                                                                                                         
        20                10875                                                                                                                                                                         
        30 CLERK            950                                                                                                                                                                         
        30 MANAGER         2850                                                                                                                                                                         
        30 SALESMAN        5600                                                                                                                                                                         

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         
---------- --------- ----------                                                                                                                                                                         
        30                 9400                                                                                                                                                                         
                          29025                                                                                                                                                                         

已选择 13 行。

SQL> --break on deptno skip 2
SQL> host cls

SQL> --SQL执行时间
SQL> set timing on
SQL> select deptno,job,sum(sal) from emp group by rollup(deptno,job);

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         
---------- --------- ----------                                                                                                                                                                         
        10 CLERK           1300                                                                                                                                                                         
        10 MANAGER         2450                                                                                                                                                                         
        10 PRESIDENT       5000                                                                                                                                                                         
        10                 8750                                                                                                                                                                         
        20 CLERK           1900                                                                                                                                                                         
        20 ANALYST         6000                                                                                                                                                                         
        20 MANAGER         2975                                                                                                                                                                         
        20                10875                                                                                                                                                                         
        30 CLERK            950                                                                                                                                                                         
        30 MANAGER         2850                                                                                                                                                                         
        30 SALESMAN        5600                                                                                                                                                                         

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         
---------- --------- ----------                                                                                                                                                                         
        30                 9400                                                                                                                                                                         
                          29025                                                                                                                                                                         

已选择 13 行。

已用时间:  00: 00: 00.02
SQL>  select deptno,job,sum(sal) from emp group by deptno,job
  2   union
  3   select deptno,to_char(null),sum(sal) from emp group by deptno
  4   union
  5   select to_number(null),to_char(null),sum(sal) from emp;

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         
---------- --------- ----------                                                                                                                                                                         
        10 CLERK           1300                                                                                                                                                                         
        10 MANAGER         2450                                                                                                                                                                         
        10 PRESIDENT       5000                                                                                                                                                                         
        10                 8750                                                                                                                                                                         
        20 ANALYST         6000                                                                                                                                                                         
        20 CLERK           1900                                                                                                                                                                         
        20 MANAGER         2975                                                                                                                                                                         
        20                10875                                                                                                                                                                         
        30 CLERK            950                                                                                                                                                                         
        30 MANAGER         2850                                                                                                                                                                         
        30 SALESMAN        5600                                                                                                                                                                         

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         
---------- --------- ----------                                                                                                                                                                         
        30                 9400                                                                                                                                                                         
                          29025                                                                                                                                                                         

已选择 13 行。

已用时间:  00: 00: 00.04
SQL> --SQL 优化 5. 尽量不要使用集合运算
SQL> set timing off
SQL> spool off


--oracle分页(Pageing Query)

 select *
 from     (select rownum r,e1.*
     from (select * from emp order by sal) e1
      where rownum <=8
    )
 where r >=5;

SQL> select count(*) Total,
  2         sum(decode(to_char(hiredate,'yyyy'),'1980',1,0)) "1980",
  3         sum(decode(to_char(hiredate,'yyyy'),'1981',1,0)) "1981",
  4         sum(decode(to_char(hiredate,'yyyy'),'1982',1,0)) "1982",
  5         sum(decode(to_char(hiredate,'yyyy'),'1987',1,0)) "1987"
  6  from emp;

     TOTAL       1980       1981       1982       1987                         
---------- ---------- ---------- ---------- ----------                         
        14          1         10          1          2                         

SQL> /*
SQL> SQL 的类型
SQL> 1. DML(data manipulation Language 数据操作语言): insert  update delete select
SQL> 2. DDL(Data Definition Language 数据定义语言): create table,alter table,drop table,truncate table
SQL>                                                create/drop view,sequence(序列),index,synonym(同义词)
SQL> 3. DCL(Data Control Language 数据控制语言): grant(授权) revoke(撤销权限)
SQL> */
SQL> --插入 insert
SQL> insert into emp(empno,ename,sal,deptno) values(1001,'Tom',3000,10);

已创建 1 行。

SQL> -- PreparedStatement pst = "insert into emp(empno,ename,sal,deptno) values(?,?,?,?)";
SQL> --地址符 &
SQL> insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno);
输入 empno 的值:  1002
输入 ename 的值:  'Mary'
输入 sal 的值:  2000
输入 deptno 的值:  30
原值    1: insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno)
新值    1: insert into emp(empno,ename,sal,deptno) values(1002,'Mary',2000,30)

已创建 1 行。

SQL> /
输入 empno 的值:  1003
输入 ename 的值:  'Mike'
输入 sal 的值:  5000
输入 deptno 的值:  20
原值    1: insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno)
新值    1: insert into emp(empno,ename,sal,deptno) values(1003,'Mike',5000,20)

已创建 1 行。

SQL> select empno,ename,sal,&t
  2  from emp;
输入 t 的值:  job
原值    1: select empno,ename,sal,&t
新值    1: select empno,ename,sal,job

     EMPNO ENAME             SAL JOB                                           
---------- ---------- ---------- ---------                                     
      7369 SMITH             800 CLERK                                         
      7499 ALLEN            1600 SALESMAN                                       
      7521 WARD             1250 SALESMAN                                       
      7566 JONES            2975 MANAGER                                       
      7654 MARTIN           1250 SALESMAN                                       
      7698 BLAKE            2850 MANAGER                                       
      7782 CLARK            2450 MANAGER                                       
      7788 SCOTT            3000 ANALYST                                       
      7839 KING             5000 PRESIDENT                                     
      7844 TURNER           1500 SALESMAN                                       
      7876 ADAMS            1100 CLERK                                         

     EMPNO ENAME             SAL JOB                                           
---------- ---------- ---------- ---------                                     
      7900 JAMES             950 CLERK                                         
      7902 FORD             3000 ANALYST                                       
      7934 MILLER           1300 CLERK                                         
      1001 Tom              3000                                               
      1002 Mary             2000                                               
      1003 Mike             5000                                               

已选择 17 行。

SQL> select * from &t;
输入 t 的值:  dept
原值    1: select * from &t
新值    1: select * from dept

    DEPTNO DNAME          LOC                                                   
---------- -------------- -------------                                         
        10 ACCOUNTING     NEW YORK                                             
        20 RESEARCH       DALLAS                                               
        30 SALES          CHICAGO                                               
        40 OPERATIONS     BOSTON                                               

SQL> rollback;

回退已完成。

SQL> host cls

SQL> --批处理
SQL> create table emp10 as select * from emp where 1=2;

表已创建。

SQL> desc emp10
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 EMPNO                                              NUMBER(4)
 ENAME                                              VARCHAR2(10)
 JOB                                                VARCHAR2(9)
 MGR                                                NUMBER(4)
 HIREDATE                                           DATE
 SAL                                                NUMBER(7,2)
 COMM                                               NUMBER(7,2)
 DEPTNO                                             NUMBER(2)

SQL> select * from emp10;

未选定行

SQL> --一次性将emp中,所有10号部门的员工插入到emp10中
SQL> insert into emp10 select * from emp where deptno=10;

已创建 3 行。

SQL> select * from emp10;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM
---------- ---------- --------- ---------- -------------- ---------- ----------
    DEPTNO                                                                     
----------                                                                     
      7782 CLARK      MANAGER         7839 09-6月 -81           2450           
        10                                                                     

      7839 KING       PRESIDENT            17-11月-81           5000           
        10                                                                     

      7934 MILLER     CLERK           7782 23-1月 -82           1300           
        10                                                                     


SQL> /*
SQL> 海量拷贝数据
SQL> 1. 数据泵(datapump) ---> plsql
SQL> 2. SQL*Loader
SQL> 3. (数据仓库)外部表
SQL> 4. 可传输的表空间
SQL> */
SQL> host cls

SQL> /*
SQL> delete和truncate的区别:
SQL> 1. delete逐条删除;truncate先摧毁表,再重建
SQL> 2.(根本)delete是DML,truncate是DDL
SQL>     (可以回滚)          (不可以回滚)
SQL> 3. delete不会释放空间 truncate会
SQL> 4. delete可以闪回  truncate不可以
SQL>    (flashback)
SQL> 5. delete会产生碎片;truncate不会
SQL> */
SQL> set feedback off
SQL> @d:\temp\testdelete.sql
SQL> select count(*) from testdelete;

  COUNT(*)                                                                     
----------                                                                     
      5000                                                                     
SQL> set timing on
SQL> delete from testdelete;
已用时间:  00: 00: 00.06
SQL> set timing off
SQL> drop table testdelete purge;
SQL> @d:\temp\testdelete.sql
SQL> select count(*) from testdelete;

  COUNT(*)                                                                     
----------                                                                     
      5000                                                                     
SQL> set timing on
SQL> truncate table testdelete;
已用时间:  00: 00: 00.15
SQL> --undo数据(还原数据)
SQL> set timing off
SQL> set feedback off
SQL> host cs

SQL> host cls

SQL> /*
SQL> 事务的标致
SQL> 1. 起始标志:事务中第一条DML语句
SQL> 2. 结束标志:提交: 显式 commit
SQL>                     隐式 正常退出(exit),DDL,DCL
SQL>              回滚:   显式 rollback
SQL>                      隐式 非正常退出,掉电,宕机
SQL> */
SQL> create table testsavepoint
  2  (tid number, tname varchar2(20));
SQL> set feedback on
SQL> insert into testsavepoint values(1,'Tom');

已创建 1 行。

SQL> insert into testsavepoint values(2,'Mary');

已创建 1 行。

SQL> --定义保存点
SQL> savepoint a;

保存点已创建。

SQL> select * from testsavepoint;

       TID TNAME                                                               
---------- --------------------                                                 
         1 Tom                                                                 
         2 Mary                                                                 

已选择 2 行。

SQL> insert into testsavepoint values(3,'Maake');

已创建 1 行。

SQL> select * from testsavepoint;

       TID TNAME                                                               
---------- --------------------                                                 
         1 Tom                                                                 
         2 Mary                                                                 
         3 Maake                                                               

已选择 3 行。

SQL> rollback to savepoint a;

回退已完成。

SQL> select * from testsavepoint;

       TID TNAME                                                               
---------- --------------------                                                 
         1 Tom                                                                 
         2 Mary                                                                 

已选择 2 行。

SQL> commit;

提交完成。

SQL> set transaction read only;

事务处理集。

SQL> select * from testsavepoint;

       TID TNAME                                                               
---------- --------------------                                                 
         1 Tom                                                                 
         2 Mary                                                                 

已选择 2 行。

SQL>  insert into testsavepoint values(3,'Maake');
 insert into testsavepoint values(3,'Maake')
             *
第 1 行出现错误:
ORA-01456: 不能在 READ ONLY 事务处理中执行插入/删除/更新操作


SQL> rollback;

回退已完成。

SQL> spool off

SQL> create table test3
  2  (tid number,
  3   tname varchar2(20),
  4   hiredate date default sysdate);

表已创建。

SQL> insert into test3(tid,tname) values(1,'Tom');

已创建 1 行。

SQL> select * from test3;

       TID TNAME                HIREDATE                                       
---------- -------------------- --------------                                 
         1 Tom                  23-11月-15                                     

已选择 1 行。

SQL> host cls

SQL> --行地址 rowid
SQL> select rowid,empno,ename,sal from emp;

ROWID                   EMPNO ENAME             SAL                             
------------------ ---------- ---------- ----------                             
AAAMfPAAEAAAAAgAAA       7369 SMITH             800                             
AAAMfPAAEAAAAAgAAB       7499 ALLEN            1600                             
AAAMfPAAEAAAAAgAAC       7521 WARD             1250                             
AAAMfPAAEAAAAAgAAD       7566 JONES            2975                             
AAAMfPAAEAAAAAgAAE       7654 MARTIN           1250                             
AAAMfPAAEAAAAAgAAF       7698 BLAKE            2850                             
AAAMfPAAEAAAAAgAAG       7782 CLARK            2450                             
AAAMfPAAEAAAAAgAAH       7788 SCOTT            3000                             
AAAMfPAAEAAAAAgAAI       7839 KING             5000                             
AAAMfPAAEAAAAAgAAJ       7844 TURNER           1500                             
AAAMfPAAEAAAAAgAAK       7876 ADAMS            1100                             

ROWID                   EMPNO ENAME             SAL                             
------------------ ---------- ---------- ----------                             
AAAMfPAAEAAAAAgAAL       7900 JAMES             950                             
AAAMfPAAEAAAAAgAAM       7902 FORD             3000                             
AAAMfPAAEAAAAAgAAN       7934 MILLER           1300                             

已选择 14 行。

SQL> select empno,ename,sal from emp where rowid='AAAMfPAAEAAAAAgAAK';

     EMPNO ENAME             SAL                                               
---------- ---------- ----------                                               
      7876 ADAMS            1100                                               

已选择 1 行。

SQL> --创建表,保存20号部门的员工
SQL> create table emp20
  2  as
  3  select * from emp where deptno=20;

表已创建。

SQL> select * from emp20;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM
---------- ---------- --------- ---------- -------------- ---------- ----------
    DEPTNO                                                                     
----------                                                                     
      7369 SMITH      CLERK           7902 17-12月-80            800           
        20                                                                     

      7566 JONES      MANAGER         7839 02-4月 -81           2975           
        20                                                                     

      7788 SCOTT      ANALYST         7566 19-4月 -87           3000           
        20                                                                     


     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM
---------- ---------- --------- ---------- -------------- ---------- ----------
    DEPTNO                                                                     
----------                                                                     
      7876 ADAMS      CLERK           7788 23-5月 -87           1100           
        20                                                                     

      7902 FORD       ANALYST         7566 03-12月-81           3000           
        20                                                                     


已选择 5 行。

SQL> --创建表,员工号 姓名  月薪 年薪 部门名称
SQL> create tabl empinfo
  2  as
  3  select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname
  4  from emp e, dept d
  5  where e.deptno=d.deptno;
create tabl empinfo
       *
第 1 行出现错误:
ORA-00901: 无效 CREATE 命令


SQL> ed
已写入 file afiedt.buf

  1  create table empinfo
  2  as
  3  select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname
  4  from emp e, dept d
  5* where e.deptno=d.deptno
SQL> /

表已创建。

SQL> select * from empinfo;

     EMPNO ENAME             SAL     ANNSAL DNAME                               
---------- ---------- ---------- ---------- --------------                     
      7369 SMITH             800       9600 RESEARCH                           
      7499 ALLEN            1600      19200 SALES                               
      7521 WARD             1250      15000 SALES                               
      7566 JONES            2975      35700 RESEARCH                           
      7654 MARTIN           1250      15000 SALES                               
      7698 BLAKE            2850      34200 SALES                               
      7782 CLARK            2450      29400 ACCOUNTING                         
      7788 SCOTT            3000      36000 RESEARCH                           
      7839 KING             5000      60000 ACCOUNTING                         
      7844 TURNER           1500      18000 SALES                               
      7876 ADAMS            1100      13200 RESEARCH                           

     EMPNO ENAME             SAL     ANNSAL DNAME                               
---------- ---------- ---------- ---------- --------------                     
      7900 JAMES             950      11400 SALES                               
      7902 FORD             3000      36000 RESEARCH                           
      7934 MILLER           1300      15600 ACCOUNTING                         

已选择 14 行。

SQL> host cls

SQL> --修改表:追加新列,修改列,删除列,重命名列,重命名表
SQL> desc test3
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 TID                                                NUMBER
 TNAME                                              VARCHAR2(20)
 HIREDATE                                           DATE

SQL> alter table test3 add photo blob;

表已更改。

SQL> desc test3
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 TID                                                NUMBER
 TNAME                                              VARCHAR2(20)
 HIREDATE                                           DATE
 PHOTO                                              BLOB

SQL> alter table test3 modify tname varchar2(40);

表已更改。

SQL> alter table test3 drop column photo;

表已更改。

SQL> alter table test3 rename column tname to username;

表已更改。

SQL> rename test3 to test5;

表已重命名。

SQL> host cls

SQL> --删除表
SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID                               
------------------------------ ------- ----------                               
DEPT                           TABLE                                           
EMP                            TABLE                                           
BONUS                          TABLE                                           
SALGRADE                       TABLE                                           
EMP10                          TABLE                                           
TEST2                          TABLE                                           
TESTSAVEPOINT                  TABLE                                           
TESTDELETE                     TABLE                                           
EMP20                          TABLE                                           
EMPINFO                        TABLE                                           
TEST5                          TABLE                                           

已选择 11 行。

SQL> drop table test5;

表已删除。

SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID                               
------------------------------ ------- ----------                               
DEPT                           TABLE                                           
EMP                            TABLE                                           
BONUS                          TABLE                                           
SALGRADE                       TABLE                                           
EMP10                          TABLE                                           
TEST2                          TABLE                                           
TESTSAVEPOINT                  TABLE                                           
TESTDELETE                     TABLE                                           
BIN$3yTwhJ0vSH268YZ8mlL3zw==$0 TABLE                                           
EMP20                          TABLE                                           
EMPINFO                        TABLE                                           

已选择 11 行。

SQL> --Oracle的回收站
SQL> show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME         
---------------- ------------------------------ ------------ -------------------
TEST5            BIN$3yTwhJ0vSH268YZ8mlL3zw==$0 TABLE        2015-11-23:15:03:42
SQL> purge recyclebin;

回收站已清空。

SQL> select * from TESTSAVEPOINT;

       TID TNAME                                                               
---------- --------------------                                                 
         1 Tom                                                                 
         2 Mary                                                                 

已选择 2 行。

SQL> drop table TESTSAVEPOINT;

表已删除。

SQL> show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME         
---------------- ------------------------------ ------------ -------------------
TESTSAVEPOINT    BIN$+0nemp5PSe2adQphqd6t4A==$0 TABLE        2015-11-23:15:07:06
SQL> select * from TESTSAVEPOINT;
select * from TESTSAVEPOINT
              *
第 1 行出现错误:
ORA-00942: 表或视图不存在


SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID                               
------------------------------ ------- ----------                               
DEPT                           TABLE                                           
EMP                            TABLE                                           
BONUS                          TABLE                                           
SALGRADE                       TABLE                                           
EMP10                          TABLE                                           
TEST2                          TABLE                                           
TESTDELETE                     TABLE                                           
BIN$+0nemp5PSe2adQphqd6t4A==$0 TABLE                                           
EMP20                          TABLE                                           
EMPINFO                        TABLE                                           

已选择 10 行。

SQL> select * from BIN$+0nemp5PSe2adQphqd6t4A==$0;
select * from BIN$+0nemp5PSe2adQphqd6t4A==$0
                  *
第 1 行出现错误:
ORA-00933: SQL 命令未正确结束


SQL> select * from "BIN$+0nemp5PSe2adQphqd6t4A==$0";

       TID TNAME                                                               
---------- --------------------                                                 
         1 Tom                                                                 
         2 Mary                                                                 

已选择 2 行。

SQL> --注意:管理员没有回收站
SQL> show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME         
---------------- ------------------------------ ------------ -------------------
TESTSAVEPOINT    BIN$+0nemp5PSe2adQphqd6t4A==$0 TABLE        2015-11-23:15:07:06
SQL> --闪回删除
SQL> flashdback table TESTSAVEPOINT to before drop;
SP2-0734: 未知的命令开头 "flashdback..." - 忽略了剩余的行。
SQL> flashback table TESTSAVEPOINT to before drop;

闪回完成。

SQL> show recyclebin
SQL> select * from TESTSAVEPOINT;

       TID TNAME                                                               
---------- --------------------                                                 
         1 Tom                                                                 
         2 Mary                                                                 

已选择 2 行。

SQL> create table test5
  2  (tid number,
  3   tname varchar2(20),
  4   gender varchar2(2) check (gender in ('男','女')),
  5   sal number check (sal > 0)
  6  );

表已创建。

SQL> insert into test5 values(1,'Tom','男',1000);

已创建 1 行。

SQL> insert into test5 values(2,'Mike','啊',1000);
insert into test5 values(2,'Mike','啊',1000)
*
第 1 行出现错误:
ORA-02290: 违反检查约束条件 (SCOTT.SYS_C005393)


SQL> create table student
  2  (
  3    sid number constraint student_pk primary key,
  4    sname varchar2(20) constraint student_name_notnull not null,
  5    gender varchar2(2) constraint student_gender check (gender in ('男','女')),
  6    email varchar2(40) constraint student_email_unique unique
  7                       constraint student_email_notnull not null,
  8    deptno number constraint student_fk references dept(deptno) on delete set null
  9  );

表已创建。

SQL> insert into student values(1,'Tom','男','tom@126.com',10);

已创建 1 行。

SQL> insert into student values(2,'Mike','男','tom@126.com',10);
insert into student values(2,'Mike','男','tom@126.com',10)
*
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (SCOTT.STUDENT_EMAIL_UNIQUE)


SQL> spool off


SQL> --视图
SQL> create view empinfoview
  2  as
  3  select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname
  4  from emp e, dept d
  5  where e.deptno=d.deptno;
create view empinfoview
            *
第 1 行出现错误:
ORA-01031: 权限不足


SQL> /

视图已创建。

SQL> desc empinfoview
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 EMPNO                                     NOT NULL NUMBER(4)
 ENAME                                              VARCHAR2(10)
 SAL                                                NUMBER(7,2)
 ANNSAL                                             NUMBER
 DNAME                                              VARCHAR2(14)

SQL> select * from empinfoview;

     EMPNO ENAME             SAL     ANNSAL DNAME                               
---------- ---------- ---------- ---------- --------------                     
      7369 SMITH             800       9600 RESEARCH                           
      7499 ALLEN            1600      19200 SALES                               
      7521 WARD             1250      15000 SALES                               
      7566 JONES            2975      35700 RESEARCH                           
      7654 MARTIN           1250      15000 SALES                               
      7698 BLAKE            2850      34200 SALES                               
      7782 CLARK            2450      29400 ACCOUNTING                         
      7788 SCOTT            3000      36000 RESEARCH                           
      7839 KING             5000      60000 ACCOUNTING                         
      7844 TURNER           1500      18000 SALES                               
      7876 ADAMS            1100      13200 RESEARCH                           

     EMPNO ENAME             SAL     ANNSAL DNAME                               
---------- ---------- ---------- ---------- --------------                     
      7900 JAMES             950      11400 SALES                               
      7902 FORD             3000      36000 RESEARCH                           
      7934 MILLER           1300      15600 ACCOUNTING                         

已选择 14 行。

SQL> create or replace view empinfoview
  2  as
  3  select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname
  4  from emp e, dept d
  5  where e.deptno=d.deptno
  6  with read only;

视图已创建。

SQL> --物化视图
SQL> host cls

SQL> --序列
SQL> create sequence myseq;

序列已创建。

SQL> create table testseq
  2  (tid number,tname varchar2(20));

表已创建。

SQL> select myseq.currval from dual;
select myseq.currval from dual
       *
第 1 行出现错误:
ORA-08002: 序列 MYSEQ.CURRVAL 尚未在此会话中定义


SQL> select myseq.nextval from dual;

   NEXTVAL                                                                     
----------                                                                     
         1                                                                     

已选择 1 行。

SQL> select myseq.currval from dual;

   CURRVAL                                                                     
----------                                                                     
         1                                                                     

已选择 1 行。

SQL> insert into testseq values(myseq.nextval,'aaa');

已创建 1 行。

SQL> /

已创建 1 行。

SQL> /

已创建 1 行。

SQL> /

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from testseq;

       TID TNAME                                                               
---------- --------------------                                                 
         2 aaa                                                                 
         3 aaa                                                                 
         4 aaa                                                                 
         5 aaa                                                                 

已选择 4 行。

SQL> insert into testseq values(myseq.nextval,'aaa');

已创建 1 行。

SQL> /

已创建 1 行。

SQL> rollback;

回退已完成。

SQL> insert into testseq values(myseq.nextval,'aaa');

已创建 1 行。

SQL> select * from testseq;

       TID TNAME                                                               
---------- --------------------                                                 
         2 aaa                                                                 
         3 aaa                                                                 
         4 aaa                                                                 
         5 aaa                                                                 
         8 aaa                                                                 

已选择 5 行。

SQL> host cls

SQL> --索引
SQL> create index myindex
  2  on emp(deptno);

索引已创建。

SQL> --同义词 (别名)
SQL> --为emp表起别名
SQL> create synonym myemp for emp;
create synonym myemp for emp
*
第 1 行出现错误:
ORA-01031: 权限不足


SQL> /

同义词已创建。

SQL> select * from myemp;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM
---------- ---------- --------- ---------- -------------- ---------- ----------
    DEPTNO                                                                     
----------                                                                     
      7369 SMITH      CLERK           7902 17-12月-80            800           
        20                                                                     

      7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300
        30                                                                     

      7521 WARD       SALESMAN        7698 22-2月 -81           1250        500
        30                                                                     


     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM
---------- ---------- --------- ---------- -------------- ---------- ----------
    DEPTNO                                                                     
----------                                                                     
      7566 JONES      MANAGER         7839 02-4月 -81           2975           
        20                                                                     

      7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400
        30                                                                     

      7698 BLAKE      MANAGER         7839 01-5月 -81           2850           
        30                                                                     


     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM
---------- ---------- --------- ---------- -------------- ---------- ----------
    DEPTNO                                                                     
----------                                                                     
      7782 CLARK      MANAGER         7839 09-6月 -81           2450           
        10                                                                     

      7788 SCOTT      ANALYST         7566 19-4月 -87           3000           
        20                                                                     

      7839 KING       PRESIDENT            17-11月-81           5000           
        10                                                                     


     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM
---------- ---------- --------- ---------- -------------- ---------- ----------
    DEPTNO                                                                     
----------                                                                     
      7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0
        30                                                                     

      7876 ADAMS      CLERK           7788 23-5月 -87           1100           
        20                                                                     

      7900 JAMES      CLERK           7698 03-12月-81            950           
        30                                                                     


     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM
---------- ---------- --------- ---------- -------------- ---------- ----------
    DEPTNO                                                                     
----------                                                                     
      7902 FORD       ANALYST         7566 03-12月-81           3000           
        20                                                                     

      7934 MILLER     CLERK           7782 23-1月 -82           1300           
        10                                                                     


已选择 14 行。

SQL> --create synonym myemp1 for hr.employees;
SQL> create synonym myemp1 for hr.employees;

同义词已创建。

SQL> select count(*) from hr.employees;
select count(*) from hr.employees
                        *
第 1 行出现错误:
ORA-00942: 表或视图不存在


SQL> select count(*) from hr.employees;

  COUNT(*)                                                                     
----------                                                                     
       107                                                                     

已选择 1 行。

SQL> select count(*) from myemp1;

  COUNT(*)                                                                     
----------                                                                     
       107                                                                     

已选择 1 行。

SQL> spool off