In diesem Artikel wird hauptsächlich die grundlegende Verwendung von SQL behandelt. Dabei werden die folgenden Aspekte abgedeckt:
SQL verstehenSQL ist eine der zeitaufwändigsten Methoden zur Interaktion mit Daten. Wenn man es nach Funktionen unterteilt, kann es in die folgenden vier Teile unterteilt werden:
Beim Schreiben von SQL stellen Sie möglicherweise fest, dass viele SQLs nicht mit denselben Groß- oder Kleinbuchstaben geschrieben sind. Obwohl dies die Ausführungsergebnisse von SQL nicht beeinflusst, ist die Einhaltung eines einheitlichen Schreibstandards der Schlüssel zur Verbesserung der Effizienz. Normalerweise werden die folgenden Grundsätze befolgt:
Die derzeit wichtigsten DBMS sind:
SELECT verstehenSELECT ist normalerweise das erste Schlüsselwort, mit dem Sie beim Erlernen von SQL in Berührung kommen. Ich werde hier nicht auf die Grundlagen eingehen, aber hier sind einige gängige Spezifikationen: AliasWählen Sie Name AS n FROM Student Konstanten abfragen und eine Spalte mit festen Konstanten hinzufügen:Wählen Sie „Studenteninformationen“ als student_info, Name FROM Student Entfernen doppelter ZeilenWÄHLEN SIE EIN UNTERSCHIEDLICHES Alter vom Schüler Zu beachten ist, dass DISTINCT Duplikate aus allen nachfolgenden Spalten entfernt. Im folgenden Fall wird die Kombination aus Alter und Name entfernt. Wählen Sie unterschiedliches Alter, Name aus dem Schüler aus. Daten sortieren, ASC steht für aufsteigende Reihenfolge, DESC steht für absteigende ReihenfolgeSortieren Sie beispielsweise zuerst nach Namen und dann nach Alter, wenn die Namen gleich sind. SELECT DISTINCT age FROM student ORDERY BY name,age DESC Begrenzen Sie die Anzahl der RücksendungenSELECT DISTINCT Alter FROM Student ORDERY BY Name DESC LIMIT 5 SELECT-AusführungsreihenfolgeNur wenn wir die Ausführungsreihenfolge von SELECT verstehen, können wir effizienteres SQL schreiben. Es gibt zwei Prinzipien für die SELECT-Reihenfolge:
SELECT DISTINCT student_id, name, count(*) as num #Sequenz 5 VON Student JOIN Klasse ON Student.Class_ID = Class.Class_ID #Sequenz 1 WO Alter > 18 #Sequenz 2 GROUP BY student.class_id #Sequenz 3 HAVING num > 2 #Sequenz 4 ORDER BY num DESC #Sequenz 6 LIMIT 2 #Sequenz 7 Bevor wir diesen Prozess einzeln analysieren, müssen wir wissen, dass in jedem der oben genannten Schritte eine virtuelle Tabelle generiert wird und diese virtuelle Tabelle dann im nächsten Schritt als Eingabe verwendet wird. Dieser Prozess ist für uns jedoch unsichtbar:
Wenn Sie SELECT verwenden, geben Sie explizite Spalten anstelle von SELECT * an. Dadurch wird die Netzwerkübertragungsmenge reduziert. Filtern mit WHEREBei der Verwendung der WHERE-Filterung gibt es drei gängige Methoden: Vergleichsoperatoren, logische Operatoren und Platzhalter. Für Vergleichsoperatoren werden in der folgenden Tabelle häufig verwendete Operatoren angezeigt. Bei logischen Operatoren können Sie mehrere Vergleichsoperatoren verbinden, um ein Screening mit mehreren Bedingungen durchzuführen. Häufig verwendete Operatoren sind die folgenden: Es ist zu beachten, dass wenn AND und OR gleichzeitig auftreten, AND eine höhere Priorität hat und zuerst ausgeführt wird. Wenn (), Klammern vorhanden sind, haben sie die höchste Priorität. Verwenden der Platzhalterfilterung: wie: (%) steht für null oder mehr Zeichen, (_) steht für nur ein Zeichen FunktionGenau wie die in Programmiersprachen definierten Funktionen definiert auch SQL einige Funktionen zur einfachen Verwendung, wie z. B. Summe, Durchschnitt, Länge usw. Allgemeine Funktionen werden hauptsächlich in die folgenden vier Kategorien unterteilt. Das Klassifizierungsprinzip basiert auf dem Datentyp beim Definieren der Spalte:
Es ist zu beachten, dass beim Vergleich von Datumsangaben mithilfe von Zeichenfolgen die Funktion DATE zum Vergleich verwendet werden sollte.
Die CAST-Funktion führt bei der Konvertierung von Datentypen keine Rundung durch. Wenn der ursprüngliche Wert eine Dezimalzahl ist, wird bei der Konvertierung in eine Ganzzahl ein Fehler gemeldet. Beim Konvertieren können Sie die Funktion DECIMAL(a,b) verwenden, um die Genauigkeit der Dezimalzahl anzugeben. Beispielsweise bedeutet DECIMAL(8,2), dass die Genauigkeit 8 Ziffern beträgt – die Dezimalzahl plus die Ganzzahl ergeben höchstens 8 Ziffern. Die maximale Anzahl an Dezimalstellen beträgt 2. Konvertieren Sie es dann mit SELECT CAST(123.123 AS DECIMAL(8,2)). AggregatfunktionenNormalerweise verwenden wir Aggregatfunktionen zum Zusammenfassen von Tabellendaten, wobei die Eingabe ein Datensatz und die Ausgabe ein einzelner Wert ist. Es gibt fünf häufig verwendete Aggregatfunktionen: Die Funktion COUNT erfordert besondere Aufmerksamkeit. Weitere Einzelheiten finden Sie in diesem Artikel. So gruppieren SieBeim Zählen von Ergebnissen ist es häufig erforderlich, die Daten nach bestimmten Bedingungen zu gruppieren, was der Anweisung GROUP BY entspricht. Zählen Sie beispielsweise die Anzahl der Schüler in jeder Klasse: Wählen Sie class_id, COUNT(*) als student_count FROM student \ GRUPPE NACH Klassen-ID; Auf GROUP BY können auch mehrere Spaltennamen folgen, um beispielsweise nach Klasse und Geschlecht zu gruppieren: WÄHLEN Sie Klassen-ID, Geschlecht, ANZAHL(*) als Anzahl der Schüler FROM \ Student GRUPPE NACH Klassen-ID, Geschlecht; Der Unterschied zwischen HAVING-Filterung und WHEREWie bei WHERE können Sie die gruppierten Daten filtern. Der Unterschied besteht darin, dass WHERE für Zeilen gilt, während HAVING für Gruppen gilt. Darüber hinaus werden die von WHERE unterstützten Operationen auch von HAVING unterstützt. So kannst du zum Beispiel nach Kursen mit mehr als 2 Personen filtern: Wählen Sie class_id, COUNT(*) als student_count FROM student \ GRUPPE NACH Klassen-ID \ MIT Studentenzahl > 20; UnterabfragenIn komplexeren Situationen werden häufig verschachtelte Abfragen ausgeführt, z. B. wenn nach dem Abrufen eines Ergebnisses dieses als Eingabe verwendet wird, um einen weiteren Satz von Ergebnissen abzurufen. In SQL können Abfragen in korrelierte und nicht korrelierte Unterabfragen unterteilt werden. Gehen Sie von folgender Tabellenstruktur aus: -- ---------------------------- Tabelle löschen, wenn „Student“ vorhanden ist; CREATE TABLE `student` ( `id` int(11) NICHT NULL AUTO_INCREMENT, `name` varchar(20) NICHT NULL STANDARD '', `Alter` int(3) NICHT NULL, `sex` varchar(10) NICHT NULL STANDARD '', `class_id` int(11) NICHT NULL KOMMENTAR 'Klassen-ID', PRIMÄRSCHLÜSSEL (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; -- ---------------------------- -- Aufzeichnungen des Studenten -- ---------------------------- INSERT INTO `student` VALUES ('1', 'Student', 13, 'Student', '1'); INSERT INTO `student` VALUES ('3', 'Student', 11, 'Student', '1'); INSERT INTO `student` VALUES ('5', 'Student', 12, 'Student', '1'); INSERT INTO `student` VALUES ('7', 'Student', 11, 'Student', '1'); INSERT INTO `student` VALUES ('7', 'Student', 11, 'Student', '2'); -- ---------------------------- Tabelle löschen, wenn `student_activities` vorhanden ist; CREATE TABLE `student_activities` ( `id` int(11) NICHT NULL AUTO_INCREMENT, `name` varchar(20) NICHT NULL STANDARD '', `stu_id` int(11) NICHT NULL KOMMENTAR 'Klassen-ID', PRIMÄRSCHLÜSSEL (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; INSERT INTO `student_activities` VALUES ('1', 'Museum', 1); INSERT INTO `student_activities` VALUES ('3, 'Frühlingsausflug', 3); Nicht korrelierte UnterabfragenDie Unterabfrage fragt das Datenergebnis aus der Datentabelle ab. Wird dieses Datenergebnis nur einmal ausgeführt, dann dient dieses Datenergebnis als Bedingung für die als nächstes auszuführende Hauptabfrage. Hier möchten wir die Namen der Schüler abfragen, die in derselben Klasse wie Hu Yi sind: Wählen Sie Name aus Student, wo Klassen-ID = \ (SELECT class_id FROM student WHERE name='Student') Hier finden wir zuerst Hu Yis Klasse, was nur eine Abfrage ist. Dann finden wir Schüler basierend auf der Klasse, was eine nicht korrelierte Unterabfrage ist. Korrelierte UnterabfragenWenn die Unterabfrage mehrmals ausgeführt werden muss, wird eine Schleife verwendet, die mit der externen Abfrage beginnt, bei jeder Abfrage die Unterabfrage übergibt und dann die Ergebnisse an die externe Abfrage zurückgibt. Lassen Sie uns beispielsweise die Namen der Schüler abfragen, die älter sind als das Durchschnittsalter in jeder Klasse: WÄHLEN Sie Namen FROM Student als s1 WHERE Alter > (SELECT AVG(Alter) FROM Student als s2, wobei s1.Klassen-ID = s2.Klassen-ID) Ermitteln Sie hier anhand der Klasseninformationen jedes Schülers das Durchschnittsalter der entsprechenden Klasse und treffen Sie anschließend eine Beurteilung. Jedes Mal, wenn eine Unterabfrage ausgeführt wird, muss sie basierend auf der äußeren Abfrage berechnet werden. Eine solche Unterabfrage ist eine korrelierte Unterabfrage. EXISTS-UnterabfrageIn korrelierten Unterabfragen wird es häufig zusammen mit EXISTS verwendet. Wird verwendet, um zu bestimmen, ob die Bedingung erfüllt ist. Wenn sie erfüllt ist, ist es „Wahr“, wenn sie nicht erfüllt ist, ist es „Falsch“. Fragen Sie beispielsweise die Namen von Schülern ab, die an Schulaktivitäten teilgenommen haben: WÄHLEN SIE NAME FROM Student als s, wobei \ EXISTIERT (SELECT stu_id FROM student_activities als sa, wobei sa.stu_id=s.id) Ähnlich bedeutet NOT EXISTS, dass es nicht existiert. Wenn es die Bedingung erfüllt, ist es FALSE, und wenn nicht, ist es True. Fragen Sie beispielsweise die Namen von Schülern ab, die nicht an Schulaktivitäten teilgenommen haben: WÄHLEN SIE NAME FROM Student als s, wobei \ NICHT EXISTIERT (SELECT stu_id FROM student_activities as sa where sa.stu_id=s.id) Vergleichsunterabfragen festlegenSie können Mengenoperatoren in Unterabfragen verwenden, um Ergebnisse zu vergleichen. Lassen Sie uns mit IN die Namen der Schüler abfragen, die an Schulaktivitäten teilgenommen haben: Wählen Sie den Namen aus dem Studenten aus, wobei die ID in (Wählen Sie die Studenten-ID aus den Studentenaktivitäten) Unterschied zwischen EXISTS und INDa sowohl EXISTS als auch IN dieselbe Funktion erfüllen können, was ist der Unterschied zwischen ihnen? Nehmen wir nun an, wir haben Tabelle A und Tabelle B, wobei sowohl A als auch B das Feld cc haben und der Index b+ für cc erstellt wird, wobei Tabelle A n Datensätze und Tabelle B m Indizes hat. Der abstrakte Modus ist: WÄHLEN SIE * VON A, WO cc IN (WÄHLEN SIE cc VON B) WÄHLEN SIE * AUS A, WO EXISTIERT (WÄHLEN SIE cc AUS B, WO B.cc=A.cc) Bei EXISTS wird die äußere Tabelle zunächst einzeln durchlaufen. Nachdem jedes Ergebnis der äußeren Tabelle erhalten wurde, wird es in die innere Tabelle der Unterabfrage gebracht, um festzustellen, ob der Wert vorhanden ist. Der Pseudocode ähnelt dem folgenden:
Betrachten Sie zunächst das Erscheinungsbild A. Jede Zeile muss durchlaufen werden, daher ist dies n-mal erforderlich. Bei der Abfrage der inneren Tabelle B beträgt die Abfrageeffizienz aufgrund der Verwendung des Index log(m) B + Baumhöhe statt m. Der Gesamtwirkungsgrad beträgt also: n * log(m) Wenn die Anzahl der Elemente in Tabelle A deutlich kleiner ist als die in Tabelle B, wird daher die Verwendung der EXISTS-Abfrage empfohlen. Wenn wir uns IN noch einmal ansehen, wird zuerst die interne Tabelle B abgefragt und dann die externe Tabelle A zur Beurteilung herangezogen. Der Pseudocode lautet wie folgt:
Da zuerst alle Daten in der inneren Tabelle durchsucht werden müssen, beträgt die erforderliche Anzahl m. Betrachtet man die äußere Tabelle A, kann n, da der cc-Index verwendet wird, zu log(n) vereinfacht werden, also m * log(n). Wenn die Daten in Tabelle A wesentlich größer sind als die in Tabelle B, wird daher die Verwendung einer IN-Abfrage empfohlen. Zusammenfassend wird für IN und EXISTS das Prinzip übernommen, eine kleine Tabelle zum Ansteuern einer großen Tabelle zu verwenden. Hier gehen wir näher auf den Unterschied zwischen NOT EXISTS und NOT IN ein: WÄHLEN SIE * VON A, WO cc NICHT IN (WÄHLEN SIE cc VON B) WÄHLEN SIE * AUS A, WO NICHT EXISTIERT (WÄHLEN SIE cc AUS B, WO B.cc=A.cc) Für NOT EXITS kann, wie auch für EXISTS, der Index von cc für die innere Tabelle verwendet werden. Gilt, wenn Tabelle A kleiner als Tabelle B ist. Aber für NOT IN ist es anders als IN. Da cc mit einem Index festgelegt ist, kann cc IN (1, 2, 3) in WHERE cc=1 OR cc=2 OR cc=3 umgewandelt werden, und der cc-Index kann normal verwendet werden. Für NOT IN wird es jedoch in cc! = 1 ODER cc! = 2 ODER cc! = 3 umgewandelt. Da es sich zu diesem Zeitpunkt um eine Ungleichheitsabfrage handelt, kann der Index nicht verwendet werden und die gesamte Tabelle wird gescannt. Das heißt, wenn ein Index festgelegt wird, ist NOT EXISTS effizienter als NOT IN. Im Fall ohne Index sind IN und OR jedoch unterschiedlich:
ZusammenfassenDieser Artikel fasst hauptsächlich einige grundlegende Kenntnisse zu SQL zusammen: Wenn Sie SELECT-Abfragen verwenden, können Sie durch explizites Angeben der Spaltennamen die IO-Übertragung reduzieren und die Effizienz verbessern. Und es ist zu beachten, dass der SELECT-Abfrageprozess bei FROM beginnt und bei LIMIT endet. Das Verständnis des Gesamtprozesses kann uns helfen, SQL besser zu organisieren. Anschließend werden die WHERE-Filteroperatoren und häufig verwendeten Funktionen ausführlich vorgestellt. Dabei ist zu beachten, dass die DATE-Funktion beim Zeitvergleich verwendet werden sollte und wie Daten gruppiert und gefiltert werden. Abschließend werden die anwendbaren Szenarien von Unterabfragen, IN und EXISTS hervorgehoben. Oben finden Sie Einzelheiten zum schnellen Erlernen der MySQL-Grundlagen. Weitere Informationen zu den MySQL-Grundlagen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: JavaScript implementiert die Operationen „Alle auswählen“ und „Alle abwählen“
>>: So prüfen Sie, ob ein Port in LINUX belegt ist
1. Oracle ist eine große Datenbank, während MySQL...
Ich habe gestern gerade etwas HTML gelernt und kon...
Herausforderung: Wandelt die Zeichen &, <,...
Wählen Sie bei der Installation der CentOS7-Versi...
Dieser Artikel stellt den Beispielcode für CSS-Bi...
Gemeinsamkeiten: Das DIV-Tag und das SPAN-Tag beh...
Ich habe immer das Gefühl, dass Designer die sens...
Vorteile eines programmatischen Ansatzes 1. Globa...
Welche Informationen möchten Sie erhalten, wenn S...
Heute habe ich mich mit der Migration eines Proje...
Als ich begann, einen FTP-Server auf dem Server e...
In unserem täglichen Geschäft ist die Formularval...
Inhaltsverzeichnis Vorwort Installieren Einführun...
Frage Das nahtlose Scrollen von Bildern und Texte...
Inhaltsverzeichnis 1. Aufgabenwarteschlange 2. Um...