5.7.1 Join-Operator Flashcards

1
Q

Geef van elke medewerker het nummer en de naam van de afdeling waarvoor hij/zij werkt.

A

SELECT medewerkers.naam, medewerkers.afd, afdelingen.naam
FROM medewerkers
INNER JOIN afdelingen
ON medewerkers.afd = afdelingen.anr;

SELECT m.naam, m.afd, a.naam
FROM medewerkers m
JOIN afdelingen a
ON m.afd = a.anr;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Geef de naam en het salaris van elke medewerker die meer verdient dan Clerckx.

A

select naam, maandsal
from medewerkers
where maandsal >
(select maandsal
from medewerkers
where naam = ‘CLERCKX’);

select m.naam, m.maandsal
from medewerkers m
join medewerkers c
on c.naam = ‘CLERCKX’
where m.maandsal > c.maandsal;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Geef de namen van de medewerkers die in dezelfde afdeling werken als Wouters. Via auto-join:

A

SELECT m.naam
FROM medewerkers m
JOIN medewerkers mm
ON m.afd = mm.afd
WHERE mm.naam = ‘WOUTERS’ AND m.naam != ‘WOUTERS’;

– Via subquery:

SELECT m.naam
FROM medewerkers m
WHERE m.naam != ‘WOUTERS’ AND m.afd IN
(SELECT afd
FROM medewerkers
WHERE naam = ‘WOUTERS’);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Geef het nummer van elke medewerker die in de afdeling verkoop werkt.

A

SELECT m.mnr
FROM medewerkers m
JOIN afdelingen a
ON m.afd = a.anr
WHERE a.naam = ‘VERKOOP’;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Geef het nummer van elke medewerker gevolgd door de naam van zijn of haar baas. Als je wil dat een medewerker ook getoond wordt zelfs als hij geen chef heeft => LEFT (OUTER) JOIN:

A

SELECT m.mnr, baas.naam AS baas
FROM medewerkers m
LEFT JOIN medewerkers baas
ON m.chef = baas.mnr;

Anders als je dit niet wil tonen (INNER) JOIN:
SELECT m.mnr, baas.naam AS baas
FROM medewerkers m
JOIN medewerkers baas
ON m.chef = baas.mnr;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Geef van elke medewerker het medewerkersnummer en de naam van de afdeling waarvoor hij of zij werkt en maak een overzicht per afdeling mogelijk.

A

HOOFDKANTOOR 7782 AN CLERCKX

OPLEIDINGEN 7566 EMMA JACOBS
7902 DORIEN DE COOMAN

VERKOOP 7521 THOMAS DEFOUR

BREAK ON afdeling;

SELECT
a.naam afdeling,
m.mnr || ‘ ‘ || m.voorn || ‘ ‘ || m.naam medewerkers
FROM afdelingen a
JOIN medewerkers m
ON a.anr = m.afd
ORDER BY a.naam, m.mnr;

CLEAR BREAKS;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Welke medewerkers verdienen meer dan hun baas wanneer het salaris van de baas met 1000 EUR verminderd wordt?

A

SELECT m.naam
FROM medewerkers m
JOIN medewerkers baas
ON m.chef = baas.mnr
WHERE m.maandsal > (baas.maandsal - 1000);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Geef de namen van de chef (ook van De Koning) en hun ondergeschikten. Voorzie een overzicht per chef.

A

BRIERS DEN RUYTER
JACOBS
DEFOUR
MARTENS
ALLARD

BREAK ON baas SKIP 1 ON ondergeschikten;

SELECT DISTINCT b.naam baas, o.naam ondergeschikten
FROM medewerkers o
JOIN medewerkers b
ON o.chef = b.mnr
ORDER BY b.naam, o.naam;

CLEAR BREAKS;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Geef de namen van alle afdelingen en de naam van het afdelingshoofd. Doe LEFT (OUTER) JOIN als je ook afdelingen zonder afdelingshoofd wil tonen.

A

SELECT a.naam afdeling, m.naam afdelingshoofd
FROM afdelingen a
LEFT JOIN medewerkers m
ON a.hoofd = m.mnr;

Doe (INNER) JOIN als je geen afdelingen zonder afdelingshoofd
wil tonen.

