
Variabelen
Introductie
Het komt voor dat je in een query herhaaldelijk dezelfde waarde hergebruikt.
In dat geval kan het goed zijn om deze waarde op 1 plaats te benoemen.
Hiervoor kun je gebruik maken van variabelen.
We gaan hier vanuit een voorbeeld naar kijken.
1. Voorbeeld gebruik variabele
We gaan met een voorbeeld werken.
In dit voorbeeld schrijven we een query die het volgende doet:
- Ophalen van details van acteurs.
- Die acteurs, waarvan de eerste letters van de voornaam overeen komen met de meest voorkomende eerste letters van namen van filmrollen.
1.1. Query zonder variabele
Hiervoor kunnen we de volgende query gebruiken:
SELECT
id,
first_name,
last_name
FROM
actors
WHERE
LEFT(first_name, 2) = (
SELECT
most_used_character.left
FROM
(
SELECT
LEFT(role, 2),
COUNT(role)
FROM
roles
GROUP BY
LEFT(role, 2)
ORDER BY
COUNT(role) DESC
LIMIT
1
) as most_used_character
);
| id | first_name | last_name |
|---|---|---|
| 241542 | Hiroshi (I) | Kawashima |
| 319868 | Hikaru | Midorikawa |
| 672860 | Hiroko | Kawasaki |
1.2. Probleemstelling
Je ziet in de query dat we op drie plaatsen het aantal letters (2), benoemen.
Als we een aanpassing willen doen aan het aantal letters, dan moet dit op drie plaatsen gebeuren.
Dat is niet handig.
Met gebruik van een variabele hoeven we dit maar op één plaats te doen.
1.3. Oplossing met variabele
In onderstaande query herschrijven we de code.
Hierbij maken we gebruik van een variabele.
WITH variables AS (
SELECT
2 AS count_characters
)
SELECT
id,
first_name,
last_name
FROM
actors,
variables
WHERE
LEFT(first_name, variables.count_characters) = (
SELECT
most_used_character.left
FROM
(
SELECT
LEFT(role, variables.count_characters),
COUNT(role)
FROM
roles
GROUP BY
LEFT(role, variables.count_characters)
ORDER BY
COUNT(role) DESC
LIMIT
1
) as most_used_character
);
| id | first_name | last_name |
|---|---|---|
| 241542 | Hiroshi (I) | Kawashima |
| 319868 | Hikaru | Midorikawa |
| 672860 | Hiroko | Kawasaki |
- We benoemen het getal
2nu maar op één plaats.
2. Syntax variabelen
Binnen verschillende SQL dialecten zijn verschillen in het gebruik van variabelen.
We kijken naar enkele verschillen.
2.1. PostgreSQL
In deze training gebruiken we dialect PostgreSQL.
Daar kun je niet direct vanuit een query een variabele maken en gebruiken.
Met onderstaand voorbeeld hebben we dit alsnog opgelost:
Vervolgens haal je vanuit FROM de variabelen op:
En kun je de variabele in je query gebruiken, bijvoorbeeld:
2.2. Andere dialecten
In andere dialecten, zoals MS SQL Server, kun je variabelen meer expliciet aanmaken.
Dit doe je hier als volgt:
Samenvatting
-
Met een variabele kun je een waarde herhaaldelijk hergebruiken.
-
Er zijn verschillen voor de verschillende SQL dialecten.