MySQL-Lerndatenbank-Suchanweisung DQL Xiaobai Kapitel

MySQL-Lerndatenbank-Suchanweisung DQL Xiaobai Kapitel

1. Einfacher Datenabruf

Die Studententabelle im Blog-Inhalt lautet:

Bildbeschreibung hier einfügen

1.1. Abrufen einer einzelnen Spalte

Auswählen + Spaltenname + aus + Tabellenname

1.2. Mehrere Spalten abrufen

select + Spaltenname 1, Spaltenname 2, Spaltenname 3...Spalte n + from + Tabellenname

1.3. Alle Spalten abrufen

select + * (Platzhalter) + from + Tabellenname

1.4. Abrufen unterschiedlicher Zeilen

verwenden eindeutiges Schlüsselwort
Auswählen + unterschiedlich + Spaltenname + von + Tabellenname

Wenn wir beispielsweise überprüfen möchten, wie viele Geschlechter es in einer Klasse gibt, müssen wir nicht das Geschlecht jedes einzelnen Schülers anzeigen, sondern nur die unterschiedlichen Geschlechter. Das heißt, „distinct“ gibt einen eindeutigen Wert zurück.

Hier ist ein Punkt zu beachten: Das Schlüsselwort distinct wird auf alle Spalten angewendet, nicht nur auf die Spalte davor. Wenn zwei Spalten angegeben sind, werden alle Zeilen erkannt, es sei denn, die beiden angegebenen Spalten sind unterschiedlich.

1.5. Suchergebnisse einschränken

verwenden limit-Schlüsselwort
Selet + Spaltenname + Von + Tabellenname + Limit + Zahl

Normalerweise geben Select-Anweisungen die Anzahl der übereinstimmenden Zeilen zurück. Wir können „limit“ verwenden, um die Anzahl der zurückgegebenen Zeilen zu begrenzen. Beispielsweise kann das Select-Ergebnis 10 Zeilen zurückgeben, und wir benötigen nur die ersten 5 Zeilen. Daher können wir den Parameter nach „limit“ als 5 verwenden. Wenn das Select 4 Zeilen zurückgibt und „limit“ 5 Zeilen beträgt, werden 4 Zeilen zurückgegeben. Natürlich können nach dem Limit zwei Parameter stehen und es gibt zwei Möglichkeiten, diese zu schreiben:

1.selet + Spaltenname + von + Tabellenname + Limit + Nummer 1, Nummer 2
2.selet + Spaltenname + von + Tabellenname + Limit + Nummer 2 + Offset + Nummer 1

Dies bedeutet, dass ausgehend von der durch die Nummer 1 dargestellten Zeilennummer die Zeilennummer 2 abgerufen wird. Die zweite Schreibweise wird nach MySQL 5 unterstützt.

Beachten Sie, dass die erste abgerufene Zeile die Zeile 0 und nicht die Zeile 1 ist.

1.6. Verwenden Sie den vollqualifizierten Tabellennamen für die Suche

select + Tabellenname.Spaltenname + from + Datenbankname.Tabellenname

2. Daten sortieren und abrufen

2.1. Grundlegende Syntax

verwenden nach Stichwort sortieren
Auswählen + Spaltenname (können mehrere Spalten sein) + Von + Tabellenname + Sortieren nach + Spaltenname

Die beiden Spaltennamen können unterschiedlich sein

Wir können die Gehälter der Mitarbeiter täglich sortieren, aber einige Mitarbeiter haben das gleiche Gehalt. Auf diese Weise können wir die Gehälter nach Alter usw. sortieren. Dies ist eine Sortierung nach mehreren Spalten, nämlich:

select + Spaltenname (kann mehrere Spalten sein) + from + Tabellenname + order by + Spalte 1, Spalte 2

Dies bedeutet, dass wenn Spalte 1 konsistent ist, nach Spalte 2 sortiert wird. Wenn Spalte 1 inkonsistent ist, wird nicht nach Spalte 2 sortiert.

2.2. Sortierrichtung festlegen

Die Sortierung, über die wir oben gesprochen haben, ist eigentlich die Standardsortierung, die standardmäßig in aufsteigender Reihenfolge erfolgt (Buchstaben von „A“ bis „Z“, Zahlen von klein bis groß).
Wir können auch in absteigender Reihenfolge sortieren

verwenden desc Schlüsselwort
select + Spaltenname (kann mehrere Spalten sein) + from + Tabellenname + order by + Spaltenname desc

Was also sollten wir mit mehreren Sortierregeln tun? Das heißt, wenn wir die Schüler einer Klasse in absteigender Reihenfolge nach ihren Gesamtpunktzahlen sortieren, werden diejenigen mit den gleichen Gesamtpunktzahlen auch in absteigender Reihenfolge nach ihren Chinesischpunktzahlen sortiert. Hier sollten wir darauf achten

Das Schlüsselwort desc gilt nur für die Spalte, die ihm direkt vorangeht.

