是否有任何區別:SQL中的「LIKE」和「=」有什麼區別?
SELECT * FROM users WHERE username="davyjones"
和
SELECT * FROM users WHERE username LIKE "davyjones"
(我想我已經貽誤了語法......原諒我說,
我主要是一個桌面應用程序開發人員)
是否有任何區別:SQL中的「LIKE」和「=」有什麼區別?
SELECT * FROM users WHERE username="davyjones"
和
SELECT * FROM users WHERE username LIKE "davyjones"
(我想我已經貽誤了語法......原諒我說,
我主要是一個桌面應用程序開發人員)
根據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之間的主要區別之一。
爲什麼第二個例子會產生0行?由於'test'被存儲爲'test'+ 4個空格,所以這兩個statememts與我的測試數據 – 2009-10-01 16:33:59
相同。 SQL標準說LIKE不應該匹配那個,while = should。對於VARCHAR列,沒有區別。 – 2009-10-01 16:35:15
從來沒有使用char數據類型的另一個原因,除非你總是有確切數量的字符。 – HLGEM 2009-10-01 17:26:29
LIKE
允許部分匹配/使用通配符,而=
檢查完全匹配。
例如
SELECT * FROM test WHERE field LIKE '%oom';
將返回行,其中字段值是以下任意的:
Zoom, Boom, Loom, Groom
如果column是CHAR(5)而不是VARCHAR,它將不會返回這些行(5)。 – 2009-10-01 16:39:51
@Milan:它將在MySQL – 2009-10-01 16:50:31
@codeburger:MySQL有多年之後,它已經接近SQL標準兼容;) – 2009-10-02 10:14:19
LIKE支持通配符。通常它使用通配符的%或_字符。
使用不帶通配符的LIKE運算符與使用=運算符相同。
這會給你同樣的結果。然而,像允許通配符,例如...
SELECT * FROM users WHERE username LIKE 'davy%'
唯一的語法問題是雙引號代替單引號
LIKE
允許通配符像%
(任意數目的字符在這裏)和_
(一個字符這裏)。
SELECT * FROM users WHERE username LIKE 'joe%'
選擇以joe
開頭的所有用戶名。
在這種情況下,結果中不會出現任何差異。但是,它使用不同的方法進行比較,而「LIKE」會比較慢。
退房對於像的例子:http://www.techonthenet.com/sql/like.php
在這種情況下,你仍然要使用等號。
更新:請注意,有一個關鍵的區別,當涉及到CHAR類型列在其結果將是不同的。有關更多詳情,請參閱this answer。當使用VARCHAR(大概是標準)時,上面的內容是等同的,並且等於是首選。
等於'='
只是爲了平等。另一方面,LIKE
支持SQL通配符匹配。
因此,使用LIKE
你可以做name like '%jones'
以得到所有以jones結尾的名字。使用LIKE
時,百分號'%'
字符是任何東西,長度爲零或更多,並且下劃線字符'_'
是任何一個字符。
的LIKE
條件允許您使用通配符:
SELECT * FROM suppliers
WHERE supplier_name like 'Hew%';
和equals =
用於平等匹配。
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%'
據我所知,沒有什麼區別,但你寫的兩個選擇的時間成本。通常使用LIKE
和%
,意思是「任何字符串」。我認爲還有一個角色可以與LIKE
用於「任何角色」,不知道沒有Google搜索的是什麼。
但是,隨着你的兩個選擇去,我看到的唯一區別是不同的運行時間,因爲LIKE
是以正則表達式的方式使用。
Like
讓你與外卡運營商合作,你可以用它在你的情況爲like 'davyjon%'
把所有的結果,從davyjon
,並得到確切的你可以將'davyjones'
,你也可以在這種情況下使用=
像是模式匹配運算符,並且=
是完全匹配運算符。即其中類似W%
名字就意味着開始與W
,之後一個或多個字符 和=
即其中name ='James'
這是完全匹配的
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
[Equals(=)vs. LIKE]的可能重複(http://stackoverflow.com/questions/543580/equals-vs-like) – 2014-08-01 19:32:46