Subqueries II

In het vorige voorbeeld waarbij de oudste transactiedatum werd gevraagd, komen de gegevens uit één tabel. Dit is natuurlijk niet altijd het geval.
Wanneer we willen weten welke rekeninghouders het hoogste saldo op hun rekening hebben staan, komen de gegevens uit twee tabellen: rekeninghouder en rekening.

De vraag die beantwoord moet worden, bestaat uit drie opdrachten:

  1. Zoek het hoogste saldo op wat in de tabel rekening voorkomt.
  2. Zoek op wat de id's zijn van de rekeninghouders die dit bedrag op hun rekening hebben staan (kunnen er meerdere zijn).
  3. Zoek de namen op die horen bij de id's van de rekeninghouders.

 

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 id's van de rekeninghouders zoeken die het hoogste saldo op zijn/haar rekening hebben staan:

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



Tenslotte moeten de juiste namen gezocht worden bij de rekeninghdr_id's:

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 operator IN is gebruikt. Het is namelijk mogelijk dat er meer rekeninghouders zijn die het hoogste saldo op hun rekening hebben staan.

 

(Bovenstaande vraag had ook kunnen worden beantwoord door het samenvoegen van de tabellen rekeninghouder en rekening en dat gecombineerd met één subquery.)