Projecties
Een select query gebruikt een tabel om een nieuwe tabel te maken. Die nieuwe tabel wordt ook wel eens een projectie genoemd. De data van de eerste tabel wordt geprojecteerd op een nieuwe tabel. Afhankelijk van hoe de projectie wordt gedaan, toont de nieuwe tabel andere data.
Kolommen in Select Queries
Een kolom projectie is de meest eenvoudige soort projectie. Hierbij worden de gewenste kolommen opgesomd in de query.
select componist, titel, niveau
from Stuk;
Resultaat:
COMPONIST | TITEL | NIVEAU |
---|---|---|
1 | Blue bird | <null> |
2 | Blue bird | B |
4 | Air pour | charmer B |
5 | Lina | B |
8 | Berceuse | <null> |
2 | Cradle song | B |
8 | Non piu andrai | <null> |
9 | I’ll never go | A |
10 | Swinging Lina | B |
5 | Little Lina | A |
10 | Blue sky | A |
Een projectie op alle kolommen kan ook. De afkorting hiervoor is een asterisk (*
).
select *
from Stuk;
Constanten in Select Queries
Een projectie moet niet alleen kolomnamen bevatten. Dit mag ook een constante zijn, bijvoorbeeld een constant stukje tekst, een constant getal of een constante datum:
select componist, titel, 'heeft als niveau', niveau
from Stuk;
Resultaat:
COMPONIST | TITEL | heeft als niveau | NIVEAU |
---|---|---|---|
1 | Blue bird | heeft als niveau | <null> |
2 | Blue bird | heeft als niveau | B |
4 | Air pour charmer | heeft als niveau | B |
5 | Lina | heeft als niveau | B |
8 | Berceuse | heeft als niveau | <null> |
2 | Cradle song | heeft als niveau | B |
8 | Non piu andrai | heeft als niveau | <null> |
9 | I’ll never go | heeft als niveau | A |
10 | Swinging Lina | heeft als niveau | B |
5 | Little Lina | heeft als niveau | A |
10 | Blue sky | heeft als niveau | A |
Kolomnamen wijzigen in Select-Queries
Om de naam van een kolom in een projectie te wijzigen kan een kolom-alias gebruikt worden.
select nr as stuk,
titel,
speelduur * 1.1 as effectieve_speelduur
from Stuk;
Hierboven krijgt de kolom nr de nieuwe naam stuk. De kolom met de expressie speelduur * 1.1 krijgt de nieuwe naam effectieve_speelduur. Hiervoor wordt het keyword as gebruikt.
Distinct
Eén van de basisregels van een tabel in een relationele databank is dat alle rijen uniek moeten zijn. In een projectie gebeurt het echter heel vaak dat rijen meerdere keren voorkomen.
Bijvoorbeeld:
select genre, niveau
from Stuk;
Resultaat:
GENRE | NIVEAU |
---|---|
jazz | <null> |
jazz | B |
klassiek | B |
klassiek | B |
klassiek | <null> |
klassiek | B |
klassiek | <null> |
pop | A |
jazz | B |
klassiek | A |
jazz | A |
In deze projectie staan 11 rijen, waarvan enkele meerdere keren voorkomen. Dit kan soms handig zijn, maar vaak ook niet. Moest de projectie een èchte relationele tabel zijn, dan zouden er maar 7 rijen staan.
Om de dubbele rijen weg te laten, moet er een speciaal keyword worden gebruikt in de select-query: distinct
.
select distinct genre, niveau
from Stuk;
Resultaat:
GENRE | NIVEAU |
---|---|
jazz | <null> |
jazz | A |
jazz | B |
klassiek | <null> |
klassiek | A |
klassiek | B |
pop | A |
Opgelet!
Distinct
werkt op de volledige projectie, en niet op één enkele kolom.