SQL中"LIKE"和"="之间有什么区别?

avi*_*ldg 42 sql syntax comparator

之间有什么区别:

SELECT * FROM users WHERE username="davyjones"
Run Code Online (Sandbox Code Playgroud)

SELECT * FROM users WHERE username LIKE "davyjones"
Run Code Online (Sandbox Code Playgroud)

(我想我已经搞砸了语法......原谅我,
我主要是桌面应用程序开发人员)

cod*_*gar 39

LIKE允许部分匹配/使用通配符,同时=检查完全匹配.

例如

SELECT * FROM test WHERE field LIKE '%oom';
Run Code Online (Sandbox Code Playgroud)

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

Zoom, Boom, Loom, Groom
Run Code Online (Sandbox Code Playgroud)


Mil*_*kov 34

根据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
Run Code Online (Sandbox Code Playgroud)

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

  • 除非你总是拥有确切数量的字符,否则永远不会使用char数据类型的另一个原因. (10认同)
  • @HLGEM - 谁需要另一个理由? (3认同)
  • 因为 'test' 存储为 'test' + 4 个空格。SQL 标准说 LIKE 不应该匹配,而 = 应该。对于 VARCHAR 列,没有区别。 (2认同)
  • 这适用于哪些RDBMS?在SQL Server中没有任何区别 (2认同)

Eri*_*ich 12

在这种情况下,结果中没有任何差异.但是,它使用不同的方法进行比较,"LIKE"会慢得多.

看看这个LIKE的例子:http://www.techonthenet.com/sql/like.php

在这种情况下,您仍然希望使用等于.

更新:请注意,有一个关键的区别,当涉及到CHAR类型列在其结果有所不同.有关详细信息,请参阅此答案.当使用VARCHAR(可能是标准)时,上述是等价的,等于是优选的.


小智 5

create table A (id int,name varchar(30))

insert into A values(4,'subhash')
Run Code Online (Sandbox Code Playgroud)

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

select * from A where name='Subhash '
--Yields 1 row
select * from A where name like 'Subhash '
--Yields 0 row
Run Code Online (Sandbox Code Playgroud)