Oracle笔记2(过滤和排序)

本文介绍了SQL查询的基本语法和一些实用技巧,包括条件筛选、模糊查询、排序等操作,并详细解释了如何处理NULL值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL> --查询10号部门的员工
SQL> select *
  2  from emp
  3  where deptno=10;

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                     
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                     
      7782 CLARK    MANAGER         7839 09-6月 -81      2450                    10                                     
      7839 KING     PRESIDENT            17-11月-81      5000                    10                                     
      7934 MILLER   CLERK           7782 23-1月 -82      1300                    10                                     

SQL> --字符串大小写敏感
SQL> --查询名叫KING的员工
SQL> select *
  2  from mep
  3  /
from mep
     *
第 2 行出现错误: 
ORA-00942: 表或视图不存在 


SQL> ed
已写入 file afiedt.buf

  1  select *
  2  from emp
  3* where ename='KING'
SQL> /

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

SQL> ed
已写入 file afiedt.buf

  1  select *
  2  from emp
  3* where ename='King'
SQL> /

未选定行

SQL> --日期格式敏感
SQL> --查询入职日期是17-11月-81的员工
SQL> select *
  2  from emp
  3  where hiredate='17-11月-81';

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

SQL> ed
已写入 file afiedt.buf

  1  select *
  2  from emp
  3* where hiredate='1981-11-17'
SQL> /
where hiredate='1981-11-17'
               *
第 3 行出现错误: 
ORA-01861: 文字与格式字符串不匹配 


SQL> --修改日期格式
SQL> select * from v$nls_parameters;

PARAMETER                                                                                                               
----------------------------------------------------------------                                                        
VALUE                                                                                                                   
----------------------------------------------------------------                                                        
NLS_LANGUAGE                                                                                                            
SIMPLIFIED CHINESE                                                                                                      
                                                                                                                        
NLS_TERRITORY                                                                                                           
CHINA                                                                                                                   
                                                                                                                        
NLS_CURRENCY                                                                                                            
¥                                                                                                                      
                                                                                                                        

PARAMETER                                                                                                               
----------------------------------------------------------------                                                        
VALUE                                                                                                                   
----------------------------------------------------------------                                                        
NLS_ISO_CURRENCY                                                                                                        
CHINA                                                                                                                   
                                                                                                                        
NLS_NUMERIC_CHARACTERS                                                                                                  
.,                                                                                                                      
                                                                                                                        
NLS_CALENDAR                                                                                                            
GREGORIAN                                                                                                               
                                                                                                                        

PARAMETER                                                                                                               
----------------------------------------------------------------                                                        
VALUE                                                                                                                   
----------------------------------------------------------------                                                        
NLS_DATE_FORMAT                                                                                                         
DD-MON-RR                                                                                                               
                                                                                                                        
NLS_DATE_LANGUAGE                                                                                                       
SIMPLIFIED CHINESE                                                                                                      
                                                                                                                        
NLS_CHARACTERSET                                                                                                        
ZHS16GBK                                                                                                                
                                                                                                                        

PARAMETER                                                                                                               
----------------------------------------------------------------                                                        
VALUE                                                                                                                   
----------------------------------------------------------------                                                        
NLS_SORT                                                                                                                
BINARY                                                                                                                  
                                                                                                                        
NLS_TIME_FORMAT                                                                                                         
HH.MI.SSXFF AM                                                                                                          
                                                                                                                        
NLS_TIMESTAMP_FORMAT                                                                                                    
DD-MON-RR HH.MI.SSXFF AM                                                                                                
                                                                                                                        

PARAMETER                                                                                                               
----------------------------------------------------------------                                                        
VALUE                                                                                                                   
----------------------------------------------------------------                                                        
NLS_TIME_TZ_FORMAT                                                                                                      
HH.MI.SSXFF AM TZR                                                                                                      
                                                                                                                        
NLS_TIMESTAMP_TZ_FORMAT                                                                                                 
DD-MON-RR HH.MI.SSXFF AM TZR                                                                                            
                                                                                                                        
NLS_DUAL_CURRENCY                                                                                                       
¥                                                                                                                      
                                                                                                                        

PARAMETER                                                                                                               
----------------------------------------------------------------                                                        
VALUE                                                                                                                   
----------------------------------------------------------------                                                        
NLS_NCHAR_CHARACTERSET                                                                                                  
AL16UTF16                                                                                                               
                                                                                                                        
NLS_COMP                                                                                                                
BINARY                                                                                                                  
                                                                                                                        
NLS_LENGTH_SEMANTICS                                                                                                    
BYTE                                                                                                                    
                                                                                                                        

