Detaillierte Erläuterung der Prinzipien und Anwendungsbeispiele von MySQL-Joinabfragen, Union-Abfragen und Unterabfragen

Detaillierte Erläuterung der Prinzipien und Anwendungsbeispiele von MySQL-Joinabfragen, Union-Abfragen und Unterabfragen

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; 

imageimage

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; 
    image

Ä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; 
    image
    Wählen Sie * aus dem rechten Fenster des Studenten aus und treten Sie der Klasse bei student.cid = class.cid; 
    image

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; 
    image
    Wählen Sie * aus dem natürlichen linken Studenten aus, treten Sie der Klasse bei; 
    image

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; 
    image

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 
    image

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

<<:  Beispiel zum Verlassen der Schleife in Array.forEach in js

>>:  Detaillierte Erklärung der Lösung für das Problem, dass FTP keine Verbindung zum Baota Linux-Panel herstellen kann

Artikel empfehlen

Echarts-Tutorial zur Implementierung von Baumdiagrammen

Treemaps dienen vor allem der Visualisierung baum...

Gängige Angriffe auf Web-Frontends und Möglichkeiten, sie zu verhindern

Die Sicherheitsprobleme, die bei der Frontend-Ent...

Detaillierte Erklärung des Unterschieds zwischen Vue-Lebenszyklus

Lebenszyklusklassifizierung Jede Komponente von V...

SVN-Installation und grundlegende Bedienung (grafisches Tutorial)

Inhaltsverzeichnis 1. Was ist SVN? 2. Methoden zu...

Erweiterte Verwendungsbeispiele für den Befehl mv in Linux

Vorwort Der Befehl mv ist die Abkürzung für move ...

Detaillierte Erklärung der Destrukturierungszuweisungssyntax in Javascript

Vorwort Die erstmals in ES6 eingeführte „Destruct...

CSS3 realisiert das Papierflugzeug aus der Kindheit

Heute werden wir Origami-Flugzeuge basteln (die A...

CocosCreator ScrollView-Optimierungsreihe: Frame-Laden

Inhaltsverzeichnis 1. Einleitung 2. Analyse des f...

Javascript-Bereich und Abschlussdetails

Inhaltsverzeichnis 1. Geltungsbereich 2. Geltungs...

jQuery implementiert alle Auswahl- und umgekehrten Auswahloperationsfälle

In diesem Artikel wird der spezifische Code von j...

Erläuterung der Faktoren, die die Datenbankleistung in MySQL beeinflussen

Eine Geschichte über die Datenbankleistung Währen...