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 |
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 |
"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.