Probleme mit Join-Abfragen und Unterabfragen in MySQL

Probleme mit Join-Abfragen und Unterabfragen in MySQL

Grundlegende Syntax für Multi-Table-Joins

Bei der Multi-Table-Verbindung werden mehrere Tabellen zu einer Tabelle zusammengefasst und anschließend abgefragt.

Wählen Sie Feld1, Feld2, ...
von Tabelle1 {inner|lift|right} verbinde Tabelle2
vom Verbindungszustand;

Es gibt zwei Tabellen: Abteilungstabelle und Mitarbeitertabelle

Cross Join und kartesisches Produktphänomen

Querverbindung

Cross Join, auch bekannt als unbedingter innerer Join/kartesischer Join

Jedes Element in der ersten Tabelle wird der Reihe nach mit jedem Element in der anderen Tabelle kombiniert.

Wählen Sie * aus Mitarbeiter, Abteilung; 

Das obige Ergebnis ist definitiv nicht das, was wir wissen möchten. Jede Person in der linken Tabelle hat 4 Abteilungen. Ein genauer Blick auf diese 4 Datensätze zeigt genau das Ergebnis, wenn man jeden Datensatz in der linken Tabelle nacheinander mit der rechten Tabelle abgleicht.

Kartesisches Produktphänomen

Der Grund für das kartesische Produktphänomen: Es gibt keine gültige Verbindungsbedingung zwischen den beiden Tabellen. Da Sie keine Join-Bedingung haben, kann die erste Zeile dieser Tabelle definitiv eins zu eins mit allen Zeilen der anderen Tabelle abgeglichen werden. Ebenso kann die zweite Zeile dieser Tabelle definitiv eins zu eins mit allen Zeilen der anderen Tabelle abgeglichen werden. Und so weiter, die letzte Zeile m dieser Tabelle kann auch eins zu eins mit allen Zeilen der anderen Tabelle abgeglichen werden. Wenn die andere Tabelle n Zeilen hat, muss die Anzahl der am Ende angezeigten Zeilen m*n Zeilen betragen.

Wenn Sie kein kartesisches Produktphänomen erzeugen möchten, müssen Sie effektive Tabellenverknüpfungsbedingungen hinzufügen. Im obigen Beispiel stellt die dep_id der linken Tabelle ihre Abteilung nur dann dar, wenn sie mit der ID der rechten Tabelle übereinstimmt.

Innerer Join

INNER JOIN dient dazu, die Schnittmenge mehrerer Tabellen zu finden, also je nach Bedingungen die richtigen Ergebnisse herauszufiltern.

Wählen Sie Mitarbeitenden-ID, Mitarbeitenden-Name, Mitarbeitenden-Alter, Mitarbeitenden-Dep_ID, Mitarbeitenden-Geschlecht, Dep.ID, Dep.Name
von Mitarbeiter als emp INNER JOIN Abteilung als dep
ein emp.dep_id=dep.id; 

Da in der Abteilungstabelle keine Abteilung mit id=5 vorhanden ist, wird der Datensatz mit der Abteilungs dep_id=5 in der Mitarbeitertabelle nicht zurückgegeben. Und da行政部keine Mitarbeiter vorhanden sind, wird auch dieser Datensatz nicht zurückgegeben.

Äußerer Join

Linker äußerer Join

Der Left Join basiert auf der linken Tabelle. Wenn in der rechten Tabelle kein passender Datensatz vorhanden ist, wird dieser mit NULL gefüllt. Sein Wesen besteht darin, Datensätze hinzuzufügen, die auf der Grundlage des Inner Join Ergebnisse in der linken Tabelle, aber nicht in der rechten Tabelle haben (im Fall des Inner Join werden die Datensätze in diesem Fall ignoriert).

Wählen Sie Mitarbeitenden-ID, Mitarbeitenden-Name, Mitarbeitenden-Alter, Mitarbeitenden-Dep_ID, Mitarbeitenden-Geschlecht, Dep.ID, Dep.Name
vom Angestellten als Angestellter in die Abteilung als Dep
ein emp.dep_id=dep.id; 

Rechter äußerer Join

Im Gegensatz zum linken Join basiert der rechte Join auf der rechten Tabelle. Wenn einige Felder in der linken Tabelle keine passenden Ergebnisse haben, werden sie mit NULL gefüllt. Sein Wesen besteht darin, Datensätze hinzuzufügen, die Ergebnisse in der rechten Tabelle haben, aber nicht in der linken Tabelle, und zwar auf der Grundlage des inneren Joins (im Fall des inneren Joins werden Datensätze in diesem Fall ignoriert).

Wählen Sie Mitarbeitenden-ID, Mitarbeitenden-Name, Mitarbeitenden-Alter, Mitarbeitenden-Dep_ID, Mitarbeitenden-Geschlecht, Dep.ID, Dep.Name
vom Angestellten als Angestellter in die Abteilung als Dep
ein emp.dep_id=dep.id; 

