MySQL JOINS Tutorial: INNEN, AUSSEN, LINKS, RECHTS, KREUZ

Anonim

Was sind JOINS?

Joins helfen beim Abrufen von Daten aus zwei oder mehr Datenbanktabellen. Die Tabellen sind unter Verwendung von Primär- und Fremdschlüsseln miteinander verbunden.

Hinweis: JOIN ist das am meisten missverstandene Thema unter SQL-Leanern. Der Einfachheit und des Verständnisses halber werden wir eine neue Datenbank verwenden, um die Probe zu üben. Wie nachfolgend dargestellt

Ich würde Vorname Nachname movie_id
1 Adam Schmied 1
2 Ravi Kumar 2
3 Susan Davidson 5
4 Jenny Adrianna 8
6 Lee Pong 10
Ich würde Titel Kategorie
1 ASSASSIN'S CREED: EMBERS Animationen
2 Real Steel (2012) Animationen
3 Alvin und die Chipmunks Animationen
4 Die Abenteuer von Tintin Animationen
5 Sicher (2012) Aktion
6 Sicheres Haus (2012) Aktion
7 GIA 18+
8 Frist 2009 18+
9 Das schmutzige Bild 18+
10 Marley und ich Romantik

Arten von Verknüpfungen

Überqueren Sie JOIN

Cross JOIN ist eine einfachste Form von JOINs, bei der jede Zeile aus einer Datenbanktabelle mit allen Zeilen einer anderen übereinstimmt.

Mit anderen Worten, es gibt uns Kombinationen jeder Zeile der ersten Tabelle mit allen Datensätzen in der zweiten Tabelle.

Angenommen, wir möchten alle Mitgliederdatensätze gegen alle Filmdatensätze abrufen, können wir das unten gezeigte Skript verwenden, um die gewünschten Ergebnisse zu erzielen.

SELECT * FROM `movies` CROSS JOIN `members`

Wenn Sie das obige Skript in der MySQL-Workbench ausführen, erhalten Sie die folgenden Ergebnisse.

 
id title id first_name last_name movie_id
1 ASSASSIN'S CREED: EMBERS Animations 1 Adam Smith 1
1 ASSASSIN'S CREED: EMBERS Animations 2 Ravi Kumar 2
1 ASSASSIN'S CREED: EMBERS Animations 3 Susan Davidson 5
1 ASSASSIN'S CREED: EMBERS Animations 4 Jenny Adrianna 8
1 ASSASSIN'S CREED: EMBERS Animations 6 Lee Pong 10
2 Real Steel(2012) Animations 1 Adam Smith 1
2 Real Steel(2012) Animations 2 Ravi Kumar 2
2 Real Steel(2012) Animations 3 Susan Davidson 5
2 Real Steel(2012) Animations 4 Jenny Adrianna 8
2 Real Steel(2012) Animations 6 Lee Pong 10
3 Alvin and the Chipmunks Animations 1 Adam Smith 1
3 Alvin and the Chipmunks Animations 2 Ravi Kumar 2
3 Alvin and the Chipmunks Animations 3 Susan Davidson 5
3 Alvin and the Chipmunks Animations 4 Jenny Adrianna 8
3 Alvin and the Chipmunks Animations 6 Lee Pong 10
4 The Adventures of Tin Tin Animations 1 Adam Smith 1
4 The Adventures of Tin Tin Animations 2 Ravi Kumar 2
4 The Adventures of Tin Tin Animations 3 Susan Davidson 5
4 The Adventures of Tin Tin Animations 4 Jenny Adrianna 8
4 The Adventures of Tin Tin Animations 6 Lee Pong 10
5 Safe (2012) Action 1 Adam Smith 1
5 Safe (2012) Action 2 Ravi Kumar 2
5 Safe (2012) Action 3 Susan Davidson 5
5 Safe (2012) Action 4 Jenny Adrianna 8
5 Safe (2012) Action 6 Lee Pong 10
6 Safe House(2012) Action 1 Adam Smith 1
6 Safe House(2012) Action 2 Ravi Kumar 2
6 Safe House(2012) Action 3 Susan Davidson 5
6 Safe House(2012) Action 4 Jenny Adrianna 8
6 Safe House(2012) Action 6 Lee Pong 10
7 GIA 18+ 1 Adam Smith 1
7 GIA 18+ 2 Ravi Kumar 2
7 GIA 18+ 3 Susan Davidson 5
7 GIA 18+ 4 Jenny Adrianna 8
7 GIA 18+ 6 Lee Pong 10
8 Deadline(2009) 18+ 1 Adam Smith 1
8 Deadline(2009) 18+ 2 Ravi Kumar 2
8 Deadline(2009) 18+ 3 Susan Davidson 5
8 Deadline(2009) 18+ 4 Jenny Adrianna 8
8 Deadline(2009) 18+ 6 Lee Pong 10
9 The Dirty Picture 18+ 1 Adam Smith 1
9 The Dirty Picture 18+ 2 Ravi Kumar 2
9 The Dirty Picture 18+ 3 Susan Davidson 5
9 The Dirty Picture 18+ 4 Jenny Adrianna 8
9 The Dirty Picture 18+ 6 Lee Pong 10
10 Marley and me Romance 1 Adam Smith 1
10 Marley and me Romance 2 Ravi Kumar 2
10 Marley and me Romance 3 Susan Davidson 5
10 Marley and me Romance 4 Jenny Adrianna 8
10 Marley and me Romance 6 Lee Pong 10