Wenn wir also nach mehreren Feldern sortieren müssen, müssen wir nur die entsprechenden Sortierregeln nach den entsprechenden Feldern schreiben. Wenn wir beispielsweise beide Felder in absteigender Reihenfolge benötigen:

select + Spaltenname (kann mehrere Spalten sein) + from + Tabellenname + order by + Spaltenname 1 desc, Spaltenname 2 desc

Tatsächlich müssen wir keine aufsteigende Reihenfolge schreiben, da die Standardreihenfolge aufsteigend ist und das Schlüsselwort asc lautet.

Lassen Sie uns basierend auf dem, was wir oben gelernt haben, ein Beispiel machen:
Listen Sie den Namen, das Geschlecht und die Mathematiknoten des ältesten Schülers auf:

wähle sname, ssex, smath aus student ORDER BY sage desc LIMIT 1

Beachten Sie die Reihenfolge von „order by“ und „limit“

3. Filterdaten abrufen

3.1 Verwenden einer einfachen Where-Klausel

Auswählen + Spaltenname + Von + Tabellenname Wobei + Beurteilungsbedingung

wobei es sich um einen speziellen Operator handelt:

1. <> : ungleich, eigentlich dasselbe wie !=
2. between : wird mit and verwendet, um zwischen zwei angegebenen Werten anzugeben, zum Beispiel: select age from student where age between 18 and 20

Wo kann eine Nullwertprüfung durchgeführt werden:

Wählen Sie + Spaltenname + aus + Tabellenname + wobei + Spaltenname + null ist

Beachten Sie, dass hier „is“ anstelle von „=“ verwendet wird.

3.2 Kombinieren von Where-Klauseln

Betreiber Wirkung
Und Um die Bedingungen auf beiden Seiten zu erfüllen und
oder Erfüllen Sie einfach die Bedingungen auf der oder -Seite.
In Wird verwendet, um den Bedingungsbereich anzugeben
nicht Wird verwendet, um den Inhalt der Bedingung zu negieren

Funktion: und muss die Bedingungen auf beiden Seiten von und gleichzeitig erfüllen; oder erfüllt die Bedingung nur auf einer Seite von oder. in wird verwendet, um den Bereich der Bedingungen anzugeben; nicht wird verwendet, um den Inhalt der Bedingung zu negieren.

Nehmen wir als Beispiel die Studententabelle:
1.und: Wir finden alle Informationen von Mädchen, die in Mathematik mehr als 90 Punkte erreicht haben

SELECT * FROM student where ssex="女" und smath>90

2. oder: Wir suchen nach den Namen von Studierenden, die älter als 19 Jahre sind oder deren Englisch-Ergebnisse über 90 liegen.

SELECT sname FROM student where sage>19 oder senglish>90

3.in: Wir finden die Namen von Schülern im Alter von 18 und 19

wähle sname vom Studenten, wo Sage in (18,19)

4.not: Wir suchen nach Namen von Schülern, die nicht 18 oder 19 Jahre alt sind.

wähle den Sname des Studenten, wo Sage nicht in (18,19) ist

5. Wir finden alle Informationen zu Schülern, die jünger als 20 Jahre sind, und sortieren sie in absteigender Reihenfolge ihrer Mathenoten, nur die zweite Zeile:

wähle * von Student, wo Sage nicht in (20) GROUP BY smath desc LIMIT 1,1

Wir achten auf die Reihenfolge der Schlüsselwörter und die Bedeutung der Parameter nach dem Limit.

3.3 Verwendung von Platzhaltern

Platzhalter: Sonderzeichen, die zum Abgleichen eines Teils eines Werts verwendet werden.
wie: Vergleich basierend auf Platzhalterübereinstimmung statt direkter Gleichheitsübereinstimmung

Platzhalter Wirkung
% Gibt eine beliebige Anzahl von Vorkommen eines beliebigen Zeichens an
_ Entspricht einer einzelnen Zeichenfolgelänge

Nehmen wir als Beispiel die Studententabelle:
1.%: Wir suchen nach allen Informationen zu Schülern, deren Namen Blumen enthalten

Wählen Sie * vom Studenten aus, wobei der Name wie "%花%" lautet.

Es gibt zwei Ergebnisse: Cuihua und Ruhuasiyu. % stimmt nur mit einer Seite überein (unabhängig von der Zeichenfolgelänge). Wenn es nur „%hua“ ist, wird Ruhuasiyu nicht gefunden. Wenn wir „ruhuasiyu“ finden möchten, können wir natürlich auch Folgendes tun:

Wählen Sie * vom Studenten aus, wobei der Name wie "%花%玉" lautet.

2._: Wir suchen den herausragenden Schüler Ruhuasiyu:

Wählen Sie * vom Studenten aus, wobei der Name wie "_花_玉" lautet.

% kann 0 Zeichen und eine Zeichenfolge unbegrenzter Länge entsprechen, während _ nur 1 Zeichen entsprechen kann und muss.

4. Verwenden Sie reguläre Ausdrücke, um Daten abzurufen

