Detaillierte Erläuterung der MySQL-Mehrtabellenabfrage

Detaillierte Erläuterung der MySQL-Mehrtabellenabfrage

Sich gut zu ernähren und ausreichend zu schlafen, klingt einfach, ist in der Praxis jedoch nicht so leicht umzusetzen.

Lesen Sie weiter, um die Syntax der MySql-Mehrtabellenabfrage von 1999 zu überprüfen

#2, SQL1999-Syntax:
 SELECT Abfrageliste FROM Tabelle1 Alias ​​[Verbindungstyp]
 JOIN Tabelle 2 Alias ​​ON Linkbedingung [WHERE Filterbedingung]
 GRUPPELN NACH
 【Filterbedingungen haben】
 【ORDER BY Sortierliste ASC|DESC】

Kategorie (Verbindungstyp):
 Innerer Join (★): INNER
 Äußere Verbindung links außen (★): LINKS 【AUSSEN】
 Rechts außen (★): RECHTS 【AUSSEN】
 VOLL 【AUSSEN】
 Querverbindung: CROSS

===============================================================================

1. Syntax für den inneren Join:
 SELECT Abfrageliste FROM Tabelle 1 Alias ​​INNER JOIN Tabelle 2 Alias ​​ON Joinbedingung [WHERE Filterbedingung]
 GRUPPELN NACH
 【Filtergruppe haben】
 【ORDER BY Sortierliste ASC|DESC】

Einstufung:
 Merkmale gleich- und ungleichwertiger Selbstkonnektivität:
 ①Sortierung, Gruppierung und Filterung hinzufügen. ②INNER kann weggelassen werden. ③Setzen Sie die Filterbedingungen nach WHERE und die Verbindungsbedingungen nach ON, um die Trennung zu verbessern und das Lesen zu erleichtern.
 ④Die Wirkung der INNER JOIN-Verbindung ist dieselbe wie die der entsprechenden Verbindung in der SQL1992-Syntax. Beide fragen den Schnittpunkt ab.
#1. Gleichwertige Verbindung #Fall 1. Mitarbeitername und Abteilungsname abfragen. Das Vertauschen der Join-Bedingungen hat keinen Einfluss auf die Ergebnisse.
SELECT Nachname AS Mitarbeitername, Abteilungsname AS Abteilungsname FROM Mitarbeitername
INNER JOIN Abteilungen d
EIN e.Abteilungs-ID=d.Abteilungs-ID;
SELECT Nachname AS Mitarbeitername, Abteilungsname AS Abteilungsname FROM Mitarbeitername
INNER JOIN Abteilungen e
EIN e.Abteilungs-ID=d.Abteilungs-ID; 

#Fall 2. Abfrage von Mitarbeitern und Berufsbezeichnungen mit „e“ (Screening)
SELECT Nachname AS Mitarbeitername, Jobtitel AS Berufsbezeichnung FROM Mitarbeiter e
INNER JOIN Jobs j
EIN e.job_id=j.job_id
WO e.Nachname LIKE '%e%'; 

#Fall 3. Fragen Sie die Städtenamen und Abteilungsnummern ab, wobei die Anzahl der Abteilungen > 3 ist. (Gruppieren + Filtern)
Schritt für Schritt: Informieren Sie sich zunächst über die Anzahl der Abteilungen in jeder Stadt und filtern Sie dann diejenigen heraus, die den Anforderungen entsprechen.
SELECT Stadt AS Stadt, COUNT(*) AS Zahl FROM Standorte l
INNER JOIN Abteilungen d
EIN l.Standort-ID=d.Standort-ID
GRUPPE NACH Stadt
MIT ANZAHL(*) > 3; 

