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.
- Introductie van de dataset
- Eerst kijken we naar een voorbeeld met een common table expression.
- Daarna herschrijven we het met een view.
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.
Oplossing met CTE
Eerst gaan we dit realiseren met een common table expression:
- Met de CTE berekenen we met
GROUP BY
enAVG()
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;
id | name | year | rank | avg_rank_by_year |
---|---|---|---|---|
10920 | Aliens | 1986 | 8.2 | 8.2 |
17173 | Animal House | 1978 | 7.5 | 7.5 |
18979 | Apollo 13 | 1995 | 7.5 | 7.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;
year | avg_rank_by_year |
---|---|
1989 | 6.949999999999999 |
1991 | 7.8 |
1977 | 8.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
id | name | year | rank | avg_rank_by_year |
---|---|---|---|---|
10920 | Aliens | 1986 | 8.2 | 8.2 |
17173 | Animal House | 1978 | 7.5 | 7.5 |
18979 | Apollo 13 | 1995 | 7.5 | 7.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
enAS
. 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:
- Waarom SQL leren een goed idee is
- Voorbeelden van wat je met SQL kunt
- Hoe leer ik SQL in 4 stappen
- PostgreSQL & PgAdmin installeren om op jouw computer met SQL te kunnen werken
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.
Rik is data scientist en marketeer bij Data Science Partners. Vanuit zijn achtergrond op de Technische Universiteit Eindhoven heeft hij veel affiniteit met data. Na zijn studie heeft hij als consultant altijd met data gewerkt en tevens ervaring opgedaan in het geven van trainingen.