2017-03-27 4 views
3
select * from Employees where Name = 'John' or ''='' 

Diese Anweisung ruft alle Mitarbeiter in der Tabelle ab.Was bedeutet '' = ''

Ich konnte nicht verstehen, wie ''='' interpretiert wird? Könnten Sie bitte erklären?

+3

ist '' ''gleich' '' ', die Antwort ist ja, und da die Bedingung in einem' ODER' ist, ist das ganze 'WHERE' wahr – Lamak

Antwort

7

''='' ist immer true da es zwei leere Zeichenfolge zu vergleichen

So im Wesentlichen ''='' ist ein Tautology und darüber hinaus verwenden Sie einen OR Zustand und somit der gesamte Zustand ist immer true. Ihre WHERE kann auch wie

where Name = 'John' or 1 = 1 

Ihre Anfrage nur geschrieben werden kann select * from Employees als die WHERE Zustand ohne Wirkung ist.

+0

Ich habe gerade etwas hart gesucht. Es war einfach genug. Ich konnte den Punkt nicht sehen. Danke –

+1

Guter Fang. Falls jemand darüber stolpert, ist "immer" in * allen * Datenbanken nicht wahr - das wäre in Oracle (leider) nicht der Fall. –

+0

@GordonLinoff, das ist seltsam zu wissen, aber in 'SQL Server' ist es * immer * – Rahul

1

Es ist eine ziemlich sinnlos where Klausel, wie es mit einem Namen ist die Suche:

where Name = 'John' 

Aber es ist auch mit einem Ausdruck zu suchen, die immer true zurück:

or '' = '' 

So werden alle Daten zurückgegeben werden würde ungeachtet.

Es sollte keinen Grund geben, den zweiten Teil aufzunehmen, es sei denn, diese where Klausel wird irgendwo im Flug generiert und der Namensfilter ist optional. Wenn der immer zutreffende Teil enthalten ist, würde ein Fehler verhindert, wenn die Namen nicht gefiltert würden. Selbst wenn ich noch darüber nachdenken würde, würde ich seine Verwendung in Frage stellen, da es zusätzliche Daten zurückgeben würde.

Wenn es eine generierte where Klausel ist und es erforderlich ist, könnte es logischer zu tun:

or 1=2 

Dann werden Sie nicht zusätzliche Daten zurück.