分享

oracle限定条件查询,循序渐进学Oracle之限定查询

 群先 2022-03-30

在之前的简单查询之中,是将所有记录进行显示,但是现在可以对显示的记录进行过滤的操作,而这就属于查询的工作了,限定查询就是在之前语法的基础上增加了一个WHERE子句,用于指定限定条件 ,此时语法如下:SELECT [DISTINCT] *|字段 [别名] [字段] [别名]

FROM 表名称 [别名]

[WHERE 条件]

在WHERE子句之后可以增加多个条件,最常见的条件就是基本的关系运算:>、>=、

1、关系运算SELECT * FROM emp having sal >1500 ;

范例1:要求查询出基本工资高于1500的所有雇员信息

e29844354fc946de848e6910df728266.png

附:如何缩小列距?col 字段名 format a10

范例2:查询出所有职位是办事员的雇员信息SELECT * FROM emp WHERE job='CLERK' ; //clerk必须大写!

a0ab9e88edd660f849f93fb80a2cdda6.png

多个条件,而多条件之间可以使用AND或OR进行连接操作。

范例3:查询工资在1500-3000之间的全部雇员信息。SELECT * FROM emp WHERE sal>=1500 AND sal<=3000 ;

d791bdb830784184641c248183f9ec7b.png

方法2:利用BETWEEN …AND…语句查询工资在1500-3000之间的全部雇员信息。SELECT * FROM emp WHERE sal BETWEEN 1500 AND 3000 ;

a74fe542ddcec3c2d4050438d4c5c064.png

范例4:查询出职位是办事员,或者是销售人中的全部信息。SELECT * FROM emp WHERE job='CLERK' OR job='SALESMAN' ;

28df7d4052dc1190ec9f2db93cd32840.png

范例5:查询出职位是办事员,或者是销售人中的全部信息,并且要求这些雇员的工资大于1200SELECT * FROM emp WHERE (job='CLERK' OR job='SALESMAN') AND sal>1200 ;

bdcd95aa17de7360d81bb70f9fa31a88.png

范例6: 查询不是办事员的雇员信息。SELECT * FROM emp WHERE job!='CLERK'; //方法1

SELECT * FROM emp WHERE job<>'CLERK'; //方法2

SELECT * FROM emp WHERE Not job='CLERK'; //方法3

378e04d95cf393e6c197ae6e3104f3cb.png

2、范围判断:BETWEEN …AND…

“BETWEEN 最小值AND 最大值”,表示的是一个范围间的判断过程。

范例7:要求查询出基本工资在1500-3000之间的雇员信息。SELECT * FROM emp WHERE sal BETWEEN 1500 AND 3000 ;

9604e23b4c6cb61e3920e00e4e257612.png

e7dc3d06a5d5355b42553d0e38f7964a.png

范例8:现在对BETWEEN…AND…操作求反SELECT * FROM emp WHERE NOT sal BETWEEN 1500 AND 3000 ;

SELECT * FROM emp WHERE NOT (sal BETWEEN 1500 AND 3000) ;

20d4e1fdf542a0dee60ba6029d56e10c.png

“BETWEE…AND…”操作符不光针对数字有用,对日期也同样有用。

示例9:要求查询出在1981年雇佣的全部信息

* 时间范围:1981-01-01 – 1981-12-31,使用hiredate字段表示雇佣日期;

* hiredate字段上的内容可以使用字符串表示:’01-1月-1981’ ~ ’31-12月-81’SELECT * FROM emp WHERE hiredate BETWEEN '1-1月-1981' AND '31-12月-81'; //注意:查询日期表示法!

305954a74b8f0b5145112395ad29c7d5.png

3、判断是否为空:is(NOT)NULL

使用此语法可以判断某一个字段上的内容是否为“null”,但是null和数字0以及空字符串是2个概念。

范例10:查询出所有领取奖金的雇员信息。SELECT * FROM emp WHERE comm IS NOT NULL ; //方法1

