-
Gebruik een subquery in de SELECT en selecteer de klant id's en het totaalbedrag wat ze besteld hebben (4) (vraag 50)
- Een derived table is een subquery in de FROM-clausule die zich gedraagt als een tijdelijke tabel binnen hetzelfde SELECT-statement
- Een derived table kan meerdere rijen en meerdere kolommen opleveren
SELECT *
FROM (
SELECT <kolom1>,
SUM(<kolom2>) AS MooieNaam
FROM <tabel>
GROUP BY <kolom1>
) AS X
WHERE X.MooieNaam > 1000
ORDER BY X.MooieNaam DESC;
- De server voert de subquery eerst uit, bewaart het resultaat en behandelt het daarna alsof het een gewone tabel is
- Een derived table moet altijd een alias hebben. Zonder alias kan de outer query de kolommen niet aanspreken
- De outer query kan volledig vrij selecteren, joinen en filteren op de kolommen van de derived table
- Een derived table is per definitie read-only in de outer query
- Derived tables kunnen handig zijn vanwege de leesbaarheid, modulariteit en de tussenresultaten
- Aliassen kun je hergebruiken in een outer query
- Een scalar subquery is een subquery die precies 1 waarde teruggeeft
- De waarde mag afkomstig zijn uit een aggregaatfunctie (vaak),
of uit een SELECT die 1 rij en 1 kolom oplevert (zeldzaam)
SELECT <kolom1>,
(
SELECT COUNT(*)
FROM <tabel2>
WHERE <tabel1>.<kolom1> = <tabel2>.<kolom1>
) AS Aantal
FROM <tabel1>;
| Onderdeel |
Wat is het? |
Levert op |
| Aggregaatfunctie |
Functie die meerdere rijen samenvat |
Eén waarde |
| Scalar subquery |
Subquery die één enkele waarde moet teruggeven |
Eén waarde |
- Het onderstaande voorbeeld bevat een derived table EN een scalar subquery
SELECT *
FROM (
SELECT <tabel1>.<kolom1>,
<tabel1>.<kolom2>,
(
SELECT COUNT(*)
FROM <tabel2>
WHERE <tabel1>.<kolom1> = <tabel2>.<kolom1>
) AS <NieuweKolomNaam>
FROM <tabel1>
) <X>
WHERE <X>.<NieuweKolomNaam> > 0;
- Gebruik de lay-out van de bovenstaande query om de onderstaande vraag te beantwoorden
-
Selecteer alle cust_id's en cust_state's en een extra kolom met het aantal leveranciers die in dezelfde state zijn gevestigd als de klant. Toon alleen klanten met minstens één leverancier in die staat (2)