Dieser Artikel veranschaulicht anhand von Beispielen die Prinzipien und die Verwendung von MySQL-Joinabfragen, Union-Abfragen und Unterabfragen. Teilen Sie uns die Einzelheiten zu Ihrer Information mit: In diesem Artikel:- Verbindungsabfrage
- Gemeinsame Abfrage
- Unterabfragen
- aus Unterabfrage
- wobei Unterabfrage
- Existiert Unterabfrage
Veröffentlichungsdatum: 2018-04-11
Verbindungsabfrage:- Mit einer Join-Abfrage können mehrere Tabellen gleichzeitig abgefragt werden. Zu den Join-Abfragemethoden gehören Inner Join, Outer Join, Natural Join und Cross Join. Mithilfe von Join-Abfragen können Sie Daten aus mehreren Tabellen gleichzeitig anzeigen.
- Innerer Join: Bedingter Join, mehrere Tabellen werden basierend auf angegebenen Bedingungen verbunden und das Übereinstimmungsergebnis besteht darin, die Datensätze beizubehalten, die die Übereinstimmungsergebnisse erfüllen.
- Äußerer Join: Anders als beim inneren Join werden hier alle Daten unabhängig von den übereinstimmenden Zeichen beibehalten. Der äußere Join-Modus bestimmt, welche Tabelle beibehalten werden soll. Wenn beispielsweise die linke Tabelle beibehalten wird, werden die Daten der linken Tabelle beibehalten und die Felddaten der rechten Tabelle auf Null gesetzt, wenn die linke Tabelle nicht mit der rechten Tabelle übereinstimmen kann.
- Natürliche Verbindung: bedingte Verbindung, automatische Verbindung basierend auf „Feldern mit gleichem Namen“ (mehrere Felder mit gleichem Namen werden als Bedingungen verwendet).
- Cross Join: unbedingte Verknüpfung, die jeden Datensatz mit jedem Datensatz einer anderen Tabelle verbindet (kartesisches Produkt). Das Ergebnis ist, dass die Anzahl der Felder gleich der Summe der ursprünglichen Anzahl der Felder ist und die Anzahl der Datensätze gleich dem Produkt der Anzahl der Datensätze in jeder Tabelle.
-- Experimentelle Tabellenstruktur Tabelle erstellen Student(
Ich würde int,
Name varchar(15),
Geschlecht varchar(15),
cid int
);
Tabellenklasse erstellen(
cid int,
cname varchar(15)
);
Drop-Tabelle Student, Klasse;
-- Daten der Versuchstabelle:
insert into student values(1,"lilei","male",1),(2,"hanmeimei","male",2),(3,"jack","male",1),(4,"alice","female",4); --Hier ist eine spezielle Kreation von 4, die nicht in der Klasse ist
in Klassenwerte einfügen (1, „Linux“), (2, „Python“), (3, „Java“), (5, „html5“); – Hier erstellen wir eine Klasse 5, die nicht im Student-Bereich enthalten ist.
wähle * vom Studenten;
wähle * aus Klasse;  
Innerer Join:- Nehmen Sie jeden Datensatz aus der linken Tabelle, gleichen Sie ihn mit allen Datensätzen in der rechten Tabelle ab, behalten Sie die erfolgreich abgeglichenen Datensätze und verketten Sie die beiden Datensätze.
- Syntax: Feldliste aus linker Tabelle auswählen [innen] rechte Tabelle mit linkem Tabellenfeld verbinden = rechtes Tabellenfeld;
- Wenn die Bedingung „on“ nicht verwendet wird, ist das Ergebnis dasselbe wie beim Cross Join.
- Innerer Join – Select * from Student Inner Join Class; – Das Ergebnis ist dasselbe wie beim Cross Join Select * from Student Inner Join Class auf student.cid = class.cid;
Wählen Sie * aus der inneren Join-Klasse des Studenten auf student.cid = class.cid; 
Äußerer Join:- Im Gegensatz zum Inner Join bleiben die Datensätze der Haupttabelle erhalten, unabhängig davon, ob die übereinstimmenden Zeichen erfüllt sind. Es gibt zwei Möglichkeiten: Left Outer Join und Right Outer Join. Beim Left Outer Join bleibt die linke Tabelle erhalten, beim Right Outer Join die rechte Tabelle.
- Grammatik:
- Linker äußerer Join: Wählen Sie die Feldliste aus der linken Tabelle aus. Left Outer Join: Rechte Tabelle mit linkem Tabellenfeld verknüpfen (rechts). Tabelle.Feld = rechtes Tabellenfeld.
- Rechter äußerer Join: Wählen Sie die Feldliste aus der linken Tabelle aus. Rechter Join der rechten Tabelle mit linkem Tabellenfeld = rechtes Tabellenfeld.
Wählen Sie * aus dem linken Teil der Klasse des Studenten aus, und treten Sie dieser bei student.cid = class.cid; 
Natürliche Verbindung:- Verbindungsbedingungen automatisch abgleichen. Das System verwendet Feldnamen als Abgleichmuster (Felder mit demselben Namen werden als Bedingungen verwendet, und mehrere Felder mit demselben Namen werden als Bedingungen verwendet).
- Natürlicher innerer Join: Ähnlich wie der innere Join, allerdings werden keine Join-Bedingungen angegeben.
- Natürlicher äußerer Join: Ähnlich wie der äußere Join, stellt jedoch keine Join-Bedingungen bereit.
- Grammatik:
- Natürlicher innerer Join: Wählen Sie die Feldliste aus dem Tabellennamen aus. Natürlicher Join-Tabellenname;
- Natürlicher äußerer Join: Wählen Sie die Feldliste aus dem Tabellennamen aus. Natürlicher Links-/Rechts-Join-Tabellenname.
Wählen Sie * aus der natürlichen Join-Klasse des Studenten; 
Querverbindung:- Verbinden Sie jeden Datensatz mit jedem Datensatz in einer anderen Tabelle
- Grammatik:
- Wählen Sie die Feldliste aus dem Tabellennamen „Cross Join“-Tabellenname.
- Feldliste aus Tabellenname, Tabellenname auswählen;
Wählen Sie * aus der Cross-Join-Klasse der Studenten;
wähle * aus Schüler, Klasse; 
Auffüllen:- Um die einzelnen Tabellen unter mehreren Tabellen zu unterscheiden und die Verwendung zu erleichtern, können Sie Tabellenaliase verwenden.
select * from student inner join class on student.cid = class.cid;-- Ursprüngliches Ergebnis select id,name,gender,c.cid,cname from student as s inner join class as c on s.cid = c.cid;-- Tabellenalias verwenden
- Mehrfachverbindungen sind möglich.
- Der äußere Join kann einen natürlichen Join simulieren. Sie müssen nur die Join-Bedingung für linkes Tabellenfeld = rechtes Tabellenfeld in „Feldname verwenden“ ändern.
Gemeinsame Abfrage:- Eine gemeinsame Abfrage dient zum Zusammenführen mehrerer Abfrageergebnisse zu Datensätzen. (Dies entspricht dem Verbinden der Abfragedatensatzergebnisse anderer Tabellen mit der Rückseite der ersten Tabelle.) [Da es sich um Spleißen handelt, muss die Anzahl der Felder in mehreren Abfrageergebnissen gleich sein. ] [Beim Spleißen spielt der Datentyp keine Rolle. Beispielsweise ist das erste Feld der ersten Tabelle int, aber der varchar in der nachfolgenden Tabelle kann trotzdem in die erste Spalte gespleißt werden.]
- Syntax: Select-Anweisung Union Select-Anweisung…;
Wählen Sie Name und Geschlecht des Schülers aus
Union
wähle * aus Klasse;
-- Da die Klasse nur zwei Felder hat, wählt die erste Klasse nur zwei Felder aus 
Auffüllen:- Union kann Optionen haben, die nach der Vereinigung hinzugefügt werden. Die Option „all“ entfernt keine Duplikate, während die Option „distinct“ dies tut.
- Union-Abfragen werden im Allgemeinen verwendet, um unterschiedliche Daten in derselben Tabelle auf unterschiedliche Weise zu verarbeiten. (Beispiel: Sie möchten in der Punktetabelle eines Schülers zwei Fächer gleichzeitig abfragen (hier nehmen wir an, es sind Python und Linux))
- Fehler bei gleichzeitiger Verwendung von Union und Order By
- Wenn Sie ein Abfrageergebnis in einer Union-Abfrage sortieren möchten, müssen Sie die Select-Anweisung in Klammern einschließen. [Darüber hinaus ist es aufgrund des Verkettungsmechanismus der gemeinsamen Abfrage erforderlich, nach der Reihenfolge „Bestellen“ eine Limit-Klausel hinzuzufügen, und die Limit-Nummer kann einen sehr großen Wert haben. 】
- Wenn es sich um das endgültige gemeinsame Abfrageergebnis handelt, verwenden Sie „order by“ in der letzten Auswahlanweisung [es wird empfohlen, dem letzten Feld Klammern hinzuzufügen und dann „order by“ hinzuzufügen. Dies wird verwendet, wenn Felder mit demselben Namen vorhanden sind].
Unterabfrage:- Eine Unterabfrage ist eine Abfrage, die in einer Abfrageanweisung verschachtelt ist.
- Unterabfragen können je nach ihrem Vorkommen in drei Kategorien unterteilt werden:
- Aus der Unterabfrage: Die Unterabfrage ergibt sich aus; sie wird im Allgemeinen in der Situation verwendet, „zuerst die zweidimensionale Tabelle zu finden und sie dann zu verarbeiten“.
- Zum Beispiel:
– Dies ist ein nichtssagendes Beispiel. Verwenden Sie beispielsweise „select cid,cname from (select * from class where cname="python") as c;“.
- Where-Unterabfrage: Die Unterabfrage folgt der Where-Bedingung. Wird im Allgemeinen verwendet, wenn „zuerst die angegebenen Bedingungen abgefragt und dann abgefragt wird“.
- Zum Beispiel:
Wählen Sie * vom Studenten, wobei cid = (Wählen Sie cid aus der Klasse, wobei cname = "python");
- Exist-Unterabfrage: Die Unterabfrage befindet sich in der Exist-Anweisung; sie wird im Allgemeinen für „nur wenn sie existiert“-Situationen verwendet
- Zum Beispiel:
– Dies ist ein Beispiel für die Nichtausgabe der entsprechenden Kursinformationen, wenn der Student den Kurs nicht mit cid=1 ausgewählt hat. select * from class where exists(select * from student where cid=1) und cid=1;
- Tatsächlich denken manche Leute, dass die Abfrage nach einer Union auch eine Unterabfrage ist , aber diese werden hier nicht als Unterabfragen betrachtet. Nur die oben genannten, die sehr eng mit „Abfragen“ verwandt sind, werden als Unterabfragen betrachtet.
Auffüllen:- Tatsächlich können Sie Unterabfragen auch basierend auf ihren Ergebnissen kategorisieren:
- Skalare Unterabfrage, das Ergebnis der Unterabfrage ist eine Zeile und eine Spalte, was normalerweise auftritt, wenn die Where-Unterabfrage nur eine Zeile und eine Spalte abfragt.
- Spaltenunterabfrage, das Ergebnis der Unterabfrage ist eine Spalte mit mehreren Zeilen. Dies tritt normalerweise auf, wenn die Where-Unterabfrage eine Spalte mit mehreren Zeilen abfragt.
- Zeilenunterabfrage, das Ergebnis der Unterabfrage sind mehrere Spalten und eine Zeile (oder mehrere Zeilen und mehrere Spalten). Dies geschieht normalerweise, wenn die Where-Unterabfrage mehrere Spalten und eine Zeile abfragt.
- Tabellenunterabfrage, das Ergebnis der Unterabfrage sind mehrere Zeilen und Spalten, was normalerweise in der Unterabfrage „von“ vorkommt
- Manchmal werden in Where-Unterabfragen andere Schlüsselwörter wie any, all und some verwendet, aber for =, = kann seine Funktion grundsätzlich erfüllen.
Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „MySQL-Abfragekenntnisse“, „MySQL-Transaktionsoperationskenntnisse“, „MySQL-gespeicherte Prozedurkenntnisse“, „Zusammenfassung der Kenntnisse zu MySQL-Datenbanksperren“ und „Zusammenfassung der allgemeinen MySQL-Funktionen“. Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist. Das könnte Sie auch interessieren:- Probleme mit Join-Abfragen und Unterabfragen in MySQL
- Detaillierte Erläuterung der MySQL-Multitabellen-Joinabfrage
- Welche Arten von MySQL-Verbindungsabfragen kennen Sie?
- Prinzip und Anwendung der MySQL-Verbindungsabfrage
- MySQL-Join-Abfragesyntax und Beispiele
- Detaillierte Erläuterung des Mysql Self-Join-Abfragebeispiels
- Erläuterung des MySQL-Multitabellen-Join-Abfragebeispiels
- Detaillierte Erläuterung der MySQL-Verbindungsabfrage
|