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
| Functie | Resultaat |
|---|
| 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