sql view queries hergebruiken voorbeeld blog met tutorial uitleg

Introductie in CREATE VIEW

Als je een query wilt hergebruiken binnen meerdere queries, dan kun je met views werken. Binnen SQL gebruik je hier CREATE VIEW voor.

Een view lijkt op een common table expression (CTE). Met een CTE kun je binnen een query een andere query vanuit een naam gebruiken.

  • Een CTE is dus alleen binnen de query bruikbaar waar je het aanmaakt.
  • Een view is ook vanuit andere queries bruikbaar.

We gaan dit in deze tutorial stap voor stap bekijken vanuit een voorbeeld. Het is verstandig om ook ons blog over common table expressions te lezen om een volledig begrip te krijgen over dit onderwerp.

Opbouw van dit voorbeeld van een SQL view

We gaan met een vraagstuk aan de slag.

Hier gaan we uiteindelijk een view bij gebruiken.

We bouwen het stap voor stap op.


sql create view voorbeeld met movies tabel

Gebruikte dataset en wat we willen bereiken

Wil je op je eigen computer meedoen met deze tutorial? Volg dan deze stappen om SQL en PgAdmin te installeren en de IMDb-database in te laden.

  • In tabel movies hebben we details van een film. Bijvoorbeeld het jaar, en de score (rank).
  • We willen een overzicht van alle films. Met daaraan toegevoegd: de gemiddelde score van alle films uit het jaar waarop een film uitkwam.

Hiermee kunnen we zien of een film beter/slechter was dan de gemiddelde film uit dat jaar.


Leren werken met SQL voor data analayse? Na onze 2-daagse SQL cursus kun je volledig zelfstandig werken met SQL.

Oplossing met CTE

Eerst gaan we dit realiseren met een common table expression:

  • Met de CTE berekenen we met GROUP BY en AVG() de gemiddelde score per jaar.
  • Dit voegen we met een LEFT JOIN toe aan details van films.
WITH year_details AS (
    SELECT
      year,
      AVG(rank) AS avg_rank_by_year
    FROM
      movies
    GROUP BY
      year
  )
SELECT
  m.*,
  year_details.avg_rank_by_year
FROM
  movies AS m
  LEFT JOIN year_details ON m.year = year_details.year;
idnameyearrankavg_rank_by_year
10920Aliens19868.28.2
17173Animal House19787.57.5
18979Apollo 1319957.57.9
...............
Columns: 5
Rows: 36


Een view aanmaken met SQL

Nu gaan we een SQL view maken maken.

Een view is een query die je opslaat en elders kunt gebruiken. Dit kan vanuit al je andere queries. In tegenstelling tot een CTE: die is alleen bruikbaar binnen de query waar je het aanmaakt.

Uit een view kun je informatie opvragen, net als uit een tabel. Een view slaat zelf geen data op zoals een tabel dat doet. Het bewaart alleen de query.

We maken nu een view aan. Later leggen we de syntax uit.

CREATE VIEW year_details AS
SELECT
  year,
  AVG(rank) AS avg_rank_by_year
FROM
  movies
GROUP BY
  year;

Als we deze query uitvoeren wordt de view met naam year_details aangemaakt.

Query execution started 
Query execution finished

We kunnen nu data uit de view opvragen:

SELECT
  *
FROM
  year_details;
yearavg_rank_by_year
19896.949999999999999
19917.8
19778.8
......
Columns: 2
Rows: 20

Je ziet dat hetzelfde werkt als bij data opvragen uit een tabel.


We passen de view nu toe om ons vraagstuk op te lossen:

SELECT
  m.*,
  year_details.avg_rank_by_year
FROM
  movies AS m
  LEFT JOIN year_details ON m.year = year_details.year
idnameyearrankavg_rank_by_year
10920Aliens19868.28.2
17173Animal House19787.57.5
18979Apollo 1319957.57.9
...............
Columns: 5
Rows: 36

Je ziet dat dit hetzelfde resultaat geeft als de oplossing met CTE. Maar dat dit nu een stuk compacter en beter leesbaar is.

SQL View syntax

We hebben een voorbeeld van een view bekeken.

Daarin kun je de volgende syntax herkennen:

CREATE VIEW <view_name> AS 
  <view_query>

Je doet hiermee het volgende:

  • Je maakt een view aan met CREATE en AS. Daarbij geef je de view een naam. Met deze naam kun je de query van de view elders oproepen.
  • Je geeft een query op die onder deze naam uitgevoerd moet worden.


Wanneer gebruik je een View of een CTE?

Onderstaande punten geven inzicht wanneer je een view of CTE gebruikt:

  • Ad-hoc queries die je maar eenmalig uitvoert: gebruik een CTE.
  • Herhaaldelijk hergebruikte queries: gebruik een view.
  • Gebruikers beperkte toegang geven tot data: view. Zo kun je bijvoorbeeld een deel van een tabel afschermen voor bepaalde gebruikers.


Samenvatting

  • Een view geeft een query een naam.
  • Met de naam is de query vervolgens elders te gebruiken. In alle andere queries.
  • Voorbeeld:
CREATE VIEW <view_name> AS 
<view_query>
  • Een view maakt je code beter leesbaar, en kan gebruikt worden om toegang af te schermen.

Bezig om SQL onder de knie te krijgen?

Wellicht ben je bezig om SQL beter te leren. Wij schreven de volgende handige artikelen om je op weg te helpen:

Wil je nog veel meer leren over SQL? Bekijk dan onze SQL cursus voor data analyse of download onderstaande opleidingsbrochure. In onze SQL cursus wisselen theorie en praktijkoefening elkaar steeds af. Nadat je deze training hebt gevolgd kun je zelfstandig met SQL werken. Je kunt ook altijd even contact opnemen via info@datasciencepartners.nl of 020 - 24 43 146 als je een vraag hebt.

by: