文章出處

SQL> -- 查詢工資比scott用戶高的所有的用戶信息
SQL> select sal f
  2  ;

*
第 2 行出現錯誤:
ORA-00923: 未找到要求的 FROM 關鍵字


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

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

SQL> select * from
  2  emp
  3  where sal > 3000;

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

SQL> set linesize 200;
SQL> /

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

SQL> select * from
  2  emp where sal > (
  3   select sal from emp where ename = 'SCOTT'
  4  );

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

SQL> /*
SQL> 子查詢解決什么問題: 一個查詢查詢不到結果的時候,可以使用子查詢來豐富查詢的條件
SQL> 子查詢的格式: 用一個小括號包含,然后在里面寫sql語句
SQL> 子查詢的注意事項:
SQL> 1. 一定要有小括號
SQL> 2. 一定要注意你的書寫格式
SQL> 3. 子查詢可以放在select,from ,where having,order by 后面
SQL> 4. 子查詢一定不能放在group by的后面
SQL> 5. 子查詢和主查詢可以不是同一張表,只要子查詢的結果在主查詢中能用就可以
SQL> 5. 子查詢中一般都不排序,但是在TOP-N中需要排序
SQL> 7. 一般是先執行子查詢操作,在執行主查詢操作,但是在相關子查詢中先執行主查詢,在執行子查詢
SQL> 8. 對于子查詢的結果,如果是單行只能用單行操作符,如果是多行,只能用多行操作符
SQL> 9. 自查中的null處理
SQL> *、
SQL> */
SQL> -- 子查詢放在select后面
SQL> select ename,job,(select sal from emp where empno=7566) 子查詢 from emp;

ENAME                JOB                    子查詢                                                                                                                                                     
-------------------- ------------------ ----------                                                                                                                                                     
SMITH                CLERK                    2975                                                                                                                                                     
ALLEN                SALESMAN                 2975                                                                                                                                                     
WARD                 SALESMAN                 2975                                                                                                                                                     
JONES                MANAGER                  2975                                                                                                                                                     
MARTIN               SALESMAN                 2975                                                                                                                                                     
BLAKE                MANAGER                  2975                                                                                                                                                     
CLARK                MANAGER                  2975                                                                                                                                                     
SCOTT                ANALYST                  2975                                                                                                                                                     
KING                 PRESIDENT                2975                                                                                                                                                     
TURNER               SALESMAN                 2975                                                                                                                                                     
ADAMS                CLERK                    2975                                                                                                                                                     

ENAME                JOB                    子查詢                                                                                                                                                     
-------------------- ------------------ ----------                                                                                                                                                     
JAMES                CLERK                    2975                                                                                                                                                     
FORD                 ANALYST                  2975                                                                                                                                                     
MILLER               CLERK                    2975                                                                                                                                                     

已選擇14行。

SQL> select ename,job,(select sal from emp) 子查詢 from emp;
select ename,job,(select sal from emp) 子查詢 from emp
                  *
第 1 行出現錯誤:
ORA-01427: 單行子查詢返回多個行


SQL> -- 放在select后面的時候結果只能是單行的
SQL> desc emp;
 名稱                                                                                                              是否為空? 類型
 ----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
 EMPNO                                                                                                             NOT NULL 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> desc dept;
 名稱                                                                                                              是否為空? 類型
 ----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
 DEPTNO                                                                                                            NOT NULL NUMBER(2)
 DNAME                                                                                                                      VARCHAR2(14)
 LOC                                                                                                                        VARCHAR2(13)

SQL> -- from后面放置子查詢 重點要掌握的
SQL> -- 查詢員工的姓名 工資 job
SQL> select ename,sal,job from emp;

ENAME                       SAL JOB                                                                                                                                                                    
-------------------- ---------- ------------------                                                                                                                                                     
SMITH                       800 CLERK                                                                                                                                                                  
ALLEN                      1600 SALESMAN                                                                                                                                                               
WARD                       1250 SALESMAN                                                                                                                                                               
JONES                      2975 MANAGER                                                                                                                                                                
MARTIN                     1250 SALESMAN                                                                                                                                                               
BLAKE                      2850 MANAGER                                                                                                                                                                
CLARK                      2450 MANAGER                                                                                                                                                                
SCOTT                      3000 ANALYST                                                                                                                                                                
KING                       5000 PRESIDENT                                                                                                                                                              
TURNER                     1500 SALESMAN                                                                                                                                                               
ADAMS                      1100 CLERK                                                                                                                                                                  

