Heim > Datenbank > MySQL-Tutorial > Hauptteil

Fallanalyse von MySQL-Mehrtabellenabfragen

WBOY
Freigeben: 2023-05-27 10:52:06
nach vorne
1603 Leute haben es durchsucht

Mehrtabellenabfrage

Fallbeschreibung

Verständnis des kartesischen Produkts

select id,department_name
from employees,departments;#错的

select id,department_id,department_name
from employees CROSS JOIN departments;#错的
Nach dem Login kopieren

Jeder Mitarbeiter und jede Abteilung wurden einmal abgeglichen (Anzahl der gefundenen Einträge = Anzahl der IDs * Anzahl der Abteilungen)

Fehlerursache: fehlende Verbindungsbedingungen

Lösung zum kartesischen Produkt

Schreiben Sie die Verbindungsbedingungen: Tabelle 1. Spalte = Tabelle 2. Spalte (wenn mehrere Tabellen verbunden sind, müssen mindestens n-1 Verbindungsbedingungen verwendet werden)

select id,employees.name,department_name 
from employees,departments
WHERE employees.name = departments.name;
Nach dem Login kopieren

Hinweis: Wenn die Spalte angezeigt werden soll ist in Wenn die Namen in den abzufragenden Tabellen gleich sind, müssen Sie angeben, aus welcher Tabelle sie stammen, z. B.: Mitarbeiter.Name

Es wird empfohlen, anzugeben, welche Tabelleninformationen angezeigt werden, wenn mehrere Tabellen abgefragt werden (Optimierung)

Optimierung: Sie können es nach FROM einfügen. Verwenden Sie den Alias ​​der Tabelle, aber sobald Sie den Alias ​​verwenden, müssen Sie ihn in Zukunft verwenden.

Klassifizierung von Abfragen mit mehreren Tabellen

Äquivalenter Join: der oben genannte mit =

  • Non-Equijoin:

  • select t1.id,t1.name,t2.grade
    from employees t1,departments t2
    WHERE ti.salary BETWEEN t2.lowest_salary AND t2.highest_salary ;#非等值
    Nach dem Login kopieren

    ohne = Self-Join und Non-Self-Join

Non-Self-Link: Tabelle 1 und Tabelle 2 Join

  • Selbstverknüpfung: Tabelle 1 verbindet sich selbst.

  • #显示员工(t1)和其管理者(t2)的基本信息
    select t1.id,t1.name,t2.id,t2.name
    from employees t1,employees t2#一个表看作两个表
    WHERE t1.manage_id = t2.id ;#自连接
    Nach dem Login kopieren

    Inner Join und Outer Join

Inner Join: Tabellen zusammenführen, die dieselbe Spalte enthalten. Das Ergebnis enthält keine Zeilen, die nicht mit einer Tabelle mit einer anderen Tabelle übereinstimmen

  • Äußerer Join: Tabellen zusammenführen, die dieselbe Spalte enthalten, das Ergebnis Zusätzlich zu den Ergebnissen von inneren Verknüpfungen werden auch nicht übereinstimmende Zeilen abgefragt

  • Kategorien von äußeren Verknüpfungen: linke äußere Verknüpfung (mehr in der linken Tabelle, füllen rechts), rechter äußerer Join (mehr in der rechten Tabelle, links ausfüllen), vollständiger äußerer Join

  • SQL92: Verwenden Sie (+), um eine Verbindung zu erstellen.

Innere Verbindung: Siehe oben.

Äußere Verbindung: Wenn die Daten in der linken Tabelle stimmen nicht überein, fügen Sie (+) zur rechten Tabelle hinzu; fügen Sie umgekehrt (+) zur linken Tabelle hinzu, aber MySQL unterstützt es nicht

WHERE t1.department_id = t2.department_id(+)#左连接
Nach dem Login kopieren

SQL99: So verwenden Sie JOIN...ON

Innerer Join

