oracle实验9-11:使用where和order by子句

where和order by子句

语法

SELECT *|{[DISTINCT] 列名|表达式[别名][,...]}
FROM表名
[WHERE 条件];

where一定要放在from子句的后面
符合条件的行会被筛选出来
order by放在最后,用来排序显示结果

比较运算符

  • =>
  • >=
  • <
  • <=
  • <>
  • between...and...
  • in(列表)
  • like
  • is null

逻辑运算符

  • and
  • or
  • not


实验9:显示表的部分行和部分列,使用where子句过滤出想要的行

SQL> select deptno,ename from emp where deptno=10;

    DEPTNO ENAME                                                               
---------- ----------                                                          
        10 CLARK                                                               
        10 KING                                                                
        10 MILLER                                                              

SQL> select * from emp where ename='KING';  --字符串要单引,字符串大小写敏感,日期格式敏感

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

 between...and... 确定范围,在两个值之间(包含上下界)

SQL> select ename,sal from emp where sal between 1000 and 3000; 

ENAME             SAL
---------- ----------
ALLEN            1601
WARD             1250
JONES            2975
MARTIN           1250
BLAKE            2850
CLARK            2450
TURNER           1501
MILLER           1300

已选择8行。         


in操作,确定集合,穷举。

SQL> select deptno,ename,sal from emp where deptno in(10,20);

    DEPTNO ENAME             SAL
---------- ---------- ----------
        20 SMITH             801
        20 JONES            2975
        10 CLARK            2450
        10 KING             5000
        20 FORD             3002
        10 MILLER           1300

已选择6行。

实验10:使用like查询近似的值

like

  • _通配一个字符
  • %通配任意长度字符(包括没有字符)

SQL> select ename,deptno from emp where ename like 'J%';

ENAME          DEPTNO                                                          
---------- ----------                                                          
JONES              20                                                          
JAMES              30  

首字母为J员工,J后有没有字符,有多少字符都可以。

SQL> select ename,deptno from emp where ename like '_A%';

ENAME          DEPTNO                                                          
---------- ----------                                                          
WARD               30                                                          
MARTIN             30                                                          
JAMES              30              

第二个字母为A的员工,第一个字母必须有,是什么无所谓。

escape   想查询_,%特殊字符时,用escape。
一般使用/来转义,这里的_不是通配符,而是实际意义的_。

SQL> select ename from emp where ename like '%/_%' escape '/';

ENAME                                                                          
----------                                                                     
FORD_A                                                                         

查询null值

SQL> select ename,comm from emp where comm=null;

未选定行

null不等于null

SQL> select ename,comm from emp where comm is null;

ENAME            COMM    
---------- ----------               
SMITH     
JONES         
BLAKE
CLARK                                                                          
KING          
JAMES     
FORD   
MILLER        

已选择8行。

and运算 两个条件的交集,必须同时满足。

SQL> select ename,deptno,sal from emp where deptno=30 and sal>1200;

ENAME          DEPTNO        SAL                                               
---------- ---------- ----------                                               
ALLEN              30       1601                                               
WARD               30       1250                                               
MARTIN             30       1250                                               
BLAKE              30       2850                                               
TURNER             30       1501                                               

or运算 两个条件的并集,满足一个即可。

SQL> select ename,deptno,sal from emp where deptno=30 or sal>1200

ENAME          DEPTNO        SAL     
---------- ---------- ----------      
ALLEN               30       1601           
WARD               30       1250          
JONES               20       2975                                               
MARTIN             30       1250  
BLAKE              30       2850        
CLARK              10       2450    
KING                10       5000        
TURNER            30       1501    
JAMES              30        950       
FORD               20       3002
MILLER             10       1300   

已选择11行。

not运算 补集。

SQL> select ename,deptno,sal from emp where ename not like 'T%

ENAME          DEPTNO        SAL                                               
---------- ---------- ----------                                               
SMITH              20        801                                               
ALLEN              30       1601                                               
WARD               30       1250                                               
JONES              20       2975                                               
MARTIN             30       1250                                               
BLAKE              30       2850                                               
CLARK              10       2450                                               
KING               10       5000                                               
JAMES              30        950                                               
FORD               20       3002 
MILLER             10       1300                                               

