次の間に違いはありますか?
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の主な違いの1つです。
LIKE
は部分一致/ワイルドカードの使用を許可しますが、=
は、完全一致をチェックします。
例えば
SELECT * FROM test WHERE field LIKE '%oom';
フィールド値が次のいずれかである行を返します。
Zoom, Boom, Loom, Groom
その場合、結果に現れる違いはありません。ただし、比較には別の方法が使用され、「LIKE」ははるかに遅くなります。
LIKEの例については、こちらをご覧ください。 http://www.techonthenet.com/sql/like.php
この場合でも、等しいを使用する必要があります。
Update:結果will異なる。詳細については this answer をご覧ください。 VARCHAR(おそらく標準)を使用する場合、上記は同等であり、等しいことが推奨されます。
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
LIKE
は、%
(任意の数の文字)および_
(ここの1文字)などのワイルドカードを許可します。
SELECT * FROM users WHERE username LIKE 'joe%'
joe
で始まるすべてのユーザー名を選択します。
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ではワイルドカードを使用できます。たとえば...
SELECT * FROM users WHERE username LIKE 'davy%'
唯一の構文の問題は、一重引用符ではなく二重引用符でした
[〜#〜] like [〜#〜] はワイルドカードをサポートします。通常、ワイルドカードには%または_文字を使用します。
ワイルドカードなしでLIKE演算子を使用することは、=演算子を使用することと同じです。
LIKE
条件では、ワイルドカードを使用できます。
SELECT * FROM suppliers
WHERE supplier_name like 'Hew%';
等しい=
は、等価マッチングに使用されます。
Likeはパターン一致演算子であり、=
は完全一致演算子です。つまり、W%
のような名前は、W
で始まり、その後に1つ以上の文字と=
が含まれることを意味します。つまり、name ='James'
は完全に一致します
Like
を使用すると、ワイルドカード演算子を使用できます。like 'davyjon%'
の場合は、davyjon
で始まるすべての結果を取得するために使用できます。 'davyjones'
そして、この場合は=
も使用できます
等しい'='
は平等のためだけです。一方、LIKE
はSQLワイルドカードマッチングをサポートします。
したがって、LIKE
を使用すると、name like '%jones'
で終わるすべての名前を取得します。 LIKE
の場合、パーセント'%'
文字は長さがゼロ以上の任意の文字であり、アンダースコア文字は'_'
は、任意の1文字です。
私の知る限り、あなたが書いた2つの選択には時間のコスト以外に違いはありません。通常、LIKE
と%
を使用します。これは「任意の文字列」を意味します。 「任意の文字」のLIKE
で使用できる文字もあると思いますが、グーグルなしで何ができるのかわかりません。
しかし、2つの選択が進むと、LIKE
が正規表現の並べ替えで使用されるため、唯一の違いは実行時間の違いです。