SQL Basis

Hoofdstuk 8 - Functies

  • Functies zijn voorgedefinieerde routines die gegevens aanpassen door conversie of berekening
  • Functies geven een bewerking op de weergave; niet op de data zelf
  • Er zijn honderden functies; je gebruikt doorgaans enkele tientallen
  • Functies zijn sterk afhankelijk van het DBMS. Er zijn maar enkele functies die overal ingezet kunnen worden

SELECT	FUNCTIENAAM(kolom1)
FROM	<tabel>;
  • Achter de functienaam staan tussen haakjes altijd de parameters waarop de functie zijn bewerking uitvoert
  • Het resultaat van een functie is altijd van een bepaald datatype
  • Sommige functies hebben geen parameters (Er wordt bijvoorbeeld alleen iets opgehaald)
  • Haakjes achter de functienaam zijn verplicht. (Uitzondering bij Oracle systeemfuncties zoals CURRENT_DATE)
  • Er zijn verschillende soorten/groepen functies. De meeste DBMS-en ondersteunen de onderstaande groepen:

Type Functie Omschrijving
Tekst functies Voeren een bewerking uit op tekst (strings). Zoals het weghalen van spaties in een veld of alle karakters omzetten naar hoofdletters
Numerieke functies Voeren een bewerking uit op getallen (integers). Zoals getallen met een komma omzetten in gehele getallen of een vierkantswortel berekenen
Datum en tijd functies Voeren een bewerking uit op datum en tijdnotaties. Zoals het verschil tussen 2 tijdstippen berekenen of 7 dagen toevoegen aan de huidige datum
Geavanceerde functies Uiteenlopende functionaliteiten. Zoals velden converteren naar een ander datatype of de huidige datum opvragen bij het DBMS
Aggregaat functies Functies die over meerdere velden worden uitgevoerd. Zoals het gemiddelde van een kolom of een optelling van een kolom (Zie hoofdstuk 9)

  • Enkele algemeen gebruikte tekst functies

Functie Omschrijving
LEN(veld) of LENGTH(veld) Geeft de lengte van een veld
LOWER(veld) of LCASE(veld) Converteert de string naar kleine letters
UPPER(veld) of UCASE(veld) Converteert de string naar hoofdletters
TRIM(veld) Haalt spaties om een waarde in een veld weg
SUBSTR(veld, 3, 5) of SUBSTRING(veld, 3, 5) Pakt een deel van de waarde in een veld (startpositie en de lengte)
SOUNDEX(veld)
W3S Uitleg
Fonetische conversie van een tekst (via algoritme) naar een alfanummeriek patroon. Het alfanummeriek patroon geeft de fonetische eigenschapen van het woord weer. (niet ondersteund door PostgreSQL)

Selecteer uit Customers de klantnaam en klant-contactnaam. Geef alle namen die klinken als "Michael Green."

-- Oracle / MySQL / SQL Server
SELECT cust_name, cust_contact
FROM   Customers
WHERE  SOUNDEX(cust_contact) = SOUNDEX('Michael Green');
cust_namecust_contact
Kids PlaceMichelle Green

Selecteer uit Vendors de leveranciersnamen en geef deze in hoofdletters weer.

-- Oracle / MySQL / SQL Server
SELECT   UPPER(vend_name) AS Leveranciers
FROM     Vendors
ORDER BY vend_name;
Leveranciers
BEAR EMPORIUM
BEARS R US
DOLL HOUSE INC.
FUN AND GAMES
FURBALL INC.
JOUETS ET OURS
  • Enkele algemeen gebruikte numerieke functies

Functie Omschrijving
ROUND(veld, 2) Rond een getal af op 2 decimalen
CEILING(veld) Rond een getal naar boven af
FLOOR(veld) Rond een getal naar beneden af
MOD(veld, 3) Geef de restwaarde van een deling door 3

Selecteer uit OrderItems de item_prijs maal hoeveelheid, Geef de nieuwe kolom de naam 'Totaalprijs' en rond af naar beneden. Sorteer aflopend op totaalprijs.

-- Oracle / MySQL / SQL Server
SELECT   FLOOR(item_price * quantity) AS Totaalprijs
FROM     OrderItems
ORDER BY Totaalprijs DESC;
Totaalprijs
1099
622
622
622
574
549
299
299
299
224
119
119
89
59
34
34
34
24
  • Datum en tijd waarde worden in een eigen formaat opgeslagen in de database
  • Om met datums te werken gebruik je vaak een functie
  • Datum en tijd functies behoren tot de belangrijkste functies binnen SQL

Functie Oracle MYSQL SQL Server PostgreSQL SQLite
Geeft de huidige datum CURRENT_DATE CURRENT_DATE( ) GETDATE( ) CURRENT_DATE( ) DATE( )
Dagen toevoegen aan datum DATEADD( ) ADDDATE( ) DATEADD( ) Geen functie maar operators DATE( )
Haal een element uit de datum EXTRACT( ) EXTRACT( ) DATEPART( ) EXTRACT( ) STRFTIME( ) / SUBSTR( )
Hoeveel dagen tussen 2 data DATEDIFF( ) DATEDIFF( ) DATEDIFF( ) Geen functie maar operators JULIANDAY( )

Selecteer alle Orders gemaakt in de maand MEI

-- Oracle / MySQL / PostgreSQL
SELECT *
FROM   Orders
WHERE  EXTRACT(month FROM order_date) = 5;
-- MySQL / SQL Server
SELECT *
FROM   Orders
WHERE  MONTH(order_date) = 5;	
-- SQL Server
SELECT *
FROM   Orders
WHERE  DATEPART(mm, order_date) = 5;	
-- SQLite
SELECT * 
FROM   Orders
WHERE  SUBSTR(order_date, 6,2) = '05';	
order_numorder_datecust_id
200052012-05-01 00:00:001000000001
  • Geavanceerde functies kunnen onderverdeeld worden in verschillende categorieën.
  • O.a. Conversie-functies, NULL gerelateerde functies, Systeem-functies

Functie Omschrijving
CAST(veld AS datatype) Converteert een waarde naar een ander datatype
IFNULL(veld) Veranderd een NULL-waarde in het resultaat naar een andere waarden
VERSION( ) Geeft het versienummer van de DBMS server

Selecteer de productnaam en de productprijs inclusief 21% BTW en rond af naar twee decimalen

-- Oracle / SQL Server	
SELECT   prod_name,
         CAST(prod_price * 1.21 AS DECIMAL(8,2)) AS PrijsIncl
FROM     Products
ORDER BY PrijsIncl;
-- MySQL / Oracle / Azure SQL Server / PostgreSQL
SELECT   prod_name,
         ROUND(prod_price * 1.21,2) AS PrijsIncl
FROM     Products
ORDER BY PrijsIncl;	
prod_namePrijsIncl
Fish bean bag toy4.22
Bird bean bag toy4.22
Rabbit bean bag toy4.22
Raggedy Ann6.04
8 inch teddy bear7.25
12 inch teddy bear10.88
King doll11.48
Queen doll11.48
18 inch teddy bear14.51



Selecteer alle emailadressen van de klanten en verander de NULL-waarden in 'Onbekend'

-- Oracle 
SELECT	 NVL(cust_email,'Onbekend') EmailAdressen
FROM     Customers;
-- MySQL 
SELECT	 IFNULL(cust_email,'Onbekend') AS EmailAdressen
FROM     Customers;
-- SQL Server 
SELECT	 ISNULL(cust_email,'Onbekend') AS EmailAdressen
FROM     Customers;
-- Oracle / MySQL / SQL Server / PostgreSQL 
SELECT	 COALESCE(cust_email,'Onbekend') AS EmailAdressen 
FROM     Customers;
EmailAdressen
sales@villagetoys.com
Onbekend
jjones@fun4all.com
dstephens@fun4all.com
Onbekend



Selecteer de huidige datum

-- Oracle
SELECT   SYSDATE HuidigeDatum
FROM     dual;	
-- MySQL
SELECT CURDATE() AS HuidigeDatum;
-- SQL Server
SELECT CAST(GETDATE() AS Date) AS HuidigeDatum;	
-- PostgreSQL
SELECT CURRENT_DATE AS HuidigeDatum;	
HuidigeDatum
2022-08-26
  1. Selecteer de klantnaam en voeg een kolom toe met de lengte van de naam (5)


  1. Selecteer alle orders uit de maand januari 2012 (2)


  1. Selecteer uit Products de productnaam en prijs. Rond de prijs naar beneden af (9)


  1. Selecteer uit Products het prod_id, prod_name en prod_price. Voeg twee kolommen toe met de BTW en de prijs inclusief BTW. Geef de laatste 2 kolommen een netjes formaat met 2 decimalen (9)


  1. Selecteer de naam van de huidige database (1)