SELECT * 从表名 WHERE 1
SELECT * FROM tablename WHERE 1
我一直很好奇。这些查询之间有什么区别:
SELECT * FROM `tablename`
SELECT * FROM `tablename` WHERE 1
SELECT * FROM `tablename` WHERE 1=1
2和3在MySQL中是一样的,功能上1也是一样的。
where 1
不是标准的,因此,正如其他人指出的那样,在其他方言中不起作用。
人们添加 where 1
或 where 1 = 1
以便 where
条件可以轻松添加或删除 to/from 通过在查询中添加 in/commenting 一些“and
..." 组件。
即
SELECT * FROM `tablename` WHERE 1=1
--AND Column1 = 'Value1'
AND Column2 = 'Value2'
如果你问的是性能和结果的差异,没有,2和3是一样的WHERE TRUE
,结果和第一个一样。
1 - SELECT * FROM table_name
结果来自 table_name
的所有数据(无过滤器)
2 - SELECT * FROM table_name WHERE 1
1 将被评估为 TRUE
,因此 - 没有过滤器 - 每条记录都将被返回。
3 - SELECT * FROM table_name where 1=1
与上一个相同,1=1 是一个 TRUE
表达式,因此 - 没有过滤器 - 每条记录都将被选中。
在1中,MySQL不需要评估任何WHERE条件。
在 2 和 3 中,where 条件是静态的,不基于行的值。它将使用布尔逻辑进行评估并且始终为真。
在功能上,没有区别。为了代码清晰,您应该选择 1。
如您所知,这三个都产生相同的结果。 (在布尔上下文中,MySQL 将整数“1”视为真——事实上,任何非“0”的数字都被视为真)。
MySQL 优化器显式 documented 删除 WHERE
子句中的常量条件:
Constant condition removal . . .:
(B>=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6)
-> B=5 OR 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
中没有 'where' 子句,则
sqlquery = sqlquery + "where columna =a"
其他
sqlquery = sqlquery + "and columna =a"
他们都输出相同的答案。然而,2 和 3 的编写方式主要是为了控制 "Where" 语句,以便以后更容易添加或删除它。
我觉得第一种和第三种写法比较合适。如果您需要 where 语句,您确实喜欢 3 号,否则 1 号就足够了。
在 MS SQL 中,1 和 3 是相同的,但是,选项 2 将不起作用,选项 2 是无效语句,如在 MS SQL 中,WHERE 用于比较某些值。例如:
- Select * 来自 'myTable,其中 ID = 3(有效)
- Select * from 'myTable where 1 = 1 is same as Select * from 'myTable where 2= 2 is same as Select * from 'myTable where 3= 3你得到的想法(有效)与 Select * 来自 'myTable'
相同
- SELECT * FROM table_name : 它会给你所有的记录
table 与 运行 任意 where 语句。
- SELECT * FROM table_name WHERE 1 : 这个 where 条件总是
是的,它主要被黑客用来进入任何系统。如果你听到
关于 sql 次注射比 2 和 3 是被迫的场景
由黑客构建以获取 table.
的所有记录
- SELECT * FROM table_name where 1=1 :这会给你所有
table 的记录,但它会比较 where 语句和
然后再往前走,基本上就是增加或删除更多
之后的声明。
Result - 为所有三个查询
提供指定的 table 中的所有记录而不是 tablename
SELECT * FROM tablename WHERE 1
- 检查这个 answer
SELECT * FROM tablename WHERE 1=1
- 检查这个 answer
我一直很好奇。这些查询之间有什么区别:
SELECT * FROM `tablename`
SELECT * FROM `tablename` WHERE 1
SELECT * FROM `tablename` WHERE 1=1
2和3在MySQL中是一样的,功能上1也是一样的。
where 1
不是标准的,因此,正如其他人指出的那样,在其他方言中不起作用。
人们添加 where 1
或 where 1 = 1
以便 where
条件可以轻松添加或删除 to/from 通过在查询中添加 in/commenting 一些“and
..." 组件。
即
SELECT * FROM `tablename` WHERE 1=1
--AND Column1 = 'Value1'
AND Column2 = 'Value2'
如果你问的是性能和结果的差异,没有,2和3是一样的WHERE TRUE
,结果和第一个一样。
1 - SELECT * FROM table_name
结果来自 table_name
的所有数据(无过滤器)
2 - SELECT * FROM table_name WHERE 1
1 将被评估为 TRUE
,因此 - 没有过滤器 - 每条记录都将被返回。
3 - SELECT * FROM table_name where 1=1
与上一个相同,1=1 是一个 TRUE
表达式,因此 - 没有过滤器 - 每条记录都将被选中。
在1中,MySQL不需要评估任何WHERE条件。
在 2 和 3 中,where 条件是静态的,不基于行的值。它将使用布尔逻辑进行评估并且始终为真。
在功能上,没有区别。为了代码清晰,您应该选择 1。
如您所知,这三个都产生相同的结果。 (在布尔上下文中,MySQL 将整数“1”视为真——事实上,任何非“0”的数字都被视为真)。
MySQL 优化器显式 documented 删除 WHERE
子句中的常量条件:
Constant condition removal . . .:
(B>=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6) -> B=5 OR 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
中没有 'where' 子句,则
sqlquery = sqlquery + "where columna =a"
其他
sqlquery = sqlquery + "and columna =a"
他们都输出相同的答案。然而,2 和 3 的编写方式主要是为了控制 "Where" 语句,以便以后更容易添加或删除它。
我觉得第一种和第三种写法比较合适。如果您需要 where 语句,您确实喜欢 3 号,否则 1 号就足够了。
在 MS SQL 中,1 和 3 是相同的,但是,选项 2 将不起作用,选项 2 是无效语句,如在 MS SQL 中,WHERE 用于比较某些值。例如:
- Select * 来自 'myTable,其中 ID = 3(有效)
- Select * from 'myTable where 1 = 1 is same as Select * from 'myTable where 2= 2 is same as Select * from 'myTable where 3= 3你得到的想法(有效)与 Select * 来自 'myTable' 相同
- SELECT * FROM table_name : 它会给你所有的记录 table 与 运行 任意 where 语句。
- SELECT * FROM table_name WHERE 1 : 这个 where 条件总是 是的,它主要被黑客用来进入任何系统。如果你听到 关于 sql 次注射比 2 和 3 是被迫的场景 由黑客构建以获取 table. 的所有记录
- SELECT * FROM table_name where 1=1 :这会给你所有 table 的记录,但它会比较 where 语句和 然后再往前走,基本上就是增加或删除更多 之后的声明。
Result - 为所有三个查询
提供指定的 table 中的所有记录而不是 tablenameSELECT * FROM tablename WHERE 1
- 检查这个 answer
SELECT * FROM tablename WHERE 1=1
- 检查这个 answer