Subselects en views - Gecorreleerde subselects - Gecorreleerde subselects met not exists
5 belangrijke vragen over Subselects en views - Gecorreleerde subselects - Gecorreleerde subselects met not exists
Hoe kun je een gecorrelleerde subselect met in omdraaien in de zin dat je een not IN gebruikt?
Geef alle cursussen (code en naam) waarvoor geen enkele vrijstelling is
verleend.
De variant met ‘één of meer vrijstellingen’ hebben we in voorbeeld 7.6 en
in voorbeeld 7.10 op vier manieren opgelost. We zullen voor deze
‘omkering’ van de vraagstelling eens kijken hoe ver we komen met een
subselect met in , met een subselect met exists en met een join.
De subselect met in laat zich eenvoudig logisch omkeren tot een
subselect met not in :
select code, naam
from Cursus
where code not in (-- verzameling cursuscodes van inschrijvingen met
-- een vrijstelling
select cursus
from Inschrijving
where vrijstelling = 'J');
Waarom leent een join zich minder voor het type subselect 'not exists' / 'not in'?
Warom is de 0= in de volgende query gebruikt?
select code, naam
from Cursus C
where 0 = (select count(*)
from Inschrijving
where cursus = C.codeand vrijstelling = 'J');
Opmerking: de conditie 0 = (subselect) is logisch gesproken gelijkwaardig
aan (subselect) = 0 . De tweede vorm is echter niet in elk SQL -dialecttoegestaan
- Hogere cijfers + sneller leren
- Niets twee keer studeren
- 100% zeker alles onthouden
Waarom werkt onderstaande query niet? Waarom is dat niet zo bij 'not exists'?
select D.acr, D.naam
from Docent D
where D.acr not in (select S.mentorfrom Student S);
where D.acr not in (abc or bcd or NULL) en dat is altijd null. Je moet dus nog 'where S.mentor is not null' meegeven. Bij not exists is dat niet zo, want dan zeg je 'kijk of deze tabel bestaat die ik nu vraag'.
Wat is nu in essentie het verschil tussen het gebruik van een exists en een not in met subselect?
De vragen op deze pagina komen uit de samenvatting van het volgende studiemateriaal:
- Een unieke studie- en oefentool
- Nooit meer iets twee keer studeren
- Haal de cijfers waar je op hoopt
- 100% zeker alles onthouden