ENAME                       SAL JOB                                                                                                                                                                    
-------------------- ---------- ------------------                                                                                                                                                     
JAMES                       950 CLERK                                                                                                                                                                  
FORD                       3000 ANALYST                                                                                                                                                                
MILLER                     1300 CLERK                                                                                                                                                                  

已選擇14行。

SQL> select * from (
  2  select ename,job,sal from emp
  3  );

ENAME                JOB                       SAL                                                                                                                                                     
-------------------- ------------------ ----------                                                                                                                                                     
SMITH                CLERK                     800                                                                                                                                                     
ALLEN                SALESMAN                 1600                                                                                                                                                     
WARD                 SALESMAN                 1250                                                                                                                                                     
JONES                MANAGER                  2975                                                                                                                                                     
MARTIN               SALESMAN                 1250                                                                                                                                                     
BLAKE                MANAGER                  2850                                                                                                                                                     
CLARK                MANAGER                  2450                                                                                                                                                     
SCOTT                ANALYST                  3000                                                                                                                                                     
KING                 PRESIDENT                5000                                                                                                                                                     
TURNER               SALESMAN                 1500                                                                                                                                                     
ADAMS                CLERK                    1100                                                                                                                                                     

ENAME                JOB                       SAL                                                                                                                                                     
-------------------- ------------------ ----------                                                                                                                                                     
JAMES                CLERK                     950                                                                                                                                                     
FORD                 ANALYST                  3000                                                                                                                                                     
MILLER               CLERK                    1300                                                                                                                                                     

已選擇14行。

SQL> -- where 后面跟子查詢
SQL> select * from
  2  emp where sal > (
  3   select sal from emp where ename = (
  4    select ename from emp where empno = 7566;
 select sal from emp where ename = (
 *
第 3 行出現錯誤:
ORA-00921: 意外的 SQL 命令結尾


SQL>  )
SP2-0042: 未知命令 ")" - 其余行忽略。
SQL> ); select * from
SP2-0734: 未知的命令開頭 "); select ..." - 忽略了剩余的行。
SQL> emp where sal > (
SP2-0734: 未知的命令開頭 "emp where ..." - 忽略了剩余的行。
SQL>  select sal from emp where ename = (
  2    select ename from emp where empno = 7566
  3   )
  4  );
)
*
第 4 行出現錯誤:
ORA-00933: SQL 命令未正確結束


SQL> select * from
  2  emp where sal > (
  3   select sal from emp where ename = (
  4    select ename from emp where empno = 7566
  5   )
  6  );

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO                                                                                          
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------                                                                                          
      7788 SCOTT                ANALYST                  7566 19-4月 -87           3000                    20                                                                                          
      7839 KING                 PRESIDENT                     17-11月-81           5000                    10                                                                                          
      7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20                                                                                          

SQL> -- 一定要注意的地方: 子查詢不能過多的去嵌套,一般嵌套三層,加多了就影響性能
SQL> -- order by 后面跟子查詢
SQL> -- 一般在order
SQL> -- 一般在Order by 后面不跟子查詢
SQL> select * from emp order by (select count(*) from emp where ename='SCOTT');

     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                                                                                          
      7934 MILLER               CLERK                    7782 23-1月 -82           1300                    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                                                                                          
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10                                                                                          

已選擇14行。

SQL> select * from emp order by (select empno from emp where ename='SCOTT');

     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                                                                                          
      7934 MILLER               CLERK                    7782 23-1月 -82           1300                    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                                                                                          
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10                                                                                          

已選擇14行。

SQL> select * from emp order by (select empno from emp where ename='SCOTT') desc;

     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                                                                                          
      7934 MILLER               CLERK                    7782 23-1月 -82           1300                    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                                                                                          
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10                                                                                          

已選擇14行。

SQL> select * from emp order by (select count(*) from emp where ename='SCOTT') desc;

     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                                                                                          
      7934 MILLER               CLERK                    7782 23-1月 -82           1300                    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                                                                                          
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10                                                                                          

已選擇14行。

SQL> -- order by 后面不能跟子查詢,語法上是可以跟的,但是跟了不起作用
SQL> -- group by 后面不能跟子查詢
SQL> --  5. 子查詢和主查詢可以不是同一張表,只要子查詢的結果在主查詢中能用就可以
SQL> -- 查詢部門名稱為SAL的所有的員工信息
SQL> desc dept;
 名稱                                                                                                              是否為空? 類型
 ----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
 DEPTNO                                                                                                            NOT NULL NUMBER(2)
 DNAME                                                                                                                      VARCHAR2(14)
 LOC                                                                                                                        VARCHAR2(13)

