次の間に違いはありますか:
SELECT * FROM users WHERE username="davyjones"
と
SELECT * FROM users WHERE username LIKE "davyjones"
次の間に違いはありますか:
SELECT * FROM users WHERE username="davyjones"
と
SELECT * FROM users WHERE username LIKE "davyjones"
LIKE
=
完全一致をチェックしながら、部分一致/ワイルドカードの使用を許可します。
例えば
SELECT * FROM test WHERE field LIKE '%oom';
フィールド値が次のいずれかである行を返します。
Zoom, Boom, Loom, Groom
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」ははるかに遅くなります。
LIKE の例については、こちらをご覧ください: http://www.techonthenet.com/sql/like.php
この場合でも、equals を使用する必要があります。
更新:結果が異なるCHAR型の列に関しては、重大な違いがあることに注意してください。詳細については、この回答を参照してください。VARCHAR (おそらく標準) を使用する場合、上記は同等であり、equals が優先されます。
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 はパターン マッチング演算子で、=
完全一致演算子は完全一致演算子です。つまり、name like W%
it は、その 1 つまたは複数の文字で始まりW
、その後に続くことを意味し、=
つまり、名前='James'
が完全に一致することを意味します。
LIKEはワイルドカードをサポートしています。通常、ワイルドカードには % または _ 文字が使用されます。
ワイルドカードなしで LIKE 演算子を使用することは、= 演算子を使用することと同じです。
このLIKE
条件では、ワイルドカードを使用できます。
SELECT * FROM suppliers
WHERE supplier_name like 'Hew%';
Equals=
は等価一致に使用されます。
Like
like 'davyjon%'
で始まるすべての結果を取得するためにワイルドカード演算子を使用することができdavyjon
ます'davyjones'
。=
Equals'='
はあくまでも平等です。一方、LIKE
SQL ワイルドカード マッチングをサポートします。
したがって、jones で終わるすべての名前を取得するLIKE
ことができます。name like '%jones'
ではLIKE
、パーセント'%'
文字は 0 以上の長さで、アンダースコア文字 ,'_'
は任意の 1 文字です。
私の知る限り、違いはありませんが、あなたが書いた2つの選択には時間のコストがかかります. 通常、「任意の文字列」を意味するLIKE
と一緒に使用します。%
「任意の文字」に使用できる文字もあると思いますがLIKE
、グーグルで調べないとわかりません。
LIKE
しかし、あなたの2つの選択が進むにつれて、正規表現のような方法で使用されるため、私が見る唯一の違いは異なる実行時間です。