Ein Subselect ist eine Selectanweisung die in der WHERE, HAVING oder FROM Klausel einer anderen SELECT-Anweisung eingebettet wird. Je nach Anzahl der Ergebniszeilen der Subselectanweisung wird zwischen Singlerow-Subselect und Multirow-Subselect unterschieden. Beide Arten unterscheiden sich in den erlaubten Operatoren die auf das Ergebnis angewendet werden dürfen.
Bei diesen Subselects wird immer nur genau 1 Ergebniszeile zurückgeliefert welche mit Vergleichsoperatoren (<, >, =, …) kontrolliert werden kann. Das Subselect ist fehlerhaft, wenn keine bzw. mehrere Ergebniszeilen zurückgeliefert werden.
Bei diesen Subselects muss die Reihenfolge und der Datentyp der Spalten zwischen Unter- und Hauptabfrage beachtet werden. Es wird immer paarweise verglichen (A1 mit B1, A2 mit B2, …)
Aufgabe: Zeige Name und Gehalt aller Mitarbeiter, die in der gleichen Abteilung wie der Mitarbeiter mit der Nummer 1 arbeiten.
SELECT Name, Gehalt FROM Mitarbeiter WHERE Abteilungsnummer = (SELECT Abteilungsnummer FROM Mitglied WHERE Mitarbeiternummer = 1)
Aufgabe: Erstelle eine Abfrage die alle Mitarbeiternamen anzeigt, deren Gehalt höher ist als der Abteilungsdurchschnitt aller Abteilungen.
SELECT Name FROM Mitarbeiter WHERE Gehalt >ALL (SELECT AVG(Gehalt) FROM Mitarbeiter GROUP BY Abteilungsnummer)
Aufgabe: Zeige Name, Abteilungsnummer und Gehalt aller Mitarbeiter an, die gleich viel verdienen wie Smith und noch dazu in der gleichen Abteilung arbeiten.
SELECT Name, Abteilungsnummer, Gehalt FROM Mitarbeiter WHERE (Abteilungsnummer, Gehalt) IN (SELECT Abteilungsnummer, Gehalt FROM Mitarbeiter WHERE Name = 'Smith')