Oracle--条件查询、模糊查询和排序详解

使用where语句对结果进行过滤
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
WHERE condition(s)};
比较运算符
操作符含义
=等于( 不 是 = = \color{red}{不是==} ==
>大于
>=大于、等于
<小于
<=小于、等于
<>不等于( 也 可 以 是 ! = \color{red}{也可以是 !=} !=
其它比较运算符
操作符含义
BETWEEN…AND…在两个值之间( 包 含 边 界 \color{red}{包含边界}
IN(set)等于值列表中的一个
LIKE模糊查询
IS NULL空值
逻辑运算符
操作符含义
AND逻辑并
OR逻辑或
NOT逻辑否

Where语句示例

1. 字符和日期
  • 字符和日期要包含在单引号中。
  • 字 符 大 小 写 敏 感 , 日 期 格 式 敏 感 。 \color{red}{字符大小写敏感,日期格式敏感。}
  • 默认的日期格式是 D D − M O N − R R 。 \color{red}{DD-MON-RR。} DDMONRR

示例:查询名叫KING的员工

select * from emp where ename='KING';

在这里插入图片描述

示例:查询入职日期是17-11月-81的员工

select * from emp where hiredate='17-11月-81';

在这里插入图片描述

2. 非空和空的限制

示例:查询每月能得到奖金的雇员
分析:只要字段中存在内容表示不为空,如果不存在内容就是null。
语法:列名 IS NOT NULL
为空:列名 IS NULL

select * from emp where sal is not null;

在这里插入图片描述
示例:查询工资大于1500或者有奖金的雇员。
分析:多个查询条件或满足,条件之间使用“OR”

select * from emp where sal > 1500 or comm is not null;

在这里插入图片描述
示例:查询工资不大于1500和没有奖金的人
语法:NOT(查询条件)

select * from emp where not(sal > 1500) and comm is null;

在这里插入图片描述

范围限制

示例:基本工资大于1500但是小于3000的全部雇员
分析:sal>1500, sal<3000

select * from emp where sal>1500 and sal<3000;

在这里插入图片描述
b e t w e e n \color{red}{between} between a n d \color{red}{and} and 等价于 sal>=1500 and sal <= 3000

select * from emp where sal between 1500 and 3000;

在这里插入图片描述

示例:查询1981-1-1到1981-12-31号入职的雇员
分析:between and 不仅可以使用在数值之间,也可以用在日期的区间

select * from emp where hiredate between '1-1月-1981' and '31-12月-1981';

在这里插入图片描述

示例:查询雇员编号是7369,7499,7521的雇员编号的具体信息
分析:此时指定了查询范围,那么可以使用 I N \color{red}{IN} IN关键字
语法:

  • 列名 IN (值1,值2,…)
  • 列名 NOT IN (值1,值2,…)

其中的值不仅可以是数值类型,也可以是字符串

select * from emp where empno in (736974997521);

在这里插入图片描述

示例:查询雇员姓名是‘SMITH’,‘ALLEN’,‘WARD’的雇员具体信息

select * from emp where ename in ('SMIT','ALLEN','WARD');

在这里插入图片描述

注 意 : 如 果 集 合 中 含 有 n u l l , 不 能 使 用 n o t \color{red}{注意:如果集合中含有null,不能使用not} :null使not i n ; 但 可 以 使 用 i n \color{red}{ in;但可以使用in} in;使in
示例:查询不是10和20号部门的员工

select * from emp where deptno not in (10,20);

在这里插入图片描述
添加一个null到集合中

select * from emp where deptno not in (10,20,null);

在这里插入图片描述

模糊查询

在常用的网站中经常会有模糊查询,即:输入一个关键字,把符合的内容全部的查询出来,在sql中使用 L I K E \color{red}{LIKE} LIKE语句完成。
在LIKE中主要使用一下两种通配符

  1. “%” : 可以匹配任意长度的内容
  2. “_” : 可以匹配一个长度的内容

示例:查询出所有雇员姓名中第二个字符包含“M”的雇员

select * from emp where ename like '_M%';

在这里插入图片描述

在LIKE中如果没有关键字表示查询全部

示例:查询名字中带有“M”的雇员

select * from emp where ename like '%M%';

在这里插入图片描述

在oracle中不等号的用法可以有两种形式“<>”和"!="
示例:查询雇员编号不是7369的雇员信息

select * from emp where empno <> 7369;
select * from emp where empno != 7369;

在这里插入图片描述

查 询 带 有 特 殊 字 符 的 关 键 字 \color{red}{查询带有特殊字符的关键字}
插入一条数据:

insert into emp (empno,ename) values(14,'TOM_CAT');

示例:查询名字含有下划线的员工
分析:使用escape关键字声明转义字符,一般使用“\”

select * from emp where ename like '%\_%' escape '\';

在这里插入图片描述

SQL优化

select * from emp where condition1 and condition2

在 O r a c l e 中 , w h e r e 子 句 是 从 右 向 左 进 行 解 析 的 。 \color{red}{在Oracle中,where子句是从右向左进行解析的。} Oraclewhere
所以,在and条件中,我们应尽量把可能为false的条件放在右边,这样就可以短路计算提升效率。

使用order by对结果排序

排序的语法:
在sql中可以使用ORDER BY 对查询结果进行排序
语法:

SELECT * | 列名 FROM 表名 {WHERE 查询条件} ORDER BY 列名1 ASC|DESC,列名2...ASC|DESC

示例:查询雇员的工资从低到高
分析:ORDER BY 列名 默认的排序规则是升序排列,可以不指定ASC,如果按着降序排列必须指定DESC

select * from emp order by sal;

在这里插入图片描述
如果存在多个排序字段可以用逗号分隔。
asc和desc作用于距离最近的列。

select * from emp order by sal asc, hiredate desc;

在这里插入图片描述
order by后面可以 + 列、表达式、别名、序号

select empno,ename,sal,sal*12 年薪 from emp order by 年薪 desc;

在这里插入图片描述

注 意 : O R D E R \color{red}{注意:ORDER } ORDER B Y 语 句 要 放 在 最 后 执 行 \color{red}{BY 语句要放在最后执行 } BY

示例:查询雇员信息,按奖金升序排序:

select * from emp order by comm;

示例:查询雇员信息,按奖金降序排序:

select * from emp order by comm desc;

在这里插入图片描述
显然排序结果出现了错误, 因 为 在 O r a c l e 中 n u l l 最 大 \color{red}{因为在Oracle中null最大} Oraclenull
解决方法:
可以使用 null first, nulls last 来指定null的值显示的位置。

select * from emp order by comm desc nulls last;

在这里插入图片描述

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值