web-dev-qa-db-ja.com

SQLの「LIKE」と「=」の違いは何ですか?

次の間に違いはありますか?

SELECT * FROM users WHERE username="davyjones"

そして

SELECT * FROM users WHERE username LIKE "davyjones"

(私は構文を詰め込んだと思います...そのために私を許してください、
私は主にデスクトップアプリの開発者です)

42
aviraldg

標準の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の主な違いの1つです。

32
Milan Babuškov

LIKEは部分一致/ワイルドカードの使用を許可しますが、=は、完全一致をチェックします。

例えば

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

フィールド値が次のいずれかである行を返します。

Zoom, Boom, Loom, Groom
39
code_burgar

その場合、結果に現れる違いはありません。ただし、比較には別の方法が使用され、「LIKE」ははるかに遅くなります。

LIKEの例については、こちらをご覧ください。 http://www.techonthenet.com/sql/like.php

この場合でも、等しいを使用する必要があります。

Update:結果will異なる。詳細については this answer をご覧ください。 VARCHAR(おそらく標準)を使用する場合、上記は同等であり、等しいことが推奨されます。

12
Erich
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
subhash

LIKEは、%(任意の数の文字)および_(ここの1文字)などのワイルドカードを許可します。

SELECT * FROM users WHERE username LIKE 'joe%'

joeで始まるすべてのユーザー名を選択します。

4
T.J. Crowder

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

それはあなたに同じ結果を与えます。ただし、LIKEではワイルドカードを使用できます。たとえば...

SELECT * FROM users WHERE username LIKE 'davy%'

唯一の構文の問題は、一重引用符ではなく二重引用符でした

2
Richard

[〜#〜] like [〜#〜] はワイルドカードをサポートします。通常、ワイルドカードには%または_文字を使用します。

ワイルドカードなしでLIKE演算子を使用することは、=演算子を使用することと同じです。

1
auujay

LIKE条件では、ワイルドカードを使用できます。

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

他の例を参照してください。

等しい=は、等価マッチングに使用されます。

1
Daniel May

Likeはパターン一致演算子であり、=は完全一致演算子です。つまり、W%のような名前は、Wで始まり、その後に1つ以上の文字と=が含まれることを意味します。つまり、name ='James'は完全に一致します

1
P Sharma

Likeを使用すると、ワイルドカード演算子を使用できます。like 'davyjon%'の場合は、davyjonで始まるすべての結果を取得するために使用できます。 'davyjones'そして、この場合は=も使用できます

0
SQL Like

等しい'='は平等のためだけです。一方、LIKEはSQLワイルドカードマッチングをサポートします。

したがって、LIKEを使用すると、name like '%jones'で終わるすべての名前を取得します。 LIKEの場合、パーセント'%'文字は長さがゼロ以上の任意の文字であり、アンダースコア文字は'_'は、任意の1文字です。

0
Jeremy Bourque

私の知る限り、あなたが書いた2つの選択には時間のコスト以外に違いはありません。通常、LIKE%を使用します。これは「任意の文字列」を意味します。 「任意の文字」のLIKEで使用できる文字もあると思いますが、グーグルなしで何ができるのかわかりません。

しかし、2つの選択が進むと、LIKEが正規表現の並べ替えで使用されるため、唯一の違いは実行時間の違いです。

0
laura