Oracle--3、sql限定查询


简单查询最大的问题在于可以显示一张数据表之中的所有数据,但是很多情况下并不需要所有的数据。很多时候往往都需要针对于一些数据执行过滤,而这样的查询就属于限定查询。限定查询的操作语法如下:

SELECT [DISTINCT] *|[别名],[别名],... à 3、控制要显示的数据列

FROM 表名称 [别名]           à 1、确定查询的数据来源

[WHWRE 条件(s)] ;  à2、根据判断条件选择参与的数据行

在使用WHERE子句操作的时候可以进行条件判断,而对于条件的判断主要可以使用如下的几种操作符:关系运算符><>=<=<>!=)、范围运算符BETWEEN...AND)、IN子句LIKE子句空判断IS [NOT] NULL)。

而且在进行限定查询的时候可以使用以下的逻辑运算符AND(与操作,所有的判断条件都满足)OR(或操作,表示若干个判断条件只需要满足一个)、NOT(求反,TRUEFALSEFALSETRUE)。

1、关系运算

关系运算是最简单的运算符,使用的符号有><>=<==<>!=”。

范例:要求查询基本工资高于2000的雇员信息(sal为基本工资)

SELECT * FROM emp WHERE sal > 2000 ;

范例:查询所有基本工资小于等于1600的全部雇员信息

SELECT * FROM emp WHERE sal<=1600 ;

范例:查询姓名是Smith的雇员信息(ename为姓名)

SELECT * FROM emp WHERE ename = smith ;

SELECT * FROM emp WHERE ename = SMITH ;

Oracle之中所有保存的数据都是区分大小写关系的,像一些系统发现密码是区分大小写的,这样的情况是非常适合于Oracle保存。

范例:查询所有职位不是销售人员的信息

·销售人员是职位的数据,职位的字段是job ,而现在的关系是取反,不是销售,使用<>!=

SELECT * FROM emp WHERE job <> SALESMAN ;

SELECT * FROM emp WHERE job != SALESMAN ;

由开发者个人来决定使用何种不等于符号。


2、逻辑运算

WHERE子句之中是可以同时编写多个条件的,但是这多个条件之间就必须使用逻辑连接,主要使用两种符号:

·AND:条件 AND 条件 AND 条件 à 所有条件都要同时满足

·OR :条件 OR 条件 OR 条件  à 所有条件只要由一个满足即可

1AND连接操作

范例:要求查询出所有销售人员并且工资高于1200的所有雇员

·条件1:职位是销售人员:job=SALESMAN ;

·条件2:工资高于1200sal>1200 ;

·这两个条件应该同时满足,所以使用AND连接 ;

SELECT * FROM emp WHERE sal>1200 AND job=SALESMAN ;