INNER JOIN

Der innere JOIN wird verwendet, um Zeilen aus beiden Tabellen zurückzugeben, die die angegebene Bedingung erfüllen.

Angenommen, Sie möchten eine Liste der Mitglieder erhalten, die Filme zusammen mit den Titeln der von ihnen ausgeliehenen Filme ausgeliehen haben. Sie können dafür einfach einen INNER JOIN verwenden, der Zeilen aus beiden Tabellen zurückgibt, die den gegebenen Bedingungen entsprechen.

SELECT members.`first_name` , members.`last_name` , movies.`title`FROM members ,moviesWHERE movies.`id` = members.`movie_id`

Ausführen des obigen Skripts geben

 
first_name last_name title
Adam Smith ASSASSIN'S CREED: EMBERS
Ravi Kumar Real Steel(2012)
Susan Davidson Safe (2012)
Jenny Adrianna Deadline(2009)
Lee Pong Marley and me

Beachten Sie, dass das obige Ergebnisskript auch wie folgt geschrieben werden kann, um dieselben Ergebnisse zu erzielen.

SELECT A.`first_name` , A.`last_name` , B.`title`FROM `members`AS AINNER JOIN `movies` AS BON B.`id` = A.`movie_id`

Äußere VERBINDUNGEN

MySQL Outer JOINs geben alle Datensätze zurück, die mit beiden Tabellen übereinstimmen.

Es kann Datensätze erkennen, die in der verknüpften Tabelle nicht übereinstimmen. Es werden NULL- Werte für Datensätze der verknüpften Tabelle zurückgegeben, wenn keine Übereinstimmung gefunden wird.

Klingt verwirrend? Schauen wir uns ein Beispiel an -

LINKS BEITRETEN

Angenommen, Sie möchten jetzt Titel aller Filme zusammen mit den Namen der Mitglieder erhalten, die sie ausgeliehen haben. Es ist klar, dass einige Filme von niemandem ausgeliehen wurden. Wir können einfach LEFT JOIN für diesen Zweck verwenden.

Der LEFT JOIN gibt alle Zeilen aus der Tabelle links zurück, auch wenn in der Tabelle rechts keine übereinstimmenden Zeilen gefunden wurden. Wenn in der Tabelle rechts keine Übereinstimmungen gefunden wurden, wird NULL zurückgegeben.

SELECT A.`title` , B.`first_name` , B.`last_name`FROM `movies` AS ALEFT JOIN `members` AS BON B.`movie_id` = A.`id`

Das Ausführen des obigen Skripts in der MySQL-Workbench ergibt. Sie können sehen, dass in dem zurückgegebenen Ergebnis, das unter dem für Filme aufgeführt ist, die nicht ausgeliehen wurden, die Felder für Mitgliedsnamen NULL-Werte haben. Das bedeutet, dass kein passendes Mitglied eine Mitgliedertabelle für diesen bestimmten Film gefunden hat.

 
title first_name last_name
ASSASSIN'S CREED: EMBERS Adam Smith
Real Steel(2012) Ravi Kumar
Safe (2012) Susan Davidson
Deadline(2009) Jenny Adrianna
Marley and me Lee Pong
Alvin and the Chipmunks NULL NULL
The Adventures of Tin Tin NULL NULL
Safe House(2012) NULL NULL
GIA NULL NULL
The Dirty Picture NULL NULL
Note: Null is returned for non-matching rows on right

RICHTIG BEITRETEN

RIGHT JOIN ist offensichtlich das Gegenteil von LEFT JOIN. Der RIGHT JOIN gibt alle Spalten aus der Tabelle rechts zurück, auch wenn in der Tabelle links keine übereinstimmenden Zeilen gefunden wurden. Wenn in der Tabelle links keine Übereinstimmungen gefunden wurden, wird NULL zurückgegeben.

