Detaillierte Erklärung der MySQL-Datenbank - Abfrage mehrerer Tabellen - Inner Join, Outer Join, Unterabfrage, korrelierte Unterabfrage

Detaillierte Erklärung der MySQL-Datenbank - Abfrage mehrerer Tabellen - Inner Join, Outer Join, Unterabfrage, korrelierte Unterabfrage

Abfrage mehrerer Tabellen

Verwenden Sie eine einzelne Select-Anweisung, um verwandte Abfrageergebnisse aus mehreren Tabellen abzurufen. Verknüpfungen mehrerer Tabellen werden normalerweise für übergeordnete und untergeordnete Tabellen eingerichtet, die über gegenseitige Beziehungen verfügen.

1 Querverbindung

Das kartesische Produkt aller Zeilen der ersten Tabelle multipliziert mit allen Zeilen der zweiten Tabelle ergibt eine Tabelle mit Verbrauchern und Kunden:
Der Code lautet wie folgt:

-- Tabelle „Kunden“ erstellen (
--id int Primärschlüssel auto_increment,
-- Name VARCHAR(20) ungleich null,
--address VARCHAR(20)nicht NULL
-- );
-- CREATE-Tabellenbestellungen (
--order_namre VARCHAR(20) Primärschlüssel,
-- num char(20) nicht NULL,
--price int ungleich null,
-- Kunden-ID int,
-- Einschränkung cus_ord_fk FOREIGN Schlüssel (Kunden-ID) REFERENZEN Kunden (ID)
-- )
Tragen Sie die Daten einfach selbst ein.
Grammatik:

Implizite Syntax (ohne Verwendung von Schlüsselwörtern): select * from customers,orders;

Die Ergebnisse sind wie folgt:

Explizite Syntax (mit Schlüsselwörtern): select * from customers c INNER JOIN orders o ON c.id=o.customer_id;

Die beiden Laufergebnisse sind gleich, aber das kartesische Produkt ist falsch. Mit der folgenden Methode kann es korrigiert werden.

2 Innere Verbindung

Weil der durch den Cross Join erhaltene Ergebnissatz falsch ist. Der Inner Join basiert daher auf dem Cross Join und listet nur die Datenzeilen in der Verbindungstabelle auf, die den Verbindungsbedingungen entsprechen. Die Datensätze, die nicht übereinstimmen, werden nicht aufgelistet.

Grammatik:

Implizite Syntax:

Wählen Sie * aus Kunden, Bestellungen, wobei Kunden-ID = Bestellungen.Kunden-ID;

Explizite Syntax:

Wählen Sie * aus Kunden c INNER JOIN Bestellungen o ON c.id=o.customer_id;

Die Ergebnisse sind wie folgt

Wir können Programmen auch Aliase zuweisen:
Der Code lautet wie folgt:

Wählen Sie * aus Kunden als c, Bestellungen o, wobei c.id = o.customers_id;
SELECT * von Kunden als c innerer Join für Bestellungen o auf c.id=o.customers_id;

3 Äußerer Join

Die interne Verbindung listet nur die Informationen aller Benutzer auf, die das Produkt gekauft haben, und listet nicht die Benutzer auf, die das Produkt nicht gekauft haben.
Der externe Link verwendet eine Tabelle als Basistabelle und fügt die Informationen anderer Tabellen ein. Wenn sie vorhanden sind, werden sie eingefügt. Wenn nicht, wird null angezeigt. Externe Links werden in linke äußere Verknüpfungen und rechte untere Verknüpfungen unterteilt.
Left outer join: Verknüpfung mit der Tabelle links vom Schlüsselwort als Basistabelle

Grammatik:

Wählen Sie * aus Kunden c LEFT JOIN Bestellungen o ON c.id=o.customer_id; 

Right outer join: Die Tabelle rechts vom Schlüsselwort ist die Basistabelle

Grammatik:

Wählen Sie * aus Bestellungen o RIGHT JOIN Kunden c ON c.id=o.customer_id; 

4 Unterabfragen

In einigen Fällen ist die erforderliche Bedingung beim Ausführen einer Abfrage das Ergebnis einer anderen Select-Anweisung. In diesem Fall wird eine Unterabfrage verwendet. Die Abfrage (innere Abfrage), die zuerst ausgeführt wird, um Daten für die Hauptabfrage (äußere Abfrage) bereitzustellen, wird als Unterabfrage bezeichnet. Unterabfragen werden in verschachtelte Unterabfragen und korrelierte Unterabfragen unterteilt.

Verschachtelte Unterabfragen:

Die Ausführung der inneren Abfrage ist unabhängig von der äußeren Abfrage. Die innere Abfrage wird nur einmal ausgeführt und das Ergebnis wird nach Abschluss der Ausführung als Bedingung der äußeren Abfrage verwendet (die Unterabfrageanweisung in der verschachtelten Unterabfrage kann herausgenommen und separat ausgeführt werden.)

Grammatik und Übungen: Abfrage aller Schüler, die der Lehrer mit der ID 1 unterrichtet.

Wählen Sie * aus den Studenten, wobei die ID in (Wählen Sie s_id aus den Lehrer-Studenten, wobei t_id=1 ist) ist;

Korrelierte Unterabfragen:

