Oracle学习笔记 3 --条件查询( where )

之前的查询,结果是表中所有的记录。如果想要只是显示满足一定条件的记录,就要使用条件查询或者称为限定查询。

条件查询的基本语法:

SELECT   * |(具体的列名,如 ename ,empno)

FROM   table(表名)

WHERE  限定条件

小记:where字句要紧跟在from字句之后。

例:查询emp表中,工资大于2000的员工的所有信息

[plain]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-family:'Courier New';font-size:12px;">SQL> select * from  emp  where sal  >  2000 ;  
  2.    
  3. EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO  
  4. ----- ---------- --------- ----- ----------- --------- --------- ------  
  5.  7566 JONES      MANAGER    7839 1981/4/2      2975.00               20  
  6.  7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30  
  7.  7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10  
  8.  7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20  
  9.  7839 KING       PRESIDENT       1981/11/17    5000.00               10  
  10.  7902 FORD       ANALYST    7566 1981/12/3     3000.00               20  
  11.    
  12. 6 rows selected</span>  

在上例中,使用了 >  ,在操作条件中,还可以使用 >= ,= ,<= ,<,等操作符号。关于不等号,特别说明一下,使用 != 和<>都是可以的。

例:查询员工号不是7566的雇员信息。

[plain]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-family:'Courier New';font-size:12px;">SQL> select * from emp where empno != 7566 ;</span>  
[plain]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-family:'Courier New';font-size:12px;">SQL> select * from emp where empno <> 7566 ;  
  2.    
  3. EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO  
  4. ----- ---------- --------- ----- ----------- --------- --------- ------  
  5.  7369 SMITH      CLERK      7902 1980/12/17     800.00               20  
  6.  7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30  
  7.  7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30  
  8.  7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00     30  
  9.  7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30  
  10.  7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10  
  11.  7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20  
  12.  7839 KING       PRESIDENT       1981/11/17    5000.00               10  
  13.  7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30  
  14.  7876 ADAMS      CLERK      7788 1987/5/23     1100.00               20  
  15.  7900 JAMES      CLERK      7698 1981/12/3      950.00               30  
  16.  7902 FORD       ANALYST    7566 1981/12/3     3000.00               20  
  17.  7934 MILLER     CLERK      7782 1982/1/23     1300.00               10  
  18.    
  19. 13 rows selected</span>  
上面两种方式的查询结果都是一样的。


逻辑运算:

1)AND ,逻辑并;

2)OR , 逻辑或;

3)NOT,逻辑否;

例:查询员工部门号为10且工资大于2000的雇员信息。

[plain]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-family:'Courier New';font-size:12px;">SQL> select * from emp  where deptno = 10 and sal > 2000 ;  
  2.    
  3. EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO  
  4. ----- ---------- --------- ----- ----------- --------- --------- ------  
  5.  7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10  
  6.  7839 KING       PRESIDENT       1981/11/17    5000.00               10</span>  

如果要同时满足两个甚至是多个条件,使用and 连接条件字句。


例:查询员工部门号为10 或者员工工资大于2000 的雇员信息。

[plain]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-family:'Courier New';font-size:12px;">SQL> select * from emp  where deptno = 10 or sal > 2000 ;  
  2.    
  3. EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO  
  4. ----- ---------- --------- ----- ----------- --------- --------- ------  
  5.  7566 JONES      MANAGER    7839 1981/4/2      2975.00               20  
  6.  7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30  
  7.  7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10  
  8.  7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20  
  9.  7839 KING       PRESIDENT       1981/11/17    5000.00               10  
  10.  7902 FORD       ANALYST    7566 1981/12/3     3000.00               20  
  11.  7934 MILLER     CLERK      7782 1982/1/23     1300.00               10  
  12.    
  13. 7 rows selected</span>  
两个条件之间是一种或者的关系,我们使用逻辑或  OR ,来连接两个条件。

例:查询员工工资大于2000,同时可以领取奖金的员工信息。上面的查询结果中,comm是空的,表示查询结果是null。

[plain]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-family:'Courier New';font-size:12px;">SQL> select * from emp where sal > 1000 and comm is not null;  
  2.    
  3. EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO  
  4. ----- ---------- --------- ----- ----------- --------- --------- ------  
  5.  7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30  
  6.  7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30  
  7.  7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00     30  
  8.  7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30</span>  

上面查询的是奖金不为空,所以使用了not ,如果要查询comm为空的雇员信息,则条件改为 comm is null 。


其他比较运算符:

BETWEEN ... ON ...在两个值之间,包括边界

IN(set)值为列表set中的一个

LIKE模糊查询

IS NULL查询空值

between on 语法格式:

字段 between 小值 on  大值

