Subqueries: Unterschied zwischen den Versionen
Aus FI-Wiki
Die Seite wurde neu angelegt: „== Subqueries in SQL == Subqueries (Unterabfragen) sind SQL-Abfragen, die innerhalb einer anderen Abfrage eingebettet sind. Sie liefern Zwischenergebnisse, die in der äußeren Abfrage verwendet werden. === Arten von Subqueries === * '''Skalare Subquery''': Gibt genau einen Wert zurück * '''Mehrzeilige Subquery''': Gibt eine Liste von Werten zurück * '''Korrelierte Subquery''': Bezieht sich auf eine Tabelle der äußeren Abfrage === Beispieltabellen…“ |
Keine Bearbeitungszusammenfassung |
||
| Zeile 12: | Zeile 12: | ||
<syntaxhighlight lang="sql"> | <syntaxhighlight lang="sql"> | ||
Kunde(kundennr, name, land) | -- Tabelle Kunde | ||
Bestellung(bestellnr, kundennr, betrag) | CREATE TABLE kunde ( | ||
</syntaxhighlight> | kundennr INT PRIMARY KEY, | ||
name VARCHAR(50), | |||
land VARCHAR(50) | |||
); | |||
INSERT INTO kunde VALUES | |||
(1, 'Anna', 'Deutschland'), | |||
(2, 'Ben', 'Deutschland'), | |||
(3, 'Clara', 'Österreich'), | |||
(4, 'David', 'Schweiz'), | |||
(5, 'Eva', 'Deutschland'); | |||
-- Tabelle Bestellung | |||
CREATE TABLE bestellung ( | |||
bestellnr INT PRIMARY KEY, | |||
kundennr INT, | |||
betrag DECIMAL(10,2), | |||
FOREIGN KEY (kundennr) REFERENCES kunde(kundennr) | |||
); | |||
INSERT INTO bestellung VALUES | |||
(101, 1, 900.00), | |||
(102, 2, 1500.00), | |||
(103, 3, 500.00), | |||
(104, 4, 2200.00), | |||
(105, 2, 300.00); </syntaxhighlight> | |||
=== 1. Skalare Subquery === | === 1. Skalare Subquery === | ||
| Zeile 26: | Zeile 51: | ||
WHERE betrag = (SELECT MAX(betrag) FROM bestellung) | WHERE betrag = (SELECT MAX(betrag) FROM bestellung) | ||
); | ); | ||
</syntaxhighlight> | |||
'''Ergebnis:''' | |||
<syntaxhighlight lang="text"> | |||
name | |||
------ | |||
David | |||
</syntaxhighlight> | </syntaxhighlight> | ||
| Zeile 40: | Zeile 73: | ||
WHERE betrag > 1000 | WHERE betrag > 1000 | ||
); | ); | ||
</syntaxhighlight> | |||
'''Ergebnis:''' | |||
<syntaxhighlight lang="text"> | |||
name | |||
------ | |||
Ben | |||
David | |||
</syntaxhighlight> | </syntaxhighlight> | ||
| Zeile 54: | Zeile 96: | ||
WHERE b.kundennr = k.kundennr AND b.betrag > 1000 | WHERE b.kundennr = k.kundennr AND b.betrag > 1000 | ||
); | ); | ||
</syntaxhighlight> | |||
'''Ergebnis:''' | |||
<syntaxhighlight lang="text"> | |||
name | |||
------ | |||
Ben | |||
David | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Version vom 29. Oktober 2025, 10:43 Uhr
Subqueries in SQL
Subqueries (Unterabfragen) sind SQL-Abfragen, die innerhalb einer anderen Abfrage eingebettet sind. Sie liefern Zwischenergebnisse, die in der äußeren Abfrage verwendet werden.
Arten von Subqueries
- Skalare Subquery: Gibt genau einen Wert zurück
- Mehrzeilige Subquery: Gibt eine Liste von Werten zurück
- Korrelierte Subquery: Bezieht sich auf eine Tabelle der äußeren Abfrage
Beispieltabellen
-- Tabelle Kunde
CREATE TABLE kunde (
kundennr INT PRIMARY KEY,
name VARCHAR(50),
land VARCHAR(50)
);
INSERT INTO kunde VALUES
(1, 'Anna', 'Deutschland'),
(2, 'Ben', 'Deutschland'),
(3, 'Clara', 'Österreich'),
(4, 'David', 'Schweiz'),
(5, 'Eva', 'Deutschland');
-- Tabelle Bestellung
CREATE TABLE bestellung (
bestellnr INT PRIMARY KEY,
kundennr INT,
betrag DECIMAL(10,2),
FOREIGN KEY (kundennr) REFERENCES kunde(kundennr)
);
INSERT INTO bestellung VALUES
(101, 1, 900.00),
(102, 2, 1500.00),
(103, 3, 500.00),
(104, 4, 2200.00),
(105, 2, 300.00);
1. Skalare Subquery
SELECT name
FROM kunde
WHERE kundennr = (
SELECT kundennr
FROM bestellung
WHERE betrag = (SELECT MAX(betrag) FROM bestellung)
);
Ergebnis:
name
------
David
Gibt den Namen des Kunden mit der höchsten Bestellung zurück.
2. Mehrzeilige Subquery mit IN
SELECT name
FROM kunde
WHERE kundennr IN (
SELECT kundennr
FROM bestellung
WHERE betrag > 1000
);
Ergebnis:
name
------
Ben
David
Gibt alle Kunden zurück, die Bestellungen über 1000 haben.
3. Korrelierte Subquery
SELECT name
FROM kunde k
WHERE EXISTS (
SELECT *
FROM bestellung b
WHERE b.kundennr = k.kundennr AND b.betrag > 1000
);
Ergebnis:
name
------
Ben
David
Funktioniert zeilenweise: Gibt Kunden zurück, für die es mindestens eine große Bestellung gibt.
Vergleich der Subquery-Arten
- Skalare Subquery: 1 Zeile, 1 Spalte (z. B. MAX, COUNT)
- Mehrzeilige Subquery: mehrere Zeilen (z. B. für IN oder NOT IN)
- Korrelierte Subquery: wird für jede Zeile der äußeren Abfrage neu ausgeführt
Fazit
- Skalare Subquery: liefert genau einen Wert
- Mehrzeilige Subquery: liefert eine Liste von Werten
- Korrelierte Subquery: ist abhängig von der äußeren Zeile und flexibler, aber ggf. langsamer