Die Ausführung der internen Abfrage hängt von den Daten der externen Abfrage ab. Jedes Mal, wenn die externe Abfrage ausgeführt wird, wird auch die interne Abfrage ausgeführt. Jedes Mal wird zuerst die äußere Abfrage ausgeführt, ein Tupel in der äußeren Abfragetabelle herausgenommen, die Daten im aktuellen Tupel an die innere Abfrage übergeben und dann die innere Abfrage ausgeführt. Bestimmen Sie anhand des Ergebnisses der internen Abfrageausführung, ob das aktuelle Tupel die Where-Bedingung in der externen Abfrage erfüllt. Wenn ja, ist das aktuelle Tupel ein Datensatz, der die Anforderungen erfüllt, andernfalls erfüllt es die Anforderungen nicht. Anschließend ruft die externe Abfrage die nächsten Tupeldaten ab und führt die obigen Vorgänge aus, bis alle Tupel verarbeitet sind.
Erstellen Sie drei Tabellen. Übung 1. Fragen Sie alle Schüler ab, die der Lehrer mit der ID 1 unterrichtet.
– Erstellen Sie einen Lehrertisch

Tabelle Lehrer1 erstellen(
ID int Primärschlüssel auto_increment,
Name char(20) nicht NULL,
Betreff char(20) nicht null
); 

– Erstellen Sie eine Studententabelle

Tabelle student1 erstellen(
ID int Primärschlüssel auto_increment,
Name char(20) eindeutig nicht null,
Alter int null
); 

– Erstellen Sie eine dritte Tabelle

Tabelle tea_stu erstellen(
id int Primärschlüssel,
Name char(20),
t_id int,
s_id int,
Score int ungleich null,
Einschränkung teacher1_id_fk Fremdschlüssel (t_id) verweist auf teacher1 (id),
Einschränkung student_id_fk Fremdschlüssel (s_id) Referenzen student1 (id)
);

Übung 1. Abfrage aller Schüler, die der Lehrer mit der ID 1 unterrichtet.

Methode 1: Schreiben Sie es auf verschiedene Arten auf:

Wähle s_id aus tea_stu, wobei t_id=1;
wähle * von student1, wobei id in (2,3);

Methode 2:

wähle * aus student1, wobei id in (wähle s_id aus tea_stu, wobei t_id=1); 

Korrelierte Unterabfragen:

Die Ausführung der internen Abfrage hängt von den Daten der externen Abfrage ab. Jedes Mal, wenn die externe Abfrage ausgeführt wird, wird auch die interne Abfrage ausgeführt. Jedes Mal wird zuerst die äußere Abfrage ausgeführt, ein Tupel in der äußeren Abfragetabelle herausgenommen, die Daten im aktuellen Tupel an die innere Abfrage übergeben und dann die innere Abfrage ausgeführt. Bestimmen Sie anhand des Ergebnisses der internen Abfrageausführung, ob das aktuelle Tupel die Where-Bedingung in der externen Abfrage erfüllt. Wenn ja, ist das aktuelle Tupel ein Datensatz, der die Anforderungen erfüllt, andernfalls erfüllt es die Anforderungen nicht. Anschließend ruft die externe Abfrage die nächsten Tupeldaten ab und führt die obigen Vorgänge aus, bis alle Tupel verarbeitet sind.
Finden: Die Punktzahl der Schüler, deren Testergebnisse in jedem Fach über der Durchschnittspunktzahl liegen.

Wählen Sie * aus tea_stu als a, wobei a.score>(wählen Sie avg(b.score) aus tea_stu als b, wobei a.s_id=b.s_id); 

Oben finden Sie die detaillierte Integration der MySQL-Mehrtabellenabfrage, die vom Herausgeber vorgestellt wurde. Ich hoffe, dass sie für alle hilfreich sein wird. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!

Das könnte Sie auch interessieren:
  • SQL-Abfrage MySql-Datenbanktabellenname und -beschreibung Tabellenfeld- (Spalten-)Informationen
  • Analyse des SELECT-Abfrageausdrucks in der MySQL-Datenbank
  • Erweiterte MySQL-Datenbankabfrage und Mehrtabellenabfrage
  • Warum verbessert der Index in der Mysql-Datenbanktabelle nicht die Abfragegeschwindigkeit?
  • MySQL-Datenbankabfrage – erweiterte Multi-Table-Abfrage – detaillierte Erklärung
  • Warum ist die Abfrage langsam, obwohl in der MySQL-Datenbanktabelle ein Index vorhanden ist?

<<:  Das automatische Porterkennungsskript von Zabbix Redis gibt das JSON-Format zurück

>>:  Detaillierte Erklärung und Erweiterung von ref und reactive in Vue3

Artikel empfehlen

Webprojektentwicklung VUE-Mischungs- und Vererbungsprinzip

Inhaltsverzeichnis Mischen Mixin-Hinweis (doppelt...

So betten Sie mithilfe von Iframe andere Webseiten in eine Webseite ein

So verwenden Sie Iframe: Code kopieren Der Code l...

So verwenden Sie video.js in Vue zum Abspielen von Videos im M3U8-Format

Inhaltsverzeichnis 1. Installation 2. Einführung ...

JavaScript realisiert den Drag-Effekt der Modalbox

Hier ist ein Fall des Ziehens einer modalen Box. ...

Detailliertes Tutorial zur Installation von Hbase 2.3.5 auf Vmware + Ubuntu18.04

Vorwort Im vorherigen Artikel wurde Hadoop instal...

Detaillierte Erläuterung der Mysql-Funktionsaufrufoptimierung

Inhaltsverzeichnis Funktionsaufrufoptimierung Fun...