Ein Subquery ist eine Abfrage, innerhalb einer Abfrage.
Subquery Syntax
SELECT * FROM tabellen1 WHERE id IN (SELECT id from tabellen2)
Im folgenden Beispiel möchten wir alle User selektieren, die schonmal eine Frage gestellt haben:
SELECT * FROM users WHERE id IN (3,5,7)
Wir möchten alle User mit einer bestimmten ID selektieren. Mittel „IN“ können wir eine komma-separierte Liste mit ID’s angeben, die Benutzer mit diesen ID’s werden selektiert. Nun möchten wir aber mit einem Subquery alle User ID’s selektieren, die in der Tabelle „questions“ vorkommen und mit dieser Liste die User selektieren, die mindestens eine Frage gestellt haben:
SELECT * FROM users WHERE id IN (SELECT DISTINCT user_id FROM questions)
Meistens kann man einen Subquery auch durch einen JOIN ersetzen, aber Subqueries sind in der Regel einfacher zu programmieren und performanter:
SELECT DISTINCT users.* FROM users JOIN questions ON (users.id = questions.user_id)