<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://fi-wiki.de/index.php?action=history&amp;feed=atom&amp;title=JOIN_vs._Subquery</id>
	<title>JOIN vs. Subquery - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://fi-wiki.de/index.php?action=history&amp;feed=atom&amp;title=JOIN_vs._Subquery"/>
	<link rel="alternate" type="text/html" href="https://fi-wiki.de/index.php?title=JOIN_vs._Subquery&amp;action=history"/>
	<updated>2026-05-06T14:49:13Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in FI-Wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://fi-wiki.de/index.php?title=JOIN_vs._Subquery&amp;diff=2854&amp;oldid=prev</id>
		<title>Moettke: Die Seite wurde neu angelegt: „Dieser Artikel erklärt den Unterschied zwischen &#039;&#039;&#039;JOINs&#039;&#039;&#039; und &#039;&#039;&#039;Subqueries&#039;&#039;&#039; anhand einfacher Beispiele.  == Grundprinzip ==  * &#039;&#039;&#039;JOIN&#039;&#039;&#039; → Tabellen werden miteinander &#039;&#039;&#039;verbunden&#039;&#039;&#039; * &#039;&#039;&#039;Subquery&#039;&#039;&#039; → Eine Abfrage wird &#039;&#039;&#039;innerhalb einer anderen Abfrage&#039;&#039;&#039; verwendet  == Beispieltabellen ==  &#039;&#039;&#039;Tabelle: kunde&#039;&#039;&#039;  {| class=&quot;wikitable&quot; ! kundennr !! name |- | 1 || Anna |- | 2 || Ben |- | 3 || Clara |}  &#039;&#039;&#039;Tabelle: bestellung&#039;&#039;&#039;  {| class=&quot;wikitab…“</title>
		<link rel="alternate" type="text/html" href="https://fi-wiki.de/index.php?title=JOIN_vs._Subquery&amp;diff=2854&amp;oldid=prev"/>
		<updated>2026-04-29T05:53:24Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „Dieser Artikel erklärt den Unterschied zwischen &amp;#039;&amp;#039;&amp;#039;JOINs&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;Subqueries&amp;#039;&amp;#039;&amp;#039; anhand einfacher Beispiele.  == Grundprinzip ==  * &amp;#039;&amp;#039;&amp;#039;JOIN&amp;#039;&amp;#039;&amp;#039; → Tabellen werden miteinander &amp;#039;&amp;#039;&amp;#039;verbunden&amp;#039;&amp;#039;&amp;#039; * &amp;#039;&amp;#039;&amp;#039;Subquery&amp;#039;&amp;#039;&amp;#039; → Eine Abfrage wird &amp;#039;&amp;#039;&amp;#039;innerhalb einer anderen Abfrage&amp;#039;&amp;#039;&amp;#039; verwendet  == Beispieltabellen ==  &amp;#039;&amp;#039;&amp;#039;Tabelle: kunde&amp;#039;&amp;#039;&amp;#039;  {| class=&amp;quot;wikitable&amp;quot; ! kundennr !! name |- | 1 || Anna |- | 2 || Ben |- | 3 || Clara |}  &amp;#039;&amp;#039;&amp;#039;Tabelle: bestellung&amp;#039;&amp;#039;&amp;#039;  {| class=&amp;quot;wikitab…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Dieser Artikel erklärt den Unterschied zwischen &amp;#039;&amp;#039;&amp;#039;JOINs&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;Subqueries&amp;#039;&amp;#039;&amp;#039; anhand einfacher Beispiele.&lt;br /&gt;
&lt;br /&gt;
== Grundprinzip ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;JOIN&amp;#039;&amp;#039;&amp;#039; → Tabellen werden miteinander &amp;#039;&amp;#039;&amp;#039;verbunden&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Subquery&amp;#039;&amp;#039;&amp;#039; → Eine Abfrage wird &amp;#039;&amp;#039;&amp;#039;innerhalb einer anderen Abfrage&amp;#039;&amp;#039;&amp;#039; verwendet&lt;br /&gt;
&lt;br /&gt;
== Beispieltabellen ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tabelle: kunde&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! kundennr !! name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Anna&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Ben&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Clara&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tabelle: bestellung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! bestellnr !! kundennr !! betrag&lt;br /&gt;
|-&lt;br /&gt;
| 101 || 1 || 50&lt;br /&gt;
|-&lt;br /&gt;
| 102 || 1 || 80&lt;br /&gt;
|-&lt;br /&gt;
| 103 || 2 || 30&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 1. JOIN – Tabellen verbinden ==&lt;br /&gt;
&lt;br /&gt;
Ziel: Bestellungen zusammen mit Kundennamen anzeigen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    k.name,&lt;br /&gt;
    b.bestellnr,&lt;br /&gt;
    b.betrag&lt;br /&gt;
FROM kunde k&lt;br /&gt;
JOIN bestellung b&lt;br /&gt;
    ON k.kundennr = b.kundennr;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ergebnis:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! name !! bestellnr !! betrag&lt;br /&gt;
