Yuens' blog
内容参考《李兴华Oracle数据库》的限定查询部分(链接见文末参考),本节主要包括:[toc]
限定查询用来控制行。
简单查询最大的问题在于可以显示一张数据表中的所有数据,但很多情况下并不需要所有数据,往往需要做一些过滤,而这样的查询就属于限定查询。限定查询的语法如下:
SELECT [DISTINCT] * | 列 [别名], 列 [别名], … FROM 表名称 [别名] [WHERE 条件(s)] | 步骤三:控制要显示的数据列 |
步骤一:确定数据源 | |
步骤二:根据判断条件选择参与的数据行 |
注:中括号都是可选的。
在使用WHERE子句操作的时候可以进行条件判断,而对于条件的判断主要使用如下的运算:
而且在进行限定查询的时可使用以下的逻辑运算:
关系运算是最简单的运算符号,使用的符号有:“>、<、>=、<=、<>、!=”。其中不等于有两种表示(“<>”或“!=”)
SELECT * FROM emp WHERE sal>2000;
SELECT * FROM emp WHERE sal<=1600;
SELECT * FROM emp WHERE ename=’smith’;
SELECT * FROM emp WHERE ename=’SMITH’;
在Oracle中数据是区分大小写的,像一些系统发现密码是区分大小写的情况,非常适合于Oracle保存。
销售人员是看职位的数据,职位的字段是job,而现在的关系是取反,不是等于。
SELECT * FROM emp WHERE job<>’SALESMAN’;
或
SELECT * FROM emp WHERE job!=’SALESMAN’;
两种符号都可以实现不等于,根据开发者个人决定。
在WHERE子句中是可以同时编写多个条件的,但多个条件之间必须使用逻辑连接。
AND | 条件AND条件AND条件 | è所有条件同时满足 |
OR | 条件OR条件OR条件 | è所有条件只要有一个满足即可 |
SELECT * FROM emp WHERE job=’SALESMAN’ AND sal>1200;
SELECT * FROM emp WHERE sal>1200 AND sal>=3000;
SELECT * FROM emp WHERE job=’MANAGER’ AND deptno=10;
SELECT * FROM emp WHERE job=’CLERK’ OR sal>3000;
正常情况下,如果1>0,返回结果是TRUE,若加上NOT,则结果变为FALSE,即对原本的判断结果进行取反。
SELECT * FROM emp WHERE NOT job=’CLERK’;
若觉得NOT不好用,可以用!=或者<>。
所有的逻辑运算可以在任何的WHERE运算之中使用,进行条件的连接。
如果现在知道了某一个范围的两个值(最大,最小),那么就可以写为:
字段 BETWEEN 最小值 AND 最大值
在进行计算过程中也会包含了最大和最小的两个值的判断。
这时是一个范围,所以面对范围不再需要复杂的AND连接,直接用BETWEEN:
SELECT * FROM emp WHERE sal BETWEEN 1200 AND 3000;
但是通过之前的程序发现一个特点:所有的关系运算符是不区分数据类型的。比方下面两个判断:
无论字符串或数字类型,都可使用这些运算符判断,所以BETWEEN…AND也可以,即所有的符号都支持字符串、数字、日期型数据的操作。
范围:’1981-01-01’(’01-1月-1981’)~’1981-12-31’(’31-12月-81’)
SELECT * FROM emp WHERE hiredate BETWEEN ’01-1月-1981’ AND ’31-12月-81’;
所有的符号都不分判断的数据类型。比方字符串也可用BETWEEN…AND。