Ziel dieses Artikels ist es, die SELECT-Anweisung in der MySQL-Datenbank schnell und genau zu beherrschen.
Die grundlegende Syntax der SELECT-Anweisung in MySQL lautet:
Das Folgende ist ein in Anführungszeichen gesetztes Fragment:
SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT]
[SQL_BIG_RESULT] [HIGH_PRIORITY]
[UNTERSCHIEDLICH|UNTERSCHIEDLICH|ALLE]
select_list
[INTO {OUTFILE|DUMPFILE} 'file_name' export_options]
[FROM table_references [WHERE where_definition]
[GROUP BY col_name,...] [HAVING where_definition]
[ORDER BY {unsighed_integer|col_name|formura} [ASC|DESC],...]
[LIMIT [Offset,] Zeilen] [PROCEDURE procedure_name]]
Wie aus dieser grundlegenden Syntax hervorgeht, ist die einfachste SELECT-Anweisung SELECT select_list. Tatsächlich können Sie mit dieser einfachsten SELECT-Anweisung auch viele erwartete Funktionen ausführen Beispiel: SELECT 1+1 gibt 2 zurück; zweitens können Sie damit auch Variablen Werte zuweisen. Mit dieser Funktion der SELECT-Anweisung können Sie MySQL-Funktionen frei verwenden, um verschiedene Aufgaben auszuführen PHP-Programm. Operationen und Zuweisen von Werten zu Variablen. In vielen Fällen werden Sie feststellen, dass MySQL über weitaus leistungsfähigere Funktionen als PHP verfügt.
STRAIGHT_JOIN, SQL_SMALL_RESULT, SQL_BIG_RESULT und HIGH_PRIORITY sind MySQL-Erweiterungen zu ANSI SQL92. Wenn der Optimierer Tabellen in einer nicht optimalen Reihenfolge verknüpft, kann die Verwendung von STRAIGHT_JOIN die Abfrage beschleunigen.
SQL_SMALL_RESULT und SQL_BIG_RESULT sind eine Reihe relativer Schlüsselwörter. Sie müssen mit GROUP BY, DISTINCT oder DISTINCTROW verwendet werden. SQL_SMALL_RESULT teilt dem Optimierer mit, dass das Ergebnis sehr klein sein wird, sodass MySQL eine temporäre Tabelle zum Speichern der endgültigen Tabelle verwenden muss, anstatt eine Sortierung zu verwenden. Umgekehrt teilt SQL_BIG_RESULT dem Optimierer mit, dass das Ergebnis sehr klein sein wird, sodass MySQL stattdessen eine Sortierung verwenden muss einen temporären Tisch erstellen.
HIGH_PRIORITY gibt SELECT eine höhere Priorität als eine Anweisung, die die Tabelle aktualisiert, sodass eine priorisierte und schnelle Abfrage durchgeführt werden kann.
Die Verwendung der oben genannten vier Schlüsselwörter ist in der Tat eher unklar. Glücklicherweise können wir uns in den meisten Fällen dafür entscheiden, diese vier Schlüsselwörter in MySQL nicht zu verwenden.
DISTINCT und DISTINCTROW bieten die einfachste, aber nützlichste Filterung für die von der Abfrage zurückgegebene Ergebnismenge. Das heißt, die Ergebnismenge enthält nur unterschiedliche Zeilen. Hierbei ist zu beachten, dass für die Schlüsselwörter DISTINCT und DISTINCTROW Nullwerte gleich sind. Unabhängig davon, wie viele NULL-Werte vorhanden sind, wird nur einer ausgewählt. Die Verwendung von ALL ist überflüssig. Es hat keine Auswirkung auf die Generierung des Ergebnissatzes.
INTO {OUTFILE|DUMPFILE} 'file_name' export_options, schreibt die Ergebnismenge in eine Datei. Die Datei wird auf dem Serverhost erstellt und darf nicht bereits vorhanden sein. Die Syntax des export_options-Teils der Anweisung ist dieselbe wie die, die in den FIELDS- und LINES-Klauseln der LOAD DATAINFILE-Anweisung verwendet wird. Wir werden sie im MySQL Advanced_LOAD DATA-Artikel ausführlich besprechen. Der Unterschied zwischen den Schlüsselwörtern OUTFILE und DUMPFILE besteht darin, dass nur eine Zeile in die Datei geschrieben wird, ohne Spalten- oder Zeilenende.
Auswahlliste: Sie kann einen oder mehrere der folgenden Inhalte enthalten:
1. „*“ bedeutet, dass alle Spalten in der Reihenfolge der Tabellenerstellung angeordnet sind.
2. Eine Liste von Spaltennamen, angeordnet in der vom Benutzer gewünschten Reihenfolge.
3. Sie können einen Alias verwenden, um den Spaltennamen in der folgenden Form zu ersetzen: Spaltenname als Spaltenüberschrift.
4. Ausdrücke (Spaltennamen, Konstanten, Funktionen oder eine beliebige Kombination aus Spaltennamen, Konstanten und Funktionen, die mit arithmetischen oder bitweisen Operatoren verbunden sind).
5. Interne Funktionen oder Aggregatfunktionen.
6. Eine beliebige Kombination der oben genannten Elemente.
FROM: Bestimmt, welche Tabellen im SELECT-Befehl verwendet werden. Dieses Element ist im Allgemeinen erforderlich, es sei denn, die select_list enthält keine Spaltennamen (z. B. nur Konstanten, arithmetische Ausdrücke usw.). Wenn der Tabelleneintrag mehrere Tabellen enthält, trennen Sie diese durch Kommas. Die Reihenfolge der Tabellen nach dem Schlüsselwort FROM hat keinen Einfluss auf die Ergebnisse.
Tabellennamen können verwandte Aliase zugewiesen werden, um Ausdrücke klarer zu machen. Die Syntax hier ist tbl_name [AS] alias_name. Beispiel:
Wählen Sie t1.name,t2.salary von Mitarbeiter als t1,info als t2 aus, wobei t1.name=t2.name dasselbe ist wie „t1.name,t2.salary von Mitarbeiter t1,info t2 auswählen, wobei t1.name=“. t2.name Völlig gleichwertig.
Alle anderen Verweise auf die Tabelle, z. B. in where-Klauseln und playing-Klauseln, müssen Aliase verwenden, und Aliase dürfen nicht mit einer Zahl beginnen.
Die where-Klausel legt die Suchbedingungen fest, und ihre Anwendungsmethode in INSERT-, UPDATE- und DELETE-Anweisungen ist genau dieselbe wie ihre Anwendungsmethode in SELECT-Anweisungen. Die Suchbegriffe folgen dem Schlüsselwort where. Wenn der Benutzer mehrere Suchbedingungen in einer Anweisung verwenden möchte, können diese durch und oder oder verbunden werden. Die grundlegende Syntax von Suchbedingungen ist [nicht] Ausdruck, Ausdruck [nicht] wie „match_string“; ] Spaltenname Join_Operator Spaltenname; [nicht] boolescher_Ausdruck.
und: Wird verwendet, um zwei Bedingungen zu verbinden und das Ergebnis zurückzugeben, wenn beide Bedingungen TRUE sind. Wenn in derselben Anweisung mehrere logische Operatoren verwendet werden, hat der Operator „and“ immer Vorrang, es sei denn, der Benutzer verwendet Klammern, um die Reihenfolge der Operationen zu ändern.
oder: Wird verwendet, um zwei Bedingungen zu verbinden und das Ergebnis zurückzugeben, wenn eine der Bedingungen TRUE ist. Wenn mehrere logische Operatoren in derselben Anweisung verwendet werden, operiert der Operator or normalerweise nach dem Operator und. Natürlich kann der Benutzer Klammern verwenden, um die Reihenfolge der Operationen zu ändern.
between: Schlüsselwort zur Identifizierung der unteren Grenze des Bereichs, gefolgt vom Wert der oberen Grenze des Bereichs. Der Bereich, in dem @val zwischen x und y liegt, umfasst den ersten und letzten Wert. Wenn der erste nach between angegebene Wert größer als der zweite Wert ist, gibt die Abfrage keine Zeilen zurück.
Spaltenname: Der im Vergleich verwendete Spaltenname. Wenn Unklarheiten auftreten, geben Sie unbedingt den Tabellennamen an, in dem sich die Spalte befindet.
Vergleichsoperator: Vergleichsoperator. Siehe die Tabelle unten:
Im Folgenden sind Zitatfragmente aufgeführt:
Symbolbedeutung
= gleich
> größer als
< weniger als
>= größer oder gleich
<= kleiner oder gleich
!= ist nicht gleich
<> ist nicht gleich
Beim Vergleich von Daten vom Typ char und varchar bedeutet „<“ näher am Anfang des Alphabets und „>“ näher am Ende des Alphabets. Im Allgemeinen sind Kleinbuchstaben größer als Großbuchstaben und Großbuchstaben größer als Zahlen. Dies kann jedoch von der Vergleichsreihenfolge des Betriebssystems auf dem Server abhängen.
Nachfolgende Leerzeichen werden beim Vergleich ignoriert. Beispielsweise ist „Dirk“ gleich „Dirk“.
Beim Vergleich von Datumsangaben bedeutet „<“ früher als und „>“ bedeutet später als.
Wenn Vergleichsoperatoren zum Vergleichen von Zeichen- und Datum/Uhrzeit-Daten verwendet werden, müssen alle Daten in Anführungszeichen gesetzt werden.
Ausdruck: kann ein Spaltenname, eine Konstante, eine Funktion oder eine beliebige Kombination aus Spaltennamen oder Konstanten und eine Funktion sein, die mit arithmetischen Operatoren oder bitweisen Operatoren verbunden ist. Die arithmetischen Operatoren sind in der folgenden Tabelle aufgeführt:
Hier ist der zitierte Ausschnitt:
Symbolbedeutung
+ Pluszeichen
- Minuszeichen
* Multiplikationszeichen
/ Das Divisionszeichen
ist null: wird bei der Suche nach einem NULL-Wert verwendet.
like: Schlüsselwort, Sie können like für char, varchar und datetime verwenden (mit Ausnahme von Sekunden und Millisekunden). In MySQL kann like auch für numerische Ausdrücke verwendet werden.
Wenn Benutzer nach Datetime-Daten suchen, verwenden Sie am besten das Schlüsselwort „like“, da ein vollständiger Datetime-Datensatz eine Vielzahl von Datumskomponenten enthält. Beispielsweise fügt der Benutzer der Spalte Arrival_time den Wert „9:20“ hinzu, findet ihn jedoch nicht in der Klausel, in der Arrival_time="9:20" lautet, da MySQL die eingegebenen Daten in „Jan 1,1900 9:20AM“ umwandelt. . Allerdings kann die Klausel wo Arrival_time wie „%9:20%“ es finden.
boolescher_Ausdruck: Ein Ausdruck, der einen „wahren“ oder „falschen“ Wert zurückgibt.
match_string: Eine Zeichenfolge bestehend aus Zeichen und Platzhaltern, eingeschlossen in einfache oder doppelte Anführungszeichen, ist ein passendes Muster. Platzhalter werden in der folgenden Tabelle angezeigt:
Das Folgende ist ein zitiertes Fragment:
Symbolbedeutung
% Eine Zeichenfolge mit 0 oder mehr Zeichen
_ jedes einzelne Zeichen
nicht: jeden logischen Ausdruck oder jedes Schlüsselwort negieren,
Wie etwa „like“, „null“, „between“ usw.
Die Klauseln „group by“ und „withing“ werden in der SELECT-Anweisung verwendet.
Es ist möglich, eine Tabelle in Gruppen zu unterteilen und die Gruppen zurückzugeben, die der Bedingung der Have-Klausel entsprechen.
Syntax: Beginn der Select-Anweisung
gruppieren nach [all]aggregate_free_expression [,aggregate_free_expression]*
[mit Suchbedingungen]
am Ende der Select-Anweisung
: Gibt die Gruppe an, in die die Tabelle unterteilt wird. Wenn im Select-Tabellenelement eine Aggregatfunktion enthalten ist, wird für jede Gruppe ein Gesamtwert berechnet. Die Ergebnisse dieser Summen werden in neuen Spalten statt in neuen Zeilen angezeigt. Benutzer können diese neuen Gesamtspalten in der Have-Klausel referenzieren. Aggregationsfunktionen wie „Durchschnitt“, „Anzahl“, „Max“, „Min“ und „Summe“ können in „select_list“ vor „gruppieren nach“ verwendet werden. Tabellen können nach einer beliebigen Spaltenkombination gruppiert werden.
all: Transact-SQL-Erweiterung, die alle Gruppen in die Ergebnisse einschließt, auch diejenigen, die durch die where-Klausel ausgeschlossen sind. Wenn gleichzeitig die Haveing-Klausel verwendet wird, wird die Bedeutung von all negiert.
aggregat_free_expression: Ein Ausdruck, der keine Aggregatfunktion enthält. Die Transact-SQL-Erweiterung ermöglicht die Gruppierung nach einem Ausdruck ohne Aggregatfunktion, während die Gruppierung nach Spaltennamen erfolgt.
haben: Legen Sie Bedingungen für die Group-By-Klausel fest, ähnlich wie where, wo Bedingungen für die Select-Anweisung festgelegt werden. Die Suchbedingungen für „have“ können Aggregatfunktionsausdrücke umfassen. Ansonsten sind die Suchkriterien dieselben wie die Suchkriterien von where.
Sortieren nach: Ordnen Sie die Ergebnisse nach Spalte. Die von select ausgegebenen Spalten können durch Spaltennamen, Spaltenaliase oder Spaltenpositionen referenziert werden. Zum Beispiel: wähle id als myid, name als myname aus mytable-Gruppe nach id, wähle id als myid, name als myname aus mytable-Gruppe nach myid, wähle id als myid, name als myname aus mytable-Gruppe nach 1. Diese drei Sätze sind vollständig Äquivalent von. Mit der dritten Verwendung sind wir natürlich nicht einverstanden, da sie sich negativ auf die Lesbarkeit des Programms auswirken wird. Um in absteigender Reihenfolge zu sortieren, fügen Sie der order by-Klausel vor dem Spaltennamen, den Sie sortieren möchten, das Schlüsselwort DESC hinzu. Standardmäßig ist die Reihenfolge aufsteigend, Sie können sie jedoch explizit mit dem Schlüsselwort ASC angeben.
limit-Klausel: Wird verwendet, um die Anzahl der von der SELECT-Anweisung zurückgegebenen Zeilen zu begrenzen. limit benötigt 1 oder 2 numerische Parameter. Wenn 2 Parameter angegeben werden, gibt der erste den Offset der ersten zurückzugebenden Zeile an und der zweite gibt die maximale Anzahl der zurückzugebenden Zeilen an. Der Offset der ersten Zeile beträgt 0 (nicht 1). Wenn ein Argument angegeben wird, gibt es die maximale Anzahl der Zeilen an, die bei Offset 0 zurückgegeben werden. Mit anderen Worten: Grenzwert 5 und Grenzwert 0,5 sind völlig gleichwertig.
Was die Bedeutung des Schlüsselworts „prozedur“ betrifft, bin ich mir nicht ganz im Klaren. Es scheint gespeicherte Prozeduren zu unterstützen, und MySQL selbst unterstützt gespeicherte Prozeduren anscheinend nicht für zukünftige Erweiterungsanforderungen.