Join: Unterschied zwischen den Versionen

Aus KGS-Wiki
(Die Seite wurde neu angelegt: „Der '''Join''' (<math>\Bowtie</math>) ist ein Operator der Relationenalgebra. 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>. == Beispiel == Betrachten wir die Relationen '''Land''' und '''Stadt''': {| class="wikitable" |+Land !Land_Name !Hauptstadt !Land_EW !Land_Fläch…“)
 
K (Links hübsch gemacht)
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Der '''Join''' (<math>\Bowtie</math>) ist ein Operator der Relationenalgebra.
Der '''Join''' (<math>\bowtie</math>) ist ein Operator der Relationenalgebra.


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 45: Zeile 45:
|273
|273
|Youcef Cherfa
|Youcef Cherfa
|-
|Helsinki
|656.920
|755
|Juhana Vartiainen
|-
|-
|Kabul
|Kabul
Zeile 55: Zeile 60:
|606
|606
|Khaled Abdel Aal
|Khaled Abdel Aal
|-
|Tirana
|557.422
|1.110
|Erion Veliaj
|}
|}
Der Join <math>\textrm{Land} \Bowtie_{\textrm{Hauptstadt} = \textrm{Stadt_Name}} \textrm{Stadt}</math> ergibt folgende Relation:
Der Join <math>\textrm{Land} \bowtie_{\textrm{Hauptstadt} = \textrm{Stadt}\_\textrm{Name}} \textrm{Stadt}</math> ergibt folgende Relation:
{| class="wikitable"
{| class="wikitable"
|+<math>\textrm{Land} \times \textrm{Stadt}</math>
|+<math>\textrm{Land} \bowtie_{\textrm{Hauptstadt} = \textrm{Stadt}\_\textrm{Name}} \textrm{Stadt}</math>
!Land_Name
!Land_Name
!Hauptstadt
!Hauptstadt
Zeile 72: Zeile 72:
!Stadt_Fläche
!Stadt_Fläche
!Bürgermeister
!Bürgermeister
|-
|Afghanistan
|Kabul
|35.500.000
|652.230
|Algier
|2.159.051
|273
|Youcef Cherfa
|-
|-
|Afghanistan
|Afghanistan
Zeile 91: Zeile 82:
|Abdullah Habibzai
|Abdullah Habibzai
|-
|-
|Afghanistan
|Ägypten
|Kabul
|Kairo
|35.500.000
|93.400.000
|652.230
|1.001.450
|Kairo
|Kairo
|9.153.135
|9.153.135
|606
|606
|Khaled Abdel Aal
|Khaled Abdel Aal
|-
|Algerien
|Algier
|42.200.000
|2.381.741
|Algier
|2.159.051
|273
|Youcef Cherfa
|}
Die dazugehörige SQL-Abfrage ist <code>SELECT * FROM Land INNER JOIN Stadt ON Hauptstadt = Stadt_Name;</code>
== 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. In SQL kann man den Semi-Join mit einer Kombination aus Join und Projektion modellieren:
=== Beispiele ===
Der '''Left Semi Join''' <math>\textrm{Land} \ltimes_{\textrm{Hauptstadt} = \textrm{Stadt}\_\textrm{Name}} \textrm{Stadt}</math> ergibt folgende Relation:
{| class="wikitable"
|+<math>\textrm{Land} \ltimes_{\textrm{Hauptstadt} = \textrm{Stadt}\_\textrm{Name}} \textrm{Stadt}</math>
!Land_Name
!Hauptstadt
!Land_EW
!Land_Fläche
|-
|-
|Afghanistan
|Afghanistan
Zeile 104: Zeile 118:
|35.500.000
|35.500.000
|652.230
|652.230
|Tirana
|557.422
|1.110
|Erion Veliaj
|-
|-
|Ägypten
|Ägypten
Zeile 113: Zeile 123:
|93.400.000
|93.400.000
|1.001.450
|1.001.450
|-
|Algerien
|Algier
|42.200.000
|2.381.741
|}
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"
|+<math>\textrm{Land} \rtimes_{\textrm{Hauptstadt} = \textrm{Stadt}\_\textrm{Name}} \textrm{Stadt}</math>
!Stadt_Name
!Stadt_EW
!Stadt_Fläche
!Bürgermeister
|-
|Algier
|Algier
|2.159.051
|2.159.051
Zeile 118: Zeile 144:
|Youcef Cherfa
|Youcef Cherfa
|-
|-
|Ägypten
|Kabul
|4.273.15
|275
|Abdullah Habibzai
|-
|Kairo
|Kairo
|93.400.000
|9.153.135
|1.001.450
|606
|Khaled Abdel Aal
|}
Die dazugehörige SQL-Abfrage ist <code>SELECT Stadt.* FROM Land RIGHT JOIN Stadt on Hauptstadt = Stadt_Name;</code>
 
== 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
|Kabul
|4.273.15
|4.273.15
Zeile 135: Zeile 191:
|606
|606
|Khaled Abdel Aal
|Khaled Abdel Aal
|-
|Ägypten
|Kairo
|93.400.000
|1.001.450
|Tirana
|557.422
|1.110
|Erion Veliaj
|-
|-
|Albanien
|Albanien
Zeile 149: Zeile 196:
|2.900.000
|2.900.000
|28.748
|28.748
|<code>null</code>
|<code>null</code>
|<code>null</code>
|<code>null</code>
|-
|Algerien
|Algier
|42.200.000
|2.381.741
|Algier
|Algier
|2.159.051
|2.159.051
|273
|273
|Youcef Cherfa
|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
|-
|-
|Albanien
|Afghanistan
|Tirana
|Kabul
|2.900.000
|35.500.000
|28.748
|652.230
|Kabul
|Kabul
|4.273.15
|4.273.15
Zeile 163: Zeile 234:
|Abdullah Habibzai
|Abdullah Habibzai
|-
|-
|Albanien
|Ägypten
|Tirana
|Kairo
|2.900.000
|93.400.000
|28.748
|1.001.450
|Kairo
|Kairo
|9.153.135
|9.153.135
Zeile 172: Zeile 243:
|Khaled Abdel Aal
|Khaled Abdel Aal
|-
|-
|Albanien
|<code>null</code>
|Tirana
|<code>null</code>
|2.900.000
|<code>null</code>
|28.748
|<code>null</code>
|Tirana
|Helsinki
|557.422
|656.920
|1.110
|755
|Erion Veliaj
|Juhana Vartiainen
|-
|-
|Algerien
|Algerien
Zeile 189: Zeile 260:
|273
|273
|Youcef Cherfa
|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
|-
|-
|Algerien
|Afghanistan
|Algier
|Kabul
|42.200.000
|35.500.000
|2.381.741
|652.230
|Kabul
|Kabul
|4.273.15
|4.273.15
Zeile 199: Zeile 285:
|Abdullah Habibzai
|Abdullah Habibzai
|-
|-
|Algerien
|Ägypten
|Algier
|Kairo
|42.200.000
|93.400.000
|2.381.741
|1.001.450
|Kairo
|Kairo
|9.153.135
|9.153.135
|606
|606
|Khaled Abdel Aal
|Khaled Abdel Aal
|-
|Albanien
|Tirana
|2.900.000
|28.748
|<code>null</code>
|<code>null</code>
|<code>null</code>
|<code>null</code>
|-
|-
|Algerien
|Algerien
Zeile 212: Zeile 307:
|42.200.000
|42.200.000
|2.381.741
|2.381.741
|Tirana
|Algier
|557.422
|2.159.051
|1.110
|273
|Erion Veliaj
|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}}
{{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
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
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;

Zum Weiterlesen