SELECT afdelingen.naam afdeling, afdelingshoofd.naam afdelingshoofd
FROM afdelingen
JOIN medewerkers afdelingshoofd
ON afdelingen.hoofd = afdelingshoofd.mnr;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Geef de naam en voornaam van de medewerkers die een cursus volgen waar een bedrijfsafdeling gevestigd is.

A

SELECT DISTINCT m.naam, m.voorn
FROM medewerkers m
JOIN afdelingen a
ON m.afd = a.anr
JOIN inschrijvingen i
ON m.mnr = i.cursist
JOIN uitvoeringen u
ON i.cursus = u.cursus
WHERE u.locatie = a.locatie;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Geef de naam en voornaam van de medewerkers die een cursus volgen waar hun eigen afdeling gevestigd is.

A

SELECT DISTINCT m.naam, m.voorn
FROM medewerkers m
JOIN afdelingen a
ON m.afd = a.anr
JOIN inschrijvingen i
ON m.mnr = i.cursist
JOIN uitvoeringen u
ON i.cursus = u.cursus
WHERE u.locatie = a.locatie;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Geef de namen van de medewerkers die een cursus gevolgd hebben die hun chef ook gevolgd heeft.

A

SELECT DISTINCT m.naam
FROM medewerkers m
JOIN inschrijvingen i
ON i.cursist = m.mnr
JOIN inschrijvingen ii
ON ii.cursist = m.chef
WHERE i.cursus = ii.cursus;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Geef de namen van docenten die cursussen SQL, ORG of WEB doceren.

A

SELECT DISTINCT m.naam
FROM medewerkers m
JOIN uitvoeringen u
ON m.mnr = u.docent
WHERE u.cursus IN (‘SQL’, ‘ORG’, ‘WEB’);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Geef van alle inschrijvingen de naam van de docent, de naam van de cursus en de naam van de cursist. Geef een overzicht per docent en per omschrijving.

A

break on docent on omschrijving skip 1;

select docent.naam as docent, c.omschrijving as omschrijving, deelnemer.naam
from uitvoeringen u
join medewerkers docent
on u.docent = docent.mnr
join cursussen c
on u.cursus = c.code
full outer join inschrijvingen i
on u.cursus = i.cursus and u.begindatum = i.begindatum
join medewerkers deelnemer
on i.cursist = deelnemer.mnr
order by docent.naam, c.omschrijving, deelnemer.naam;

clear breaks;

waarom die full outer join?
* Toon ook docenten die geen studenten hebben
* Toon ook studenten die geen docent hebben.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Geef de namen van alle cursussen samen met de docent die deze cursussen doceren, evenals de begindata. De kolom omschrijving mag maar 35 karakters breed zijn en bovendien moet je voor een lege waarde bij docent ‘==onbekend==’ weergeven. Geef een overzicht per cursusnaam. Opmerking: werkt enkel als je de kolommen in de break aanspreekt via hun alias!

A

break on omschrijving skip 1 on begindatum;
col omschrijving format a35;

select c.omschrijving as omschrijving,
u.begindatum as begindatum,
nvl(docent.naam, ‘==onbekend==’) as docent
from cursussen c
join uitvoeringen u
on c.code = u.cursus
left join medewerkers docent
on u.docent = docent.mnr
order by omschrijving;
clear breaks;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Geef van alle cursisten hun naam, de naam van hun chef, de naam van de afdeling waar ze werken, de namen van de cursussen waarvoor ze zich eventueel inschreven en de namen van de docenten die deze cursussen geven. Opmerking: werkt enkel als je de kolommen in de break aanspreekt via hun alias!

A

break on deelnemer on chef on afdeling skip 1;
select deelnemer.naam || ‘,’ || deelnemer.voorn as deelnemer,
chef.naam as chef,
a.naam as afdeling,
c.omschrijving as omschrijving,
docent.voorn || ‘ ‘ || docent.naam as docent
from inschrijvingen i
join medewerkers deelnemer
on i.cursist = deelnemer.mnr
join medewerkers chef
on deelnemer.chef = chef.mnr
join afdelingen a
on deelnemer.afd = a.anr
join uitvoeringen u
on i.cursus = u.cursus and i.begindatum = u.begindatum
join cursussen c
on u.cursus = c.code
join medewerkers docent
on u.docent = docent.mnr
order by deelnemer, chef, afdeling, omschrijving, docent;
clear breaks;