Vollständiger äußerer Join

Der vollständige äußere Join, der auf dem inneren Join basiert, zeigt alle Datensätze der linken und rechten Tabelle an und die Standarddatensätze in der linken und rechten Tabelle werden mit NULL gefüllt.

Für den vollständigen Outer Join gibt es in MySQL keine FULL JOIN -Syntax, aber dieser wird mit Hilfe von UNION/UNION ALL -Anweisungen implementiert.

Der Unterschied zwischen UNION und UNION ALL besteht darin, dass UNION die Funktion der Deduplizierung hat.

Wählen Sie Mitarbeitenden-ID, Mitarbeitenden-Name, Mitarbeitenden-Alter, Mitarbeitenden-Dep_ID, Mitarbeitenden-Geschlecht, Dep.ID, Dep.Name
vom Angestellten als Angestellter in die Abteilung als Dep
auf emp.dep_id=dep.id
Union
Wählen Sie Mitarbeitenden-ID, Mitarbeitenden-Name, Mitarbeitenden-Alter, Mitarbeitenden-Dep_ID, Mitarbeitenden-Geschlecht, Dep.ID, Dep.Name
vom Angestellten als Angestellter in die Abteilung als Dep
ein emp.dep_id=dep.id; 

Unterabfragen

  • Eine Unterabfrage ist eine Abfragemethode, die eine Abfrageanweisung in einer anderen Abfrageanweisung verschachtelt:
  • Das innere Abfrageergebnis der Unterabfrage kann als äußere Abfrageanweisung verwendet werden, um Abfragebedingungen bereitzustellen.
  • Eine Unterabfrage kann Schlüsselwörter wie IN , NOT IN , AND , ALL , EXISTS und NOT EXISTS enthalten.

Unterabfragen können auch Vergleichsoperatoren wie = , != , > , < usw. enthalten.

-- Abfrage des Namens der Abteilung mit einem Durchschnittsalter von über 20 Jahren Namen auswählen
aus der Abteilung
wobei id in (
Wählen Sie dep_id aus
vom Mitarbeiter
Gruppieren nach dep_id
mit Durchschnittsalter > 20);

-- Abfrage des Namens des Mitarbeiters in der Finanzabteilung Namen auswählen 
vom Mitarbeiter
wobei dep_id in (
ID auswählen 
aus der Abteilung 
wobei Name = "Finanzabteilung");


-- Abfrage des Alters und des Namens aller Mitarbeiter, die älter als das Durchschnittsalter sind. Wählen Sie Name, Alter 
vom Mitarbeiter 
wobei Alter > (
Wählen Sie Durchschnitt(Alter) vom Mitarbeiter); 

Dies ist das Ende dieses Artikels über die Probleme von Join-Abfragen und Unterabfragen in MySQL. Weitere relevante MySQL-Join-Abfragen und -Unterabfragen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • 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 der Prinzipien und Anwendungsbeispiele von MySQL-Joinabfragen, Union-Abfragen und Unterabfragen
  • Detaillierte Erläuterung des Mysql Self-Join-Abfragebeispiels
  • Erläuterung des MySQL-Multitabellen-Join-Abfragebeispiels
  • Detaillierte Erläuterung der MySQL-Verbindungsabfrage

<<:  Implementierungsschritte zur Installation eines Redis-Containers in Docker

>>:  Detaillierte Erklärung der Unterschiede zwischen den vier Positionierungsarten in CSS

Artikel empfehlen

Implementierung langer Textschatten in Less in CSS3

Dieser Artikel stellt hauptsächlich die Implement...

Detaillierte Erklärung zur Verwendung von CSS3 RGB und RGBA (transparente Farbe)

Ich glaube, jeder Mensch ist sehr sensibel für Fa...

MySQL-Abfrage redundanter Indizes und ungenutzter Indexoperationen

MySQL 5.7 und höhere Versionen ermöglichen die di...

So stellen Sie FastDFS in Docker bereit

Installieren Sie Fastdfs auf Docker Mount-Verzeic...

Lösen Sie das Problem verstümmelter chinesischer Schriftzeichen in Mysql5.7

Wenn Sie MySQL 5.7 verwenden, werden Sie feststel...

Natives, benutzerdefiniertes Rechtsklickmenü von js

In diesem Artikelbeispiel wird der spezifische Co...

Implementierung interaktiver Daten zwischen QT und Javascript

1. Daten fließen von QT zu JS 1. QT ruft die JS-F...

Umfassendes Verständnis des html.css-Überlaufs

Umfassendes Verständnis des html.css-Überlaufs XM...

JavaScript ist unzuverlässig undefiniert

undefined Wenn wir in JavaScript feststellen möch...

Implementierung der Docker-Bereitstellung von Django+Mysql+Redis+Gunicorn+Nginx

I. Einleitung Die Docker-Technologie erfreut sich...