|-&lt;br /&gt;
| Anna || 101 || 50&lt;br /&gt;
|-&lt;br /&gt;
| Anna || 102 || 80&lt;br /&gt;
|-&lt;br /&gt;
| Ben || 103 || 30&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wichtig:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Ein Kunde kann mehrfach erscheinen&lt;br /&gt;
* Grund: 1:n-Beziehung (ein Kunde → mehrere Bestellungen)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Merksatz:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;JOIN verbindet passende Zeilen aus mehreren Tabellen.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== 2. Subquery – Teilfrage stellen ==&lt;br /&gt;
&lt;br /&gt;
Ziel: Kunden anzeigen, die mindestens eine Bestellung haben&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT name&lt;br /&gt;
FROM kunde&lt;br /&gt;
WHERE kundennr IN (&lt;br /&gt;
    SELECT kundennr&lt;br /&gt;
    FROM bestellung&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ergebnis:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! name&lt;br /&gt;
|-&lt;br /&gt;
| Anna&lt;br /&gt;
|-&lt;br /&gt;
| Ben&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wichtig:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Clara erscheint nicht (keine Bestellung)&lt;br /&gt;
* Die Subquery liefert eine Liste von Kundennummern&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Merksatz:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Subquery liefert ein Zwischenergebnis für die äußere Abfrage.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== 3. Gleiche Aufgabe – zwei Lösungen ==&lt;br /&gt;
&lt;br /&gt;
Ziel: Kunden mit Bestellungen anzeigen&lt;br /&gt;
&lt;br /&gt;
=== Mit Subquery ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT name&lt;br /&gt;
FROM kunde&lt;br /&gt;
WHERE kundennr IN (&lt;br /&gt;
    SELECT kundennr FROM bestellung&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mit JOIN ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT k.name&lt;br /&gt;
FROM kunde k&lt;br /&gt;
JOIN bestellung b&lt;br /&gt;
    ON k.kundennr = b.kundennr;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;DISTINCT&amp;#039;&amp;#039;&amp;#039; ist notwendig, da ein Kunde mehrere Bestellungen haben kann&lt;br /&gt;
&lt;br /&gt;
== 4. Subquery für Berechnungen ==&lt;br /&gt;
&lt;br /&gt;
Ziel: Anzahl der Bestellungen pro Kunde&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    name,&lt;br /&gt;
    (&lt;br /&gt;
        SELECT COUNT(*)&lt;br /&gt;
        FROM bestellung b&lt;br /&gt;
        WHERE b.kundennr = k.kundennr&lt;br /&gt;
    ) AS anzahl_bestellungen&lt;br /&gt;
FROM kunde k;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ergebnis:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! name !! anzahl_bestellungen&lt;br /&gt;
|-&lt;br /&gt;
| Anna || 2&lt;br /&gt;
|-&lt;br /&gt;
| Ben || 1&lt;br /&gt;
|-&lt;br /&gt;
| Clara || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Eigenschaften:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;skalare Subquery&amp;#039;&amp;#039;&amp;#039; (liefert genau einen Wert)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;korrelierte Subquery&amp;#039;&amp;#039;&amp;#039; (bezieht sich auf äußere Abfrage)&lt;br /&gt;
&lt;br /&gt;
== 5. Gleiche Aufgabe mit JOIN ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    k.name,&lt;br /&gt;
    COUNT(b.bestellnr) AS anzahl_bestellungen&lt;br /&gt;
FROM kunde k&lt;br /&gt;
LEFT JOIN bestellung b&lt;br /&gt;
    ON k.kundennr = b.kundennr&lt;br /&gt;
GROUP BY k.kundennr, k.name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Warum LEFT JOIN?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Damit auch Kunden ohne Bestellung angezeigt werden (z. B. Clara)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Warum GROUP BY?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Mehrere Bestellungen müssen zu einer Zeile zusammengefasst werden&lt;br /&gt;
&lt;br /&gt;
== 6. Wann JOIN, wann Subquery? ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Situation !! Empfehlung&lt;br /&gt;
|-&lt;br /&gt;
| Daten aus mehreren Tabellen anzeigen || JOIN&lt;br /&gt;
|-&lt;br /&gt;
| Nur prüfen, ob Daten existieren || Subquery (EXISTS / IN)&lt;br /&gt;
|-&lt;br /&gt;
| Vergleich mit Durchschnitt / Summe || Subquery&lt;br /&gt;
|-&lt;br /&gt;
| Anzahl pro Datensatz berechnen || beides möglich&lt;br /&gt;
|-&lt;br /&gt;
| Alle Datensätze behalten (auch ohne Treffer) || LEFT JOIN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;JOIN&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* verbindet Tabellen&lt;br /&gt;
* liefert kombinierte Daten&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Subquery&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* beantwortet eine Teilfrage&lt;br /&gt;
* wird innerhalb einer Abfrage verwendet&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wichtiger Merksatz:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
JOIN = Tabellen verbinden  &lt;br /&gt;
Subquery = Ergebnis einer Abfrage weiterverwenden&lt;/div&gt;</summary>
		<author><name>Moettke</name></author>
	</entry>
</feed>