MySQL ist eine Open-Source- relationalen Datenbank -Management-System ( RDBMS) , dass Einzelpersonen und Unternehmen, die häufig zu verwenden, um das hintere Ende von Web-Anwendungen laufen . In SQL Joins häufig frustrieren neue Benutzer. Als Datenbanken, die größer werden, wird es kritisch für Abfragen zu bedienen verbindet effizient . MySQL Schlüsselwort JOIN macht es einfacher, mit neuen und Legacy-Code zu arbeiten. Innere Verknüpfungen
Wenn Sie zum Verbinden von zwei Tabellen denken , denken Sie wahrscheinlich an einer Abfrage mit einem einfachen von einem Tisch kommen , wie Mitarbeiter mit einem Tisch wie Abteilungen:
SELECT Employees.last_name , Employees.first_name , Departments.department_nameFROM Departments , EmployeesWHERE Departments.department_id = Employees.department_id ,
Dies ist eine innere Verknüpfung . Es ruft nur die Zeilen, in denen die department_id genau gleich in beiden Tabellen . Der obige Code funktioniert in MySQL , aber man kann es weniger lesbar als die folgenden :
SELECT Employees.last_name , Employees.first_name , Departments.department_nameFROM DepartmentsINNER JOIN EmployeesON Departments.department_id = Employees.department_id ;
Diese beiden Abfragen erzeugen genau die gleiche Leistung . Der Unterschied besteht darin , dass durch die MySQL JOIN Schlüsselwort , Sie haben es immer deutlicher , welche Art von gemeinsam mit Ihnen verwendet . Da innere Verknüpfung ist die Standardeinstellung , wenn Sie das Schlüsselwort weglassen INNERE , MySQL führt noch eine innere Verknüpfung .
Outer Joins
Wenn Sie Mitarbeiter, die nicht zugeordnet werden, haben an eine bestimmte Abteilung und haben einen NULL-Wert für ihre department_id , wird die oben Join nicht angezeigt werden die Mitarbeiter überhaupt . Wenn Sie alle Mitarbeiter , ob sie eine Abteilung haben wollen oder nicht , müssen Sie eine äußere Verknüpfung verwenden .
MySQL verwendet links oder rechts mit dem Schlüsselwort JOIN um anzugeben, dass Sie eine äußere Verknüpfung , und sagen, dass es die Tabelle Sie wollen, dass die NULL-Werte aus . Hier ist unsere überarbeitete query: SELECT
Employees.last_name , Employees.first_name , Departments.department_nameFROM EmployeesLEFT OUTER JOIN DepartmentON Departments.department_id = Employees.department_id ;
Sie erhalten jeden Mitarbeiter in der Ausgabe , auch wenn MySQL findet keine department_id , dass Mitarbeiter Datensatz entsprechen. Die Tabelle, die Sie aus Nullen erlauben ( Abteilungen ) ist auf der linken Seite des Gleichheitszeichens .
Wollte man Abteilungen ohne Angestellte in der Ausgabe zu sehen , verwenden Sie eine RIGHT OUTER JOIN . Die Tabelle, die Sie von Nullen in diesem Fall lassen sich auf der rechten Seite des Gleichheitszeichen.
Kreuzverknüpfungen
Doing Kreuzverknüpfungen durch Zufall ist ein häufiger Fehler . Es ist, was passiert, wenn Sie nicht angeben überhaupt beizutreten. Wenn Sie weder ein setzen in Ihrer WHERE-Klausel , oder verwenden Sie eine der anderen Optionen JOIN ... ON , erhalten Sie jede mögliche Kombination der Zeilen in jeder der Tabellen in der FROM , ob sie eine Beziehung haben oder nicht beitreten .
Wenn Sie ziehen aus drei Tabellen mit jeweils 10 , 20 und 3 Reihen , erhalten Sie 10 x 20 x 3 Reihen als Gesamtleistung . Sie können das Problem auf diese Ursachen , wenn Ihre Datenbank hat mehr als ein paar Sätze .
Selten , Sie wollen zu tun, ein Kreuz auf Zweck beitreten werden . MySQL ermöglicht Ihnen, die CROSS JOIN verwenden ... ON Syntax jedem Bearbeitung Ihrer Code später, dass die Cross-Join absichtliche war zu zeigen.