07-条件查询

条件查询

查找一个特定条件的表,Oracle提供了WHERE子句来限制查询条件。

WHERE子句

语法

select 列名1,列名2,....from 数据源  where 条件;
查询    列名1,列名2,....从   数据源  什么   条件;

关键字

WHERE 条件 -- 条件为true,查询符合true的结果,  为False时,查询无结果

示例

select ename from emp where job = 'CLERK'; --查找job为CLERK的员工

image-20210726114617482

逻辑运算符

内容:
> 大于   < 小于    = 等于    >= 大于或等于   <= 小于或等于   !=   <> --后面两个都为不等于

示例

select * from emp where sal > 2000;

image-20210726191637510

select * from emp where 1=0; --恒不成立表达式    条件恒不为真,查询无结果

image-20210726192141543

select * from emp where 1=1; --恒成立表达式       条件为恒为真,查询有结果,相当于运行select * from emp;

image-20210726192517997

注意

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值的数据

image-20210726205056651

算数运算符

+  -  *  /  

-- 15.每名员工的年终奖是2000,请显示基本工资在2000元以上的员工的月工资,年总工资(12月工资+年终奖)
select sal "月工资", sal * 12 + 2000 "年总工资" from emp where sal > 2000;

image-20210803112046995

布尔连接符

and/or
and -- 并且   两者  都为真      结果为真
or  -- 或者   其中  有一个为真   结果为真

--找出部门10中的经理(MANAGER)和部门20中的普通员工(CLERK)
select * from emp where job = 'MANAGER'and deptno = 10 or job = 'CLERK' and deptno = 20;

image-20210803112718251

非相关条件

条件与查询语句不相关

select * from emp where 1=1; --恒成立     查询条件恒成立 , 全部查询   , 与条件无关

image-20210803113159629

select * from emp where 1=0; --恒不成立   查询条件恒不成立, 查询无结果 ,与 查询语句无关连

image-20210803113137180

范围查询

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...等同

image-20210803150806497

注意
--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等同

image-20210803184850444

--查询emp表中部门编号不为10和20的员工信息
select * from emp where deptno not in(10,20);
select * from emp where deptno != 10 and deptno != 20; --与not in等同

image-20210803185242333

注意
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 大于集合中 最小值就能查询数据
*/

image-20210804185913166

--查询emp表中工资比1000,2000,3000都小的员工信息
select * from emp where sal < all(1000,2000,3000);

/*
all 满足集合中所有条件
即:	
    当 sal < all(集合)时, sal 小于集合中 最小值才能查到数据	
    当 sal > all(集合)时, sal 大于集合中 最大值才能查到数据
*/

image-20210804190428326

null值的布尔运算

因为NULL是不可以用来做比较的,无论什么值跟NULL作比较都会返回一个FALSE值

null值在in/not in 中的运算

select * from emp where sal in (800,null); -- 因为in相当于or 所以能查找800的值

image-20210816200237303

select * from emp where sal not in (800,null); -- 因为not in相当于and所以条件为false,无查询结果

image-20210816200401473

null值在any/all中的运算

select * from emp where sal > any(900,null)  -- 因为any相当于or,任意一个, 所以能查询大于900的结果

image-20210816200945611

select * from emp where sal > all(900, null); -- 因为all相当于and,查询条件返回false,所以查询无结果

image-20210816201129703

模糊查询

在WHERE子句中使用LIKE关键字查询数据的方式也称为字符串模式匹配或字符串模糊查询。LIKE关键字需要使用通配符在字符串内查找指定的模式。

通配符:

  1. ' _ ' : 下滑线表示任意一个字符 有且只有一个。
  2. ' % ' : 百分号代表任意数量的字符。

语法

select column1,column2,... from table_name where column1 like/not like '目标格式';
/*
解释:从数据源TABLE_NAME中查询出字段COLUMN1的内容包含/不包含目标格式的内容,      并列出COLUMN1,COLUMN2,…等几列数据
*/

示例

select * from emp where ename like '__A%';  --查询名字第三位是A的员工信息

image-20210804221828613

转义字符

当目标格式包含 ' _ ' , " ' ",' % ',需要其本意时,我们就需要转义

语法
where column1 like/not like '目标格式' escape '自行设置的转义字符';
示例
select * from emp where ename like '%\%%' escape '\'; ----查询包含%的员工信息

image-20210804222643555

注意
  1. 只有' _ ',' % ', " ' " 需要转义

  2. 两个英文单引号表达一个英文单引号的含义

select * from emp where ename like '%''%';  --查询员工姓名带有单引号的员工信息

image-20210804224303310

  1. 除了' _ ' ,' % ' , " ' "之外其他符号直接写即可表达其原本含义
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值