Join: Unterschied zwischen den Versionen
Sn (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Sn (Diskussion | Beiträge) K (Links hübsch gemacht) |
||
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 3: | Zeile 3: | ||
Mit einem Join können diejenigen Tupel zweier Relationen miteinander verbunden werden, die bestimmten Bedingungen entsprechen. | Mit einem Join können diejenigen Tupel zweier Relationen miteinander verbunden werden, die bestimmten Bedingungen entsprechen. | ||
Die Schreibweise ist <math>\textrm{Relation 1} \bowtie_{\textrm{Bedingungen} } \textrm{Relation 2}</math>. | Die Schreibweise ist <math>\textrm{Relation 1} \bowtie_{\textrm{Bedingungen} } \textrm{Relation 2}</math>. Das dazugehörige [[SQL]]-Schlüsselwort ist <code>JOIN ON</code> oder <code>INNER JOIN ON</code>. | ||
== Beispiel == | == Beispiel == | ||
Zeile 100: | Zeile 100: | ||
|Youcef Cherfa | |Youcef Cherfa | ||
|} | |} | ||
Die dazugehörige SQL-Abfrage ist <code>SELECT * FROM Land INNER JOIN Stadt ON Hauptstadt = Stadt_Name;</code> | |||
== Semi Join == | == Semi Join == | ||
Der '''Semi Join''' (<math>\ltimes</math> und <math>\rtimes</math>) ist eine Spezialform des Joins. Wenn man zwei Relationen mit einem Semi Join verknüpft, werden nur diejenigen Tupel aus einer der beiden Relationen übernommen, ''für die es ein Gegenpart in der anderen Relation gibt.'' Beim '''Left Semi Join''' (<math>\ltimes</math>) werden die Tupel aus der linken Relation übernommen, beim '''Right Semi Join''' (<math>\rtimes</math>) aus der rechten. | Der '''Semi Join''' (<math>\ltimes</math> und <math>\rtimes</math>) ist eine Spezialform des Joins. Wenn man zwei Relationen mit einem Semi Join verknüpft, werden nur diejenigen Tupel aus einer der beiden Relationen übernommen, ''für die es ein Gegenpart in der anderen Relation gibt.'' Beim '''Left Semi Join''' (<math>\ltimes</math>) werden die Tupel aus der linken Relation übernommen, beim '''Right Semi Join''' (<math>\rtimes</math>) aus der rechten. In SQL kann man den Semi-Join mit einer Kombination aus Join und Projektion modellieren: | ||
=== Beispiele === | === Beispiele === | ||
Der Semi Join <math>\textrm{Land} \ltimes_{\textrm{ | Der '''Left Semi Join''' <math>\textrm{Land} \ltimes_{\textrm{Hauptstadt} = \textrm{Stadt}\_\textrm{Name}} \textrm{Stadt}</math> ergibt folgende Relation: | ||
{| class="wikitable" | {| class="wikitable" | ||
|+<math>\textrm{Land} \ltimes_{\textrm{ | |+<math>\textrm{Land} \ltimes_{\textrm{Hauptstadt} = \textrm{Stadt}\_\textrm{Name}} \textrm{Stadt}</math> | ||
!Land_Name | !Land_Name | ||
!Hauptstadt | !Hauptstadt | ||
Zeile 128: | Zeile 129: | ||
|2.381.741 | |2.381.741 | ||
|} | |} | ||
Der Semi Join <math>\textrm{Land} \rtimes_{\textrm{ | Die dazugehörige SQL-Abfrage ist <code>SELECT Land.* FROM Land LEFT JOIN Stadt on Hauptstadt = Stadt_Name;</code> | ||
Der '''Right Semi Join''' <math>\textrm{Land} \rtimes_{\textrm{Hauptstadt} = \textrm{Stadt}\_\textrm{Name}} \textrm{Stadt}</math> ergibt folgende Relation: | |||
{| class="wikitable" | {| class="wikitable" | ||
|+<math>\textrm{Land} \rtimes_{\textrm{ | |+<math>\textrm{Land} \rtimes_{\textrm{Hauptstadt} = \textrm{Stadt}\_\textrm{Name}} \textrm{Stadt}</math> | ||
!Stadt_Name | !Stadt_Name | ||
!Stadt_EW | !Stadt_EW | ||
Zeile 151: | Zeile 154: | ||
|Khaled Abdel Aal | |Khaled Abdel Aal | ||
|} | |} | ||
Die dazugehörige SQL-Abfrage ist <code>SELECT Stadt.* FROM Land RIGHT JOIN Stadt on Hauptstadt = Stadt_Name;</code> | |||
== Outer Join == | == Outer Join == | ||
{{ | Der '''Outer Join''' (⟖, ⟕ und ⟗) verknüpft alle Tupel aus zwei Relationen, die eine gegebene Bedingung erfüllen, und füllt für die Tupel, für die es in der jeweils anderen Relation kein Gegenstück gibt, die leeren Spalten mit [[Null|Nullwerten]] auf. Für die Outer Joins gibt es die SQL-Schlüsselwörter <code>LEFT JOIN</code>, <code>RIGHT JOIN</code> und <code>FULL JOIN</code>. In manchen Datenbankmanagementsystemen heißen die Joins auch <code>RIGHT OUTER JOIN</code>, <code>LEFT OUTER JOIN</code> und <code>FULL OUTER JOIN</code>. | ||
=== Beispiele === | |||
==== Left Outer Join ==== | |||
Der '''Left Outer Join''' <math>\textrm{Land} \text{ ⟖ }_{\textrm{Hauptstadt} = \textrm{Stadt}\_\textrm{Name}} \textrm{Stadt}</math> ergibt folgende Relation: | |||
{| class="wikitable" | |||
|+<math>\textrm{Land} \text{ ⟖ }_{\textrm{Hauptstadt} = \textrm{Stadt}\_\textrm{Name}} \textrm{Stadt}</math> | |||
!Land_Name | |||
!Hauptstadt | |||
!Land_EW | |||
!Land_Fläche | |||
!Stadt_Name | |||
!Stadt_EW | |||
!Stadt_Fläche | |||
!Bürgermeister | |||
|- | |||
|Afghanistan | |||
|Kabul | |||
|35.500.000 | |||
|652.230 | |||
|Kabul | |||
|4.273.15 | |||
|275 | |||
|Abdullah Habibzai | |||
|- | |||
|Ägypten | |||
|Kairo | |||
|93.400.000 | |||
|1.001.450 | |||
|Kairo | |||
|9.153.135 | |||
|606 | |||
|Khaled Abdel Aal | |||
|- | |||
|Albanien | |||
|Tirana | |||
|2.900.000 | |||
|28.748 | |||
|<code>null</code> | |||
|<code>null</code> | |||
|<code>null</code> | |||
|<code>null</code> | |||
|- | |||
|Algerien | |||
|Algier | |||
|42.200.000 | |||
|2.381.741 | |||
|Algier | |||
|2.159.051 | |||
|273 | |||
|Youcef Cherfa | |||
|} | |||
Die dazugehörige SQL-Anfrage ist <code>SELECT * FROM Land LEFT JOIN Stadt on Hauptstadt = Stadt_Name;</code> | |||
==== Right Outer Join ==== | |||
Der '''Right Outer Join''' <math>\textrm{Land} \text{ ⟕ }_{\textrm{Haupstadt} = \textrm{Stadt}\_\textrm{Name}} \textrm{Stadt}</math> ergibt folgende Relation: | |||
{| class="wikitable" | |||
|+<math>\textrm{Land} \text{ ⟕ }_{\textrm{Haupstadt} = \textrm{Stadt}\_\textrm{Name}} \textrm{Stadt}</math> | |||
!Land_Name | |||
!Hauptstadt | |||
!Land_EW | |||
!Land_Fläche | |||
!Stadt_Name | |||
!Stadt_EW | |||
!Stadt_Fläche | |||
!Bürgermeister | |||
|- | |||
|Afghanistan | |||
|Kabul | |||
|35.500.000 | |||
|652.230 | |||
|Kabul | |||
|4.273.15 | |||
|275 | |||
|Abdullah Habibzai | |||
|- | |||
|Ägypten | |||
|Kairo | |||
|93.400.000 | |||
|1.001.450 | |||
|Kairo | |||
|9.153.135 | |||
|606 | |||
|Khaled Abdel Aal | |||
|- | |||
|<code>null</code> | |||
|<code>null</code> | |||
|<code>null</code> | |||
|<code>null</code> | |||
|Helsinki | |||
|656.920 | |||
|755 | |||
|Juhana Vartiainen | |||
|- | |||
|Algerien | |||
|Algier | |||
|42.200.000 | |||
|2.381.741 | |||
|Algier | |||
|2.159.051 | |||
|273 | |||
|Youcef Cherfa | |||
|} | |||
Die dazugehörige SQL-Anfrage ist <code>SELECT * FROM Land RIGHT JOIN Stadt on Hauptstadt = Stadt_Name;</code> | |||
==== Full Outer Join ==== | |||
Der '''Full Outer Join''' <math>\textrm{Land} \text{ ⟗ }_{\textrm{Hauptstadt} = \textrm{Stadt}\_\textrm{Name}} \textrm{Stadt}</math> ergibt folgende Relation: | |||
{| class="wikitable" | |||
|+<math>\textrm{Land} \text{ ⟗ }_{\textrm{Hauptstadt} = \textrm{Stadt}\_\textrm{Name}} \textrm{Stadt}</math> | |||
!Land_Name | |||
!Hauptstadt | |||
!Land_EW | |||
!Land_Fläche | |||
!Stadt_Name | |||
!Stadt_EW | |||
!Stadt_Fläche | |||
!Bürgermeister | |||
|- | |||
|Afghanistan | |||
|Kabul | |||
|35.500.000 | |||
|652.230 | |||
|Kabul | |||
|4.273.15 | |||
|275 | |||
|Abdullah Habibzai | |||
|- | |||
|Ägypten | |||
|Kairo | |||
|93.400.000 | |||
|1.001.450 | |||
|Kairo | |||
|9.153.135 | |||
|606 | |||
|Khaled Abdel Aal | |||
|- | |||
|Albanien | |||
|Tirana | |||
|2.900.000 | |||
|28.748 | |||
|<code>null</code> | |||
|<code>null</code> | |||
|<code>null</code> | |||
|<code>null</code> | |||
|- | |||
|Algerien | |||
|Algier | |||
|42.200.000 | |||
|2.381.741 | |||
|Algier | |||
|2.159.051 | |||
|273 | |||
|Youcef Cherfa | |||
|- | |||
|<code>null</code> | |||
|<code>null</code> | |||
|<code>null</code> | |||
|<code>null</code> | |||
|Helsinki | |||
|656.920 | |||
|755 | |||
|Juhana Vartiainen | |||
|} | |||
Die dazugehörige SQL-Anfrage ist <code>SELECT * FROM Land FULL JOIN Stadt on Hauptstadt = Stadt_Name;</code> | |||
== Zum Weiterlesen == | |||
* {{W3Schools|sql/sql_join.asp|SQL Joins}} | |||
* {{W3Schools|sql/sql_join_inner.asp|SQL INNER JOIN}} | |||
* {{W3Schools|sql/sql_join_inner.asp|SQL LEFT JOIN}} | |||
* {{W3Schools|sql/sql_join_right.asp|SQL RIGHT JOIN}} | |||
* {{W3Schools|sql/sql_join_full.asp|SQL FULL JOIN}} | |||
{{Navigationsleiste Operatoren der Relationenalgebra}} | |||
[[Kategorie:Datenbanken]] | [[Kategorie:Datenbanken]] |
Aktuelle Version vom 29. März 2024, 14:57 Uhr
Der Join () ist ein Operator der Relationenalgebra.
Mit einem Join können diejenigen Tupel zweier Relationen miteinander verbunden werden, die bestimmten Bedingungen entsprechen.
Die Schreibweise ist . Das dazugehörige SQL-Schlüsselwort ist JOIN ON
oder INNER JOIN ON
.
Beispiel
Betrachten wir die Relationen Land und Stadt:
Land_Name | Hauptstadt | Land_EW | Land_Fläche |
---|---|---|---|
Afghanistan | Kabul | 35.500.000 | 652.230 |
Ägypten | Kairo | 93.400.000 | 1.001.450 |
Albanien | Tirana | 2.900.000 | 28.748 |
Algerien | Algier | 42.200.000 | 2.381.741 |
Stadt_Name | Stadt_EW | Stadt_Fläche | Bürgermeister |
---|---|---|---|
Algier | 2.159.051 | 273 | Youcef Cherfa |
Helsinki | 656.920 | 755 | Juhana Vartiainen |
Kabul | 4.273.15 | 275 | Abdullah Habibzai |
Kairo | 9.153.135 | 606 | Khaled Abdel Aal |
Der Join ergibt folgende Relation:
Land_Name | Hauptstadt | Land_EW | Land_Fläche | Stadt_Name | Stadt_EW | Stadt_Fläche | Bürgermeister |
---|---|---|---|---|---|---|---|
Afghanistan | Kabul | 35.500.000 | 652.230 | Kabul | 4.273.15 | 275 | Abdullah Habibzai |
Ägypten | Kairo | 93.400.000 | 1.001.450 | Kairo | 9.153.135 | 606 | Khaled Abdel Aal |
Algerien | Algier | 42.200.000 | 2.381.741 | Algier | 2.159.051 | 273 | Youcef Cherfa |
Die dazugehörige SQL-Abfrage ist SELECT * FROM Land INNER JOIN Stadt ON Hauptstadt = Stadt_Name;
Semi Join
Der Semi Join ( und ) ist eine Spezialform des Joins. Wenn man zwei Relationen mit einem Semi Join verknüpft, werden nur diejenigen Tupel aus einer der beiden Relationen übernommen, für die es ein Gegenpart in der anderen Relation gibt. Beim Left Semi Join () werden die Tupel aus der linken Relation übernommen, beim Right Semi Join () aus der rechten. In SQL kann man den Semi-Join mit einer Kombination aus Join und Projektion modellieren:
Beispiele
Der Left Semi Join ergibt folgende Relation:
Land_Name | Hauptstadt | Land_EW | Land_Fläche |
---|---|---|---|
Afghanistan | Kabul | 35.500.000 | 652.230 |
Ägypten | Kairo | 93.400.000 | 1.001.450 |
Algerien | Algier | 42.200.000 | 2.381.741 |
Die dazugehörige SQL-Abfrage ist SELECT Land.* FROM Land LEFT JOIN Stadt on Hauptstadt = Stadt_Name;
Der Right Semi Join ergibt folgende Relation:
Stadt_Name | Stadt_EW | Stadt_Fläche | Bürgermeister |
---|---|---|---|
Algier | 2.159.051 | 273 | Youcef Cherfa |
Kabul | 4.273.15 | 275 | Abdullah Habibzai |
Kairo | 9.153.135 | 606 | Khaled Abdel Aal |
Die dazugehörige SQL-Abfrage ist SELECT Stadt.* FROM Land RIGHT JOIN Stadt on Hauptstadt = Stadt_Name;
Outer Join
Der Outer Join (⟖, ⟕ und ⟗) verknüpft alle Tupel aus zwei Relationen, die eine gegebene Bedingung erfüllen, und füllt für die Tupel, für die es in der jeweils anderen Relation kein Gegenstück gibt, die leeren Spalten mit Nullwerten auf. Für die Outer Joins gibt es die SQL-Schlüsselwörter LEFT JOIN
, RIGHT JOIN
und FULL JOIN
. In manchen Datenbankmanagementsystemen heißen die Joins auch RIGHT OUTER JOIN
, LEFT OUTER JOIN
und FULL OUTER JOIN
.
Beispiele
Left Outer Join
Der Left Outer Join ergibt folgende Relation:
Land_Name | Hauptstadt | Land_EW | Land_Fläche | Stadt_Name | Stadt_EW | Stadt_Fläche | Bürgermeister |
---|---|---|---|---|---|---|---|
Afghanistan | Kabul | 35.500.000 | 652.230 | Kabul | 4.273.15 | 275 | Abdullah Habibzai |
Ägypten | Kairo | 93.400.000 | 1.001.450 | Kairo | 9.153.135 | 606 | Khaled Abdel Aal |
Albanien | Tirana | 2.900.000 | 28.748 | null
|
null
|
null
|
null
|
Algerien | Algier | 42.200.000 | 2.381.741 | Algier | 2.159.051 | 273 | Youcef Cherfa |
Die dazugehörige SQL-Anfrage ist SELECT * FROM Land LEFT JOIN Stadt on Hauptstadt = Stadt_Name;
Right Outer Join
Der Right Outer Join ergibt folgende Relation:
Land_Name | Hauptstadt | Land_EW | Land_Fläche | Stadt_Name | Stadt_EW | Stadt_Fläche | Bürgermeister |
---|---|---|---|---|---|---|---|
Afghanistan | Kabul | 35.500.000 | 652.230 | Kabul | 4.273.15 | 275 | Abdullah Habibzai |
Ägypten | Kairo | 93.400.000 | 1.001.450 | Kairo | 9.153.135 | 606 | Khaled Abdel Aal |
null
|
null
|
null
|
null
|
Helsinki | 656.920 | 755 | Juhana Vartiainen |
Algerien | Algier | 42.200.000 | 2.381.741 | Algier | 2.159.051 | 273 | Youcef Cherfa |
Die dazugehörige SQL-Anfrage ist SELECT * FROM Land RIGHT JOIN Stadt on Hauptstadt = Stadt_Name;
Full Outer Join
Der Full Outer Join ergibt folgende Relation:
Land_Name | Hauptstadt | Land_EW | Land_Fläche | Stadt_Name | Stadt_EW | Stadt_Fläche | Bürgermeister |
---|---|---|---|---|---|---|---|
Afghanistan | Kabul | 35.500.000 | 652.230 | Kabul | 4.273.15 | 275 | Abdullah Habibzai |
Ägypten | Kairo | 93.400.000 | 1.001.450 | Kairo | 9.153.135 | 606 | Khaled Abdel Aal |
Albanien | Tirana | 2.900.000 | 28.748 | null
|
null
|
null
|
null
|
Algerien | Algier | 42.200.000 | 2.381.741 | Algier | 2.159.051 | 273 | Youcef Cherfa |
null
|
null
|
null
|
null
|
Helsinki | 656.920 | 755 | Juhana Vartiainen |
Die dazugehörige SQL-Anfrage ist SELECT * FROM Land FULL JOIN Stadt on Hauptstadt = Stadt_Name;