首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Oracle 19C入门到精通之筛选查询

在SELECT语句中使用WHERE子句实现对数据行的筛选操作,只有满足WHERE子句判断条件的行才会显示在结果集中。

SELECT columns_list

FROM table_name

WHERE conditional_expression

columns_list——字段列表;

table_name——表名;

conditional_expression——筛选条件表达式;

1. 比较筛选

可以在WHERE子句中使用比较运算符来筛选数据,基本的“比较筛选”操作主要有以下6种情况:

A=B:比较A与B是否相等。

A!B或A< >B:比较A与B是否不相等。

A>B:比较A是否大于B。

A

A>=B:比较A是否大于或等于B。

A

--查询emp表中工资(sal)大于2000的数据记录

select empno,ename,sal from emp where sal > 2000;

除了基本的“比较筛选”操作,还有以下两个特殊的“比较筛选”操作:

A{operator}ANY(B):表示A与B中的任何一个元素进行operator运算符的比较,只要有一个比较值为TRUE,就返回数据行。

A{operator}ALL(B):表示A与B中的所有元素进行operator运算符的比较,只有与所有元素比较值都为TRUE,才返回数据行。

--使用all关键字过滤工资(sal)同时不等于3000、5000、800的员工记录

select empno,ename,sal from emp where sal  all(3000,5000,800);

注意:在进行比较筛选的过程中,字符串和日期的值必须使用单引号标识,否则Oracle会提示标识符无效。

2. 使用特殊关键字筛选

SQL语言提供了LIKE、IN、BETWEEN和IS NULL等关键字来筛选数据;

2.1. LIKE关键字——字符串模式匹配或字符串模糊查询

LIKE关键字需要使用通配符在字符串内查找指定的模式,主要使用以下两个通配符:

%:代表0个或多个字符。

_:代表一个且只能是一个字符。

--查询emp表中以A开头的员工名称

select empno,ename,job from emp where ename like 'A%';

在LIKE关键字前面加上NOT,表示否定的判断,如果LIKE为真,则NOT LIKE为假。另外,也可以在IN、BETWEEN、IS NULL和IS NAN等关键字前面加上NOT来表示否定的判断

--查询工作是MANAGER的员工,但是不记得MANAGER的准确拼写了,仅记得第一个字母是M,第三个字母是N,第五个字母是G

select empno,ename,job from emp where job like 'M_N_G%';

LIKE关键字还可以帮助简化某些WHERE子句;例如:

--在emp表中,显示1981年入职的员工信息

select empno,ename,sal,hiredate from emp where hiredate like '%81%';

如果要查询的字符串中含有“%”或“_”,可以使用转义escape关键字实现查询;

--创建一张与dept表的结构和数据都相同的表dept_temp

create table dept_temp  as  select * from dept;

--插入一条数据

insert into dept_temp  values(60,'IT_RESEARCH','SHANGHAI');

--提交

commit;

显示临时表dept_temp中所有部门名称以IT_开头的数据行,代码如下:

--通过转义字符\将_转义为本来的含义下划线而不再是单字符通配符

select * from dept_temp where dname like 'IT\_%' escape '\';

没有必要一定使用“\”字符作为转义符,可以使用任何字符来作为转义符。许多Oracle的专业人士之所以经常使用“\”字符作为转义符,是因为该字符在UNIX操作系统和C语言中就是转义符。

--使用a作为转义字符,查询出的结果是一样的

select * from dept_temp where dname like 'ITa_%' escape 'a';

2.2. IN关键字——测试一个数据值是否匹配一组目标值中的一个

IN关键字的格式是IN(目标值1,目标值2,目标值3,…)

--emp表中,使用IN关键字查询职务为CLERK、MANAGER或ANALYST的员工信息

select empno,ename,job from emp where job in('CLERK','MANAGER','ANALYST');

NOT IN表示查询指定的值不在某一组目标值中,这种方式在实际应用中也很常见。

--查询职务不为CLERK、MANAGER或ANALYST的员工信息

select empno,ename,job from emp where job not in('CLERK','MANAGER','ANALYST');

2.3. BETWEEN关键字——用于比较一个值是否在指定范围内

通常使用BETWEEN…AND和NOT…BETWEEN…AND来指定范围条件。

使用BETWEEN…AND查询条件时,指定的第一个值必须小于第二个值。因为BETWEEN…AND实质是查询条件“大于或等于第一个值,并且小于或等于第二个值”的简写形式,即BETWEEN…AND要包括两端的值,等价于比较运算符(>=…

--在emp表中,查询工资(sal)为1000~2000的员工信息

select empno,ename,sal from emp where sal between 1000 and 2000;

NOT BETWEEN…AND语句用于返回在两个指定值范围以外的某个数据值,并且不包括两个指定的值。

--在emp表中,查询工资(sal)不在1000~2000范围内的员工信息

select empno,ename,sal from emp where sal not between 1000 and 2000;

2.4. IS NULL关键字——筛选出特定列的值为空的行

空值(NULL)从技术上来说就是未知的、不确定的值,但空值与空字符串不同,因为空值是不存在的值,而空字符串是长度为0的字符串。

因为空值代表的是未知的值,所以并不是所有的空值都相等。例如,student表中有两名学生的年龄未知,但无法证明这两名学生的年龄相等,因此不能用“=”运算符来检测空值。SQL引入了IS NULL关键字来检测特殊值之间的等价性,IS NULL关键字通常在WHERE子句中使用。

--IS NULL关键字查询emp表中没有奖金(comm为空值)的员工信息

select empno,ename,sal,comm from emp where comm is null;

3. 逻辑筛选

逻辑筛选是指在WHERE子句中使用逻辑运算符AND、OR和NOT进行数据筛选操作,这些逻辑运算符可以把多个筛选条件组合起来,便于获取更加准确的数据记录。

AND逻辑运算符表示两个逻辑表达式之间是“逻辑与”的关系,可以使用AND运算符加比较运算符来代替BETWEEN…AND关键字

--在emp表中,使用AND运算符查询工资(sal)为1000~2000的员工信息

select empno,ename,sal from emp where sal >= 1000 and sal 

--在emp表中,查询工资(sal)为1000~2000的员工信息

select empno,ename,sal from emp where sal between 1000 and 2000;

上面两条语句执行结果是一样的;

OR逻辑运算符表示两个逻辑表达式之间是“逻辑或”的关系,两个表达式的结果中有一个为TRUE,则这个逻辑或表达式的值就为TRUE

--在emp表中,使用OR逻辑运算符查询工资低于1000或工资高于2000的员工信息

select empno,ename,sal from emp where sal  2000;

NOT逻辑运算符用于对表达式执行逻辑非运算,即对条件取反,如果条件为true,使用NOT运算符后该条件将变为false,反之亦然。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OXy1qLm6Mr3CUNvXhX2q5yTg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券