例:查询工资在1500 到 2500 的雇员信息

[plain]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-family:'Courier New';font-size:12px;">SQL> select * from emp where sal between 1500 and 2500 ;  
  2.    
  3. EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO  
  4. ----- ---------- --------- ----- ----------- --------- --------- ------  
  5.  7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30  
  6.  7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10  
  7.  7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30</span>  
上面的查询结果和语句  select * from emp where sal>1500 and sal < 2500; 的查询结果是一样的。

IN的语法格式:

in(值1, 值2 , 值3 )

例:查询雇员编号为 7499  , 7782 , 7844 的雇员信息

[plain]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-family:'Courier New';font-size:12px;">SQL> select  *  from emp where empno in (7499 , 7782 , 7844) ;  
  2.    
  3. EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO  
  4. ----- ---------- --------- ----- ----------- --------- --------- ------  
  5.  7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30  
  6.  7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10  
  7.  7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30</span>  

LIKE的使用要注意通配符的问题,有两种通配符:

% --任意多个字符的匹配

_--只匹配一个字符


例;查询名字中第二个字符是M的雇员信息。

[plain]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-family:'Courier New';font-size:12px;">SQL> select * from emp where ename like '_M%';  
  2.    
  3. EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO  
  4. ----- ---------- --------- ----- ----------- --------- --------- ------  
  5.  7369 SMITH      CLERK      7902 1980/12/17     800.00               20</span>  

转译字符:上面中使用了 % , _ 作为了匹配字符,如果名字中含有下划线,要如何查询呢?

此时我们就要进行转译;

语法格式:

SELECT ename

FROM   emp

WHERE  ename LIKE ‘IT\_%‘ escape ‘\‘;

判空操作:

例:查询表中没有奖金的员工信息

[plain]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-family:'Courier New';font-size:12px;">SQL> select * from emp where comm is  null ;  
  2.    
  3. EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO  
  4. ----- ---------- --------- ----- ----------- --------- --------- ------  
  5.  7369 SMITH      CLERK      7902 1980/12/17     800.00               20  
  6.  7566 JONES      MANAGER    7839 1981/4/2      2975.00               20  
  7.  7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30  
  8.  7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10  
  9.  7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20  
  10.  7839 KING       PRESIDENT       1981/11/17    5000.00               10  
  11.  7876 ADAMS      CLERK      7788 1987/5/23     1100.00               20  
  12.  7900 JAMES      CLERK      7698 1981/12/3      950.00               30  
  13.  7902 FORD       ANALYST    7566 1981/12/3     3000.00               20  
  14.  7934 MILLER     CLERK      7782 1982/1/23     1300.00               10  
  15.    
  16. 10 rows selected</span>  

如果在where条件语句中含有,字符或者是日期,要用单引号将其引起来。

格式如下:

SELECT ename, hiredate, sal

FROM   emp

WHERE  hiredate = '7-6-1994'

SELECT ename, deptno

FROM  emp

WHERE  ename ='Whalen';

字符大小写敏感,日期的格式敏感,日期格式为 dd-m月-yy 。

排序:

使用 ORDER BY 字句对查询的结果进行排序。

语法格式:

select distinct * | (具体的列名) 

from 表名

where 查询的条件

ORDER BY 排序的字段 1 , 字段2 , 字段3   (asc | desc ) ;

asc-> 表示的升序 ,desc –> 表示的是降序 ,默认的是升序排列。排序除了可以按照 表中的字段进行排序,还可以使用别名来排序。

例:查询emp表中所有的信息,对结果进行排序,首先对部门号进行排序,部门号一样则按工资降序进行排列,如果工资一样,则按员工号进行降序排列。

[plain]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:12px;"><span style="font-family:'Courier New';">SQL> select * from emp order by deptno ,sal desc  ,empno desc;  
  2.    
  3. EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO  
  4. ----- ---------- --------- ----- ----------- --------- --------- ------  
  5.  7839 KING       PRESIDENT       1981/11/17    5000.00               10  
  6.  7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10  
  7.  7934 MILLER     CLERK      7782 1982/1/23     1300.00               10  
  8.  7902 FORD       ANALYST    7566 1981/12/3     3000.00               20  
  9.  7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20  
  10.  7566 JONES      MANAGER    7839 1981/4/2      2975.00               20  
  11.  7876 ADAMS      CLERK      7788 1987/5/23     1100.00               20  
  12.  7369 SMITH      CLERK      7902 1980/12/17     800.00               20  
  13.  7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30  
  14.  7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30  
  15.  7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30  
  16.  7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00     30  
  17.  7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30  
  18.  7900 JAMES      CLERK      7698 1981/12/3      950.00               30  
  19.    
  20. 14 rows selected</span>  
  21. </span>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值