Reguläre Ausdrücke sind spezielle Zeichenfolgen, die zum Abgleichen von Text verwendet werden. Sie vergleichen ein Muster (regulärer Ausdruck) mit einer Textzeichenfolge.

Allgemeine Symbole in regulären Ausdrücken:

Symbol Symbolische Funktion
. Entspricht einem einzelnen Zeichen
| Äquivalent zu oder
[…] oder eine andere Form von
- Gibt den passenden Bereich an
\\ Passende Sonderzeichen
* 0 oder mehr Übereinstimmungen
+ 1 oder mehr Übereinstimmungen gleich {1,}
? 0 oder 1 Übereinstimmungen ergeben {0,1}
{N} Angegebene Anzahl von Übereinstimmungen
{N,} Mindestens die angegebene Anzahl an Übereinstimmungen
{n,m} Der passende Nummernbereich m überschreitet nicht 255
^ Textanfang
$ Ende des Textes
[[ :<:]] Der Anfang des Wortes
[[:>:]] Wortende

Schlüsselwörter: regulärer Ausdruck
select + 列名(可以多個列) + from + 表名+ where + 列名+ regexp + 正則表達式

Nehmen wir zum Beispiel die Studententabelle:
1. Lassen Sie uns zunächst über den Unterschied zwischen Regexp und Like sprechen

„Like“ stimmt mit der gesamten Zeichenfolge überein, während „regexp“ mit einer Teilzeichenfolge übereinstimmt.

Zum Beispiel:
Wir verwenden „like“, um den Namen des Studenten abzugleichen, dessen Typ 1 ist.

Wählen Sie den Namen des Studenten aus, wobei der andere Name beispielsweise „1“ ist.
Ergebnis:
Schwester Feng

Wir ersetzen like durch regexp:

wähle sname aus student, wobei othername regulärer Ausdruck "1" ist
Ergebnis:
Das Hotel liegt in Cuihua, 1,7 km vom Strand Cuihua entfernt.

Jetzt haben Sie ein klares Verständnis des Unterschieds. 2 . ist für jedes Zeichen geeignet. Beispielsweise finden wir die Namen von Schülern, deren Chinesisch-Punktzahl 8 beträgt:

Wählen Sie Sname vom Studenten aus, wobei der chinesische reguläre Ausdruck „.8“ lautet.
Ergebnis:
Fengjie Qiuxiang

3. |
Suchen wir zum Beispiel nach den Namen von Studenten, deren Aliase 1 Ton oder 2 enthalten.

wähle sname vom Studenten, wobei othername der reguläre Ausdruck „1 ton|2“ ist
Suchergebnisse:
Cuihua bringt Reichtum wie Blumen und Jade

4. [....]
Beispielsweise suchen wir nach den Namen von Studierenden, deren Aliasnamen 1 ton oder 2 ton lauten.

wähle sname vom Studenten, wo othername regulärer Ausdruck „[1|2] ton“
Laufergebnisse:
Das Cuihua Wangcai liegt 1,7 km vom Cuihua Wangcai entfernt und bietet Unterkünfte mit einem Balkon mit Pool.

Tatsächlich ist das oben genannte gleichbedeutend mit wähle sname vom Studenten, wobei othername der reguläre Ausdruck „1 ton|2 ton“ ist
Ebenfalls gleichwertig mit wähle sname from student where othername regexp “[12] ton” 5. -
Suchen Sie beispielsweise nach den Namen von Studenten, deren Aliase englische Kleinbuchstaben enthalten

wähle sname aus student wo othername regulärer Ausdruck „[az]“
Laufergebnisse:
Cuihua Wangcai Qiuxiang ist so schön wie eine Blume und Jade

6. \\
Suchen wir beispielsweise die Namen von Studenten, deren Alias ​​das Zeichen enthalten .

Wählen Sie Sname vom Studenten aus, wobei Othername der reguläre Ausdruck „\\“ ist.
Ergebnisse finden;
keiner
Die Sonderzeichen, die wir finden, wie \, [,] usw., können mit \\ maskiert werden.

7. Anstatt die Studententabelle als Beispiel zu verwenden, nehmen ? das Beispiel aus dem Buch:

Bildbeschreibung hier einfügen

Achten Sie auf diesen Satz:? Entspricht 0 oder 1 Vorkommen eines beliebigen vorangehenden Zeichens

8.{n} Nehmen Sie ein weiteres Beispiel aus dem Buch (das Gleiche gilt für die anderen Klammern):

Bildbeschreibung hier einfügen

Hier ist eine passende Zeichenklasse:

Bildbeschreibung hier einfügen

9. ^ Immer noch das Beispiel aus dem Buch verwendend:

Bildbeschreibung hier einfügen

Natürlich kann sich ^ nicht nur auf den Anfang einer Zeichenfolge beziehen, sondern auch eine Negation in einer Menge anzeigen (dh in []).

