在“like”和“=”之间哪一个更合适,为什么在SQL中

时间:2014-04-08 11:24:20

标签: sql sql-server-2008 tsql

我正在编写更新查询以更新一些空白值,如下所示:

UPDATE TA
SET TA.Trust_Desc = TB.Trust_Desc
FROM TB
INNER JOIN TA
ON TA.TrustID = TB.TrustID 
AND TA.Trust_Desc like '' 

UPDATE TA
SET TA.Trust_Desc = TB.Trust_Desc
FROM TB
INNER JOIN TA
ON TA.TrustID = TB.TrustID 
AND TA.Trust_Desc = ''

两者都有效。但我想知道哪一个("喜欢"或" =")更适合,为什么?

5 个答案:

答案 0 :(得分:2)

AND TA.Trust_Desc like '' 

此声明决定TA.Trust_Desc是否与模式''对应。在你的情况下,它没有模式(没有多大意义)。此操作可能非常昂贵,尽可能使用“=”。

AND TA.Trust_Desc = ''

这是将TA.Trust_Desc与字符串''进行比较的语句。它通常操作更快,所以使用这个,它也更有意义。

Pattern是一个字符串,使用%(例如%)作为任何字符串。例如,您可以拥有包含这三个字符串的表。 '你好,世界' '你好世界' '你好人'

“Hello%”等语句列对于“Hello World”和“Hello people”都是正确的 像'%World'这样的语句栏对于'Hello World'和'Hi World'

都是正确的

答案 1 :(得分:2)

如果您知道要匹配的确切值,则等于运算符会更好,因为它将允许使用索引。喜欢更可能更慢(除非您使用'abc%'专门搜索,可以使用索引)。

答案 2 :(得分:0)

就像让你与外卡操作员一起工作一样,你可以在你的情况下使用它来做像davyjon%'从davyjon开始获得所有结果,并准确地说出你可以放置的davyjones'你也可以在这种情况下使用=

答案 3 :(得分:0)

=完全匹配

我会添加条件

UPDATE TA
   SET TA.Trust_Desc = TB.Trust_Desc
  FROM TB
 INNER JOIN TA
    ON TA.TrustID = TB.TrustID 
   AND TA.Trust_Desc  = '' 
   AND TB.Trust_Desc <> ''

答案 4 :(得分:0)

LIKElogical operator,用于模式匹配字符串。

=comparison operator,用于完全匹配相同(或类似)数据类型的任意两项。