49

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

SELECT * FROM users WHERE username="davyjones"

SELECT * FROM users WHERE username LIKE "davyjones"
4

13 に答える 13

46

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

例えば

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

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

Zoom, Boom, Loom, Groom
于 2009-10-01T16:26:50.797 に答える
38

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 つです。

于 2009-10-01T16:31:11.567 に答える
12

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

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

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

更新:結果異なるCHAR型の列に関しては、重大な違いがあることに注意してください。詳細については、この回答を参照してください。VARCHAR (おそらく標準) を使用する場合、上記は同等であり、equals が優先されます。

于 2009-10-01T16:27:26.193 に答える
4
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
于 2011-06-17T05:50:33.943 に答える
4

LIKE%(ここでは任意の数の文字) や (ここでは1 文字) などのワイルドカードを使用できます_

SELECT * FROM users WHERE username LIKE 'joe%'

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

于 2009-10-01T16:27:21.503 に答える
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%'
于 2009-10-01T16:29:03.070 に答える
2

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

SELECT * FROM users WHERE username LIKE 'davy%'

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

于 2009-10-01T16:27:00.017 に答える
1

Like はパターン マッチング演算子で、=完全一致演算子は完全一致演算子です。つまり、name like W%it は、その 1 つまたは複数の文字で始まりW、その後に続くことを意味し、=つまり、名前='James'が完全に一致することを意味します。

于 2009-11-29T18:30:48.567 に答える
1

LIKEはワイルドカードをサポートしています。通常、ワイルドカードには % または _ 文字が使用されます。

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

于 2009-10-01T16:26:57.683 に答える
1

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

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

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

Equals=は等価一致に使用されます。

于 2009-10-01T16:28:42.953 に答える
0

Likelike 'davyjon%'で始まるすべての結果を取得するためにワイルドカード演算子を使用することができdavyjonます'davyjones'=

于 2009-11-29T18:03:12.830 に答える
0

Equals'='はあくまでも平等です。一方、LIKESQL ワイルドカード マッチングをサポートします。

したがって、jones で終わるすべての名前を取得するLIKEことができます。name like '%jones'ではLIKE、パーセント'%'文字は 0 以上の長さで、アンダースコア文字 ,'_'は任意の 1 文字です。

于 2009-10-01T16:27:29.937 に答える
0

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

LIKEしかし、あなたの2つの選択が進むにつれて、正規表現のような方法で使用されるため、私が見る唯一の違いは異なる実行時間です。

于 2009-10-01T16:29:20.620 に答える