Hier ist ein Beispiel, um eine Verneinung auszudrücken:
[^az]: bedeutet, dass alle Zeichen übereinstimmen, die nicht az sind. Nehmen wir als Beispiel die Studententabelle: Suchen Sie die Namen der Studenten, deren Aliase nicht mit a und 1 beginnen.

wähle sname aus student wo othername regulärer Ausdruck “^[^a1]”

Das erste ^ ist der Anfang der Einschränkung und das zweite ^ ist eine Negation.

10. Noch etwas: Groß-/Kleinschreibung ignorierende Suche

Schlüsselwörter: binär

Bei den Zeichenfolgen, die wir normalerweise abfragen, wird die Groß-/Kleinschreibung ignoriert. Daher können wir die Groß-/Kleinschreibung auch durch Binärcode ignorieren.

Auswählen + Spaltenname (kann mehrere Spalten sein) + Von + Tabellenname + Wo + Spaltenname + Regulärer Ausdruck + Binär + Regulärer Ausdruck

Der Rest ist nicht so wichtig, probieren Sie es selbst aus

5. Berechnete Felder abrufen

5.1 Verwenden von Spleißfeldern

Verwenden Sie die Funktion concat(str1,str2,....)

Wenn beispielsweise ein Mathematiklehrer die Anfrage hat, alle Mathematiknoten der Schüler im Format „Mathenote (Name)“ auszudrucken, dann

Wählen Sie concat(smath,"(",sname,")") aus Student

Laufergebnisse:

Bildbeschreibung hier einfügen

5.2 Aliase verwenden

Schlüsselwörter: ALS

Am Beispiel von 5.1

SELECT CONCAT(LTRIM(smath),"(",sname,")") AS "Studentenname" von student

Ergebnis:

Bildbeschreibung hier einfügen

AS kann weggelassen werden, und das obige Beispiel kann auch geschrieben werden als

SELECT CONCAT(LTRIM(smath),"(",sname,")") „Mathematiknoten“ vom Schüler. Aliase werden nach group by, having und order by unterstützt.

5.3 Arithmetische Berechnungen durchführen

Beispielsweise können wir die Gesamtpunktzahl und den Namen jedes Schülers ermitteln:

SELECT sname als „姓名“, smath+chinese+senglish als „总成绩“ vom Studenten

Laufergebnisse:

Bildbeschreibung hier einfügen

6. Verwenden Sie Funktionen zum Abrufen von Daten

6.1 Allgemeine Textverarbeitungsfunktionen:

Bildbeschreibung hier einfügen

Nehmen wir als Beispiel Upper. Wir verwenden die Upper-Funktion, um den Alias ​​unserer Klassenkameraden abzufragen:

SELECT UPPER(othername) als „Alias“ vom Studenten

Laufergebnisse:

Bildbeschreibung hier einfügen

6.2 Datums- und Zeitverarbeitungsfunktionen:

Bildbeschreibung hier einfügen

Datumsformat:

Bildbeschreibung hier einfügen

Nehmen wir als Beispiele einige wichtige Funktionen:

1.now(): Gibt das aktuelle Systemdatum und die aktuelle Systemzeit zurück

wähle jetzt()

Laufergebnisse:

Bildbeschreibung hier einfügen

2.curdate(): Gibt das aktuelle Systemdatum ohne Uhrzeit zurück

wähle curdate()

Laufergebnisse:

Bildbeschreibung hier einfügen

3.curtime(): Gibt die aktuelle Zeit ohne Datum zurück

wähle curtime()

Laufergebnisse:

Bildbeschreibung hier einfügen

4. YEAR(), Hour() usw.: Holen Sie sich den angegebenen Teil

Jahr auswählen (jetzt())

Laufergebnisse:

Bildbeschreibung hier einfügen

5. Konvertieren Sie für die Funktion date_format() die aktuelle Uhrzeit in einen String:

Wählen Sie DATE_FORMAT(jetzt(),"%Y-%c-%d")

Laufergebnisse:

Bildbeschreibung hier einfügen

Für die Konvertierung eines Strings in ein Datum gibt es eine entsprechende Funktion:
Beispiel:

Wählen Sie STR_TO_DATE("2001-09-10","%Y-%c-%d")

Laufergebnisse:

Bildbeschreibung hier einfügen

6.3 Numerische Verarbeitungsfunktionen:

Bildbeschreibung hier einfügen

6.4 Aggregatfunktionen:

Bildbeschreibung hier einfügen

1. Beispiel für die Funktion AVG(): Nehmen wir als Beispiel die Schülertabelle. Wir möchten die durchschnittliche Mathenote der Schüler ermitteln.

select avg(smath) als „Durchschnittsnote in Mathematik“ des Schülers

Laufergebnisse:

Bildbeschreibung hier einfügen

2. COUNT-Funktion Die allgemeine COUNT()-Funktion hat zwei Verwendungszwecke

  • 1 Verwenden Sie count(*) zum Zählen, unabhängig davon, ob die Spalte einen Nullwert hat oder nicht.
  • 2. Verwenden Sie count(column), um die Werte in einer bestimmten Spalte zu zählen und ignorieren Sie Nullwerte