SELECT * FROM emp WHERE NOT comm IS NULL ; //方法2

247d53ec0e1af85d936f24a357d49ee9.png

17b7213d8d5cb3336386ae8a12569718.png

范例11:查询出所有不领取奖金的雇员SELECT * FROM emp WHERE comm IS NULL ;

670c28b94dad70cc17b40a9d2aa8c760.png

4、指定范围的判断:IN操作符 (重要!)

IN操作符表示的是指定一个查询的范围,如下所示查询要求:

范例12:查询出雇员编号是7369、7566、7799的雇员信息

* 如果按照最早的做法,使用OR操作完成;

* 如果现在使用了新的操作符IN的话,则代码简单了:SELECT * FROM emp WHERE empno=7369 OR empno=7566 OR empno=7799 ; //方法1

SELECT * FROM emp WHERE empno IN(7369,7566,7799); //方法2

2feb5d436a0ad597588f630b5cfbaa19.png

而如果现在使用的是NOT IN呢?则表示不在指定的范围之中。SELECT * FROM emp WHERE empno NOT IN(7369,7566,7799) ;

b77a35829e1b2626a56c71dad3f5d511.png

注意:关于NOT NULL的问题!

* 如果现在使用了IN操作符,查询的范围之中存在了null,不影响查询;SELECT * FROM emp WHERE empno IN(7369,7566,null) ;

34baae413615108d4ab72ef1e0be93e7.png

* 如果现在使用了NOT IN操作符,查询的范围之中存在了null,则不会有任何的查询结果返回;SELECT * FROM emp WHERE empno NOT IN(7369,7566,null) ;

6c6180d8d9084f5505b7c1f8941ecb7d.png

重点:对于这个限制现在先作为特点记住,以后会讲解为什么NOT IN之中不能出现null,而且记住了

如果NOT IN中出现了null,则表示的就是查询全部数据。

5、模糊查询: LIKE子句

LIKE子句的功能是提供了模糊查找的操作,例如:某些程序上出现的搜索操作,都属于LIKE子句的实现,但是必须提醒的,搜索引擎上的查询可不是LIKE。

但是要想使用LIKE子句则必须认识两个匹配符号:

* 匹配单个字符:_ ; -> 1 个

* 匹配任意多个字符:% ; -> 0个,1个,多个

范例13:要求查询雇员姓名中以字母A开头的全部雇员信息。SELECT * FROM emp WHERE ename LIKE 'A%' ;

21cce88aaffb05ab2f8b21fdbc978929.png

范例14:要求查询出雇员姓名中第二个字母是A的全部信息。SELECT * FROM emp WHERE ename LIKE '_A%' ;

362342c2d4f974aca2a589d38a268a54.png

范例15:要求查询出雇员姓名中带有字母A的雇员信息。SELECT * FROM emp WHERE ename LIKE '%A%' ;

33054876b10b73473898a09871f2df6d.png

现在使用NOT操作,对操作进行求反的功能:

SELECT * FROM emp WHERE ename NOT LIKE '%A%' ;

714685a99257ae29f8c0a129cb00e8db.png

但是对于LIKE子句,不一定只能在字符串数据上表示,可以在任意的数据上表示:SELECT * FROM emp WHERE ename LIKE '%1%' OR hiredate LIKE '%1%' OR sal LIKE '%1$';

d98936ed10359b37f01c8baa12c08821.png

说明:关于LIKE子句的使用

在开发之中,数据库的模糊查询肯定使用LIKE子句,但是在使用LIKE子句的时候有一个最大的注意点:如果在模糊查询上不设置任意的查询关键字的话(如:%%),则表示查询全部记录:SELECT * FROM emp WHERE ename LIKE '%%' OR hiredate LIKE '%%' OR sal LIKE '%%' ;

681429457222a0082b66aa600d37d585.png

这一个特点可以帮助用户节约很多代码,所以一定要记住!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多