4.4.3 Functies Flashcards
Maak een lijst met achter elke medewerker het precieze uurloon,
het uurloon dat op twee decimalen is afgerond,
en het uurloon dat op twee decimalen is afgekapt.
Het uurloon wordt
berekend op basis van een kwartaal:
(maandsalaris * 3) / (38 * 13)
select (maandsal * 3) / (38 * 13) as “precieze uurloon”,
round((maandsal * 3) / (38 * 13), 2) as “uurloon afgerond”,
trunc((maandsal * 3) / (38 * 13), 2) as “uurloon afgekapt”
from medewerkers;
Maak een lijst waarin de verschillende waarden
van FUNCTIE elk op drie manieren wordt
weergegeven:
met alleen aan het begin een hoofdletter, –> initcap(tekst)
volledig in hoofdletters –> upper(tekst)
en volledig in kleine letters. –> lower(tekst)
col “Beginletter” format a25;
col “Hoofdletters” format a25;
col “Kleine letters” format a25;
select distinct initcap(functie) as “Beginletter”,
upper(functie) “Hoofdletters”,
lower(functie) “Kleine letters”
from medewerkers;
Geef van elke cursus de naam en de lengte
van de naam.
select length(omschrijving) as Lengte
from cursussen;
Doorzoek de namen van de medewerkers op de letter ‘e’
Wordt de letter ‘e’ gevonden dan drukt
men in het resultaat het positienummer.
Laat op drie manieren zoeken:
- zoek vanaf de eerste positie naar
de eerste letter ‘e’
– zoek vanaf de vierde positie naar
de eerste letter ‘e’
– zoek vanaf de eerste positie naar
de tweede letter ‘e
select naam, instr(naam, ‘E’),
instr(naam, ‘E’, 4),
instr(naam, ‘E’, 1, 2)
from medewerkers;
Maak een histogram met als maatstaf
de lengte van de namen van de medewerkers.
Zorg dat de kolom histogram 25 karakters breed is.
NAAM LENGTE HISTOGRAM
BRIERS 6 **
DE KONING 9 *****
col histogram format a25;
select naam, length(naam) as lengte,
rpad(‘+’, length(naam), ‘+’) as histogram
from medewerkers;
select naam, length(naam) as lengte,
lpad(‘+’, length(naam), ‘+’) as histogram
from medewerkers;
Maak een lijst met de namen van de medewerkers,
met hun namen zonder vooraan de letters
‘de’
en met hun namen zonder achteraan de letters ‘sen’
indien ze voorkomen.
ltrim(tekst, letters die je wil wegknippen)
rtrim(tekst, letters die je wil wegknippen)
select ltrim(naam, ‘DE’),
rtrim(naam, ‘SEN’)
from medewerkers;
Geef een lijst met de namen van de afdelingen,
de nummers en de nummers voorafgegaan
door de letters ‘AF’.
select naam,
anr,
concat(‘AF’, anr)
from afdelingen;
select naam,
anr,
‘AF’ || anr || ‘bla’ || ‘haha’ || locatie
from afdelingen;
Geef een lijst met de namen van alle cursussen
waarbij de letters ‘WC#’ vervangen worden
door ‘ZK-‘.
Zowel de hoofdletters als de kleine letters vervangen.
select translate(omschrijving, ‘WCwc#’, ‘ZKzk-‘)
as “Gekke naam”
from cursussen;
Sorteer de namen van de medewerkers
zonder rekening te houden met eventuele blanco’s.
select naam
from medewerkers
order by replace(naam, ‘ ‘ , ‘’);
select naam
from medewerkers
order by replace(naam, ‘ ‘);
Druk enkel de medewerkers af waarvan
de naam uit 2 delen bestaat.
Het eerste gedeelte wordt in kleine letters
en tussen haakjes na het tweede gedeelte
(in hoofdletters) van de naam afgedrukt.
Vb. KONING (de)
SELECT
substr(naam, instr(naam, ‘ ‘)) ||
‘ (‘ ||
lower(substr(naam, 1, instr(naam, ‘ ‘) - 1)) ||
‘)’ “Naam”
from medewerkers
where naam like ‘% %’;
SELECT
(UPPER(SUBSTR(naam, INSTR(naam, ‘ ‘))) || ‘ (‘ ||
LOWER(RTRIM(SUBSTR(naam, 1, INSTR(naam, ‘ ‘)), ‘ ‘)) || ‘)’) “Naam”
FROM medewerkers
WHERE (LENGTH(naam) - LENGTH(REPLACE(naam, ‘ ‘, ‘’))) = 1;
Bepaal voor elke medewerker wiens naam een ‘e’ bevat wat groter is:
zijn salaris*2, zijn MNR of het MNR van zijn chef?
Naast de naam en het grootste element wordt aangegeven welk element de grootste waarde heeft (chef, salaris of mnr). Gebruik hiervoor de DECODE()
select naam, greatest(maandsal2, mnr, nvl(chef, mnr)) “Grootste waarde”,
decode(greatest(maandsal2, mnr, nvl(chef, mnr)),
maandsal*2, ‘Salaris’,
mnr, ‘MNR’,
‘Chef’) “Type”
from medewerkers
where upper(naam) like ‘%E%’;
DECODE(input,
a, x,
b, y,
c, z,
w)
CASE input
WHEN a THEN x
WHEN b THEN y
WHEN c THEN z
ELSE w
END
CASE
WHEN input = a THEN x
WHEN input = b THEN y
WHEN input = c THEN z
ELSE w
END
select
naam “Naam”,
greatest(maandsal * 2, mnr, nvl(chef, mnr)) “Grootste waarde”,
decode(greatest(maandsal * 2, mnr, nvl(chef, 0)),
maandsal * 2, ‘Salaris’,
mnr, ‘MNR’,
‘Chef’) “Type”
from medewerkers
where lower(naam) like ‘%e%’;
Bepaal voor elke medewerker wiens naam een ‘e’ bevat wat kleiner is: zijn salaris*2, zijn MNR of het MNR van zijn chef? Naast de naam en het kleinste element wordt aangegeven welk element de kleinste waarde heeft (chef, salaris of mnr). Gebruik hiervoor de case.
select naam “Naam”,
least(maandsal * 2, mnr, nvl(chef, mnr)) “Kleinste waarde”,
case least(maandsal * 2, mnr, nvl(chef, mnr))
when maandsal * 2 then ‘Salaris’
when mnr then ‘MNR’
else ‘Chef’
end “Type”
from medewerkers
where lower(naam) like ‘%e%’;
Geef een lijst van de medewerkers waarbij de functie ‘TRAINER’ voorgesteld wordt als ‘LERAAR’ en ‘DIRECTEUR’ als ‘HOOFD’. Alle overige functies worden als ‘MEDEWERKER’ voorgesteld. Los op met decode() en de case.
select naam,
case functie
when ‘TRAINER’ then ‘LERAAR’
when ‘DIRECTEUR’ then ‘HOOFD’
else ‘MEDEWERKER’
end as functie
from medewerkers;
select naam,
decode(functie,
‘TRAINER’, ‘LERAAR’,
‘DIRECTEUR’, ‘HOOFD’,
‘MEDEWERKER’) as functie
from medewerkers;
Welke waarde is het grootst: het MNR-2000 of de 2de macht van de eerste letterwaarde van de medewerkernaam? Geef aan welke waarde het grootste is.
col “Grootste waarde” format a30;
select
naam “Naam”,
case greatest(mnr - 2000, power(ascii(naam), 2))
when (mnr - 2000) then ‘mnr - 2000’
else ‘letterwaarde’
end “Grootste waarde”
from medewerkers;
select
naam “Naam”,
decode(greatest(mnr - 2000, power(ascii(naam), 2)),
mnr - 2000, ‘mnr - 2000’,
‘letterwaarde’) “Grootste waarde”
from medewerkers;
Geef een lijst van de medewerkers waarbij de kolommen NAAM, FUNCTIE en OVERZICHT worden afgedrukt. In de kolom OVERZICHT wordt voor een trainer zijn/haar salaris afgedrukt, voor een verkoper wordt zijn/haar commissie afgedrukt en in alle andere gevallen drukt men ‘onbelangrijk’ af.
select naam, functie,
case functie
when ‘TRAINER’ then to_char(maandsal)
when ‘VERKOPER’ then to_char(comm)
else ‘onbelangrijk’
end as overzicht
from medewerkers;
select naam, functie,
decode(functie,
‘TRAINER’, to_char(maandsal),
‘VERKOPER’, to_char(comm),
‘onbelangrijk’) as overzicht
from medewerkers;