SQL Basis

Hoofdstuk 7 - Berekende velden

  • Berekende velden zijn waarden die niet direct in de database staan
  • Berekende velden worden gemaakt door gegevens die wel in de database staan 'samen te voegen' of te 'berekenen'
  • Het samenvoegen van velden heet 'Concatenating'
  • Voorbeelden van samengevoegde velden: straat + huisnummer, postcode + woonplaats
SELECT <kolom1 en kolom2>
FROM   <tabel>
  • Gegevens kunnen ook wiskundig berekend worden
  • Voorbeelden van wiskundig berekende velden: aantal dienstjaren, leeftijd, totalen, gemiddelden
SELECT <kolom1 gedeeld door kolom2>
FROM   <tabel>
  • Ondanks dat deze velden niet kant-en-klaar in de database staan heeft het de voorkeur om ze te berekenen met SQL i.p.v. dat de berekening wordt uitgevoerd door de 'client-applicatie'
DBMS Syntax
SQL Server, MS Access +
DB2, Oracle, PostgreSQL, SQLite ||
MySQL, MariaDB function: concat

Concat is een functie. Meer over functies in het volgende hoofdstuk.



SELECT <tekst1> + <tekst2>

SELECT <tekst1> || <tekst2>

SELECT CONCAT(tekst1, tekst2)

Selecteer uit Vendors vend_name en vend_country en voeg ze samen. Zet haakjes om vend_country en sorteer de uitkomst

-- MySQL - MariaDB
SELECT   CONCAT(vend_name,' (',vend_country,')')
FROM     Vendors
ORDER BY vend_name;
CONCAT(vend_name, ' (',vend_country,')')
Bear Emporium (USA)
Bears R Us (USA)
Doll House Inc. (USA)
Fun and Games (England)
Furball Inc. (USA)
Jouets et ours (France)


  • Als je DBMS veel spaties plaatst in een veld en je wilt ze weg hebben bij het samenvoegen gebruik dan de functie TRIM():
    • RTRIM() om alle spaties rechts in het veld te verwijderen
    • LTRIM() om alle spaties links in het veld te verwijderen
    • TRIM() om alle spaties zowel rechts als links te verwijderen
-- Oracle - DB2 - PostgreSQL - SQLite	
SELECT   TRIM(vend_name) || ' (' || TRIM(vend_country) || ')'
FROM     Vendors
ORDER BY vend_name;
-- SQL Server	
SELECT   TRIM(vend_name) + ' (' + TRIM(vend_country) + ')'
FROM     Vendors
ORDER BY vend_name;
  • Gebruik een Alias om een berekend veld (nieuwe kolom) een naam te geven
  • Een Alias kan gebruikt worden door client-applicaties
  • Een Alias wordt gemaakt door het AS keyword aan het SELECT statement toe te voegen
SELECT <waarde1> + <waarde2> AS <NieuweKolomNaam> 	
FROM   <tabel>
  • In een Alias gebruik je nooit spaties
  • Een Alias wordt vaak gebruikt om spaties uit bestaande kolomnamen te verwijderen

Selecteer uit Vendors vend_name en vend_country en voeg ze samen. Geef de nieuwe kolom de naam 'vend_title'. Zet haakjes om vend_country en sorteer de uitkomst

-- Oracle
SELECT   TRIM(vend_name) || ' (' || TRIM(vend_country) || ')' AS VendTitle
FROM     Vendors
ORDER BY vend_name;	
-- MySQL
SELECT   CONCAT(vend_name, ' (', vend_country, ')') AS VendTitle
FROM     Vendors
ORDER BY vend_name;
-- SQL Server
SELECT   TRIM(vend_name) + ' (' + TRIM(vend_country) + ')' AS VendTitle
FROM     Vendors
ORDER BY vend_name;	
VendTitle
Bear Emporium (USA)
Bears R Us (USA)
Doll House Inc. (USA)
Fun and Games (England)
Furball Inc. (USA)
Jouets et ours (France)
  • De onderstaande operatoren kunnen gebruikt worden in SQL

Operator Beschrijving
+ Optellen
- Aftrekken
/ Delen
* Vermenigvuldigen

( ) Haakjes kunnen gebruikt worden om de bewerkingsvolgorde aan te geven


-- MySQl / SQL Server	
SELECT 8*2+4-10/2;
-- Oracle	
SELECT 8*2+4-10/2
FROM DUAL;

SELECT <kolom1> * <kolom2> AS <kolom3>
FROM   <tabel>;

Selecteer uit OrderItems het product id, aantal en prijs. Maak een extra kolom waar aantal en prijs vermenigvuldigd worden en noem de kolom 'TotaalPrijs'. Sorteer op de nieuwe kolom TotaalPrijs.

-- Oracle / MySQL / SQL Server	
SELECT   prod_id,
         quantity,
         item_price,
         quantity * item_price AS TotaalPrijs
FROM     OrderItems
ORDER BY TotaalPrijs;
prod_idquantityitem_priceTotaalPrijs
RGAN0154.9924.95
BNBG01103.4934.9
BNBG02103.4934.9
BNBG03103.4934.9
BR03511.9959.95
BR02108.9989.9
BR01205.99119.8
BR031011.99119.9
RGAN01504.49224.5
BNBG011002.99299
BNBG021002.99299
BNBG031002.99299
BR011005.49549
BR035011.49574.5
BNBG012502.49622.5
BNBG022502.49622.5
BNBG032502.49622.5
BR0310010.991099
  1. Selecteer de productnamen en hun prijs en voeg velden toe voor BTW (21%) en de prijs incl. BTW. Sorteer op productnaam (9)

TIP

  1. Selecteer uit Producten de productnaam en prijs
  2. Verander de kolomnaam van prijs in 'PrijsExcl.'
  3. Voeg een kolom toe door productprijs te vermenigvuldigen met 0.21 en noem deze kolom 'BTW'
  4. Voeg een kolom toe door productprijs te vermenigvuldigen met 1.21 en noem deze kolom 'PrijsIncl.'


  1. Selecteer de klantnaam en voeg een kolom toe waarbij de afkorting van de staat samengevoegd wordt bij de postcode. Zorg dat er een spatie staat tussen de twee samengevoegde kolommen. Geef de nieuwe kolom de naam 'StateZip'. Sorteer op klantnaam. (5)


  1. Selecteer de leveranciersnamen en voeg een kolom toe met stad en land. Geef de nieuwe kolom de naam 'locatie' en sorteer op de nieuwe kolom. (6)


  1. Selecteer alle ordernummers, hun aantal en prijs. Voeg een kolom toe met 'aantal x prijs' en noem deze totaal. Laat alleen de rijen zien die een hoger totaal hebben dan $ 224.50 (9)


  1. Selecteer het product id en prijs. Voeg een nieuwe kolom toe met 10% korting op de originele productprijs en noem deze 'ActiePrijs'. Sorteer op de nieuwe kolom. (9)