Anwendungsbeispiele:

wähle count(*) vom Studenten

Laufergebnisse:

Bildbeschreibung hier einfügen

3. Unterschiedliche Werte angeben

Schlagwörter unterscheidbar

Wenn wir herausfinden, wie viele unterschiedliche Altersgruppen es in der Schülertabelle gibt;

wähle DISTINCT sage als "Alterskategorie" aus Schüler

Laufergebnisse:

Bildbeschreibung hier einfügen

4. Hinweis

Die Funktionen avg(), min(), max() und sum() ignorieren Nullwerte.

7. Gruppenabrufdaten

7.1. Einfache Gruppierung

Schlagwörter Gruppieren nach

Nehmen wir ein Beispiel:
Zählen Sie die Anzahl der Jungen und Mädchen in der Schülertabelle

wähle ssex,COUNT(*) aus student GROUP BY ssex

Laufergebnisse:

Bildbeschreibung hier einfügen

Notiz:

1. Wenn in der Gruppe ein Nullwert vorhanden ist, wird Null als Gruppe zurückgegeben. Wenn mehrere Nullwerte vorhanden sind, werden sie zusammengefasst.
2. Group by muss nach der Where-Klausel verwendet werden

7.2 Gruppen filtern:

Es dient zum Filtern der Daten nach einfacher Gruppierung nach Schlüsselwörtern haben

Wir zählen beispielsweise die Anzahl der Jungen in der Schülertabelle, deren Mathematiknoten über 80 liegen

Wählen Sie ssex, COUNT(*) von Student, wo smath>80 GROUP BY ssex HAVING ssex="男"

Laufergebnisse:

Bildbeschreibung hier einfügen

Der Unterschied zwischen „wo“ und „haben“:

wo Filter vor der Gruppierung, mit Filtern nach der Gruppierung

8. Verwenden Sie Unterabfragen, um Daten abzurufen

8.1 Einführung in Unterabfragen

1. Unterabfrage: Eine Anweisung, die in anderen Anweisungen vorkommt, wird als Unterabfrage oder innere Abfrage bezeichnet. Eine Abfrage, die andere Select-Anweisungen einbettet, wird als äußere Abfrage oder Hauptabfrage bezeichnet.

2.(1) Klassifizierung der Unterabfragen:
Durch den Ort, an dem die Unterabfrage auftritt
Wählen Sie die Zurück-Taste + ( Unterstützt nur skalare Unterabfragen)
von hinten + ( Unterstützt Tabellenunterabfragen)
wobei oder gefolgt von + (Unterstützt skalare Unterabfragen, Spaltenunterabfragen und Zeilenunterabfragen)
existiert nach +( Tabellenunterabfrage)

2. (2) Nach der Anzahl der Zeilen und Spalten in der Ergebnismenge:
Skalare Unterabfrage: Der Ergebnissatz hat nur eine Zeile und eine Spalte)
Beispiel-Unterabfrage: Ergebnismenge (eine Spalte, mehrere Zeilen)
Zeilenunterabfrage: ( Der Ergebnissatz hat normalerweise mehrere Spalten in einer Zeile)
Tabellenunterabfrage: Der Ergebnissatz besteht normalerweise aus mehreren Zeilen und Spalten.)

8.2 Beispiele für verschiedene Unterabfragen:

1. Unterabfragen nach where und mit:
Beispiel 1: Wir fragen die Schülertabelle nach allen Informationen zu Schülern ab, deren Mathenoten höher sind als die von Cuihua ( Skalare Unterabfrage):

wähle * von Student, wo smath>(wähle smath von Student, wo sname="Cuihua")

Laufergebnisse:

Bildbeschreibung hier einfügen

Beispiel 2: Wenn die Noten des Jungen Ruhuasiyu in Chinesisch, Mathematik und Englisch alle über 80 liegen, dann werden die Informationen aller Mitschüler angezeigt ( Zeilenunterabfrage):

Wählen Sie * von Student, wobei (80,80,80) <(Wählen Sie Chinesisch, Smath, Senglisch von Student, wobei sname = "chinesisch")

Laufergebnisse:

Bildbeschreibung hier einfügen

Beispiel 3: Verwenden Sie where, um die Namen weiblicher Klassenkameradinnen abzufragen ( Beispiel-Unterabfrage) (ziemlich einfaches Beispiel)

WÄHLEN Sie a.sname FROM student a where a.smath in (wählen Sie smath from student where ssex="女")

Laufergebnisse:

Bildbeschreibung hier einfügen

2. Wählen Sie die folgende Unterabfrage ( Skalare Unterabfrage)
Wir ermitteln die Anzahl der von jedem Schüler gewonnenen Auszeichnungen:
Hier stellen wir eine Preistabelle vor:

Bildbeschreibung hier einfügen

select sname,(select count(*) from prize where student.sname=prize.sname ) als „Anzahl der Auszeichnungen“ vom Studenten