#Fall 4. Fragen Sie den Abteilungsnamen und die Anzahl der Mitarbeiter ab, deren Mitarbeiterzahl größer als 3 ist, und sortieren Sie sie in absteigender Reihenfolge.
Schritt für Schritt:
1. Abfrage der Mitarbeiterzahl in jeder Abteilung,
2. Filtern Sie in den obigen Ergebnissen die Datensätze mit mehr als 3 Mitarbeitern heraus.
3. Sortieren Sie die Anzahl der Mitarbeiter SELECT COUNT(*) AS Anzahl der Mitarbeiter, d.Abteilungsname AS Abteilungsname FROM Mitarbeiter e
INNER JOIN Abteilungen d
EIN e.Abteilungs-ID=d.Abteilungs-ID
GROUP BY d.Abteilungsname
MIT ANZAHL(*) > 3
ORDER BY Mitarbeiternummer DESC; 

#Fall 5. Fragen Sie den Namen des Mitarbeiters, den Namen der Abteilung und die Berufsbezeichnung ab und sortieren Sie in absteigender Reihenfolge nach dem Abteilungsnamen. Beachten Sie die Bedingungen beim Verbinden der drei Tabellen.
SELECT Nachname AS Mitarbeitername, Abteilungsname AS Abteilungsname,
job_title AS Berufsbezeichnung FROM Mitarbeiter e
INNER JOIN Abteilungen d
EIN e.Abteilungs-ID=d.Abteilungs-ID
INNER JOIN Jobs j
EIN e.job_id=j.job_id
ORDER BY d.Abteilungsname DESC; 

#2. Nicht gleichwertige Verbindung. Reichweite (indirekt)
#Fall 1. Abfrage des Gehaltsniveaus der Mitarbeiter.
SELECT Gehalt AS Monatsgehalt, Gehaltsstufe AS Gehaltsstufe FROM Mitarbeiter e
INNER JOIN job_grades g
BEI e.salary ZWISCHEN g.lowest_sal UND g.highest_sal; 

#Fall 2. Fragen Sie die Nummer jeder Gehaltsstufe > 20 ab und sortieren Sie sie in absteigender Reihenfolge.
SELECT j.grade_level AS grade,COUNT(*) Zahl FROM Mitarbeiter e
INNER JOIN job_grades j
ON e.salary ZWISCHEN j.lowest_sal UND j.highest_sal
GROUP BY j.Klassenstufe
MIT ANZAHL(*) > 20
ORDER BY Nummer DESC; 

#3.Selbstbeitritt#Fall 1. Fragen Sie den Namen des Mitarbeiters und den Namen des Vorgesetzten ab.
SELECT e.last_name AS Mitarbeitername, m.last_name AS Vorgesetztenname FROM Mitarbeiter e
INNER JOIN Mitarbeiter m
EIN e.manager_id=m.employee_id; 

#Fall 2. Fragen Sie den Namen des Mitarbeiters und den Namen des Vorgesetzten ab, der das Zeichen k enthält.
SELECT e.last_name AS Mitarbeitername, m.last_name AS Vorgesetztenname FROM Mitarbeiter e
INNER JOIN Mitarbeiter m
EIN e.manager_id=m.employee_id
WO e.Nachname LIKE '%k%'; 

#2. Anwendungsszenario für externe Verknüpfungen: Wird verwendet, um Datensätze abzufragen, die in einer Tabelle, aber nicht in einer anderen Tabelle vorhanden sind.
Merkmale:
1. Das Abfrageergebnis des Outer Join sind alle Datensätze in der Haupttabelle. Wenn es eine Übereinstimmung in der Sekundärtabelle gibt, wird der übereinstimmende Wert angezeigt. Wenn es keine Übereinstimmung in der Sekundärtabelle gibt, wird Null angezeigt.
Ergebnis der Outer-Join-Abfrage = Ergebnis des Inner-Joins + Datensätze in der Haupttabelle, aber nicht in der Slave-Tabelle 2. Left Outer Join, die linke Seite von LEFT JOIN ist die Haupttabelle. Right Outer Join, die rechte Seite von RIGHT JOIN ist die Haupttabelle 3. Derselbe Effekt kann durch Vertauschen der Reihenfolge der beiden Tabellen in Left Outer und Right Outer erzielt werden.
4. Vollständiger äußerer Join = Ergebnis des inneren Join + Daten in Tabelle 1, aber nicht in Tabelle 2 + Daten in Tabelle 2, aber nicht in Tabelle 1 (wird von MySQL nicht unterstützt)
Import:
WÄHLEN SIE * AUS Schönheit;
WÄHLEN SIE * AUS Jungen; 

