一、关键字

like、%、_、binary

二、知识点

2.1 like

like单词除了喜欢的意思,还有翻译为相似,像的含义,因此在MySQL中我们更多地称之为‘模糊匹配’(可能新人在面试的时候会被问到)。 like的作用简单说就是找到类似条件的数据信息,这里的条件就是like关键字后的数据筛选条件

2.2 % 和 _

%表示匹配任意个字符(类似正则中的*) _表示匹配任意单个字符(类似正则中的.)

三、思考

1、查询是否区分大小写?如果一定要区分该如何书写查询语句? 2、%和_的区别? 3、什么时候使用like子句进行数据查询? 4、使用like模糊查询时需要注意什么问题?

四、案例

4.1原表数据(表名:products)

image.png

4.1.1like使用及大小写敏感问题

1、在products表中查询prod_name是‘TNT’开头(不区分大小写)的数据并只输出prod_id和prod_name字段

//写法1 %表示匹配任意多个字符
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE 'TNT%'
//写法2
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE 'tnt%'

运行结果: image.png

PS:两者的结果是一样的,因为在windows系统中默认是不区分大小写的,如果要区分可以增加BINARY关键字,如下所示

//写法1 
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE BINARY 'TNT%'
//写法2
SELECT prod_id,prod_name FROM products WHERE BINARY prod_name LIKE 'TNT%'

PS:BINARY关键字可以在表达式前或字段前

关于大小写敏感问题解释

执行以下语句查看是否区分大小写的设置

show VARIABLES LIKE 'lower%'

image.png 1. lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的 2. lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写 3. lower_case_table_names=2 表名存储为给定的大小写但是比较的时候是小写的 4. unix,linux下lower_case_table_names默认值为 0 .Windows下默认值是 1 .Mac OS X下默认值是 2 当然这个是可以设置的,本文不深入讨论了。

4.1.2 % 和 _

1、找到products表中prod_price是以.99结尾的prod_id,prod_price数据信息

SELECT prod_id,prod_price FROM products WHERE prod_price LIKE '%.99'

执行结果: image.png 2、找到products表中prod_price是以.99结尾且整数位只有一位的prod_id,prod_price数据信息

SELECT prod_id,prod_price FROM products WHERE prod_price LIKE '_.99'

执行结果: image.png

当然以上的实现语句写法不止一种,在我们使用需要注意的点: 1. 切忌过度使用通配符,尽可能用其他操作符替代通配符 2. 非必要不要将通配符放在搜素的最开始,效率很低 3. 记住验证是否是自己需要数据,使用错了将不能返回期待的数据

五、总结

主要介绍MySQL中like子句的作用和通配符的使用案列和注意事项,顺带介绍了在不同的操作系统中对应大小写内容查询的敏感情况。