Laufergebnisse:

Bildbeschreibung hier einfügen

3. Aus der dahinter stehenden Tabellenunterabfrage:
Beispiel: Wir suchen nach den Namen von Mädchen, die in Mathe über 80 Punkte erreicht haben:

wähle s.sname aus (wähle * aus Student, wo ssex="女") als s

Laufergebnisse:

Bildbeschreibung hier einfügen

4. Tabellenunterabfrage nach Exist

Die Funktion von exists besteht darin, zu beurteilen, ob es leer ist

Beispiel: Wir fragen die Namen von Schülern ab, deren Mathenoten 100 betragen

WÄHLEN SIE a.sname FROM student a, wo EXISTIERT (wählen Sie a.smath from student, wo a.smath=100)

Laufergebnisse:

Bildbeschreibung hier einfügen

Beachten Sie, dass Sie nicht schreiben können:

WÄHLEN SIE a.sname VON student a, wo EXISTIERT (wählen Sie smath von student, wo smath=100)

Es gibt keinen Alias. Bei dieser Schreibweise wird zuerst die Auswahl in exists ausgeführt. Solange in exists ein true vorhanden ist, werden die Namen aller Studenten abgefragt. Andernfalls werden die Namen aller Studenten nicht gefunden. Wenn Sie es also wie oben schreiben, werden, da es einen Studenten gibt, dessen Mathematik 100 ergibt, und die anderen nicht 100 sind, die Namen aller Studenten gefunden, wenn ein true vorhanden ist. Nach Verwendung des Alias ​​wird jedoch jeder Student einmal beurteilt und für jede erfolgreiche Beurteilung wird ein Name ausgegeben.

8.3 Korrelierte Unterabfragen

Korrelierte Unterabfrage: Eine Unterabfrage, die eine äußere Abfrage beinhaltet

Wir fragen die durchschnittlichen Mathenoten der Jungen und Mädchen in der Schülertabelle ab:

Wählen Sie ssex als sssex, (wählen Sie avg(smath) FROM student where sssex=student.ssex) als „Durchschnittsnote“ von student GROUP BY ssex

Laufergebnisse:

Bildbeschreibung hier einfügen

Wir können sehen, dass ich dem ersten ssex einen Alias ​​und dem zweiten eine Referenz gegeben habe. Wenn wir ssex=ssex direkt verwenden, erhalten wir einen Fehler. Korrelierte Unterabfragen vermeiden Mehrdeutigkeiten.

9. Verbindungsabfrage

Wir fügen eine Informationstabelle basierend auf der Schülertabelle hinzu, um Schülerinformationen darzustellen (einschließlich Größe, Gewicht und Matrikelnummer).

Bildbeschreibung hier einfügen

9.1 Verbindungsabfrage

Einstufung;

Die Verbindungsabfrage wird in eine innere Verbindung und eine äußere Verbindungsquerverbindung unterteilt
1. Innerer Join: Equijoin, Nicht-Equijoin, Selfjoin
2. Äußerer Join: linker äußerer Join, rechter äußerer Join, vollständiger äußerer Join
3. Querverbindungen herstellen

1. Äquivalente und nicht äquivalente innere Verknüpfungen ( SQL92-Version)
Nehmen Sie ein Beispiel für einen Equijoin: Kombinieren Sie die Studententabelle und die Informationstabelle, um den Namen, das Geschlecht, das Alter, die Größe und das Gewicht des Studenten abzufragen.

Wählen Sie student.sname, ssex, sage, slength, sweigth aus student, information, wobei student.sname = information.sname

Laufergebnisse:

Bildbeschreibung hier einfügen

Innerer Join mit gleichem Wert, nicht gleichwertiger Join ( SQL99-Version)
Grammatik:

Auswählen + Abfrageliste + aus Tabelle 1 (Alias) + (inneres) Join-Tabelle 2 (Alias) + unter Join-Bedingung + (wo) + (Gruppieren nach) + (Haben) + (Sortieren nach)

Schreiben Sie das obige Beispiel der SQL92-Version mit der SQL99-Anweisung

Wählen Sie student.sname, ssex, sage, slength, sweigth aus den Studenten-Joininformationen zu student.sname=information.sname

Der Unterschied zur SQL2-Syntax besteht darin, dass die beiden Tabellen durch einen Join getrennt sind, und der Unterschied zu SQL92 besteht darin, dass die SQL92-Syntax die Join-Bedingung und andere Filterbedingungen in „where“ einfügt, während SQL99 die Join-Bedingung nach „on“ und andere Filterbedingungen nach „where“ einfügt.

2. Innerer Join-Selbst-Join ( sql92-Version):
Hier ist ein verbales Beispiel:
Beispiel: In einer Mitarbeitertabelle gibt es Mitarbeiternummern und entsprechende Nummern von Führungskräften. Wenn Sie den Namen eines Mitarbeiters und den Namen seiner Führungskraft herausfinden möchten, haben Sie

