概述
1. 数据过滤WHERE
-
WHERE不能单独使用,指的是必需于增删改查的必需子句连在一起使用,是非必需子句;
-
位置: WHERE 子句在FROM之后,ORDER 之前。
-
文本格式的数值同样需要转换一下在进行比较。
-
WHERE过滤的是行,不影响列的展示。
-
WHERE 忽略NULL 的处理。
-
常规运算符:等于(=);不等于(!=或者<>);大于(>);小于(<);大于等于(>=);小于等于(<=);
-
过滤的条件列可以不出现在展示结果中。比如:
SELECT m.* FROM milk_tea AS m WHERE m.sale_price - m.in_price < 5;
- 过滤的条件如果是数字型字符串,可以直接使用数字,也可以用引号把数字引住,两种结果是一样的;如果是非数字型字符串,那么必须用英文引号。
SELECT m.* FROM milk_tea AS m WHERE m.prod_id = 2;
SELECT m.* FROM milk_tea AS m WHERE m.prod_id = '2';
SELECT m.* FROM milk_tea AS m WHERE m.prod_name = '奶糖';
SELECT m.* FROM milk_tea AS m WHERE m.net_w = '150g';
- 空值遗漏:
这两种情况展示的结果均不展示空值,会造成空值遗漏。
SELECT m.* FROM milk_tea AS m WHERE m.sale_price != 15;
SELECT m.* FROM milk_tea AS m WHERE m.sale_price <> 15;
那么,遇到空值NULL怎么处理呢?
比如会出现:
原表中sale_price列有NULL
但是 用sale_price=15和sale_price!=15两个结果都不显示NULL行数据。
此时用IFNULL(参数1,参数2),比如参数1是某个列名,那么如果参数1代表的列值为空时,用参数2代替空值。参数1可以是列值运算。
(1) WHERE IFNULL(m.sale_price,0) = 15
意思是比较sale_price列值与15的大小,如果sale_price列值为NULL,那么用0代替列值,再用0与15进行比较,即此时NULL的那行数据不会显示出来。
(2) WHERE IFNULL(m.sale_price,0) != 15
此时NULL的那行数据会显示出来
SELECT m.* FROM milk_tea AS m WHERE IFNULL(m.sale_price,0) = 15;
SELECT m.* FROM milk_tea AS m WHERE IFNULL(m.sale_price,0) != 15;
IFNULL(expr1,expr2)
(3)IFNULL(参数1,参数2) 参数1可以是运算:
SELECT m.* FROM milk_tea AS m WHERE IFNULL(m.sale_price * 0.9,0) < 10;
SELECT m.* FROM milk_tea AS m WHERE IFNULL(m.sale_price * 0.9,0) >= 10;
(4)区分
WHERE IFNULL(m.sale_price ,10) * 0.9 > 11
和
WHERE IFNULL(m.sale_price*0.9 ,10) > 11
这两者的结果影响NULL的参与比较的替代值。
第一个NULL先用10代替,然后10 * 0.9得到9,用9与11进行比较;第二个是先NULL*0.9 得到的结果仍然是NULL,然后用10代替,最后用10与11进行比较。
2. 数据过滤 BETWEEN…AND…/IS/IS NOT
- 指定数值再某两个值之间:
(1)WHERE [列] BETWEEN [前端值] AND [后端值]
(2)适合场景:简化取值范围的书写;两端均包含
WHERE [列名] BETWEEN 30 AND 50
指的是 >=30且<=50
SELECT m.* FROM milk_tea AS m WHERE m.in_price BETWEEN 5 AND 10;
-
空值过滤—IS NULL
(1)判断列为空值:WHERE [列] IS NULL
(2)适合场景:异常值处理 -
非空值过滤 IS NOT NULL
(1)判断列不为空值:WHERE [列] IS NOT NULL;
(2)适合场景:异常值处理
SELECT m.* FROM milk_tea AS m WHERE m.sale_price IS NULL;
SELECT m.* FROM milk_tea AS m WHERE m.sale_price IS NOT NULL;
SELECT m.* FROM milk_tea AS m WHERE IFNULL( m.sale_price, 10) = 10 ;
第一、三行结果一样
最后
以上就是爱听歌秋天为你收集整理的sql学习记录5-数据过滤 WHERE/IFNULL(参1,参2)/BETWEEN...AND.../IS NULL/IS NOT NULL的全部内容,希望文章能够帮你解决sql学习记录5-数据过滤 WHERE/IFNULL(参1,参2)/BETWEEN...AND.../IS NULL/IS NOT NULL所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复