SQL> desc emp;
 名稱                                                                                                              是否為空? 類型
 ----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
 EMPNO                                                                                                             NOT NULL 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 *
  2  from emp
  3  where deptno = (
  4   select deptno from dept where dname='SAL'
  5  );

未選定行

SQL> select * from dept;

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

SQL> 4
SP2-0226: 行號  無效
SQL> select *
  2  from emp
  3  where deptno=(
  4   select deptno from dept where dname='SALES'
  5  );

     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 rownum,empno,sal from emp;

    ROWNUM      EMPNO        SAL                                                                                                                                                                       
---------- ---------- ----------                                                                                                                                                                       
         1       7369        800                                                                                                                                                                       
         2       7499       1600                                                                                                                                                                       
         3       7521       1250                                                                                                                                                                       
         4       7566       2975                                                                                                                                                                       
         5       7654       1250                                                                                                                                                                       
         6       7698       2850                                                                                                                                                                       
         7       7782       2450                                                                                                                                                                       
         8       7788       3000                                                                                                                                                                       
         9       7839       5000                                                                                                                                                                       
        10       7844       1500                                                                                                                                                                       
        11       7876       1100                                                                                                                                                                       

    ROWNUM      EMPNO        SAL                                                                                                                                                                       
---------- ---------- ----------                                                                                                                                                                       
        12       7900        950                                                                                                                                                                       
        13       7902       3000                                                                                                                                                                       
        14       7934       1300                                                                                                                                                                       

已選擇14行。

SQL> desc emp;
 名稱                                                                                                              是否為空? 類型
 ----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
 EMPNO                                                                                                             NOT NULL 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 rownum,sal,empno from emp order by sal;

    ROWNUM        SAL      EMPNO                                                                                                                                                                       
---------- ---------- ----------                                                                                                                                                                       
         1        800       7369                                                                                                                                                                       
        12        950       7900                                                                                                                                                                       
        11       1100       7876                                                                                                                                                                       
         3       1250       7521                                                                                                                                                                       
         5       1250       7654                                                                                                                                                                       
        14       1300       7934                                                                                                                                                                       
        10       1500       7844                                                                                                                                                                       
         2       1600       7499                                                                                                                                                                       
         7       2450       7782                                                                                                                                                                       
         6       2850       7698                                                                                                                                                                       
         4       2975       7566                                                                                                                                                                       

    ROWNUM        SAL      EMPNO                                                                                                                                                                       
---------- ---------- ----------                                                                                                                                                                       
         8       3000       7788                                                                                                                                                                       
        13       3000       7902                                                                                                                                                                       
         9       5000       7839                                                                                                                                                                       

已選擇14行。

SQL> -- 行號: 一連串,不間斷的數列
SQL> --8. 對于子查詢的結果,如果是單行只能用單行操作符,如果是多行,只能用多行操作符
SQL> -- 單行操作符
SQL> -- 單行操作符: ><= <= !=
SQL> -- 查詢部門號不等于30的所有員工信息
SQL> select * from
  2  emp where deptno != 30;

     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> select *
  2  from emp
  3  where deptno != (
  4   select deptno from emp where deptno = 30
  5  );
 select deptno from emp where deptno = 30
 *
第 4 行出現錯誤:
ORA-01427: 單行子查詢返回多個行


SQL> select deptno from emp;

    DEPTNO                                                                                                                                                                                             
----------                                                                                                                                                                                             
        20                                                                                                                                                                                             
        30                                                                                                                                                                                             
        30                                                                                                                                                                                             
        20                                                                                                                                                                                             
        30                                                                                                                                                                                             
        30                                                                                                                                                                                             
        10                                                                                                                                                                                             
        20                                                                                                                                                                                             
        10                                                                                                                                                                                             
        30                                                                                                                                                                                             
        20                                                                                                                                                                                             

    DEPTNO                                                                                                                                                                                             
----------                                                                                                                                                                                             
        30                                                                                                                                                                                             
        20                                                                                                                                                                                             
        10                                                                                                                                                                                             

已選擇14行。

SQL> select empno,ename from emp where deptno=30;

     EMPNO ENAME                                                                                                                                                                                       
