在上一篇内容中我们介绍了简单的select查询、查询结果返回固定条数以及对查询结果进行排序。这一篇内容会介绍简单的数据过滤,主要包括where子句操作符、AND、OR、IN、NOT操作符。
实际应用中,数据过滤分两种,可以在应用层通过代码过滤,在数据库中取出所有的值,然后通过代码循环判断,取出符合条件的值,但是这种方法效率非常低,会传给应用多余数据,浪费网络带宽,一般只有写不出对应的数据库脚本时,才会这样。为了提高效率,我们都会在数据库中把数据过滤好,然后传给应用。下面开始简单数据过滤的介绍。
1.简单的where子句
基本语法:select 需要查的字段 from 表名 where 条件判断
比如:我们需要查询id为3的客户信息
select * from customers where customer_id = 1;
这就是一个简单的where子句查询,判断等值。下面我们列出MySQL支持的条件操作符,大家可以结合实际需求具体选择需要的操作符。
where子句可用操作符
根据这些操作符,我们可以进行匹配检查,不匹配检查,范围检查等。
where子句的位置:如果同时出现where子句和order by子句,应该把order by子句放在where子句之后。
2.空值检查 关键字:IS NULL
在创建表时,我们可以指定每个字段是否可以不包含值,如果一个列不包含值时,称其为包含空值NULL。
NULL:无值,或者说是no value,和字段为0,空字符串或者仅仅包含空格都不一样。
select语句有一个特殊的where子句,可以用来检查是否具有NULL值。
例如:我们需要知道是否有customer_name为空值的值。
select * from customers where customer_name is null;
上次给的数据中没有customer_name为空值的数据,所以不会有结果返回。
需要注意的是,在我们实际进行查询时,如果过滤的结果不是特定值,系统不知道我们是否需要返回为NULL的值,所以,如果我们需要系统返回结果为NULL的值,需要加上判断NULL的条件。
3.组合where子句
先介绍一个概念:操作符。操作符是指用来联结或改变where子句中的子句的关键字。也称为逻辑操作符。
AND操作符:AND操作符可以把两个过滤条件连接在一起,查询结果会返回同时满足两个过滤条件的数据。
例如:需要查询customer_id = 3 且 customer_name = 'DEMO'的数据。
select * from customers where customer_id = 3 and customer_name = 'DEMO';
OR操作符:查询结果会返回满足任意一个条件的值。
例如:需要查询customer_id = 3 或 customer_name = 'DEMO'的数据。
select * from customers where customer_id = 3 or customer_name = 'DEMO';
对于复杂的条件过滤,可能既会出现and,又会出现or,SQL在处理OR操作符之前,会优先处理AND操作符。可能会造成查询结果不符合预期,为了避免这种现象,我们可以使用圆括号()。这样SQL会优先计算圆括号()中的值。所以,不要过分依赖默认的计算次序,使用圆括号可以消除歧义,能用就用。
IN操作符:IN操作符用来指定范围,IN取合法值的清单有,隔开,全都写在()中。
比如:需要查询customer_id为1和2的值。
select * from customers where customer_id in(1,2);
从上面这个例子来看,IN操作符和OR操作符具有同样的作用。
那么,为什么要使用IN操作符呢?其有点如下:
(1)在使用长的合法选项清单时,IN操作符的语法更清楚更直观。
(2)使用IN时,计算次序更易管理(因为使用的操作符少)。
(3)一般情况,IN操作符比OR操作符执行更快。
(4)IN操作符可以包含其它子句,在后续多表查询中我们会介绍。
NOT操作符:NOT操作符有且只有一个作用,就是否定其后跟的任何条件。
比如:需要查询customer_id不为1和2的值
select * from customers where customer_id not in(1,2);
对于简单的where子句,使用not并没有明显的优势,但是,对于MySQL,支持使用not对between、in和exists子句取反。可以利用这一点把一些复杂的条件变简单。
这一篇内容就这么多,下一篇将会介绍通配符和正则表达式的使用。喜欢的小伙伴们麻烦点赞点关注呀。
作者:小詹小詹
链接:https://www.jianshu.com/p/e5579812a786