好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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 WHERE条件和排序的详细内容...

  阅读:33次