SQL 中“LIKE”和“=”有什么区别?

问题描述 投票:0回答:14

两者之间有什么区别吗

SELECT * FROM users WHERE username="davyjones"

SELECT * FROM users WHERE username LIKE "davyjones"
sql syntax comparator
14个回答
48
投票

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

例如

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

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

Zoom, Boom, Loom, Groom

41
投票

根据 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 之间的主要区别之一。


13
投票

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

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

在这种情况下,你仍然想使用等于。

更新:请注意,对于 CHAR 类型列,存在一个关键的区别,其中结果将会不同。有关更多详细信息,请参阅此答案。当使用 VARCHAR(大概是规范)时,以上是等价的,并且优先使用 equals。


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

4
投票

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

SELECT * FROM users WHERE username LIKE 'joe%'

选择以

joe
开头的所有用户名。


3
投票

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%'

2
投票

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

SELECT * FROM users WHERE username LIKE 'davy%'

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


1
投票

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

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


1
投票

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

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

查看更多示例。

和Equals

=
用于相等匹配。


1
投票

Like 是模式匹配运算符,

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


1
投票

据我所知,您编写的两个选择没有任何区别,只是增加了时间成本。通常将

LIKE
%
一起使用,意思是“任何字符串”。我认为还有一个字符可以与
LIKE
一起使用来表示“任何字符”,如果不谷歌搜索则不确定那是什么。

但是随着您的两个选择的进行,我看到的唯一区别是不同的运行时间,因为

LIKE
用于正则表达式排序。


0
投票

Equals

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

因此,使用

LIKE
,您可以执行
name like '%jones'
来获取所有以 jones 结尾的名字。对于
LIKE
,百分号
'%'
字符可以是任何字符,长度为零或更长,下划线字符
'_'
可以是任何一个字符。


0
投票

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


0
投票

我知道这个问题太老了,但即使在今天,我发现很多其他人也会尝试找出答案。在许多书中,在大多数情况下,LIKE 可能比 '-' 慢,除非你想比较字符串。

© www.soinside.com 2019 - 2024. All rights reserved.