#Einleitung: Fragen Sie die Namen der Göttinnen ab, deren Freunde nicht in der Tabelle der männlichen Götter stehen. SELECT b.NAME,bo.*
VON Schönheit B
LINKS OUTER JOIN Jungen bo
EIN b.Freund_ID=bo.ID; 

#Linker äußerer Join SELECT b.NAME,bo.*
VON Schönheit B
LINKS OUTER JOIN Jungen bo
EIN b.Freund_ID=bo.ID
WO bo.id NULL IST;
#Wählen Sie die Primärschlüsselspalte aus der Tabelle aus
#Rechter äußerer Join, gleiches Ergebnis.
WÄHLEN Sie b.NAME,bo.*
VON Jungen Bo
RECHTER ÄUSSERER JOIN Schönheit b
EIN b.Freund_ID=bo.ID
WO bo.id NULL IST; 

#Ändern Sie die Boyfriend-ID der Zeile 10 in der Beauty-Tabelle von 4 auf 6, um die folgenden Ergebnisse zu erhalten.
WÄHLEN Sie b.*,bo.*
VON Jungen Bo
LINKS OUTER JOIN Schönheit b
EIN b.Freund_ID=bo.ID
WO b.id NULL IST; 

#Fall 1. Welche Abteilung hat keine Mitarbeiter?
#Linke externe Schreibmethode SELECT d.*,e.employee_id
VON Abteilungen
LEFT OUTER JOIN Mitarbeiter e
EIN d.Abteilungs-ID=e.Abteilungs-ID
Wobei e.department_id NULL IST;
==============================
#Rechte äußere Schreibmethode SELECT d.*,e.employee_id
VON Mitarbeitern
RIGHT OUTER JOIN Abteilungen d
EIN d.Abteilungs-ID=e.Abteilungs-ID
Wobei e.employee_id NULL ist; 

#Das Ergebnis des vollständigen äußeren Join besteht aus drei Teilen (Mysql unterstützt dies beispielsweise nicht). Demonstration der Syntaxstruktur. Suchen Sie zuerst die Schnittmenge der beiden Tabellen, dann die fehlende Füllung und dann andere, nicht verwandte Tabellen. Beispiel für eine Syntaxstruktur: SELECT b.*,bo.*
VON Schönheit B
FULL OUTER JOIN Jungen bo
EIN b.Freund_ID=bo.ID
#Cross Join, kartesisches Produkt, implementiert mit dem Syntaxstandard von 1999 SELECT b.*,bo.*
VON Schönheit B
CROSS JOIN Jungen Bo; 

#Vergleich zwischen SQL1992-Syntax und SQL1999-Syntax Funktion: SQL1999 unterstützt mehr Lesbarkeit: SQL1999 trennt die Verbindungsbedingungen und die Filterbedingungen, was die Lesbarkeit verbessert

Zusammenfassen:

SELECT <Auswahlliste>
VON EINEM
INNER JOIN B
EIN A.TASTE=B.TASTE; 

SELECT <Auswahlliste>
VON EINEM
LINKS VERBINDEN B
EIN A.TASTE=B.TASTE; 

SELECT <Auswahlliste>
VON EINEM
RECHTS VERBINDEN B
EIN A.TASTE=B.TASTE; 

