Subqueries Flashcards

1
Q

Wat zijn Subqueries?

A

Subqueries (ook wel geneste queries genoemd) zijn SQL-query’s die binnen een andere query zijn ingebed. Ze worden gebruikt om resultaten te verkrijgen die vervolgens in de hoofdquery worden gebruikt. Een subquery kan worden gebruikt in SELECT, FROM, WHERE, en HAVING clausules.

SELECT naam
FROM medewerkers
WHERE afdeling_id IN (SELECT id FROM afdelingen WHERE locatie = ‘Amsterdam’);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Subquery in WHERE

A

Een subquery in een WHERE clausule filtert de resultaten van de hoofdquery op basis van de resultaten van de subquery. Dit werkt vaak met vergelijkingsoperatoren zoals IN, NOT IN, =, >, <, etc.

SELECT product_naam, prijs
FROM producten
WHERE prijs > (SELECT AVG(prijs) FROM producten);

Dit toont alle producten die duurder zijn dan de gemiddelde prijs van alle producten.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Subquery in FROM

A

Een subquery in een FROM clausule creëert een tijdelijke tabel die in de hoofdquery wordt gebruikt. Deze tijdelijke tabel moet altijd een alias krijgen.

SELECT t.afdeling, t.gem_salaris
FROM (
SELECT afdeling, AVG(salaris) as gem_salaris
FROM medewerkers
GROUP BY afdeling
) AS t
WHERE t.gem_salaris > 3000;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Subquery in SELECT

A

Een subquery in een SELECT clausule berekent een waarde voor elke rij van het resultaat. Deze subquery moet een scalar subquery zijn (slechts één waarde retourneren).

SELECT
naam,
salaris,
(SELECT AVG(salaris) FROM medewerkers) AS gemiddeld_salaris
FROM medewerkers;

Dit toont elke medewerker met hun salaris en het gemiddelde salaris van alle medewerkers.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Wat zijn gecorreleerde subqueries?

A

Een gecorreleerde subquery is een subquery die verwijst naar kolommen van de tabel in de hoofdquery. De subquery wordt voor elke rij van de hoofdquery opnieuw uitgevoerd.

SELECT m.naam, m.salaris
FROM medewerkers m
WHERE m.salaris > (
SELECT AVG(salaris)
FROM medewerkers
WHERE afdeling = m.afdeling
);

Dit toont medewerkers die meer verdienen dan het gemiddelde salaris in hun eigen afdeling.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Subqueries met EXISTS operator

A

De EXISTS operator controleert of een subquery resultaten retourneert. Het retourneert TRUE als de subquery ten minste één rij retourneert en FALSE als er geen rijen zijn.

SELECT naam
FROM klanten k
WHERE EXISTS (
SELECT 1
FROM bestellingen b
WHERE b.klant_id = k.id AND b.datum > ‘2023-01-01’
);

Dit toont klanten die na 1 januari 2023 een bestelling hebben geplaatst.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Subqueries met ANY/SOME

A

De ANY (of SOME, ze zijn identiek) operator vergelijkt een waarde met elke waarde in een lijst die door een subquery wordt geretourneerd. Het retourneert TRUE als aan ten minste één vergelijking wordt voldaan.

SELECT product_naam
FROM producten
WHERE prijs > ANY (
SELECT prijs
FROM producten
WHERE categorie = ‘Elektronica’
);

Dit toont producten die duurder zijn dan ten minste één product in de categorie ‘Elektronica’.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Subqueries met ALL operator

A

De ALL operator vergelijkt een waarde met alle waarden in een lijst die door een subquery wordt geretourneerd. Het retourneert TRUE als aan alle vergelijkingen wordt voldaan.

SELECT product_naam
FROM producten
WHERE prijs > ALL (
SELECT prijs
FROM producten
WHERE categorie = ‘Boeken’
);

Dit toont producten die duurder zijn dan alle producten in de categorie ‘Boeken’.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Wat is de uitvoeringsvolgorde van SQL subqueries?

A

Bij niet-gecorreleerde subqueries wordt de binnenste (geneste) query altijd eerst uitgevoerd, en de resultaten daarvan worden gebruikt door de buitenste query. De database-engine werkt van binnen naar buiten bij het evalueren van geneste subqueries.

SELECT naam, salaris
FROM medewerkers
WHERE afdeling_id IN (
SELECT id – Deze query wordt eerst uitgevoerd
FROM afdelingen
WHERE locatie = ‘Amsterdam’
);

In dit voorbeeld wordt eerst de subquery uitgevoerd om alle afdelings-ID’s in Amsterdam te vinden, daarna gebruikt de hoofdquery deze lijst om medewerkers te filteren.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly