【问题标题】:What's the difference between "LIKE" and "=" in SQL?SQL中的“LIKE”和“=”有什么区别?
【发布时间】:2010-12-03 01:30:57
【问题描述】:

两者有什么区别:

SELECT * FROM users WHERE username="davyjones"

SELECT * FROM users WHERE username LIKE "davyjones"

【问题讨论】:

  • Equals(=) vs. LIKE 的可能重复项
  • 在这里,即将到来的输出是相同的,但是如果我谈论时间消耗,那么如果我想象这个查询是在一个大型数据集上执行的,那么 where 子句会花费更多时间然后 like 子句。跨度>

标签: sql syntax comparator


【解决方案1】:

LIKE 允许部分匹配/使用通配符,而= 检查完全匹配。

例如

SELECT * FROM test WHERE field LIKE '%oom';

将返回字段值为以下任意值的行:

Zoom, Boom, Loom, Groom

【讨论】:

  • 如果列是 CHAR(5) 而不是 VARCHAR(5),则不会返回这些行。
  • @codeburger:MySQL 还需要几年时间才能接近符合 SQL 标准 ;)
  • @MilanBabuškov 说起来还是不错的,MySQL 是一个免费的小型项目数据库管理系统!
【解决方案2】:

根据 SQL 标准,区别在于 CHAR 列中尾随空格的处理。示例:

create table t1 ( c10 char(10) );
insert into t1 values ('davyjones');

select * from t1 where c10 = 'davyjones';
-- yields 1 row

select * from t1 where c10 like 'davyjones';
-- yields 0 rows

当然,假设您在符合标准的 DBMS 上运行它。顺便说一句,这是 CHAR 和 VARCHAR 之间的主要区别之一。

【讨论】:

  • 因为 'test' 存储为 'test' + 4 个空格。 SQL 标准说 LIKE 不应该匹配,而 = 应该。对于 VARCHAR 列没有区别。
  • 还有一个从不使用 char 数据类型的原因,除非您始终拥有确切数量的字符。
  • @HLGEM -- 谁还需要其他理由?
  • 这适用于哪些 RDBMS?在 SQL Server 中没有任何区别
  • 一个额外的案例可能有助于理解其中一个差异:stackoverflow.com/questions/10715609/…
【解决方案3】:

在这种情况下,结果不会有任何差异。但是,它使用不同的方法进行比较,“LIKE”会慢很多。

查看以下 LIKE 示例:http://www.techonthenet.com/sql/like.php

在这种情况下,您仍然想使用等号。

更新:请注意,对于 CHAR 类型的列,结果有所不同时,存在一个至关重要的区别。有关详细信息,请参阅this answer。当使用 VARCHAR (大概是规范)时,以上是等价的,equals 是首选。

【讨论】:

  • 可能在存储过程中,但是在通过动态 SQL 在 SQL Server 中进行测试时,我注意到它没有对此进行优化。我也在Oracle上做过测试,好像没有优化动态SQL。
  • 我发现错误的答案经常在 SO 上被接受,这令人惊讶。 :(
  • 你会以什么方式说我的回答是错误的?在这种情况下,LIKE 和 '=' 具有相同的功能。他真正的意思是'=',因此应该。我还指出了一些关于应该如何使用 LIKE 的文档......我很确定我和其他人一样回答了这个问题。
  • 在下面查看我的答案,并阅读 SQL 规范。如果您使用 CHAR 列,则有一个重要区别。
  • 啊,我知道这个区别,但是我已经有一段时间没有遇到那个了。我假设他使用的是 VARCHAR,因为我(和我的公司)倾向于在数据没有固定长度的任何时候使用它。
【解决方案4】:

LIKE 允许使用诸如%(此处为任意数量的字符)和_(此处为一个字符)之类的通配符。

SELECT * FROM users WHERE username LIKE 'joe%'

选择所有以joe 开头的用户名。

【讨论】:

    【解决方案5】:
    create table A (id int,name varchar(30))
    
    insert into A values(4,'subhash')
    

    使用尾随空格搜索名称字段:

    select * from A where name='Subhash '
    --Yields 1 row
    select * from A where name like 'Subhash '
    --Yields 0 row
    

    【讨论】:

      【解决方案6】:

      LIKE 搜索模式。

      /* Returns all users whose username starts with "d" */
      SELECT * FROM users WHERE username LIKE 'd%'
      
      /* Returns all users whose username contains "dav" */
      SELECT * FROM users WHERE username LIKE '%dav%'
      

      【讨论】:

        【解决方案7】:

        这会给你同样的结果。但是,LIKE 允许使用通配符,例如...

        SELECT * FROM users WHERE username LIKE 'davy%'
        

        唯一的语法问题是双引号而不是单引号

        【讨论】:

          【解决方案8】:

          LIKE 支持通配符。通常它使用 % 或 _ 字符作为通配符。

          使用不带通配符的 LIKE 运算符与使用 = 运算符相同。

          【讨论】:

            【解决方案9】:

            LIKE 条件允许您使用通配符:

            SELECT * FROM suppliers
            WHERE supplier_name like 'Hew%';
            

            See more examples.

            and Equals = 用于相等匹配。

            【讨论】:

              【解决方案10】:

              Like 是模式匹配运算符,= 是精确匹配运算符。即像 W% 这样的名称表示以 W 开头,然后是一个或多个字符 和= 即名称='James' 这是完全匹配的

              【讨论】:

                【解决方案11】:

                Equals '=' 只是为了平等。另一方面,LIKE 支持 SQL 通配符匹配。

                因此,使用LIKE,您可以使用name like '%jones' 来获取所有以jones 结尾的名称。对于LIKE,百分比'%' 是任意字符,长度为零或更长,而下划线字符'_' 是任意一个字符。

                【讨论】:

                  【解决方案12】:

                  据我所知,你写的两个选择没有区别,只是时间成本。通常将LIKE% 一起使用,意思是“任何字符串”。我认为还有一个字符可以与LIKE 一起用于“任何字符”,如果不使用谷歌搜索,不知道那是什么。

                  但是随着您的两个选择,我看到的唯一区别是运行时间不同,因为LIKE 用于正则表达式排序。

                  【讨论】:

                    【解决方案13】:

                    Like 让您与通配符运算符一起工作,您可以在您的情况下将它用于like 'davyjon%' 以获得以davyjon 开头的所有结果,并获得您可以放置​​'davyjones' 和您的确切结果在这种情况下也可以使用=

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 2019-05-14
                      • 2014-05-15
                      • 1970-01-01
                      • 1970-01-01
                      • 2012-09-21
                      • 2021-04-25
                      • 2011-07-22
                      相关资源
                      最近更新 更多