已选择11行。

查询不是T开头的员工。

优先级

()强制优先级
1.算数运算
2.连接运算
3.关系运算
4.is[not] null ,like, [not] in
5.between
6.not
7.and
8.or


order by子句

  • 不指明都是二进制排序
  • 默认是升序asc
  • 降序要制定desc

实验11:使用order子句来进行排序操作

不说明默认升序排列

SQL> select ename,deptno,sal from emp order by sal;

ENAME          DEPTNO        SAL    
---------- ---------- ----------  
SMITH               20         801                                               
JAMES               30         950           
WARD               30       1250    
MARTIN             30       1250     
MILLER              10       1300         
TURNER             30       1501  
ALLEN               30       1601    
CLARK              10       2450       
BLAKE              30       2850    
JONES              20       2975        
FORD               20       3002    
KING                10        5000                                               

已选择12行。

降序排列

SQL> select ename,deptno,sal from emp order by sal desc

ENAME          DEPTNO        SAL                                               
---------- ---------- ----------                                               
KING               10       5000                                               
FORD               20       3002                                               
JONES              20       2975                                               
BLAKE              30       2850                                               
CLARK              10       2450                                               
ALLEN              30       1601                                               
TURNER             30       1501                                               
MILLER             10       1300                                               
MARTIN             30       1250                                               
WARD               30       1250                                               
JAMES              30        950      
SMITH              20        801                                               

已选择12行。

隐式排序

SQL> select ename from emp order by sal;

ENAME                                                                          
----------                                                                     
SMITH                                                                          
JAMES                                                                          
WARD                                                                           
MARTIN                                                                         
MILLER                                                                         
TURNER                                                                         
ALLEN                                                                          
CLARK                                                                          
BLAKE                                                                          
JONES           
FORD        
KING         

已选择12行。

别名排序

SQL> select sal*12 salary from emp order by salary;

    SALARY                                                                     
----------                                                                     
      9612                             
     11400                                                                     
     15000        
     15000                                                                     
     15600         
     18012   
     19212 
     29400            
     34200               
     35700    
     36024      
     60000           

已选择12行。

表达式排序

SQL> select sal*12 salary from emp order by sal*12;

    SALARY                                                                     
----------           
      9612                                                                     
     11400            
     15000           
     15000     
     15600          
     18012                       
     19212              
     29400                                                                     
     34200                   
     35700 
     36024          
     60000  

已选择12行。

位置排序,对集合操作是比较方便

SQL> select ename,sal from emp order by 2;

ENAME             SAL                                                          
---------- ----------                                                          
SMITH             801                                                          
JAMES             950                                                          
WARD             1250                                                          
MARTIN           1250                                                          
MILLER           1300                                                          
TURNER           1501                                                          
ALLEN            1601                                                          
CLARK            2450                                                          
BLAKE            2850                                                          
JONES            2975            
FORD             3002                                                
KING             5000        

已选择12行。

多列排序

SQL> select deptno,job,ename,sal from emp order by deptno,job;

    DEPTNO JOB       ENAME             SAL                                     
---------- --------- ---------- ----------                                     
        10 CLERK     MILLER           1300                                     
        10 MANAGER   CLARK            2450                                     
        10 PRESIDENT KING             5000                                     
        20 ANALYST   FORD             3002                                     
        20 CLERK     SMITH             801                                     
        20 MANAGER   JONES            2975                                     
        30 CLERK     JAMES             950                                     
        30 MANAGER   BLAKE            2850        
        30 SALESMAN  TURNER           1501   
        30 SALESMAN  WARD             1250   
        30 SALESMAN  ALLEN            1601               
        30 SALESMAN  MARTIN           1250    

已选择12行。

先按照部门排序,部门相同的再按照工作排序。

 

返回目录  http://www.cnblogs.com/downpour/p/3155689.html

 

posted on 2013-06-21 23:41  不吃鱼的小胖猫  阅读(865)  评论(0编辑  收藏  举报