sql简单查询

时间:2009-11-17 10:04:36

标签: sql tsql where

昨天我的朋友问了我一个关于这个问题的问题:

select * from user where 1=1 

我说查询不正确,但他说这是正确的。我不明白这个查询是如何正确的。 where 1 = 1部分如何运作?

5 个答案:

答案 0 :(得分:7)

这在以编程方式构建查询时很常见,因此对于您要添加的每个条件:

 AND (SOMECONDITION)

所以1=1启动WHERE部分,它始终是真的,并且不会影响性能。

答案 1 :(得分:5)

由于格式化原因和易于调试,

1=1通常在where子句的顶部使用。它是正确的语法,与实际查询的输出无关。

当你想逐行注释要调试的where子句时,它特别有用。考虑查询

SELECT Columns 
FROM Table
WHERE 1=1
AND Col1 = @Value1
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5

SELECT Columns 
FROM Table
WHERE Col1 = @Value1
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5

使用第一个查询

注释掉WHERE子句中任何有意义的部分要容易得多
WHERE 1=1
-- AND Col1 = @Value1 
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5

而在第二个查询中你必须这样做

SELECT Columns 
FROM Table
WHERE --Col1 = @Value1
-- And 
Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5

编辑:

专门针对StackOverflow格式化上面的查询,因为它只识别/* COMMENT */而不识别-- COMMENT

使用第一个查询

注释掉WHERE子句中任何有意义的部分要容易得多
WHERE 1=1
/* AND Col1 = @Value1  */
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5

而在第二个查询中你必须这样做

SELECT Columns 
FROM Table
WHERE /* Col1 = @Value1 */
/* And */
Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5

答案 2 :(得分:0)

1 = 1是一个虚拟WHERE子句。它将返回用户表中的每条记录,因为1 = 1显然是真的。

换句话说,WHERE子句应用于users表中的每条记录,并返回WHERE子句为true的所有记录。 1 = 1显然都是真的,因此所有记录都将匹配条件并返回。

答案 3 :(得分:0)

1等于1 所以上面的东西1 = 1是真的,所以sql查询将返回所有的行。

某些SQL DB需要一个where子句,因此您可以放置​​一个虚拟where子句,该子句对于表中的所有行都是true。

答案 4 :(得分:0)

1 = 1等于true并返回查询中的所有行