范例:查询出工资范围在1200~3000之间的数据(包含12003000

·条件1:工资大于等于1200sal>=1200

·条件2:工资小于等于3000sal<=3000

·两个条件同时满足,使用AND连接

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

范例:查询出10部门的经理数据

·条件1:职位是经理,job=MANAGER ;

·条件2:部门是10deptno = 10 ;

SELECT * FROM emp WHERE job=MANAGER AND deptno = 10 ;

 

2OR连接操作

范例:要求查询出工资高于3000,或者职位是办事员的全部雇员信息

·条件1:工资大于3000sal>3000

·条件2:职位是办事员,job=CLERK ;

·两个条件只需要满足一个,使用OR连接

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

 

3NOT取反操作

正常情况下,如果说1>0”返回的额判断结果是TRUE,如果加上了一个NOT,那么结果就变成了FALSE,等于是判读的记过进行了取反操作。

范例:观察取反——查询出所有职位不是办事员的信息

SELECT * FROM emp WHERE NOT sal=CLERK ;

如果决定NOT不好用,可以使用“<>”完成。

所有的逻辑运算可以在任何的WHERE运算之中使用,进行条件的连接。



3、取值范围:BETWEENAND

如果说现在已经知道了某一个范围的两个数值:最大值和最小值,就可以采用如下操作;

字段 BETWEEN 最小值 AND 最大值

在进行计算过程之中也会包含了最大和最小两个值的判断。

范例:查询出所有工资范围在1200~3000之间的雇员信息(包含12003000

这个时候是一个范围,所以面对范围就不需要使用复杂的AND连接了,直接利用BETWEEN...AND 就可以了。

SELECT * FROM emp WHERE sal BETWEEN 1200 AND 3000 ;

但是通过之前的程序可以发现一个特点:所有的关系运算符是不分数据类型的。

范例:观察不分数据类型的判断

SELECT * FROM emp WHERE ename>SMITH

SELECT * FROM emp WHERE sal>1200

不管是字符串还是数字实际上都可以使用这些运算符进行判断,所以来讲BETWEENAND也可以:即所有判断符号都支持字符串、数字、日期类型的操作。

范例:查询所有在1981年雇佣的雇员信息

· 范围:1981-01-0101-1-1981 ~ 1981-12-31 31-12-1981

SELECT * FROM emp WHERE hiredate BETWEEN 01-1-1981 AND 31-12-1981

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

所有符号都不分判断的数据类型。

select * from emp where ename between 'CLERK' and 'SMITH' ;

 


4、空判断:IS NULLIS NOT NULL

NULL是一种特殊的数值,在标准的解释来讲,空表示的是一个不确定的内容。对于NULL的判断不能够使用传统的关系运算符。

范例:错误的操作

SELECT * FROM emp WHERE comm=NULL ;

对于NULL而言,不能够直接进行验证,必须通过特定的符号完成:

· 为空:IS NULL ;

· 不为空:IS NOT NULL NOT IS NULL

范例:查询出所有不领取佣金的雇员信息(comm is null

SELECT * FROM emp WHERE comm IS NULL ;

范例:查询出所有领取佣金的雇员

SELECT * FROM emp WHERE comm IS NOT NULL ;

SELECT * FROM emp WHERE NOT comm IS NULL ;

提醒:在进行数字列的表示上,0NULL是绝对不一样的两个概念。

 


5、基数范围:INNOT IN

在讲解此操作之前首先来思考一个查询。

范例:查询出雇员编号为7369756678398899(不存在)的雇员——使用OR连接

SELECT * FROM emp WHERE empno=7369 OR empno=7566 OR ename=7839 OR ename=8899 ;

但是发现此时的查询是一种基数查询,可以发现里面有固定的几个种子数据(7369756678398899),那么面对这样的查询就可以使用IN操作符完成,语法如下:

· 在基数范围之中:字段 IN(数值,数值,...) ;

· 不在基数范围之中:字段 NOT IN(数值,数值,...) ;

范例:查询出雇员编号为7369756678398899(不存在)的雇员——使用IN判断

SELECT * FROM emp WHERE empno IN(7369,7566,7839,8899) ;

注意:关于IN操作的问题

· 对于IN操作而言是针对于基数的判断,如果说此时在使用NOT IN 的时候基数里面包含了NULL,那么所有满足的数据都不会被显示。

范例:观察程序,在IN之中使用NULL

SELECT * FROM emp WHERE empno IN(7369,7566,7839,NULL) ;

范例:观察程序,在NOT IN之中使用NULL

SELECT * FROM emp WHERE empno NOT IN(7369,7566,7839,NULL) ;

不满足的原因是数据库自身的保护机制,避免大数据所带来的问题。

??4.png



6、模糊查询:LIKENOT LIKE

LIKE子句可以实现数据库中的模糊数据查询,但是这种查询的方式只适合于小数据的情况,不适合于所谓的搜索引擎的搭建操作。因为搜索引擎上的检索是基于分词的操作原理实现的。

如果想要使用LIKE,那么可以使用如下的操作语法:

· 字段LIKE匹配关键字,而在进行关键字匹配的时候有两个符号标记;

|- _:匹配任意一个字符;

|- %:匹配0个、1个或多个任意字符;

范例:查询所有姓名以字符A开头的所有雇员

SELECT * FROM emp WHERE ename LIKE A% ;

范例:查询所有姓名第二个字符以A开头的所有雇员

SELECT * FROM emp WHERE ename LIKE ’_A ;

范例:查询所有位置上包含字符A的雇员信息

SELECT * FROM emp WHERE ename LIKE %A% ;

范例:查询出所有姓名不带有R’雇员信息

SELECT * FROM emp where ename NOT LIKE %R% ;

 

说明:关于LIKE子句的说明:

·说明一:与之前的所有判断符号一样,在使用LIKE的时候可以针对于各种数据类型实现判断。

SELECT * FROM emp WHERE sal LIKE %1% ;

这种不受限制只是在于用户直接执行SQL的时候,而有一些实体层的框架上会自动的帮助用户增加若干验证。

·说明二:在使用LIKE操作的时候如果没有编写任何的查询关键字,则表示查询全部。

SELECT * FROM emp WHERE ename LIKE %% ;

这一个特性可以帮助我们节约一些代码。







oracle

2020.11.18 20:52

https://www.meihaocloud.com.com/223.html , 欢迎转载,请在文章页标出原文连接 !


Copyright © 2020 千夕网 联系站长

粤公网安备 44030302001408号 粤ICP备19099833号-1