当前位置:数据库 > Oracle >>

Oracle WHERE条件和排序

Oracle WHERE条件和排序
 
一、条件简介
了解条件的一般形式
最普通的条件如下形式:
gyj@OCM> Select * from t1 where name='gyj2';
        ID NAME           SALARY
---------- ---------- ----------
         2 gyj2             8000
  
条件只能跟在WHERE之后,用来限制输出的行。通常条件的形式是“列名 比较运算符 值”的形式。上面例子中,比较运算符就是“=”,也就是寻找NAME等于’gyj2’的行。
   www.zzzyk.com  
二、比较运算符
1、运算符形式的比较符号(PPT)
运算符            含义
=                     等于
>                     大于
>=                   大于等于
<                     小于
<=                   小于等于
<> ,!= ,^=    不等于
了解各种比较运算符的意义,这一块比较简单,我就不多说了。
2、非运算符形式的比较符号  www.zzzyk.com  
了解BETWEEN、IN、LIKE、IS NULL 、EXIST的使用,并了解通配符在LIKE中的使用
(1)列名 [NOT] BETWEEN …… AND …… :在两数之间(并且包括这两个数)
gyj@OCM> select * from t1 where id between 4 and 6;
        ID NAME           SALARY
---------- ---------- ----------
         4 gyj4            15000
         5 gyj5            12000
         6 gyj6            12000
显示雇员编号在4和6之间的。在BETWEEN前加上NOT,意义正好相反,表示在两数之外:
gyj@OCM> select * from t1 where id not between 4 and 6;
        ID NAME           SALARY
---------- ---------- ----------
         2 gyj2             8000
         3 gyj3            10000
         7 gyj7            12000
         1 gyj1            12000
         1 gyj1            20000
(2)列名 [NOT] IN (值1,值2,……) : 列值等于值1或等于值2或值3,等等。
gyj@OCM>  select * from t1 where id in (5,6,7);
        ID NAME           SALARY
---------- ---------- ----------
         5 gyj5            12000
         7 gyj7            12000
         6 gyj6            12000
显示雇员编号等于5,6,7的,如果我们在IN前面加上NOT,显示的结果是id不等于5或6或7的行。
gyj@OCM>  select * from t1 where id not in (5,6,7); 
gyj@OCM> select * from t1 where id not in (5,6,7);
        ID NAME           SALARY
---------- ---------- ----------
         2 gyj2             8000
         3 gyj3            10000
         4 gyj4            15000
         1 gyj1            12000
         1 gyj1            20000
(3)字符型列LIKE ‘字符串’ :字符串匹配运算符。
gyj@OCM> select * from t1 where name like 'gyj2';
        ID NAME           SALARY
---------- ---------- ----------
         2 gyj2             8000
看它的效果,它有点类似于“=”。但是它的功能比等号强。因为它可以使用如下通配符:
_ : 对应任意的一个字符。
% : 对应任意长度的任意字符。
其中%的任意长度可以是从0到任意长度。而_对应的字符,必需是一个。
gyj@OCM> select * from t1 where name like '_o%';
        ID NAME           SALARY
---------- ---------- ----------
         9 Joe             22000
        10 Tom             28000
‘_o%’的意义是,第一个字符任意,第二个字符是o,第三个字符向后任意字符,且长度任意,可以没有,也就是只有两个字符,如’No’,o后面没有字符了。也可以如示例子中显示的结果Joe,Tom,o后面分别有1个字符。
如果将条件变为:
gyj@OCM> select * from t1 where name like '%o_';
        ID NAME           SALARY
---------- ---------- ----------
         9 Joe             22000
        10 Tom             28000
        11 guoyJoe         30000
'%o_',这次是o的后面必须有一个字符,什么字符无所谓。o的前面有什么字符、有没有字符、有多长的字符都无所谓。
有了这两个通配符,LIKE的功能就比等号强多了,比如我想显示所有姓“郭”的人,只要将条件定为:name like ‘郭%’ 即可。如果想显示姓郭的,但整个姓名是两个字的,’郭_’ ,姓名是三个字的’郭__’。等等。
还有一点,在LIKE运算符后的字符串中,%和_不再是普通的字符,而有了特殊的含意。类似的情况我们前面也遇到过,单引号在字符串中也有特殊的含意,表示字符串的开始和结束。如果我想在字符串中使用普通意义的单引号,可以连续输入两个单引号,在字符串中,就表示一个普通意义的字符:单引号。想要在LIKE后的字符串中使用普通意义上的字符%、_ ,也需要额外的处理。比如:'DBA\_%' ESCAPE '\' ,它表示以DBA_开头的任意字符串。ESCAPE指定了一个字符 \ ,因此,在字符串中 \ 后的_ 将不再是特殊字符通配符,而是普通字符_。LIKE加通配符的功能是很强的。但它的查找速度要比普通的等号慢。这很好理解,功能强了后,必然性能要低。因此,在使用时要根据情况选用。不可滥用。
gyj@OCM> select * from t1 where name like 'DBA\_%' ESCAPE '\';
        ID NAME           SALARY
---------- ---------- ----------
        14 DBA_y             30000
gyj@OCM> select * from t1 where name like 'DBA\%%' ESCAPE '\';
        ID NAME           SALARY
---------- ---------- ----------
        15 DBA%y             30000
(4)IS NULL 和 IS NOT NULL
我们以前曾讲到过,NULL就是未知,不知道。任何数据和未知运算,结果还是未知。就像一个不知道是几的数加1,结果还是不知道是几。同样,
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,