07-条件查询

Posted C-Asher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了07-条件查询相关的知识,希望对你有一定的参考价值。

条件查询

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

WHERE子句

语法

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

关键字

WHERE 条件

示例

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

模糊查询

在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. 除了\' _ \' ,\' % \' , " \' "之外其他符号直接写即可表达其原本含义

排序查询

​ 在检索数据时,如果把数据从数据库中直接读取出来,这时查询结果将按照默认顺序排列,但往往这种默认排列顺序并不是用户所需要看到的。尤其是返回数据量较大时,用户查看自己想要的信息非常不方便,因此需要对检索的结果集进行排序。

语法

select column1,column2,... from table_name where condition order by column1 asc/desc;
关键字:order by正序/倒序(升序/降序):asc(默认,可省略)/desc 

ORDER BY 子句可以根据查询结果中的一个列或多个列对查询结果进行排序,并且第一个排序项是主要的排序依据,其次那些是次要的排序依据。

分类:    
1.按排序规则        
  1)升序       排序项为升序        
  2)降序	   排序项为降序        
  3)同升同降    前排序项为升序/降序,后排序项也为升序/降序        
  4)升降混合    前排序项为升序/降序,后排序项也为降序/升序    
2.按排序内容        
  1)原字段        
  2)表达式(函数、计算)        
  3)代号(字段别名)

示例

select * from emp order by sal asc; --查询emp表中根据工资升序排序 (升序,asc 可省略)select * from emp order by sal desc; --根据工资列降序排序        (降序)

select * from emp order by deptno,sal;--先根据部门升序排序,再根据工资升序排序           (同升)

select * from emp order by deptno desc,sal desc;--先根据部门升序降序,再根据工资降序排序 (同降)

select * from emp order by deptno desc,sal;--先根据部门降序排序,再根据工资升序排序   (升降混合)

select * from emp order by sal + 500;--查询emp表,将工资加500后升序排序              (表达式)

select * from emp order by lower(ename) desc;--查询emp表,将姓名改为小写后降序排序      (函数)

select ename,sal s from emp order by s;--查询emp表中的员工姓名,工资,并按照工资升序排序  (代号)

image-20210804232209448

image-20210804232244113

image-20210804232323041

NULL值的默认排序和强制排序

语法

1)NULL值的默认排序为极大值,即升序排序时空值排在最后,降序排序时空值排在最前2)
   强制空值排在最前:NULLS FIRST3)
   强制空值排在最后:NULLS LAST

示例

select * from emp order by comm;  --升序排序时空值排在最后

image-20210804231429680

select * from emp order by comm null first;  --强制null排在前面

image-20210804231645959

以上是关于07-条件查询的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.8 有条件地插入 sql 片段

iOS 相当于 Android 片段/布局

在 JSP 中的 <% %> 代码片段中添加链接

PHP WordPress条件为主页SlideDeck主题代码片段

中继:有条件地在突变的胖查询中包含字段

条件片段和导航重用