查询之间有什么区别吗?

时间:2014-07-31 13:23:44

标签: sql select database-performance

  1. select field from table where field = 'value'
  2. select field from table where field in ('value')
  3. 我问的原因是第二个版本允许我对空值使用相同的语法,而在第一个版本中我需要将条件更改为'其中field为null' ...

3 个答案:

答案 0 :(得分:1)

当您将字段与field_name=NULL之类的空格进行比较时,您要将字段中的已知数据类型varchar与不仅未知的值进行比较,还要将未知数据类型进行比较,也就是说,对于NULL值。当像field_name=NULL之类的比较再次意味着检查两者的数据类型时,即使字段的值实际为NULL,也无法比较两者,因此它总是会导致{{1} }。但是,使用false只是比较值本身而没有数据类型的隐含比较,因此可能会导致IS NULLfalse,具体取决于字段的实际值。

请参阅here有关计算机科学中truehere与问题相似性的问题。

现在,对于IN子句(即NULL),我不知道你正在使用什么RDBMS,因为当我用MS SQL和MySQL尝试它时,它什么也没有结果。

请参阅MS SQL exampleMySQL example

答案 1 :(得分:0)

你的例子没有区别。第二个稍长的查询通常不用于单个值,通常可以看到多个值,例如

select field from table where field in ('value1', 'value2')

答案 2 :(得分:-1)

是的,这两个查询都有区别。在第一个参数中,您只能在where子句&#34中插入1个值;其中field =' value'"但是在where where字段的第二个语句中你可以使用IN子句&#34来插入许多值;其中field in(value1,value2 ..)" 例子:

1) select field from table where field ='value1';

2) select field from table where field in ('value1', 'value2')

检查空值

SELECT field
FROM tbl_name
WHERE 
(field IN ('value1', 'value2', 'value3') OR field IS NULL)