我一直很好奇。这些查询之间有什么区别:
SELECT * FROM `tablename`
SELECT * FROM `tablename` WHERE 1
SELECT * FROM `tablename` WHERE 1=1
我一直很好奇。这些查询之间有什么区别:
SELECT * FROM `tablename`
SELECT * FROM `tablename` WHERE 1
SELECT * FROM `tablename` WHERE 1=1
Answers:
2和3在MySQL中相同,在功能上1也相同。
where 1
正如其他人指出的那样,这是不标准的,将无法在其他方言中使用。
人们添加where 1
或where 1 = 1
这样where
的条件可以很容易地从查询通过添加/注释掉一些“添加或删除到/ and
......”组件。
即
SELECT * FROM `tablename` WHERE 1=1
--AND Column1 = 'Value1'
AND Column2 = 'Value2'
WHERE 1=1
,则无需担心要添加到字符串中的条件是否是第一个条件(因此它需要WHERE
在前面加一个) 或不。
ORDER BY 1
如果执行两个或更多SELECT语句的并集,则需要@dlatikay 语法(而不是列名)。
" AND "
作为分隔符进行字符串连接会更明智。
如您所知,这三个结果都相同。(在布尔值上下文中,MySQL将整数“ 1”视为true -实际上,任何非“ 0”的数字均视为true)。
明确记录了MySQL优化程序以删除该WHERE
子句中的常量条件:
恒定条件去除。。::
(B> = 5 AND B = 5)或(B = 6 AND 5 = 5)或(B = 7 AND 5 = 6)-> B = 5或B = 6
因此,这三个都将被编译成完全相同的代码。
它们在功能上都是等效的,应具有相同的性能特征。
也就是说,第一个和第三个是标准SQL。第二个将在许多数据库中引起某种布尔表达式错误。因此,我建议您避免这种情况(我不确定它是否在MySQL的严格SQL模式下有效)。
通常在构造动态WHERE
子句时使用第三个。它使添加其他条件变得容易,AND <condition>
而不必担心AND
s 缠绵。
都是一样的,但是2和3用于轻松处理以下AND/OR
情况:
SELECT * FROM `tablename` WHERE 1=1 AND (columnname1 = 'Value' OR columnname2 = 'Value')
都是一样的,但是2和3用来为AND / OR条件创建动态查询
sqlquery =" SELECT * FROM `tablename` where 1 =1 "
我们使用2和3格式进行动态查询,因此我们已经知道添加了“ where”关键字,并且我们将继续添加更多过滤器。喜欢
sqlquery = sqlquery + "and columna =a"
"AND columna =a " then
在几行之后,如果我们有新的过滤器,我们添加“ AND coulmnb = b”,依此类推
您不必在sql查询中检查在第一个查询或初始查询中放置了where关键字的位置
SELECT * FROM `tablename` WHERE 1=1 AND (columnname1 = 'Value' OR columnname2 = 'Value')
否则我们可以写 sqlquery = "SELECT * FROM tablename"
然后
如果在没有“其中”条款sqlquery
,然后
sqlquery = sqlquery + "where columna =a"
其他
sqlquery = sqlquery + "and columna =a"