Heim >Datenbank >MySQL-Tutorial >Wie kann ich Tabellen ohne direkte Fremdschlüsselbeziehung verknüpfen?
Daten werden häufig in mehreren Tabellen gespeichert, wobei die Beziehungen durch Fremdschlüssel definiert werden. Manchmal haben zwei Tabellen jedoch möglicherweise keine direkte Fremdschlüsselbeziehung, können aber dennoch über eine dritte Tabelle verbunden werden. Diese Frage zeigt, wie ein solcher Join durchgeführt wird, um bestimmte Informationen aus mehreren Tabellen zu extrahieren.
Entgegen der Annahme, dass für Tabellenverknüpfungen Fremdschlüssel erforderlich sind, sind Fremdschlüssel nicht erforderlich. Stattdessen können Tabellen basierend auf für jede Tabelle definierten Prädikaten verknüpft werden.
Um Tabellen ohne direkte Fremdschlüsselbeziehungen zu verknüpfen, führen Sie die folgenden Schritte aus:
CROSS JOIN
oder INNER JOIN
. WHERE
-Klausel, um zusätzliche Bedingungen zum Filtern der verbundenen Daten hinzuzufügen. Aussagen und Tabellen:
Jede Tabelle verfügt über ein Prädikat, das die darin enthaltenen Zeilen definiert. Beispielsweise enthält die Tabelle Species
Zeilen, in denen der Artenname der Holzart und der maximalen Höhe entspricht.
Abfrageprädikat:
-Abfragen haben auch Prädikate, die auf FROM
, WHERE
und anderen Klauseln basieren. Tabellenaliase ermöglichen das Umbenennen von Spalten und erleichtern Join-Bedingungen.
Tabelle verbinden:
CROSS JOIN
und INNER JOIN
verwenden AND
, um Prädikate zu kombinieren. UNION
verwendet OR
, während EXCEPT
AND NOT
verwendet, um Prädikate zu kombinieren. Mit den Klauseln ON
und WHERE
können zusätzliche Join-Bedingungen angegeben werden.
Auswahltabelle:
Um die richtige Tabelle auszuwählen, berücksichtigen Sie die gewünschte Ausgabe und identifizieren Sie die Tabelle, die die erforderlichen Spalten enthält. Schließen Sie sich ihnen basierend auf dem Prädikat an, das sie teilen.
Fremdschlüssel und Abfragen:
Fremdschlüssel haben keinen Einfluss auf die Abfrageausführung. Sie erzwingen Integritätseinschränkungen, schränken Verbindungen jedoch nicht ein. Abfragen werden anhand von Tabellenprädikaten ausgewertet.
Beispielabfrage:
Um den Waldnamen, den Artennamen und die Holzart des Regionalwaldes „ARCTIC“ zu extrahieren:
<code class="language-sql">SELECT Forest.Fo_name, Species.Sp_name, Species.Sp_woodtype FROM Forest INNER JOIN Tree ON Forest.Fo_name = Tree.Tr_forest INNER JOIN Species ON Tree.Tr_species = Species.Sp_name WHERE Forest.Fo_loc='ARCTIC' ORDER BY Forest.Fo_name, Species.Sp_name;</code>
Diese Abfrage verknüpft effektiv die Tabellen Tr_species
, Tr_forest
und Forest
über die Spalten Species
und Tree
und filtert die Ergebnisse basierend auf der Spalte Fo_loc
. Die Ausgabe ist nach Wald- und Artennamen sortiert.
Hinweis: Die Beschreibung der Beispielabfrage wurde korrigiert, um die logische Richtigkeit sicherzustellen und die drei Tabellen verbinden zu können. Die ON Tree.Tr_species=Tree.Tr_forest
-Bedingung im ursprünglichen Beispiel ist falsch, da versucht wird, zwei verschiedene Spalten innerhalb einer Tabelle zu verbinden. Die korrigierte Abfrage verwendet die richtigen Join-Bedingungen.
Das obige ist der detaillierte Inhalt vonWie kann ich Tabellen ohne direkte Fremdschlüsselbeziehung verknüpfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!