以下sql查询有什么区别?

时间:2015-10-17 05:40:21

标签: mysql sql sql-server

我有一张桌子说Table1有column1,column2.column3

现在我运行一个选择查询:

Select * from Table1

返回所有行。

另一个查询

Select * from Table1 where column1 like '%%'

也会返回所有行。 第一个是简单的常规sql select查询。为什么第二个行为类似于第一个? 有人能告诉我吗?

3 个答案:

答案 0 :(得分:1)

不同之处仅在于,第二个过滤器没有过滤任何东西。

(category_name:bathroom AND reno_wall_colours:red)运算符的工作原理是搜索字段中的文本或部分文本。 LIKE是一个通配符,用于替换一组字符(任意数量)。

在您的情况下,第二个查询将返回所有行,因为您的给定过滤器%正在评估所有行。

就像这样。

想象一下,您的字段column1 like '%%'具有这些值

column1

因此,如果您使用foo bar goo boo zar ,那么您对数据库说:向我提供column1 like '%%'中的文本以任何内容(任何时间)开头并以任何内容结尾的所有行。所以一切。如果您使用column1

,它也会返回所有行

但如果您使用column1 like '%',它会给您答案column1 like '%oo%',或者如果您使用foo, goo and boo,则会column1 like '%r'

希望它能帮助你理解。

答案 1 :(得分:0)

您对结果的期望是什么? '%'是SQL中的通配符,所以你基本上是这样说的:

1)"从表格中选择所有" 2)"从表中选择所有列,其中第1列实际上是任何"

这些实际上是相同的,因为第二个查询的后半部分根本没有细化条件。这有点像说:

1)"从字母表中选择全部" 2)"从字母表中选择所有条目,其中条目是字母"

它会产生相同的结果,因为你没有在声明中添加一个非常精细的条件。

答案 2 :(得分:0)

  • 因为像%%这样的column1没有过滤数据集中的任何行 表。

  • 简短%将匹配Column1中的任意数量的字符。

  • 如果您想匹配%字符,则需要使用转义模式\%

https://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html