1. 程式人生 > >Oracle 資料庫入門之----------------------子查詢

Oracle 資料庫入門之----------------------子查詢

子查詢

 

SQL> set linesize 200

SQL> --查詢工資比SCOTT高的員工資訊

SQL> --1. SCOTT的工資

SQL> select sal from emp where ename='SCOTT';

 

       SAL                                                                                                                                                                                              

----------                                                                                                                                                                                              

      3000                                                                                                                                                                                              

 

SQL> --2. 查詢比3000高的員工

SQL> select * from emp where sal >3000;

 

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                              

---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                              

      7839 KING       PRESIDENT            17-11-81           5000                    10                                                                                                              

 

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> 注意的問題:1

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