数据的过滤
- 过滤数据
- 1.普通过滤
- 1.使用where子句
- 2.where子句操作符
- 2.高级过滤
- 组合WHERE 子句(AND、OR、IN、NOT)
- 3.用通配符进行过滤-LIKE的使用
- 总结
过滤数据
我们一般的需求是需要从庞大的数据库里筛选我们需要的数据,这时候就需要使用过滤数据环节:
1.普通过滤
1.使用where子句
在where子句中指定搜索条件,进行筛选数据
代码如下(示例):
select * from Products where prod_price = 1000;
2.where子句操作符
备注:1.对于空值的定义:在创建表时,表设计人员可以指定其中的列是否可以不包含值。在一个列不包含值时,称其为包含空值NULL。NULL 无值(no value),它与字段包含0、空字符串或仅仅包含空格不同。
代码如下(示例):
/*筛选产品价格大于等于500的产品信息*/
select * from Products where prod_price >= 500;
/*筛选产品不是Rolls-Royce.A.C公司的产品信息*/
select * from Products where VEND_ID <> 'Rolls-Royce.A.C';
/*筛选产品价格在500-1000的产品信息 结果为全表 相当于 >=500 or <=100*/
select * from Products where prod_price between 500 and 1000;/*结果为全表 相当于 >=500 or <=100*/
/*筛选产品价非空的产品名称信息*/
SELECT prod_nam FROM Products WHERE prod_price IS not NULL;
2.高级过滤
本部门会学习逻辑运算符AND和OR,还有NOT和IN操作
组合WHERE 子句(AND、OR、IN、NOT)
为了进行更强的过滤控制,SQL允许给出多个WHERE子句。这些子句可以两种方式使用,即∶ 以AND子句的方式或OR子句的方式使用。
操作符(operator) 用来联结或改变WHERE子句中的子句的关键字。也称为逻辑操作符(logical operator)。
1.AND操作符:AND连接的两个条件是“且”的关系,即两个条件需要同时满足的数据才可。
2.OR操作符:OR连接的两个条件是“或”的关系,即两个条件只需要满足一个即可。
3.IN操作符:IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全都括在圆括号中如 prod_name IN(‘RR007’,‘BZ002’):筛选prod_nameRR007,BZ002的产品信息。
4.NOT操作符:NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。
/*1.AND 操作符的使用*/
/* 筛选厂家是劳斯莱斯且价格大于等于1100的产品信息 */
select * from products where vend_id = 'Rolls-Royce.A.C' and prod_price >= 1100;
/*2.OR 操作符的使用 */
/* 筛选厂家是劳斯莱斯 或是 价格大于等于1100的产品信息 */
select * from products where vend_id = 'Rolls-Royce.A.C' or prod_price >= 1100
/*3.AND、OR的次序问题*/
/* 筛选价格在1100以上且厂家由劳斯莱斯或者布加迪生产的产品信息
对比以下两个语句 运行结果看看哪一个才是正确的结果*/
/*语句3.1*/
select * from products where prod_price >= 1100 and vend_id = 'Rolls-Royce.A.C' or vend_id = 'Bugatti-Veyron.A.C';
/*语句3.2*/
select * from products where prod_price >= 1100 and (vend_id = 'Rolls-Royce.A.C' or vend_id = 'Bugatti-Veyron.A.C');
/*4.IN 操作符的使用 */
/* 筛选厂家是劳斯莱斯或者布加迪的产品信息 */
select * from products where vend_id in ('Rolls-Royce.A.C','Bugatti-Veyron.A.C');
/*5.NOT 操作符的使用 */
/* 筛选厂家是劳斯莱斯或者布加迪的产品信息 */
select * from products where vend_id not in ('Rolls-Royce.A.C','Bugatti-Veyron.A.C');
通过3.1和3.21的结果,我们来探究and 和 or的使用顺序问题
3.1结果
3.2结果
对比看,我们想要的数据是筛选 价格在1100以上且厂家由劳斯莱斯或者布加迪生产的产品信息,而3.1出现了小于1100的价格?
原因在于次序,SOL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。3.1的sql语句等价于…where (prod_price >= 1100 and vend_id = ‘Rolls-Royce.A.C’) or vend_id = ‘Bugatti-Veyron.A.C’,这个时候就显示括号的重要性了,and和or连用时候,一定要注意次序问题,同时注意括号的正确使用。
3.用通配符进行过滤-LIKE的使用
普通过滤和高级过滤用到的都是准确的筛选条件,如果是模糊的条件呢?如筛选入门级的车的相关信息?这时候就需要LIKE的登场了∶
1.百分号(%)通配符:%示任何字符出现任意次数。
2.下划线(_)通配符:下划线的用途与%样,但下划线只匹配单个字符而不是多个字符。
3.方括号([ ])通配符:方括号([ ])通配符用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符。
代码如下(示例):
/*3.1 %的使用*/
/*筛选 入门级的跑车信息*/
select * from Products where prod_desc like '入门级%';
/*3.2 _的使用*/
/*筛选 00系列的跑车信息*/
select * from Products where prod_name like '%00_';
/*3.3 []的使用*/
/*筛选 生产厂家是R或者B开头的跑车相关信息*/
select * from Products where vend_id like '[RB]%';
/*筛选 生产厂家不是R或者B开头的跑车相关信息*/
select * from Products where vend_id like '[^RB]%';
总结
今日的筛选数据就到这来,目前的学习内容都还比较基础,其实关于模糊查询还有更高级的用法,如正则表达式的使用,筛选更加细致和精确,感兴趣和了解的同学可以深入。
ORACLE中的支持正则表达式的函数主要有下面四个REGEXP_LIKE (与LIKE的功能相似)、REGEXP_INSTR (与INSTR的功能相似)REGEXP_SUBSTR (与SUBSTR的功能相似)REGEXP_REPLACE (与REPLACE的功能相似),又是上班划水的一天
ヾ(◍°∇°◍)ノ゙冲啊!