Ich war neugierig Was sind die Unterschiede zwischen diesen jeweiligen Abfragen:
SELECT * FROM `tablename`
SELECT * FROM `tablename` WHERE 1
SELECT * FROM `tablename` WHERE 1=1
sql
select-query
Stephen Alexander
quelle
quelle
... WHERE TRUE
? Ich bin mir bewusst, dass (in den meisten SQL-Versionen, einschließlich MySQL) TRUE nur ein ausgefallenes Makro ist1
- aber ist es für den Leser nicht ein bisschen offensichtlicher?Antworten:
2 und 3 sind in MySQL gleich, funktional ist 1 auch gleich.
where 1
ist kein Standard, funktioniert also, wie andere betont haben, nicht in anderen Dialekten.Personen, die Bedingungen hinzufügen
where 1
oderwhere 1 = 1
so hinzufügenwhere
, können einfach zu einer Abfrage hinzugefügt oder daraus entfernt werden, indem einige "and
..." - Komponenten hinzugefügt / auskommentiert werden .dh
quelle
WHERE 1=1
nicht darauf achten, ob die Bedingung, die Sie der Zeichenfolge hinzufügen möchten, die erste ist (daher wird eineWHERE
vordere erforderlich sein) ) oder nicht.ORDER BY 1
Syntax ist erforderlich (anstelle von Spaltennamen), wenn Sie zwei oder mehr SELECT-Anweisungen zusammenführen." AND "
als Trennzeichen zu verbinden.Wie Sie wissen, erzielen alle drei die gleichen Ergebnisse. (In einem booleschen Kontext behandelt MySQL die Ganzzahl "1" als wahr - tatsächlich wird jede Zahl, die nicht "0" ist, als wahr behandelt.)
Das MySQL-Optimierungsprogramm wird explizit dokumentiert , um konstante Bedingungen in der
WHERE
Klausel zu entfernen :Daher werden alle drei in genau den gleichen Code kompiliert.
Sie sind alle funktional gleichwertig und sollten die gleichen Leistungsmerkmale aufweisen.
Das heißt, das erste und dritte sind Standard-SQL. Der zweite verursacht in vielen Datenbanken einen booleschen Ausdrucksfehler. Daher würde ich Ihnen raten, dies zu vermeiden (ich bin nicht sicher, ob es im strengen SQL-Modus von MySQL funktioniert oder nicht).
Oft wird die dritte beim Erstellen dynamischer
WHERE
Klauseln verwendet. Es macht es einfach, zusätzliche Bedingungen hinzuzufügen,AND <condition>
ohne sich Gedanken über das Verweilen zu machenAND
.quelle
Wenn Sie nach den Unterschieden in Leistung und Ergebnissen fragen, gibt es keine, 2 und 3 sind gleich
WHERE TRUE
und sie ergeben dasselbe wie die erste.Ergebnisse in allen Daten von
table_name
(kein Filter)1 wird ausgewertet
TRUE
, daher wird - kein Filter - jeder Datensatz zurückgegeben.Wie beim letzten ist 1 = 1 ein
TRUE
Ausdruck, daher wird - kein Filter - jeder Datensatz ausgewählt.quelle
Alle sind gleich, aber 2 und 3 werden verwendet, um
AND/OR
Bedingungen wie:quelle
In 1 muss MySQL keine WHERE-Bedingungen auswerten.
In 2 und 3 ist die where-Bedingung statisch und basiert nicht auf den Zeilenwerten. Es wird mit boolescher Logik ausgewertet und ist immer wahr.
Funktionell gibt es keinen Unterschied. Sie sollten aus Gründen der Codeklarheit 1 auswählen.
quelle
Alle sind gleich, aber 2 und 3 werden verwendet, um dynamische Abfragen für UND / ODER-Bedingungen zu erstellen
Wir verwenden die Formate 2 und 3, um dynamische Abfragen durchzuführen, sodass wir bereits wissen, wo das Schlüsselwort "wo" hinzugefügt wird, und wir fügen weitere Filter hinzu. Mögen
Nach wenigen Zeilen, wenn wir neue Filter haben, fügen wir "AND coulmnb = b" hinzu und so weiter
Sie müssen die SQL-Abfrage nicht auf das Schlüsselwort where in der ersten oder ersten Abfrage überprüfen
Ansonsten können wir schreiben
sqlquery = "SELECT * FROM tablename"
dann
Wenn es keine 'where'-Klausel gibt,
sqlquery
dannsonst
quelle
Sie alle geben die gleiche Antwort aus. Die Art und Weise, wie 2 und 3 geschrieben werden, dient jedoch hauptsächlich dazu, die Kontrolle über die "Where" -Anweisung zu haben, damit sie später leichter hinzugefügt oder entfernt werden kann.
Ich denke, dass der erste und dritte Weg die richtige Art sind, es zu schreiben. Wenn Sie eine where-Anweisung benötigen, die Sie in Nummer 3 mögen, wäre Nummer 1 gut genug.
quelle
In MS SQL sind 1 und 3 identisch, Option 2 funktioniert jedoch nicht. Option 2 ist eine ungültige Anweisung wie in MS SQL. WHERE wird zum Vergleichen einiger Werte verwendet. Beispielsweise:
quelle
quelle
Ergebnis - Gibt alle Datensätze in der angegebenen Tabelle anstelle des Tabellennamens für alle drei Abfragen an
SELECT * FROM tablename WHERE 1
- Überprüfen Sie diese AntwortSELECT * FROM tablename WHERE 1=1
- Überprüfen Sie diese AntwortWeitere Informationen zu WHERE- Klauseloptimierungen finden Sie in den folgenden Abschnitten : MYSQL , SQLite , SQL
quelle