条件查询
查找一个特定条件的表,Oracle提供了WHERE子句来限制查询条件。
WHERE子句
语法
select 列名1,列名2,....from 数据源 where 条件;
查询 列名1,列名2,....从 数据源 什么 条件;
关键字
WHERE 条件 -- 条件为true,查询符合true的结果, 为False时,查询无结果
示例
select ename from emp where job = 'CLERK'; --查找job为CLERK的员工
逻辑运算符
内容:
> 大于 < 小于 = 等于 >= 大于或等于 <= 小于或等于 != <> --后面两个都为不等于
示例
select * from emp where sal > 2000;
select * from emp where 1=0; --恒不成立表达式 条件恒不为真,查询无结果
select * from emp where 1=1; --恒成立表达式 条件为恒为真,查询有结果,相当于运行select * from emp;
注意
null(空值)不参与运算
select * from emp;
select * from emp where comm > 0; --如果有空值(null值),空值不参与运算
select * from emp where comm !=null; --没有数据
--判断是否为空值
is / is not
select * from emp where comm is not null; --查询非空数据
select * from emp where comm is null; --查询null值的数据
算数运算符
+ - * /
-- 15.每名员工的年终奖是2000,请显示基本工资在2000元以上的员工的月工资,年总工资(12月工资+年终奖)
select sal "月工资", sal * 12 + 2000 "年总工资" from emp where sal > 2000;
布尔连接符
and/or
and -- 并且 两者 都为真 结果为真
or -- 或者 其中 有一个为真 结果为真
--找出部门10中的经理(MANAGER)和部门20中的普通员工(CLERK)
select * from emp where job = 'MANAGER'and deptno = 10 or job = 'CLERK' and deptno = 20;
非相关条件
条件与查询语句不相关
select * from emp where 1=1; --恒成立 查询条件恒成立 , 全部查询 , 与条件无关
select * from emp where 1=0; --恒不成立 查询条件恒不成立, 查询无结果 ,与 查询语句无关连
范围查询
between ...... and ......
语法
select column1,column2,... from table_name where column1 between value1 and value2;
查询 列名1,列名2,... 从 数据表 什么 条件 为 从value1到value2之间
示例
--从emp表中查询出工资为1000到2000的员工信息
select * from emp where sal between 1000 and 2000;
select * from emp where sal >= 1000 and sal <= 2000; --与between...and...等同
注意
--1、VALUE1 < VALUE2--2、包含边界值
in / not in 包含查询
语法
select colum1,colum2,... from table_name where colum1 in/not in(集合)
示例
--查询emp表中部门10和20的员工信息
select * from emp where deptno in(10,20);
select * from emp where deptno = 10 or deptno = 20; --与in等同
--查询emp表中部门编号不为10和20的员工信息
select * from emp where deptno not in(10,20);
select * from emp where deptno != 10 and deptno != 20; --与not in等同
注意
1、集合:一组有着相同属性(相同数据类型)的数据
2、集合面向特定的字段
3、集合中的数据类型一定要统一
4、任何一个字段和一个空值做任何比较时得到的都是空值(或者说都不成立)
5、COLUMN1 IN (VALUE1, VALUE2) 等同于 COLUMN1 = VALUE1 OR COLUMN1 = VALUE2;
6、COLUMN1 NOT IN (VALUE1,VALUE2) 等同于 COLUMN1 <> VALUE1 AND COLUMN1 <> VALUE2;
7、结合5.和6. :IN (集合) 集合中有空值是会被忽略,将符合非空值条件的数据取出NOT IN (集合) 集合中有空值时会导致结果中没有数据取出
any / all
语法
select column1,column2,... from table_name where column1 < any/all(集合);
any(集合): 集合的 任意一个元素 满足条件即可 与集合内元素比较结果 只要一个为true ,就返回数据行
all(集合):集合的 所有元素必需都 满足条件 与集合内元素比较结果 都为true ,就返回数据行
示例
--查询emp表中工资有比1000,2000,3000小的员工信息
select * from emp where sal < any(1000,2000,3000);
/*
any 满足任意条件即可。
即:
当sal < any(集合)时 , sal 小于集合中 最大值就能查询数据
当sal > any(集合)时 , sal 大于集合中 最小值就能查询数据
*/
--查询emp表中工资比1000,2000,3000都小的员工信息
select * from emp where sal < all(1000,2000,3000);
/*
all 满足集合中所有条件
即:
当 sal < all(集合)时, sal 小于集合中 最小值才能查到数据
当 sal > all(集合)时, sal 大于集合中 最大值才能查到数据
*/
null值的布尔运算
因为NULL是不可以用来做比较的,无论什么值跟NULL作比较都会返回一个FALSE值
null值在in/not in 中的运算
select * from emp where sal in (800,null); -- 因为in相当于or 所以能查找800的值
select * from emp where sal not in (800,null); -- 因为not in相当于and所以条件为false,无查询结果
null值在any/all中的运算
select * from emp where sal > any(900,null) -- 因为any相当于or,任意一个, 所以能查询大于900的结果
select * from emp where sal > all(900, null); -- 因为all相当于and,查询条件返回false,所以查询无结果
模糊查询
在WHERE子句中使用LIKE关键字查询数据的方式也称为字符串模式匹配或字符串模糊查询。LIKE关键字需要使用通配符在字符串内查找指定的模式。
通配符:
- ' _ ' : 下滑线表示任意一个字符 有且只有一个。
- ' % ' : 百分号代表任意数量的字符。
语法
select column1,column2,... from table_name where column1 like/not like '目标格式';
/*
解释:从数据源TABLE_NAME中查询出字段COLUMN1的内容包含/不包含目标格式的内容, 并列出COLUMN1,COLUMN2,…等几列数据
*/
示例
select * from emp where ename like '__A%'; --查询名字第三位是A的员工信息
转义字符
当目标格式包含 ' _ ' , " ' ",' % ',需要其本意时,我们就需要转义
语法
where column1 like/not like '目标格式' escape '自行设置的转义字符';
示例
select * from emp where ename like '%\%%' escape '\'; ----查询包含%的员工信息
注意
-
只有' _ ',' % ', " ' " 需要转义
-
两个英文单引号表达一个英文单引号的含义
select * from emp where ename like '%''%'; --查询员工姓名带有单引号的员工信息
- 除了' _ ' ,' % ' , " ' "之外其他符号直接写即可表达其原本含义