2009-10-01 4 views
32

Gibt es einen Unterschied zwischen:Was ist der Unterschied zwischen "LIKE" und "=" in SQL?

SELECT * FROM users WHERE username="davyjones" 

und

SELECT * FROM users WHERE username LIKE "davyjones" 

(ich glaube, ich habe die Syntax verpfuschten up ... pardon für die,
Ich bin meistens ein Desktop-App Entwicklungskerl)

+0

mögliches Duplikat von [Equals (=) vs. LIKE] (http://stackoverflow.com/questions/543580/equals-vs-like) –

Antwort

24

Gemäß SQL-Standard besteht der Unterschied in der Behandlung von nachgestellten Leerzeichen in CHAR-Spalten. Beispiel:

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 

Natürlich vorausgesetzt, Sie führen dies auf einem Standard-konformen DBMS. Übrigens ist dies einer der Hauptunterschiede zwischen CHARs und VARCHARs.

+0

Warum würde das zweite Beispiel 0 Zeilen ergeben? Diese beiden Statusmeldungen sehen für Ihre Testdaten –

+1

gleich aus, da 'test' als 'test' + 4 Leerzeichen gespeichert ist. Der SQL-Standard besagt, dass LIKE nicht mit while übereinstimmen sollte = sollte. Für VARCHAR-Spalten gibt es keinen Unterschied. –

+8

Ein weiterer Grund, niemals den Datentyp char zu verwenden, es sei denn, Sie haben immer genau die richtige Anzahl an Zeichen. – HLGEM

35

LIKE ermöglicht die teilweise Übereinstimmung/Verwendung von Platzhaltern, während = prüft für genaue Übereinstimmungen.

Zum Beispiel

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

Wird Zeilen zurück, wo Feldwert eine der folgenden ist:

Zoom, Boom, Loom, Groom 
+1

Es werden diese Zeilen nicht zurückgegeben, wenn die Spalte CHAR (5) anstelle von VARCHAR ist (5). –

+0

@Milan: Es wird in MySQL –

+0

@codeburger: MySQL hat Jahre, bevor es überall in der Nähe von SQL-Standard-konform wird;) –

1

LIKE unterstützt Platzhalter. Normalerweise wird das Zeichen% oder _ für den Platzhalter verwendet.

Die Verwendung des LIKE-Operators ohne Platzhalter entspricht der Verwendung des Operators =.

2

Das wird Ihnen das gleiche Ergebnis geben. Allerdings ermöglicht LIKE Platzhalter, zum Beispiel ...

SELECT * FROM users WHERE username LIKE 'davy%' 

Die einzige Syntax Problem war, doppelte Anführungszeichen statt Apostrophe

4

LIKE erlaubt Wildcards wie % (eine beliebige Anzahl von Zeichen hier) und _ (ein Zeichen Hier).

SELECT * FROM users WHERE username LIKE 'joe%' 

Wählt alle Benutzernamen mit joe starten.

11

In diesem Fall gibt es keinen Unterschied, der in den Ergebnissen auftreten würde. Allerdings verwendet es eine andere Methode zum Vergleich, und die "LIKE" wäre viel langsamer.

Schauen Sie sich diese Beispiele für LIKE: http://www.techonthenet.com/sql/like.php

In diesem Fall möchten Sie immer noch die Gleichen verwenden.

aktualisieren: Beachten Sie, dass es ein entscheidender Unterschied, wenn es um Spalten CHAR Typs ist, in dem die Ergebnisse werden unterschiedlich sein. Weitere Informationen finden Sie unter this answer. Wenn VARCHAR (vermutlich die Norm) verwendet wird, sind die obigen äquivalent und equals ist vorzuziehen.

+1

Möglicherweise in einer gespeicherten Prozedur, jedoch beim Testen in SQL Server durch dynamische SQL, habe ich festgestellt, dass es nicht dies optimieren. Ich habe auch einen Test auf Oracle ausgeführt, und es scheint nicht zu optimieren Dynamic SQL. – Erich

+1

Ich finde es erstaunlich, wie oft falsche Antworten auf SO akzeptiert werden. :( –

+0

In welcher Weise würden Sie sagen, dass meine Antwort falsch ist? In dieser Situation haben LIKE und '=' identische Funktionalität. Er bedeutet wirklich '=' und sollte daher. Ich wies auch ein bisschen Dokumentation auf wie LIKE sollte verwendet werden ... Ziemlich sicher, beantwortete ich die Frage so gut wie alle anderen. – Erich

0

Entspricht '=' ist nur für die Gleichstellung. Auf der anderen Seite unterstützt LIKE SQL-Platzhaltervergleich.

Also, mit LIKE können Sie name like '%jones' tun, um alle Namen zu bekommen, die auf jones enden. Mit LIKE ist das Prozent '%' Zeichen alles, Länge Null oder mehr, und der Unterstrich, '_', ist ein beliebiges Zeichen.

1

Die LIKE Zustand können Sie Platzhalter verwenden:

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

See more examples.

und Equals = für die Gleichstellung Anpassung verwendet wird.

3

LIKE sucht nach einem Muster.

/* 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%' 
0

Soweit ich weiß, gibt es keinen Unterschied, sondern einen Zeitaufwand für die beiden Auswahlen, die Sie geschrieben haben. Normalerweise verwendet man LIKE zusammen mit %, was "beliebige Zeichenfolge" bedeutet. Ich denke, es gibt auch ein Zeichen, das mit LIKE für 'irgendein Zeichen' verwendet werden kann, nicht sicher, was das ohne googlen ist.

Aber als Ihre zwei wählt gehen, der einzige Unterschied, den ich sehe, ist eine andere Laufzeit, da LIKE in einer Regexp-Art von Mode verwendet wird.

0

Like bekommt man mit Wild Card-Betreiber zu arbeiten, können Sie es in Ihrem Fall für like 'davyjon%' verwenden alle Ergebnisse mit davyjon Start zu bekommen, und die genaue bekommen Sie 'davyjones' platzieren können und auch Sie = in diesem Fall verwenden

1

Wie ist der Operator für die Mustererkennung und = ist die genaue Übereinstimmung Operator. also dort, wo Namen wie W% bedeutet es, mit W beginnen und nach, dass ein oder mehrere Zeichen und = dh wo Name ='James' genau dieses

4
create table A (id int,name varchar(30)) 

insert into A values(4,'subhash') 

Verwenden Sie die nachfolgende Leerzeichen wird passend das Namensfeld zu suchen:

select * from A where name='Subhash ' 
--Yields 1 row 
select * from A where name like 'Subhash ' 
--Yields 0 row