---------- --------------------                                                                                                                                                                        
      7499 ALLEN                                                                                                                                                                                       
      7521 WARD                                                                                                                                                                                        
      7654 MARTIN                                                                                                                                                                                      
      7698 BLAKE                                                                                                                                                                                       
      7844 TURNER                                                                                                                                                                                      
      7900 JAMES                                                                                                                                                                                       

已選擇6行。

SQL> -- 查詢部門號不為30的員工信息
SQL> select * from (select * from emp where deptno != 30);

     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> select * from (select * from emp where deptno >< 30);
select * from (select * from emp where deptno >< 30)
                                               *
第 1 行出現錯誤:
ORA-00936: 缺失表達式


SQL> select * from (select * from emp where deptno <> 30);

     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> -- <> 用來表示不等于
SQL> -- 多行操作符 int not in any all
SQL> -- 查詢和SCOTT用戶和CLARK用戶共同部門的所有員工
SQL> select * from emp where deptno in(
  2   select deptno from emp where ename='SCOTT' or ename='CLARK'
  3  );

*
第 3 行出現錯誤:
ORA-00911: 無效字符


SQL> select * from emp where deptno in(
  2   select deptno from emp where ename='SCOTT' or ename='CLARK'
  3  );

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

已選擇8行。

SQL> select * from emp where deptno not in(
  2   select deptno from emp where ename='SCOTT' or ename='CLARK'
  3  );

     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> -- 查詢比30號部門員工工資高的員工信息
SQL>
SQL> select * from emp where sal > any(
  2   select sal from emp where deptno = 30
  3  );

     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>
SQL> select * from emp where sal > (
  2   select min(sal) from emp where deptno = 30
  3  );

     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> -- 查找比30號部門所有員工工資都高的員工信息
SQL> select * from emp where sal > (
  2   select max(sal) from emp where deptno = 30
  3  );

     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> select * from emp where sal > all(
  2   select sal from emp where deptno = 30
  3  );

     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> -- 9. 子查中的null處理
SQL> -- 查詢所有部門領導的信息
SQL> desc emp;
 名稱                                                                                                              是否為空? 類型
 ----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
 EMPNO                                                                                                             NOT NULL 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
  2  emp
  3  where empno in(
  4  select mgr from emp
  5  );

     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> -- 查詢所有不是領導的員工
SQL> select *
  2  from emp
  3  where empno not in(
  4   select mgr from emp
  5  );

未選定行

SQL> select mgr from emp where mgr is not null;

       MGR                                                                                                                                                                                             
----------                                                                                                                                                                                             
      7902                                                                                                                                                                                             
      7698                                                                                                                                                                                             
      7698                                                                                                                                                                                             
      7839                                                                                                                                                                                             
      7698                                                                                                                                                                                             
      7839                                                                                                                                                                                             
      7839                                                                                                                                                                                             
      7566                                                                                                                                                                                             
      7698                                                                                                                                                                                             
      7788                                                                                                                                                                                             
      7698                                                                                                                                                                                             

       MGR                                                                                                                                                                                             
----------                                                                                                                                                                                             
      7566                                                                                                                                                                                             
      7782                                                                                                                                                                                             

已選擇13行。

SQL> select mgr,ename from emp where mgr is not null;

       MGR ENAME                                                                                                                                                                                       
---------- --------------------                                                                                                                                                                        
      7902 SMITH                                                                                                                                                                                       
      7698 ALLEN                                                                                                                                                                                       
      7698 WARD                                                                                                                                                                                        
      7839 JONES                                                                                                                                                                                       
      7698 MARTIN                                                                                                                                                                                      
      7839 BLAKE                                                                                                                                                                                       
      7839 CLARK                                                                                                                                                                                       
      7566 SCOTT                                                                                                                                                                                       
      7698 TURNER                                                                                                                                                                                      
      7788 ADAMS                                                                                                                                                                                       
      7698 JAMES                                                                                                                                                                                       

       MGR ENAME                                                                                                                                                                                       
---------- --------------------                                                                                                                                                                        
      7566 FORD                                                                                                                                                                                        
      7782 MILLER                                                                                                                                                                                      

已選擇13行。

SQL> select *
  2  from emp
  3  where empno not in(
  4   select mgr,ename from emp where mgr is not null
  5  );
 select mgr,ename from emp where mgr is not null
 *
第 4 行出現錯誤:
ORA-00913: 值過多


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

     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;


文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()