当前位置: 首页 > 面试题库 >

不带百分号且WHERE子句中等于(=)的SQL LIKE之间的差异

端木令雪
2023-03-14
问题内容

除了性能,这两个查询的结果是否有其他差异?

SELECT * FROM pet WHERE name LIKE 'Spot';
SELECT * FROM pet WHERE name = 'Spot';

我问的原因是真实的脚本将类似于以下内容,并且API用户有责任提出该模式。通常不会提供LIKE模式,但是总有可能仅提供一个字符串,结果为SELECT * FROM pet WHERE name LIKE "Spot"

$stmt = $this->pdo->prepare('SELECT * FROM pet WHERE name LIKE ?');
$stmt->execute([$_GET['name']]); //Spot
return [$stmt->fetchAll(),200];

问题答案:

实践中
LIKE没有通配符功能上等同于=。但是,它们不一样!最明显的区别是,=不能治疗\%以及_以任何特殊的方式,但LIKE确实。

该文档对此非常清楚:

根据SQL标准,LIKE在每个字符的基础上执行匹配,因此它可以产生与=比较运算符不同的结果:

除了排序规则差异外,尾随空格也很重要:

特别是,尾随空格很重要,这不适用于 =运算符CHARVARCHAR使用=运算符进行比较:

在实践中,被比较的字符串通常具有相同的排序规则,没有尾部空格,并且特殊字符被忽略,因此LIKE有时被用作替代=(特别是因为LIKE在模式开头没有通配符的情况下,也可以使用索引)。



 类似资料:
  • 问题内容: 说我有一个表作为 是外键回到桌子 是回到表的外键 只是或 是一个整数 和一张桌子作为 我需要从获取的所有行,对于同样的在同一个具有相对值。请记住,只能有两个值之一-或。在上面的示例中,这将是行和。 另一个限制是的相应行必须用于。 到目前为止我的查询 问题: 将join子句保留为as会减慢查询速度。如果将其移至WHERE子句,则性能会更好。这激起了我的兴趣, 我想知道为什么 。 主键和相

  • 问题内容: 我可以在C#中做到这一点: 例如在Java中 我如何查询这样的ArrayList?谢谢。 问题答案: Java 8引入了Stream API ,该API允许与Linq中的构造类似的构造。 例如,您的查询可以表示为: 如果存在默认值,您显然需要锻炼,在这种情况下,这似乎很奇怪,但是我已经展示了它,因为这就是您问题中的代码所做的。

  • 问题内容: 是否可以在WHERE子句中使用LIMIT x? 如果是这样,怎么办? 我正在尝试这样做: 但我收到以下错误: 问题答案: 应该在之后。 句法 :

  • 问题内容: 我将如何在没有硬编码值的情况下编写此sql语句? 宁愿有这样的事情: 提前致谢.. 问题答案: 用您当前的方式构造SQL查询是一个糟糕的主意,因为它为各种SQL注入攻击打开了大门 。为了正确执行此操作,您必须改为使用“ 预备语句”。这也将解决您目前显然遇到的各种逃避问题。 请注意,这是一个昂贵的调用(除非您的应用程序服务器使用语句缓存和其他类似的功能)。从理论上讲,最好先准备一次语句,

  • 例如,我想做这样的事情: 新建Select().from(Table).where(“id in?”,list).execute()

  • SWIG文档对这两个指令解释如下: > :“SWIG提供了另一个带有指令的文件包含指令。的目的是从另一个SWIG接口文件或头文件收集某些信息,而不实际生成任何包装代码。此类信息通常包括类型声明(例如,typedef)以及可能用作接口中类声明基类的C类。" 我的问题是这两个指令之间有什么区别,使用它们的利弊是什么? 顺便说一下,我只是想了解一些背景信息。我有一个简单的C-python扩展,当我使用上