MySQL查询3_WHERE语句
介绍一下where语句里面另外三个关键词的使用方法↓
- IS NULL关键字的查询条件
- IN关键字的查询条件
- 带LIKE关键字的查询条件

【IS NULL】
在MySQL中,不能使用 =NULL 或 != NULL 在列中查找空值 。
在MySQL中,NULL值与任何其它值的比较永远返回NULL,即NULL = NULL返回NULL 。
MySQL中处理NULL使用IS NULL和IS NOT NULL运算符↓
- IS NULL: 当列的值是NULL,此运算符返回true。
- IS NOT NULL: 当列的值不为NULL, 运算符返回true
用上面这张test表格演示一下,里面class字段有两个空值(红色框),和四个字符串写的NULL,下面看看效果。
1.查找class字段为空的数据,SQL语句和结果如下,可以看到只把两个真的为空值的记录查询出来了↓
SELECT
*
FROM
test
WHERE
class IS NULL

2.查询不为空的SQL语句,结果正好和上面相反↓
SELECT
*
FROM
test
WHERE
class IS NOT NULL

3.查询包含"NULL"的数据,SQL如下↓
SELECT
*
FROM
test
WHERE
class = "NULL"

标红加粗:注意看结果,没有区分大小写,如果没注意这个问题,实际工作中可能会出大问题。那么要精准查询该怎么办呢?
4.精准查询包含"NULL"的数据,在条件前面加一个BINARY关键词,SQL如下↓
SELECT
*
FROM
test
WHERE
BINARY class = "NULL"

说明:对于CHAR、VARCHAR和TEXT类型,BINARY属性可以为列分配该列字符集的校对规则。BINARY属性是指定列字符集的二元校对规则的简写。排序和比较基于数值字符值。因此也就自然区分了大小写。
【IN】
MySQL中的IN运算符用来判断表达式的值是否位于给出的列表中;如果是,返回值为TRUE,否则返回值为FALSE。
NOT IN的作用和IN恰好相反,NOT IN用来判断表达式的值是否不存在于给出的列表中;如果不是,返回值为TRUE,否则返回值为FALSE。
IN和 NOT IN的语法格式如下↓
expr IN ( value1, value2, value3 ... valueN )
expr NOT IN ( value1, value2, value3 ... valueN )
查询包含(四川、湖南、江西)的数据,SQL语句如下↓
SELECT
*
FROM
province
WHERE
省份 IN ("四川","湖南","江西")

【LIKE】
在MySQL中,LIKE关键字主要用于搜索匹配字段中的指定内容。其语法格式如下:
[NOT] LIKE '字符串'
- NOT :可选参数,字段中的内容与指定的字符串不匹配时满足条件;
- 字符串:指定用来匹配的字符串。"字符串"可以是一个很完整的字符串,也可以包含通配符。
LIKE关键字支持百分号"%"和下划线"_"通配符
- "%"是 MySQL中最常用的通配符,它能代表任何长度的字符串;
- "_"只能代表单个字符。
查询以"北"开头的省份,SQL语句如下↓
SELECT
*
FROM
province
WHERE
省份 LIKE "北%"

查询以"北"结束的省份,SQL语句如下↓
SELECT
*
FROM
province
WHERE
省份 LIKE "%北"

查询包含"北"的省份,SQL语句如下↓
SELECT
*
FROM
province
WHERE
省份 LIKE "%北%"

