Subquery

  • Een subquery is een query in een query
  • Subquery’s maken het mogelijk om tijdens het uitvoeren van de hoofdquery een extra query uit te voeren
    • Ook wel inner- en outer query genoemd
  • Een subquery is een gewone query met alle clausules
  • Een subquery kan echter resultaten niet manipuleren
    • de clausules van de hoofdquery zullen gebruikt worden
  • Een subquery staat rechts van de operator in de where clausule
  • De resultante van de subquery moet compatibel zijn met de expressie links van de subquery

Subquery’s en operatoren

  • Als uit een subquery meerdere resultaten kunnen voortvloeien dan moet de operator dat ondersteunen
    • Gebruik dan dus een in operator
    • Net zoals bij gewone query’s

Nesting

  • Subquery’s mogen zelf ook weer subquery’s bevatten die ook weer subquery’s mogen bevatten, enz.
  • Dit noemen we nesting

Subquery’s met groepfuncties

  • Groepsfuncties:
    • Functies die over een hele groep een uitspraak doen
  • Groepsfuncties kun je opnemen in de select clausule maar niet in de where clausule
    • Als je een vergelijking wilt maken in de where clausule met een groepsfunctie dan moet je die opnemen in een subquery
Naam
sum()sommering van waardes
count()tellen van aantal resultaatrijen
min()minimale waarde in groep
max()maximale waarde in groep
avg()gemiddelde waarde van een groep getallen
  • Groepsfuncties als sum, count, max en min retourneren altijd slechts 1 waarde
    • Wanneer je deze functies gebruikt kun je dus de = operator gebruiken
  • De groepsfuncties avg en sum zijn alleen van toepassing op getallen
    • count, max en min kun je ook toepassen op datums en teksten
FunctieResultaat
count( )*Telt het aantal resultaatrijen
count(geb_datum)Telt het aantal geboortedatums die niet null zijn
count(distinct woonplaats)Telt het aantal verschillende woonplaatsen

Gecorreleerde subquery’s

  • gecorreleerde subquery:
    • Een subquery met een relatie aan de hoofdquery
  • In de vraagstelling is meestal een verwijzing naar een groep waar een rij deel van uitmaakt

Groepen met groepsfuncties

  • Group by:
    • De Group by clausule maakt het mogelijk om rijen in te delen in groepen
select count(*) 
from studenten 
group by klas_id

Having by clausule

  • Een having clausule is altijd in combinatie met een group by clausule
  • De having clausule kan filteren op eigenschappen van groepen
  • De having clausule kan in tegenstelling tot de where clausule wel groepsfuncties bevatten!
select biotype 
, count(*) 
from gene 
group by biotype 
having count(*) > 200 
order by 2 desc