Wählen Sie a.Name,b.Name aus der Mitarbeitertabelle a, Mitarbeitertabelle b, wobei a.Nummer = b.Leiternummer

Hier wird eine Tabelle als zwei Tabellen betrachtet, aber diese beiden Tabellen müssen Aliase erhalten, sonst kommt es zu Mehrdeutigkeiten. Sie müssen in diesem Format geschrieben werden

3. Innerer Join mehrerer Tabellen, gleicher Join:

Auswählen + Abfrageliste + aus Tabelle 1 (Alias) + (inneres) Join-Tabelle 2 (Alias) + bei Join-Bedingung + (inneres) Join-Tabelle 3 (Alias) + bei Join-Bedingung + (inneres) Join-Tabelle 4 (Alias) + bei Join-Bedingung + ..... + (wobei) + (Gruppieren nach) + (Haben) + (Sortieren nach)

4. Linker äußerer Join des äußeren Joins:

Äußere Verknüpfungen werden verwendet, wenn eine Tabelle Datensätze enthält, die in der anderen Tabelle nicht vorhanden sind.

Grundlegende Syntax für den linken äußeren Join:
SELECT + Abfrage der verknüpften Tabelle + FROM + Haupttabelle (Alias) + LEFT (OUTER) JOIN + Slave-Tabelle (Alias) + ON Verbindungsbedingung

Grundlegende Syntax für den rechten äußeren Join:
SELECT + Abfrage verknüpfte Liste + FROM + Slave-Tabelle (Alias) + rechts (OUTER) JOIN + Master-Tabelle (Alias) + ON Verbindungsbedingung

Äußere Verbindungseigenschaften (links außen, rechts außen):

1. Der äußere Join fragt alle Datensätze in der Haupttabelle ab
2. Wenn die Haupttabelle es hat, die Sekundärtabelle aber nicht, dann wird null angezeigt

Im Allgemeinen gilt: Äußerer Join = innerer Join + Daten in der Haupttabelle, die nicht in der Slave-Tabelle vorhanden sind

Wir führen eine neue Tabelle „abord“ ein (die Anzahl der Auslandsaufenthalte der in der Tabelle „Studenten“ aufgeführten Studenten)

Bildbeschreibung hier einfügen

Beispiel:
Wir fragen ab, wie oft jeder Student im Ausland studiert hat (wir verwenden einen Left Outer Join):

wähle a.sname,b.scount von Student A links JOIN abord b auf a.sname=b.sname

Laufergebnisse:

Bildbeschreibung hier einfügen

5. Vollständige äußere Verbindungseigenschaften

Der äußere Join fragt alle Datensätze in der Primärtabelle und der Sekundärtabelle ab

10.Gemeinsame Abfrage

Schlüsselwortunion

Anwendungsszenario: Wenn die von uns abgefragten Informationen aus mehreren Tabellen stammen und zwischen den mehreren Tabellen keine direkte Verbindung besteht, die abgefragten Feldinformationen jedoch konsistent sind (wenn beispielsweise beide Tabellen Name und Geschlecht abfragen, müssen die Abfragefelder ausgerichtet sein, damit sie in einer Tabelle kombiniert werden können. Wenn beispielsweise beide Tabellen Name und Geschlecht abfragen, muss die Reihenfolge des ersten Auswahlfelds mit der zweiten Auswahl übereinstimmen, d. h. Name zuerst und Geschlecht an zweiter Stelle oder Geschlecht zuerst und Name an zweiter Stelle).

Zum Beispiel:
Suchen Sie in der Schülertabelle nach Namen und Geschlecht der Schüler im Alter von 18 und 19 Jahren:

SELECT sname,ssex von Student, wo Sage=18 UNION SELECT sname,ssex von Student, wo Sage=19

Laufergebnisse:

Bildbeschreibung hier einfügen

Schauen wir uns den Effekt der Deduplizierung an: Wir fragen den Namen und das Geschlecht des Klassenkameraden, der 18 Jahre alt ist, zweimal ab

SELECT sname,ssex von Student, wo Sage=18 UNION SELECT sname,ssex von Student, wo Sage=18

Laufergebnisse:

Bildbeschreibung hier einfügen

Aber wenn wir Union alle verwenden

SELECT sname,ssex von Student, wo Sage=18 UNION all SELECT sname,ssex von Student, wo Sage=18

Laufergebnisse:

Bildbeschreibung hier einfügen

11. Unterabfragen

11.1 Einzeilige Unterabfrage

Einzeilige Unterabfrage, das Abfrageergebnis kann nur eine Datenzeile sein und die Unterabfrage kann keine order by Klausel enthalten

Beispiel (Abfrage von Mitarbeiterinformationen, bei denen es sich weder um das höchste noch um das niedrigste Gehalt in emp handelt):

Wählen Sie empno, ename, sal, aus emp, wobei sal> (wählen Sie min(sal) aus emp) und sal<(wählen Sie max(sal) aus emp);

11.2 Mehrzeilige Unterabfragen

