数据的过滤

  • 过滤数据
  • 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子句操作符

hive sql 过滤非空字段 sql过滤空值和null值_oracle

备注: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结果

hive sql 过滤非空字段 sql过滤空值和null值_数据库_02

3.2结果

hive sql 过滤非空字段 sql过滤空值和null值_sql_03


对比看,我们想要的数据是筛选 价格在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的功能相似),又是上班划水的一天
ヾ(◍°∇°◍)ノ゙冲啊!