select t1.id,t1.name,t2.department_name,t3.environment
from employees t1 JOIN departments t2
ON t1.department_id = t2.department_id
JOIN locations t3#加入第二个人表
ON t2.department_location = t3.department_location;
Nach dem Login kopieren

Äußerer Join

Verwenden Sie OUTER JOIN...ON...

Linker äußerer Join: LEFT OUTER JOIN

  • Rechter äußerer Join: RIGHT OUTER JOIN

  • Vollständiger OUTER JOIN (nicht unterstützt von MySQL)

  • select t1.name,t2.department_name#左外连接
    from employees t1 LEFT OUTER(可省略) JOIN departments t2
    ON t1.department_id = t2.department_id;
    Nach dem Login kopieren

    Verwendung von UMION

  • Abfrageergebnisse zusammenführen
SELECT colum... FROM table1
UNION (ALL)
SELECT colum... FROM table2
Nach dem Login kopieren

UNION-Operator

  • Verwendung von zwei Abfrageergebnissen Union, Deduplizierung (geringe Effizienz)

UNION ALL-Operator ( empfohlen)

  • Vereinigung von zwei Abfrageergebnissen, ohne Deduplizierung (hohe Effizienz)

  • 7 Arten von SQL JOINS-Implementierungen

Mittleres Bild (innerer Join):

select t1.name,t2.department_name
from employees t1 JOIN departments t2
ON t1.department_id = t2.department_id;
Nach dem Login kopieren
Fallanalyse von MySQL-MehrtabellenabfragenOben linkes Bild (linker äußerer Join):

select t1.name,t2.department_name
from employees t1 LEFT JOIN departments t2
ON t1.department_id = t2.department_id;
Nach dem Login kopieren

Bild oben rechts (rechter äußerer Join):

select t1.name,t2.department_name
from employees t1 RIGHT JOIN departments t2
ON t1.department_id = t2.department_id;
Nach dem Login kopieren

Bild Mitte links:

select t1.name,t2.department_name
from employees t1 LEFT JOIN departments t2
ON t1.department_id = t2.department_id
WHERE t2.department_id IS NULL;
Nach dem Login kopieren

Bild Mitte rechts:

select t1.name,t2.department_name
from employees t1 RIGHT JOIN departments t2
ON t1.department_id = t2.department_id
WHERE t1.department_id IS NULL;
Nach dem Login kopieren

Bild unten links (vollständiger Fremd-Join):

#方式一:左上图 UNION ALL 右中图
select t1.name,t2.department_name
from employees t1 LEFT JOIN departments t2
ON t1.department_id = t2.department_id
UNION ALL 
select t1.name,t2.department_name
from employees t1 RIGHT JOIN departments t2
ON t1.department_id = t2.department_id
WHERE t1.department_id IS NULL;

#方式二:左中图 UNION ALL 右上图
select t1.name,t2.department_name
from employees t1 LEFT JOIN departments t2
ON t1.department_id = t2.department_id
WHERE t2.department_id IS NULL
UNION ALL
select t1.name,t2.department_name
from employees t1 RIGHT JOIN departments t2
ON t1.department_id = t2.department_id;
Nach dem Login kopieren

Bild unten rechts:

#左中图 UNION ALL 右中图
select t1.name,t2.department_name
from employees t1 LEFT JOIN departments t2
ON t1.department_id = t2.department_id
WHERE t2.department_id IS NULL
UNION ALL
select t1.name,t2.department_name
from employees t1 RIGHT JOIN departments t2
ON t1.department_id = t2.department_id
WHERE t1.department_id IS NULL;
Nach dem Login kopieren

Neue Funktionen von SQL Syntax: Natürlicher Join USING (Feld mit demselben Namen), um Felder mit demselben Namen in der Tabelle automatisch zu verbinden

select t1.name,t2.department_name
from employees t1 JOIN departments t2
ON t1.department_id = t2.department_id;
等价于
select t1.name,t2.department_name
from employees t1 JOIN departments t2
USING(department_id);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonFallanalyse von MySQL-Mehrtabellenabfragen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!