SELECT * FROM tablename WHERE 1
我一直很好奇。 有什么区别:
- 
SELECT * FROM `tablename`
- 
SELECT * FROM `tablename` WHERE 1
- 
SELECT * FROM `tablename` WHERE 1=1
2和3在MySQL中是一样的,function上1也是一样的。
 如其他人所指出的那样, where 1不是标准的,在其他方言中不起作用。 
 人们添加where 1或where 1 = 1以便通过添加/注释掉某些“ and …”组件,可以方便地添加或删除查询条件。 
即
 SELECT * FROM `tablename` WHERE 1=1 --AND Column1 = 'Value1' AND Column2 = 'Value2' 
如你所知,所有三个产生相同的结果。 (在布尔上下文中,MySQL将整数“1”视为真 – 实际上,任何不是“0”的数都被视为真)。
  MySQL优化器明确logging在WHERE子句中去除常量条件: 
恒定的条件去除。 。 。:
(B = 5 AND B = 5)OR(B = 6 AND 5 = 5)OR(B = 7 AND 5 = 6)→B = 5 OR B = 6
因此,所有三个将被编译成完全相同的代码。
它们在function上都是等效的,应具有相同的性能特征。
也就是说,第一个和第三个是标准的SQL。 第二个会在许多数据库中导致某种布尔expression式错误。 所以,我build议你避免这种情况(我不确定它是否适用于MySQL严格的SQL模式)。
 通常在构builddynamicWHERE子句时使用第三个。 这使得添加附加条件如AND <condition>很容易,而不用担心AND 。 
如果你问的是性能和结果的差异,那么就不存在任何2和3是一样的,它们的结果与第一个相同。
 1 - SELECT * FROM table_name 
 结果来自table_name所有数据(无filter) 
 2 - SELECT * FROM table_name WHERE 1 
  1将被评估为TRUE ,因此 – 没有filter – 每个logging将被返回。 
 3 - SELECT * FROM table_name where 1=1 
 与最后一个相同,1 = 1是TRUEexpression式,因此 – 没有filter – 每个logging都将被选中。 
全部是相同的,但是2和3用于容易处理AND / OR条件
喜欢
 SELECT * FROM `tablename` WHERE 1=1 AND (columnname1 = 'Value' OR columnname2 = 'Value') 
1,MySQL不需要评估任何WHERE条件。
在2和3中,where条件是静态的,而不是基于行的值。 它将用布尔逻辑进行评估并始终为真。
在function上,没有区别。 您应该select1代码清晰。
所有的都是一样的,但是2和3被用来创buildAND / OR条件的dynamic查询
 sqlquery =" SELECT * FROM `tablename` where 1 =1 " 
我们使用2和3格式来进行dynamic查询,所以我们已经知道“where”关键字被添加了,并且我们不断添加更多的filter。 喜欢
 sqlquery = sqlquery + "and columna =a" "AND columna =a " then 
如果我们有新的filter,几行之后,我们添加“AND coulmnb = b”等等
您不必检查sql查询中的关键字,因为它放置在第一个或初始查询中
 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”语句,以便稍后添加或删除它。
我认为第一种和第三种方式是正确的写作方式。 如果你需要一个你在3号的地方声明,否则号码1就足够了。
在MS SQL 1和3是相同的,但是,选项2将不起作用,选项2是MS SQL中的无效语句,WHERE用于比较一些值。 例如:
- 从“myTable”中select*,其中ID = 3(有效)
- 从myTable中select* from myTable其中1 = 1与从myTable中select*相同2 = 2与select* from myTable其中3 = 3您的想法(有效)与Select * from'myTable'相同
1 – SELECT * FROM table_name它会给你所有的表的logging运行任何where语句。
2 – SELECT * FROM table_name WHERE 1这里的条件永远是真的,它主要被黑客用来进入任何系统。 如果你听说sql注入比2&3是被黑客强制build立以获取表的所有logging的场景。
3 – SELECT * FROM table_name where 1 = 1这会给你表的所有logging,但它会比较where语句,然后向前移动,它基本上被添加来添加或删除更多的语句。
结果 – 为所有三个查询指定表中的所有logging,而不是表名
  SELECT * FROM tablename WHERE 1 – 检查这个答案 
  SELECT * FROM tablename WHERE 1=1 – 检查这个答案 
有关WHERE子句优化的更多信息,请查看这些: MYSQL , SQLite , SQL