PARAMETER                                                                                                               
----------------------------------------------------------------                                                        
VALUE                                                                                                                   
----------------------------------------------------------------                                                        
NLS_NCHAR_CONV_EXCP                                                                                                     
FALSE                                                                                                                   
                                                                                                                        

已选择 19 行。

SQL> set linesize 200
SQL> select * from v$nls_parameters;

PARAMETER                                                        VALUE                                                                                                                                  
---------------------------------------------------------------- ----------------------------------------------------------------                                                                       
NLS_LANGUAGE                                                     SIMPLIFIED CHINESE                                                                                                                     
NLS_TERRITORY                                                    CHINA                                                                                                                                  
NLS_CURRENCY                                                     ¥                                                                                                                                     
NLS_ISO_CURRENCY                                                 CHINA                                                                                                                                  
NLS_NUMERIC_CHARACTERS                                           .,                                                                                                                                     
NLS_CALENDAR                                                     GREGORIAN                                                                                                                              
NLS_DATE_FORMAT                                                  DD-MON-RR                                                                                                                              
NLS_DATE_LANGUAGE                                                SIMPLIFIED CHINESE                                                                                                                     
NLS_CHARACTERSET                                                 ZHS16GBK                                                                                                                               
NLS_SORT                                                         BINARY                                                                                                                                 
NLS_TIME_FORMAT                                                  HH.MI.SSXFF AM                                                                                                                         

PARAMETER                                                        VALUE                                                                                                                                  
---------------------------------------------------------------- ----------------------------------------------------------------                                                                       
NLS_TIMESTAMP_FORMAT                                             DD-MON-RR HH.MI.SSXFF AM                                                                                                               
NLS_TIME_TZ_FORMAT                                               HH.MI.SSXFF AM TZR                                                                                                                     
NLS_TIMESTAMP_TZ_FORMAT                                          DD-MON-RR HH.MI.SSXFF AM TZR                                                                                                           
NLS_DUAL_CURRENCY                                                ¥                                                                                                                                     
NLS_NCHAR_CHARACTERSET                                           AL16UTF16                                                                                                                              
NLS_COMP                                                         BINARY                                                                                                                                 
NLS_LENGTH_SEMANTICS                                             BYTE                                                                                                                                   
NLS_NCHAR_CONV_EXCP                                              FALSE                                                                                                                                  

已选择 19 行。

SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd';

会话已更改。

SQL> select *
  2  from emp
  3  where hiredate='1981-11-17';

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

SQL> select *
  2  from emp
  3  where hiredate='17-11月-81';
where hiredate='17-11月-81'
               *
第 3 行出现错误: 
ORA-01861: 文字与格式字符串不匹配 


SQL> alter session set NLS_DATE_FORMAT='DD-MON-RR';

会话已更改。

SQL> host cls

SQL> --between and
SQL> --查询薪水1000~2000之间的员工
SQL> select *
  2  from emp
  3  where sal between 1000 and 2000;

     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                                                                                                                     
      7844 TURNER   SALESMAN        7698 08-9月 -81      1500          0         30                                                                                                                     
      7876 ADAMS    CLERK           7788 23-5月 -87      1100                    20                                                                                                                     
      7934 MILLER   CLERK           7782 23-1月 -82      1300                    10                                                                                                                     

已选择 6 行。

SQL> ed
已写入 file afiedt.buf

  1  select *
  2  from emp
  3* where sal between 2000 and 1000
SQL> /

未选定行

SQL>  --between and: 1.含有边界  2.小值在前 大值在后
SQL> host cls

SQL> --in 在集合中
SQL> --查询10和20号部门的员工
SQL> select *
  2  from emp
  3  where deptno in (10,20);

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

已选择 8 行。

SQL> --查询不是10和20号部门的员工
SQL> ed
已写入 file afiedt.buf

  1  select *
  2  from emp
  3* where deptno not in (10,20)
SQL> /

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                                                                     
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                                                                     
      7499 ALLEN    SALESMAN        7698 20-2月 -81      1600        300         30                                                                                                                     
      7521 WARD     SALESMAN        7698 22-2月 -81      1250        500         30                                                                                                                     
      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> --null值 3、如果集合中含有null,不能使用not in;但可以使用in
SQL> ed
已写入 file afiedt.buf

  1  select *
  2  from emp
  3* where deptno not in (10,20,null)
SQL> /

未选定行

SQL> ed
已写入 file afiedt.buf

  1  select *
  2  from emp
  3* where deptno in (10,20,null)
SQL> /

     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