Die Unterabfrage gibt mehrere Datenzeilen mit IN , ANY oder ALL zurück.

Beispiel: Fragen Sie die Tabelle „emp“ nach Mitarbeiterinformationen anderer Abteilungen ab, deren Gehalt höher ist als das Gehalt eines beliebigen Mitarbeiters in Abteilung Nummer 10.

wähle * von emp, wo sal > beliebig (wähle sal von emp, wo deptno=10) und deptno<>10

11.3 Korrelierte Unterabfragen

Bei einzeiligen und mehrzeiligen Unterabfragen werden die inneren und äußeren Abfragen separat ausgeführt. Einige innere Abfragen werden mithilfe äußerer Abfragen ausgeführt, und die Ausführung äußerer Abfragen ist untrennbar mit der inneren Abfrage verbunden. Mit anderen Worten: Die inneren und äußeren Abfragen sind miteinander verknüpft. Solche Unterabfragen werden korrelierte Unterabfragen genannt.

Beispiel:
Verwenden Sie eine korrelierte Unterabfrage, um Informationen über Mitarbeiter abzurufen, deren Gehalt höher ist als das Durchschnittsgehalt der gleichen Position

wähle empno,ename,sal aus emp f, wobei sal>(wähle avg(sal) aus emp, wobei job=f.job) sortiere nach Job

Im obigen Beispiel muss die Unterabfrage die Berufsbezeichnung in der äußeren Abfragetabelle verwenden und die äußere Abfrage muss die Berufsinformationen aus der Unterabfrage verwenden.

12. Ergänzung

12.1 Natürliche Abfrage

Wenn eine natürliche Abfrage mehrere Tabellen abruft, verbindet sie automatisch die Tabellen mit den gleichen Spalten in den beiden Tabellen (natürliche Verbindungen erfordern die gleichen Spaltennamen).
Schlüsselwörter: natural join

Zum Beispiel:

Wählen Sie empno, ename, job, dname aus emp natural join dept, wobei sal>2000

Unsere Mitarbeitertabelle und die Abteilung haben beide Empno-Spalten, daher stellt das System zu diesem Zeitpunkt automatisch eine Verbindung her, wenn es eine Abfrage durchführt.

12.2 Querverbindung

Ein Cross Join ist ein Join, der keine Verbindungsbedingungen erfordert (die beiden Tabellen müssen keine Beziehung haben) und das Ergebnis der Ausführung ist ein kartesisches cross join Schlüsselwort: Cross Join

Wählen Sie Spalte 1, Spalte 2 aus Tabelle 1 aus und führen Sie einen Cross Join mit Tabelle 2 durch.

Oben finden Sie den detaillierten Inhalt der MySQL-Datenbanksuchanweisung DQL für Anfänger. Weitere Informationen zur MySQL-Suchanweisung DQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • So verwenden Sie DQL-Befehle zum Abfragen von Daten in MySQL
  • Detaillierte Erklärung der DQL-Operationen in der MySQL-Syntax

<<:  Lösung für das Jitter-Problem beim CSS3-Transformationsübergang

>>:  Nach dem Absenden des HTML-Dropdown-Menüs bleibt der ausgewählte Wert erhalten, anstatt auf den Standardwert zurückzusetzen

Artikel empfehlen

Der Unterschied zwischen ID- und Name-Attributen von HTML-Elementen

Heute bin ich etwas verwirrt über <a href="...

Verwenden Sie CSS, um ein Datei-Upload-Muster zu zeichnen

Wenn Sie es wären, wie würden Sie es erreichen, w...

MySQL 8.0-Installationstutorial unter Linux

Dieser Artikel beschreibt Ihnen, wie Sie MySQL 8....

HTML-Lernhinweise – Detaillierte Erklärung der HTML-Syntax (unbedingt lesen)

1. Was ist die HTML-Auszeichnungssprache? HTML is...

So ändern Sie den MySQL-Zeichensatz utf8 in utf8mb4

Wenn für MySQL 5.5 der Zeichensatz nicht festgele...

Detaillierte Erklärung des Middleman-Modus von Angular-Komponenten

Inhaltsverzeichnis 1. Mittelsmann-Modell 2. Beisp...

So entwickeln Sie eine Progressive Web App (PWA)

Inhaltsverzeichnis Überblick Erfordern URL der An...

So ändern Sie den Hostnamen in Linux dauerhaft

Wenn Sie Ihren Hostnamen ändern möchten, können S...

Vue implementiert Studentenverwaltungsfunktion

In diesem Artikelbeispiel wird der spezifische Co...

Schneller Einstieg in die Teleport-Komponenten und Verwendungssyntax von VUE 3

Inhaltsverzeichnis 1. Einführung in das Teleporti...

HTML-Code Textfeld Eingabe begrenzen Textfeld wird grau Textfeldeingabe begrenzen

Methode 1: Setzen Sie das schreibgeschützte Attrib...

So installieren Sie MySQL und Redis in Docker

Dieser Artikel basiert auf der CentOS 7.3-Systemu...