Ga naar inhoud

Header

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
Columns: 3
Rows: 3




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
Columns: 3
Rows: 3
  • We benoemen het getal 2 nu 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:

WITH <variables> AS (
  SELECT
    <value> AS <variable_name>
)

Vervolgens haal je vanuit FROM de variabelen op:

FROM
  <table_name>,
  <variables>

En kun je de variabele in je query gebruiken, bijvoorbeeld:

WHERE
  <column_name> = <variables>.<variable_name>




2.2. Andere dialecten

In andere dialecten, zoals MS SQL Server, kun je variabelen meer expliciet aanmaken.

Dit doe je hier als volgt:

DECLARE @<variable_name> AS <data_type> = <value>




Samenvatting

  • Met een variabele kun je een waarde herhaaldelijk hergebruiken.

  • Er zijn verschillen voor de verschillende SQL dialecten.