Oracle数据库——限定查询,范围查询,NULL判断-02

本文介绍了Oracle数据库中如何进行限定查询,包括使用WHERE子句配合逻辑运算符AND、OR、NOT进行条件过滤。此外,还详细讲解了范围查询的BETWEEN...AND用法以及IN、NOT IN操作符的应用。最后,讨论了NULL值的特殊判断,强调了IS NULL和IS NOT NULL的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

限定查询

简单查询会将一张数据表之中的全部数据行进行返回,如果说现在表中的数据行过多,那么肯定无法进行浏览,所以必须对显示的数据行的返回做一个限定。
限定查询的是在简单查询的基础上增加若干个查询的限定条件,所有的限定条件使用WHERE子句表示,此时
的语法如下


SELECT [DISTINCT] * | 列名称 [别名],...  ==<确定数据显示列
FROM 表名称 [别名]
WHERE 限定条件(s);

此时给出的三个子句执行顺序如下


第一步:执行FROM子句确定数据的来源
第二步:执行WHERE子句,对要显示的数据进行条件过滤
第三步:执行SELECT子句,对要显示的数据列进行控制

在使用WHERE子句的时候可以同时设置多个条件,而这多个条件主要就是通过逻辑运算连接,逻辑运算分为
以下三种


AND:表示与操作,所有的判断条件全部返回true,才表示通过过滤,有一个false就不显示
OR:表示或操作,若干个判断条件之中有一个返回true,那么最终的结果就是true.
NOT:表示取反操作,即true变为flase,flase变为true。

但是除了逻辑的连接条件之外,也可以使用以下的一些判断符号,关系运算符,范围运算,模糊查询。

关系运算符
关系运算符主要以下的几种符号表示:<,>,<=,>=,<>(!=).
范例:要求查询出所有工资高于1500的雇员编号,姓名,职位,工资
工资高于1500意味着表示所有的数据行都显示,需要执行过滤,使用“sal>1500”表示;
现在要求查询的是部分字段,所以要SELECT来控制显示的数据列


SELECT empno,ename,job,sal
FROM emp
WHERE sal>1500;

范例:查询smith的完整信息
这个时候给出的smith是雇员的姓名,所以自然发出了如下的查询


SELECT * FROM emp WHERE ename='smith';

发现这个时候并没有任何的数据返回,因为Oracle数据库之中的数据是区分大小写的(命令不区分)
这个时候就必须修改字符串的常量


SELECT * FROM emp WHERE ename='SMITH';

范例:查询所有办事员(CLERK)的信息
现在一定要按照job字段查


SELECT * FROM emp WHERE job='CLERK';

范例:查询所有办事员(CLERK)的信息,同时要求工资大于1000
现在是设置两个查询条件,而且这两个查询条件应该同时满足,使用AND连接


SELECT * FROM emp WHERE job='CLERK' AND sal>1000;

范例:查询出所有销售人员或工资大于等于3000的全部雇员信息
所有的销售人员通过job字段执行过滤,工资使用sal字段执行过滤,两个条件的连接使用OR完成


SELECT *
FROM emp
WHERE job='SALESMAN' OR sal>=3000 ;

如果在整个查询之中使用了NOT,那么就表示取反
范例:结果取反


SELECT *
FROM emp
WHERE NOT(job='SALESMAN' OR sal>=3000) ;

逻辑运算只有AND和OR是进行连接的,NOT是针对于结果求反

范围查询:BETWEEN...AND

那么试想一个问题,如果说现在要求查询出工资在1500-3000之间的全部雇员信息
范例:传统思路实现


SELECT  *
FROM emp
WHERE sal>=1500 AND sal<=3000;

但是现在查询的毕竟是一个范围,既然是范围,那么就可以采用如下语法完成:


字段 BETWEEN 最小值 AND 最大值 =<包含有最大值和最小值的相等验证

范例:利用BETWEEN...AND完成


SELECT  *
FROM emp
WHERE sal BETWEEN 1500 AND 3000;

那么BETWEEN...AND除了可以在数字类型的字段三使用之外,也可以在字符串(几乎没用)或者日期上使用。
范例:在字符串使用BETWEEN ...AND(没用)


SELECT *
FROM emp
WHERE ename BETWEEN 'KING' AND 'WARD';

范例:查询所有在1981年雇佣的雇佣
现在如果要使用BETWEEN ...AND 必须确定两个值:
开始值:1981-01-01 “01-1月-81”
结束值:1981-12-31  “31-12月-81”
emp表之中的hiredate字段保存的是雇佣日期,但是发现这个雇佣日期格式“08-9月-81”,日-月-年的表示
,如果日的位数不足2位,那么就自动加上前导0,如果月不足2位不做任何的修饰


SELECT *
FROM emp
WHERE hiredate BETWEEN '01-1月-81' AND '31-12月-81' ;

这个时候就可以按照时间的范围进行查询,再加上日后的一些统计功能

范围查询:IN,NOT IN

那么首先来考虑以下一种查询:查询雇员编号是7369,7566,7788,9999(不存在)的雇员,这个时候如果按照之前
的做法,查询编写如下
SELECT *
FROM emp
WHERE empno=7369 OR empno=7566 OR empno=7788 OR empno=9999;
但是这个时候说给的实际上就是查询的范围,如果是范围的查询,就可以换为IN完成
范例:使用IN查询


SELECT *
FROM emp
WHERE empno IN(7369,7566,7788,9999);

范例:使用NOT IN查询


SELECT *
FROM emp
WHERE empno NOT IN(7369,7566,7788,9999);
SELECT *
FROM emp
WHERE NOT empno  IN(7369,7566,7788,9999);

注意:关于IN和NOT IN在NULL的处理问题


如果在使用IN或NOT IN判断范围之中出现了NULL,那么下面请观察可能造成的问题
范例:使用IN出现NULL——没有任何影响
SELECT *
FROM emp
WHERE empno IN(7369,7566,7788,null);
范例:使用NOT IN之中出现NULL——没有任何的数据返回
SELECT *
FROM emp
WHERE empno NOT IN(7369,7566,7788,null);
在使用NOT IN判断的过程之中,如果范围里面存在有NULL,那么就表示不会有任何的数据返回

 

NULL判断

NULL在数据库原理之中表示的是一个不确定的内容。但是对于NULL的判断不能够直接使用关系进行操作。
范例:错误的判断——查询所有不领取佣金的雇员

SELECT * FROM emp WHERE comm=null;

对于NULL的判断要使用特定的两个符号完成:IS NULL(为空返回true),IS NOT NULL(非空返回true)
范例:查询所有领取佣金的雇员——conn不位null


SELECT * FROM emp WHERE comm IS NOT NULL;
SELECT * FROM emp WHERE NOT comm IS NULL;

范例:查询所有不领取佣金的雇员——conn位null


SELECT * FROM emp WHERE comm IS NULL;

NULL只能采用如上的方式完成

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值