SELECT <Auswahlliste>
VON EINEM
LINKS VERBINDEN B
EIN A.TASTE=B.TASTE
WO B.KEY NULL IST; 

SELECT <Auswahlliste>
VON EINEM
RECHTS VERBINDEN B
EIN A.TASTE=B.TASTE
WO A.KEY NULL IST; 

SELECT <Auswahlliste>
VON EINEM
VOLLSTÄNDIGER BEITRITT B
EIN A.TASTE=B.TASTE; 

SELECT <Auswahlliste>
VON EINEM
VOLLSTÄNDIGER BEITRITT B
EIN A.TASTE=B.TASTE
Wobei A.KEY NULL ist
ODER B.KEY IST NULL;

Die einfache Abfrage mehrerer Tabellen ist beendet. Ich glaube, dass Sie nach dem Lesen dieses Artikels in der Lage sein sollten, einfache Tabellen problemlos zu verknüpfen. Und für diejenigen, die es nicht verstehen, ähm ...

Um es mit den Worten unseres Lehrers Yang auszudrücken: Sie bekommen ein Gefühl dafür, nachdem Sie es zwanzig oder dreißig Mal geschrieben haben. o(^▽^)o.

Die Aufnahmeprüfung für das College ist vorbei und das Universitätsleben hat begonnen. Der Countdown zu der Welt, die Ihnen gehört, hat begonnen ... Egal, welches Hauptfach Sie wählen, solange es Ihre eigene Wahl ist, müssen Sie glauben, dass Sie in diesem Hauptfach Spuren hinterlassen werden ...

Dies ist das Ende dieses Artikels mit der ausführlichen Erklärung der MySQL-Mehrtabellenabfrage. Weitere relevante Inhalte zur MySQL-Mehrtabellenabfrage finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • MySql-Multitabellenabfragetransaktion und DCL
  • Detaillierte Erklärung der vier Arten von MySQL-Verbindungen und Multi-Table-Abfragen
  • Konkretes Beispiel einer MySQL-Mehrtabellenabfrage
  • Erweiterte MySQL-Datenbankabfrage und Mehrtabellenabfrage
  • Detaillierte Erläuterung der MySQL-Mehrtabellenabfrage
  • Eine kurze Erläuterung zur Verwendung des kartesischen Produktprinzips zum Abfragen mehrerer Tabellen in MySQL
  • MySQL Left-Join-Mehrtabellenabfrage, bei der das Schreiben einer Where-Bedingung ein Beispiel ist
  • Analyse der Implementierung von Mysql-Mehrtabellenabfragen
  • Analyse der Implementierung von MySQL-Mehrtabellenabfragen
  • Detaillierte Klassifizierung von MySQL-Mehrtabellenabfragen

<<:  So beheben Sie den PyCurl-Fehler unter Linux

>>:  Detaillierte Installationshistorie von Ubuntu 20.04 LTS

Artikel empfehlen

Lösung zum Erstellen mehrerer Datenbanken, wenn Docker PostgreSQL startet

1 Einleitung Im Artikel „PostgreSQL mit Docker st...

Was Sie über MySQL-Sperren wissen müssen

1. Einleitung MySQL-Sperren können je nach Umfang...

So verwenden Sie CocosCreator zur Tonverarbeitung bei der Spieleentwicklung

Inhaltsverzeichnis 1. Grundlagen der Audiowiederg...

Implementierung einer Lösung für adaptive Textbereichshöhe in Vue

Inhaltsverzeichnis Versteckte Probleme Lösung zur...

Beispiel für die Implementierung der Graphql-Schnittstelle in Vue

Hinweis: In diesem Artikel geht es um die grundle...

Ein auf Vue-cli basierender Codesatz unterstützt mehrere Projekte

Inhaltsverzeichnis Anwendungsszenario Ideen Proje...

Fallstudie zum Unterschied zwischen JavaScript parseInt() und Number()

Lernziele: Die beiden Funktionen parseInt() und N...