Subqueries - 2

In het voorbeeld van het type van de oudste transactiedatum komen de gegevens uit één tabel. Dit is natuurlijk niet altijd het geval. Wanneer we willen weten welke rekeninghouder het hoogste saldo op zijn rekening heeft staan, komen de gegevens uit twee tabellen: rekeninghouder en rekening. De vraag die beantwoord moet worden, bestaat wederom uit twee opdrachten: zoek de rekening met het hoogste saldo en kijk daarna van wie deze rekening is. Het antwoord op de eerste vraag wordt gevonden met de query:

SELECT MAX(saldo)
FROM rekening;


Omdat de tabel rekening geen namen van de rekeninghouders bevat, moeten we eerst de rekeninghdr_id zoeken van de rekeninghouder die het hoogste saldo op zijn/haar rekening heeft staan:

SELECT rekeninghdr_id
FROM rekening
WHERE saldo = (SELECT MAX(saldo)
                        FROM rekening);


Tenslotte moet de juiste naam of de juiste namen gezocht worden bij de rekeninghdr_id:

SELECT rekeninghouder
FROM rekeninghouder
WHERE rekeninghdr_id IN
           (SELECT rekeninghdr_id
            FROM rekening
            WHERE saldo = (SELECT MAX(saldo)
                           FROM rekening));


Je ziet dat in plaats van de =-operator de IN-operator wordt gebruikt. Het is mogelijk dat er meer rekeninghouders zijn die het hoogste saldo op hun rekening hebben staan.

Het resultaat van de subquery bestaat in dat geval uit een verzameling van namen. Je kunt de =operator dan niet gebruiken, omdat die eist dat wat er links en rechts van staat precies gelijk is. We moeten hier daarom gebruik maken van de IN-operator.