In unserem Beispiel nehmen wir an, dass Sie Namen von Mitgliedern und von ihnen ausgeliehenen Filmen benötigen. Jetzt haben wir ein neues Mitglied, das noch keinen Film ausgeliehen hat

SELECT A.`first_name` , A.`last_name`, B.`title`FROM `members` AS ARIGHT JOIN `movies` AS BON B.`id` = A.`movie_id`

Das Ausführen des obigen Skripts in der MySQL-Workbench führt zu den folgenden Ergebnissen.

 
first_name last_name title
Adam Smith ASSASSIN'S CREED: EMBERS
Ravi Kumar Real Steel(2012)
Susan Davidson Safe (2012)
Jenny Adrianna Deadline(2009)
Lee Pong Marley and me
NULL NULL Alvin and the Chipmunks
NULL NULL The Adventures of Tin Tin
NULL NULL Safe House(2012)
NULL NULL GIA
NULL NULL The Dirty Picture
Note: Null is returned for non-matching rows on left

"ON" - und "USING" -Klauseln

In den obigen JOIN-Abfragebeispielen haben wir die ON-Klausel verwendet, um die Datensätze zwischen den Tabellen abzugleichen.

Die USING-Klausel kann auch für denselben Zweck verwendet werden. Der Unterschied zu USING besteht darin , dass identische Namen für übereinstimmende Spalten in beiden Tabellen vorhanden sein müssen.

In der Tabelle "Filme" haben wir bisher den Primärschlüssel mit dem Namen "id" verwendet. Wir haben in der Tabelle "Mitglieder" mit dem Namen "movie_id" darauf verwiesen.

Benennen wir das Feld "ID" der "Filme" -Tabellen um, um den Namen "movie_id" zu erhalten. Wir tun dies, um identische übereinstimmende Feldnamen zu haben.

ALTER TABLE `movies` CHANGE `id` `movie_id` INT( 11 ) NOT NULL AUTO_INCREMENT;

Als nächstes verwenden wir USING mit dem obigen LEFT JOIN-Beispiel.

SELECT A.`title` , B.`first_name` , B.`last_name`FROM `movies` AS ALEFT JOIN `members` AS BUSING ( `movie_id` )

Neben ON und USING mit JOINs können Sie viele andere MySQL-Klauseln wie GROUP BY, WHERE und sogar Funktionen wie SUM , AVG usw. verwenden.

Warum sollten wir Joins verwenden?

Jetzt denken Sie vielleicht, warum wir JOINs verwenden, wenn wir dieselbe Aufgabe ausführen können, indem wir Abfragen ausführen. Insbesondere wenn Sie Erfahrung in der Datenbankprogrammierung haben und wissen, dass wir Abfragen einzeln ausführen können, verwenden Sie die Ausgabe jeder Abfrage in aufeinanderfolgenden Abfragen. Das ist natürlich möglich. Mit JOINs können Sie die Arbeit jedoch erledigen, indem Sie nur eine einzige Abfrage mit Suchparametern verwenden. Andererseits kann MySQL mit JOINs eine bessere Leistung erzielen, da es die Indizierung verwenden kann. Die einfache Verwendung einer einzelnen JOIN-Abfrage anstelle der Ausführung mehrerer Abfragen reduziert den Server-Overhead. Die Verwendung mehrerer Abfragen führt zu mehr Datenübertragungen zwischen MySQL und Anwendungen (Software). Darüber hinaus sind auch am Ende der Anwendung mehr Datenmanipulationen erforderlich.

Es ist klar, dass wir mit JOINs bessere MySQL- und Anwendungsleistungen erzielen können.

Zusammenfassung

  • Mit JOINS können wir Daten aus mehr als einer Tabelle in einer einzigen Ergebnismenge kombinieren.
  • JOINS haben im Vergleich zu Unterabfragen eine bessere Leistung
  • INNER JOINS gibt nur Zeilen zurück, die die angegebenen Kriterien erfüllen.
  • OUTER JOINS kann auch Zeilen zurückgeben, in denen keine Übereinstimmungen gefunden wurden. Die nicht übereinstimmenden Zeilen werden mit dem Schlüsselwort NULL zurückgegeben.
  • Die wichtigsten JOIN-Typen sind Inner, Left Outer, Right Outer, Cross JOINS usw.
  • Die häufig verwendete Klausel in JOIN-Operationen lautet "ON". Die "USING" -Klausel erfordert, dass übereinstimmende Spalten denselben Namen haben.
  • JOINS können auch in anderen Klauseln verwendet werden, z. B. GROUP BY, WHERE, SUB QUERIES, AGGREGATE FUNCTIONS usw.