MySQL语法介绍——like和=的区别

MySQL中’like’和’='用于查询的区别

MySQL中用于查询的关键字中’like’称为模糊查询,’='就是判断是否相等,但使用时出现了一个小问题。

问题描述

这里我需要对表格最后结果中的’department_name’属性进行精确查询值为’IT’的记录。

话不多说,先上代码

SELECT 
  d.`department_id`,
  d.`department_name`,
  e.`employee_id`,
  e.`last_name` 
FROM
  departments d 
  LEFT OUTER JOIN employees e 
    ON d.`department_id` = e.`department_id` 
WHERE d.`department_name` LIKE 'IT' ;

注意,这里,最后一条查询语句使用的是’like’关键字,
结果如下,共有5条查询结果
在这里插入图片描述

再来看一下’='的查询结果,先上代码

SELECT 
  d.`department_id`,
  d.`department_name`,
  e.`employee_id`,
  e.`last_name` 
FROM
  departments d 
  LEFT OUTER JOIN employees e 
    ON d.`department_id` = e.`department_id` 
WHERE d.`department_name` = 'IT' ;

相比于使用‘like’的代码,这里只有最后一条查询语句中将’like’改为了’=’。我们看一下结果,共有7条语句
在这里插入图片描述
相比于’like’关键字,‘=’竟然多查出了两条记录,我们知道,like是模糊查询,按照道理应该包含’='的结果,为什么反而少了2条结果呢?


解释:

1)
直接跳进原表,我们发现在department_id为210和230的两条记录中,department_name的值其实是’IT ‘。也就是后面多了一个空格。
如下图:
在这里插入图片描述
问题来了,即使是这样为什么’=‘能查询出来,而’like’就不可以呢?
2)
因为在’='的查询中会忽略空格,也就是说即使在上面的代码中我将语句改为 = 'IT ',其结果也仍然是7条记录;而like的查询中是考虑空格的,将会严格的进行比较,如果将语句改为 like 'IT ',那么结果将是上一次查询被忽略掉的2条记录。

结论:

当我们进行精确查询时,最好不要使用’like’,该使用’=‘的就使用’=’,真的非要使用’like’那么就记住’like’和
'='在处理空格方面的不同吧。


附:
翻阅官网文档,可以看到

MySQL collations have a pad attribute of PAD SPACE.
PAD SPACE collations treat trailing spaces as insignificant in comparisons; strings are compared without regard to trailing spaces. The server SQL mode has no effect on comparison behavior with respect to trailing spaces.

For those cases where trailing pad characters are stripped or comparisons ignore them, if a column has an index that requires unique values, inserting into the column values that differ only in number of trailing pad characters results in a duplicate-key error. For example, if a table contains ‘a’, an attempt to store 'a ’ causes a duplicate-key error.

对于MySQL来说,String类型的值的尾部的空格在比较时是被忽略不计的,如果你先存储一个’a’,然后想修改为’a ',将会报错冲突。

官网参考文档地址

posted @ 2020-12-17 15:45  Thomas_chen  阅读(90)  评论(0编辑  收藏  举报