Indre select-setninger Nestede select-setninger

Like dokumenter
SQL Structured Query Language. Repetisjon av select spørringer Nestede select spørringer Mengdeoperasjoner Views Flere operatorer

Relasjoner terminologi. Kopi av lysark fra forelesningen 13. oktober. Legges ut inntil notatet som samler alt om SQL kommer...

INF1300 Introduksjon til databaser

INF1300 Det meste av resten av

INF1300 Introduksjon til databaser

INF1300 Det meste av resten av SQL. Utleggsark v. 2.0

Oppgave: Finn navn og tittel på alle som har arbeidet på prosjektet «Vintersalg»

2: Hvilke verdier forekommer i attributtet filmtype i relasjonen filmitem? Lag en oversikt over filmtypene og hvor mange filmer innen hver type.

Relasjoner terminologi

UNIVERSITETET I OSLO

Alle attributter har NULL som mulig verdi. mulige verdier for integer: NULL, 0, 1, 2, 3...

Join. Intuitivt: Skjøte sammen to relasjoner. Intuitivt: 1. Beregn R S 2. Velg ut de tuplene som tilfredsstiller joinbetingelsen C

SQL: Repe)sjon og eksempler Deniz Akkøk Mathias Stang

Repetisjon: Normalformer og SQL

Bruke SQL fra Python. Med Psycopg2

Løsningsforslag til eksamen i IN2090 Databaser og datamodellering og INF1300 Introduksjon til databaser 6. desember :30 18:30 (4 timer)

Notater: INF1300. Veronika Heimsbakk 8. januar 2013

UNIVERSITETET I OSLO SQL. Structured Query Language. (forts.) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

UNIVERSITETET SQL. Structured Query Language (forts.) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

UNIVERSITETET I OSLO SQL. Structured Query Language. (The intergalactic dataspeak) Institutt for Informatikk. INF Ragnar Normann 1

SQL Structured Query Language

SQL Structured Query Language

UNIVERSITETET I OSLO SQL. Structured Query Language. (forts.) Institutt for Informatikk. INF Ragnar Normann 1

SQL: SELECT-spørringer

Sensorveiledning for IN2090 og INF desember :30 18:30 (4 timer)

UNIVERSITETET I OSLO SQL. Structured Query Language. (The intergalactic dataspeak) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Relasjoner terminologi

UNIVERSITETET I OSLO SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

UNIVERSITETET I OSLO SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

UNIVERSITETET I OSLO SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

SQL: SELECT-spørringer

UNIVERSITETET SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Metaspråket for å beskrive grammatikk

UNIVERSITETET I OSLO SQL. Structured Query Language. (The intergalactic dataspeak) INF Ellen Munthe-Kaas 1. Institutt for Informatikk

INF1300 Relasjonsalgebra. Et matematisk fundament for å forstå SQL-setninger

SQL Structured Query Language

SQL: Datatyper m.m. Evgenij Thorstensen V18. Evgenij Thorstensen SQL: Datatyper m.m. V18 1 / 12

Problemer med Indre joins. Inner joins og manglende verdier med aggregater. Left Outer Join. Outer Joins. Hvor mange har kjøpt hvert produkt?

Bruke SQL fra Java. Med JDBC (Java Database Connec/vity)

UNIVERSITETET I OSLO SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

IN2090 Databaser og datamodellering. 06 Enkele joins og nestede SELECT

Oppgave 1 (Opprett en database og en tabell)

IN2090 Databaser og datamodellering. 09 Aggregering og sortering

INF1300 Introduksjon til databaser: SQL Structured Query Language. En første introduksjon Lysark til forelesning onsdag 22.

INF1300 Introduksjon til databaser: SQL Structured Query Language. En første introduksjon Lysark til forelesning mandag 14.

SQL for INF1300. Stein Michael Storleer 21. september 2015

SQL SELECT-FROM-WHERE. Skjemadefinisjon og datainnsetting i SQL. Semantikk bak ein-relasjons-spørring

INF1300 SQL Structured Query Language del 1. Stoff som blir/ble forelest i oktober 2013

IN2090 Databaser og datamodellering. 09 Aggregering og sortering

SELECT DISTINCT Fornavn, Etternavn, Programtittel FROM Program P, Medvirkende M, Deltagelse D. SELECT Tilgjengelighet FROM Program

Enklere syntaks for joins. IN2090 Databaser og datamodellering. 09 Aggregering og sortering. Eksempel: Variable i delspørringer (1)

SQL for INF1300. Stein Michael Storleer 7. november 2014

SQL, del 1 - select. Hva er SQL?

SQL. SQL-standarder. Flere standarder: ANSI SQL SQL2 (SQL-92) SQL3 (SQL-99) = SQL2 + objekt-relasjonelle egenskaper mm

SQL for INF1300. Stein Michael Storleer 15. september 2016

Institutt for datateknikk. Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL

INF1300 Introduksjon til databaser

SQL, del 1 - select. Hva er SQL?

INF1300 Introduksjon til databaser

LC238D Datamodellering og databaser SQL, del 1 - SELECT

INF1300 Introduksjon til databaser: SQL Structured Query Language

Oppgave 1 Datamodellering 22 %

Datamodellering og databaser SQL, del 2

Repetisjon. IN2090 Databaser og datamodellering. 06 Enkele joins og nestede SELECT. Eksempler: FilmDB. Enkle SELECT-spørringer i et nøtteskall

Databaser. Relasjonsmodellen 2 Læreboka: Kap. 2 Relasjonsmodellen

JDBC. Java Data Base Connec.vity

Datamodellering og databaser SQL, del 2

Datamodellering og databaser SQL, del 2

UNIVERSITETET I OSLO SQL. Structured Query Language. (The intergalactic dataspeak) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Tilkobling og Triggere

1. SQL datadefinisjon og manipulering

Avansert bruk av SQL. Avanserte spørringer Valguttrykk Spørring på spørring Unionspørringer Delspørringer, vekselvirkende delspørringer Kvantorer

Spørsmålskompilering del 1

Spørsmålskompilering del 1

Integritetsregler i SQL

Oppgave 1 1. Spørring: Resultattabell: 2. Spørring: Resultattabell: 3. Spørring:

Integritetsregler i SQL

IN2090 Databaser og datamodellering 07 Datamanipulering

IN2090 Databaser og datamodellering 07 Datamanipulering

ORDBMS og OODBMS i praksis

Integritetsregler i SQL. Primærnøkler

IN2090 Databaser og datamodellering. 08 Typer og skranker

Databasers typesystem. IN2090 Databaser og datamodellering. 08 Typer og skranker. SQL-standarden vs. RDBMSer. Hvilke datatyper har vi

En lett innføring i foreninger (JOINs) i SQL

EKSAMEN. Kontroller at oppgavesettet er komplett før du begynner å besvare spørsmålene.

Komplisert eksempel. IN2090 Databaser og datamodellering 07 Datamanipulering. Flere eksempler: Kombinere aggregater. Komplisert eksempel med WITH

SQL 3: Opprette tabeller, datainnsetting og utsnitt

IN2090 Databaser og datamodellering. 08 Typer og skranker

Løsningsforslag maskindatabasen på Ifi SQL og normalisering

DBS18 - Strategier for Query-prosessering

D: Ingen trykte eller håndskrevne hjelpemiddel tillatt. Bestemt, enkel kalkulator tillatt.

- 1 - Filmdatabasen. [ORM-versjon] Ellen Munthe-Kaas Januar 2010

Høgskolen i Telemark EKSAMEN 6102 DATABASER Tid: Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1

Løsningsforslag uke 9 INF212 - Våren 2002 Jørgen Hermanrud Fjeld with precious assistance from Marte Arnestad Harald Askestad Kai-

Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL

Prosedyrer. Lars Vidar Magnusson. October 26, Lars Vidar Magnusson () Forelesning i DAS October 26, / 19

Systemutvikling fra kjernen og ut, fra skallet og inn

En liten rekap. Spørrespråk. I dag SELECT

SQL: Integritetsregler, triggere og views

INF1300 Introduksjon til databaser

Transkript:

Indre select-setninger Nestede select-setninger

Setninger som beregner en tabell med kun én verdi

select avg(lonn) from Ansatt where avd = 'marketing ; select avg(lonn)from Ansatt where avd = 'marketing ; avg ---------------------- 583874.58 (1 row)

select 2 * avg(lonn) from Ansatt where avd = 'marketing ; select 2*avg(lonn)from Ansatt where avd = 'marketing ; avg ---------------------- 1167749.16 (1 row)

Eksempel vi så sist: AnsaI(id, navn, lonn, avd) Finn antall selgere som tjener mer enn det dobbelte av markedsførernes gjennomsni5slønn select count * from Ansatt where avd = 'salg' and lonn > ( select 2 * avg(lonn) from Ansatt where avd = 'marketing ); Den indre setningen beregner en relasjon med én verdi. Tabellen har m.a.o. én kolonne og ei tuppel. Hvis det ikke var slik, ville >-tegnet ikke gi noen mening.

Eksempel vi så sist: AnsaI(id, navn, lonn, avd) Finn antall selgere som tjener mer enn det dobbelte av markedsførernes gjennomsni5slønn select count * from Ansatt where avd = 'salg' and lonn > ( 1167749.16 ); Den indre setningen beregner en relasjon med én verdi. Tabellen har m.a.o. én kolonne og ei tuppel. Hvis det ikke var slik, ville >-tegnet ikke gi noen mening.

Eksempel vi så sist: AnsaI(id, navn, lonn, avd) Avdeling(avd, leder) Prosjektplan(pnr, id, Rmer) For hvert prosjekt, list opp medvirkende avdelinger som har minst 10 ansaie og som har ført minst 100 Rmer på prosjektet. Sorter dem eier innsats: select pnr as prosjekt, avd as avdeling, sum(timer) as innsats from Ansatt A, Avdeling D, Prosjektplan P where A.avd = D.avd and A.id = P.id group by P.pnr, D.avd having sum(timer) > 99 and 9 < ( select count(*) from Ansatt A1 where A1.avd = D.avd ) order by prosjekt, innsats desc;

Eksempel vi så sist: AnsaI(id, navn, lonn, avd) Avdeling(avd, leder) Prosjektplan(pnr, id, Rmer) Legg merke 7l den indre select-setningen som har en seleksjonsbe7ngelse som sammenligner verdier i A1.avd med verdier i a5ribu5et D.avd fra den ytre setningen. select pnr as prosjekt, avd as avdeling, sum(timer) as innsats from Ansatt A, Avdeling D, Prosjektplan P where A.avd = D.avd and A.id = P.id group by P.pnr, D.avd having sum(timer) > 99 and 9 < ( select count(*) from Ansatt A1 where A1.avd = D.avd ) order by prosjekt, innsats desc;

Eksempel vi så sist: AnsaI(id, navn, lonn, avd) Avdeling(avd, leder) Prosjektplan(pnr, id, Rmer) Legg merke 7l den indre select-setningen som har en seleksjonsbe7ngelse som sammenligner verdier i A1.avd med verdier i a5ribu5et D.avd fra den ytre setningen. select pnr as prosjekt, avd as avdeling, sum(timer) as innsats from Ansatt A, Avdeling D, Prosjektplan P where A.avd = D.avd and A.id = P.id group by P.pnr, D.avd having sum(timer) > 99 and Den indre 9 < ( select count(*) setningen blir from Ansatt A1 en tabell med where A1.avd = D.avd ) én verdi order by prosjekt, innsats desc;

Eksempel vi så sist: AnsaI(id, navn, lonn, avd) Avdeling(avd, leder) Prosjektplan(pnr, id, Rmer) Legg merke 7l den indre select-setningen som har en seleksjonsbe7ngelse som sammenligner verdier i A1.avd med verdier i a5ribu5et D.avd fra den ytre setningen. select pnr as prosjekt, avd as avdeling, sum(timer) as innsats from Ansatt A, Avdeling D, Prosjektplan P where A.avd = D.avd and A.id = P.id group by P.pnr, D.avd having sum(timer) > 99 and Den indre 9 < ( select count(*) setningen blir from Ansatt A1 en tabell med where A1.avd = D.avd ) én verdi order by prosjekt, innsats desc; korrellert spørring

Setninger som beregner en tabell med kun én verdi kan forkomme der vi kan ha en konstant

Mest vanlig i where having

Setninger som beregner en tabell med flere kolonner eller tupler kan forkomme hvor?

select [distinct] <resultatattributter> from <tabeller> [ where <utvalgbetingelse> ] [ group by <grupperingsattributter> [ having <resultatbetingelse> ] ] [ order by <ordningsattributter> ]

select [distinct] <resultatattributter> from <tabeller> [ where <utvalgbetingelse> ] [ group by <grupperingsattributter> [ having <resultatbetingelse> ] ] [ order by <ordningsattributter> ] Husk at en select-setning er en relasjon (tabell)!

select [distinct] <resultatattributter> from T 1,T 2,,T k [ where <utvalgbetingelse> ] [ group by <grupperingsattributter> [ having <resultatbetingelse> ] ] [ order by <ordningsattributter> ] Husk at en select-setning er en relasjon (tabell)!

select [distinct] <resultatattributter> from T 1, T 2,, (select ) as nytabell,, T k [ where <utvalgbetingelse> ] [ group by <grupperingsattributter> [ having <resultatbetingelse> ] ] [ order by <ordningsattributter> ]

fdb=> \d film Table "public.film" Column Type Modifiers ----------+---------+----------- filmid integer title text not null prodyear integer

select Rtle, count(*) as ant from Film group by Rtle having count(*) > 30 fdb=> \d film Table "public.film" Column Type Modifiers ----------+---------+----------- filmid integer title text not null prodyear integer

( select Rtle, count(*) as ant from Film group by Rtle having count(*) > 30 ) as poptitler

select max(poptitler.ant) from ( select Rtle, count(*) as ant from Film group by Rtle having count(*) > 30 ) as poptitler ;

select max(poptitler.ant) from ( select Rtle, count(*) as ant from Film group by Rtle having count(*) > 30 ) as poptitler ; Den indre select-setningen blir her som en tabell med tabellnavnet PopTitler

select max(poptitler.ant) from ( select Rtle, count(*) as ant from Film group by Rtle having count(*) > 30 ) as poptitler ; Den indre select-setningen blir her som en tabell med tabellnavnet PopTitler Vi må allrd gi et navn Rl indre select-setninger i fromdelen

Film(filmid, Rtle, prodyear) select F.prodyear, count(*) as ant from Film F natural join ( select Rtle, count(*) as ant from Film group by Rtle having count(*) > 30 ) as poptitler group by F.prodyear order by ant ;

fdb=> \d Filmcountry Table "public.filmcountry" Column Type Modifiers ---------+---------+----------- filmid integer country text

Film(filmid, Rtle, prodyear) Filmcountry(filmid, country) select C.country, count(*) as ant from Film F natural join Filmcountry C natural join ( select Rtle, count(*) as ant from Film group by Rtle having count(*) > 30 ) as T group by C.country having count(*)>5 order by ant ;

Film(filmid, Rtle, prodyear) Filmcountry(filmid, country) select T.Rtle, count(*) from Film F natural join Filmcountry C natural join ( select Rtle, count(*) as ant from Film group by Rtle having count(*) > 30 ) as T where C.country = 'Norway' group by T.Rtle ;

Views

( select Rtle, count(*) as ant from Film group by Rtle having count(*) > 30 ) as poptitler

create view PopTitler (Rtle, ant) as select Rtle, count(*) as ant from Film group by Rtle having count(*) > 30 ;

create view PopTitler (RIel, ant) as select Rtle, count(*) from Film group by Rtle having count(*) > 5 ;

create view PopTitler (RIel, ant) as select Rtle, count(*) from Film group by Rtle having count(*) > 5 ; Et view kan brukes som en tabell, gjerne i stedet for en indre select-setning. I deie viewet er det 2 airibuier: RIel og ant

create view PopTitler as select Rtle, count(*) from Film group by Rtle having count(*) > 5 ; Et view kan brukes som en tabell, gjerne i stedet for en indre select-setning. I deie viewet er det 2 airibuier: Rtle og count

create view PopTitler as select Rtle as RIel, count(*) as ant from Film group by Rtle having count(*) > 5 ; Et view kan brukes som en tabell, gjerne i stedet for en indre select-setning. I deie viewet er det 2 airibuier: RIel og ant

fdb=> \d filmgenre Table "public.filmgenre" Column Type Modifiers --------+---------+----------- filmid integer genre text

select P.RIel, count(*) from Film F natural join Filmgenre G join PopRtler P on F.Rtle = P.RIel where G.genre = 'Drama' group by P.RIel ;

select P.RIel, count(*) from Film F natural join Filmgenre G join PopRtler P on F.Rtle = P.RIel where G.genre = 'Drama' group by P.RIel ; create view PopTitler as select Rtle as RIel, count(*) as ant from Film group by Rtle having count(*) > 5 ;

select P.Rtle, count(*) from Film F natural join Filmgenre G natural join PopRtler P where G.genre = 'Drama' group by P.Rtle ; create view PopTitler as select Rtle as Rtle, count(*) as ant from Film group by Rtle having count(*) > 5 ;

select P.Rtle, count(*) from Film F natural join Filmgenre G natural join PopRtler P create view PopTitler as select Rtle as Rtle, count(*) as ant from Film group by Rtle having count(*) > 5 ; where G.genre = 'Drama' group by P.Rtle ;

select P.Rtle, count(*) from Film F natural join Filmgenre G natural join create view PopTitler as select Rtle as Rtle, count(*) as ant from Film group by Rtle having count(*) > 5 ; PopRtler P where G.genre = 'Drama' group by P.Rtle ;

select P.Rtle, count(*) from Film F natural join Filmgenre G natural join ( select Rtle as Rtle, count(*) as ant from Film group by Rtle having count(*) > 5 ) PopRtler P where G.genre = 'Drama' group by P.Rtle ;

select P.Rtle, count(*) from Film F natural join Filmgenre G natural join ( select Rtle as Rtle, count(*) as ant from Film group by Rtle having count(*) > 5 ) as P where G.genre = 'Drama' group by P.Rtle ;

select P.RIel, count(*) as ant from Film F join PopRtler P on F.Rtle = P.RIel group by P.RIel, ant having ant = ( select max(ant) from PopTitler ) ; create view PopTitler as select Rtle as RIel, count(*) as ant from Film group by Rtle having count(*) > 5 ;

select P.RIel, count(*) as ant from Film F join PopRtler P on F.Rtle = P.RIel group by P.RIel, ant having ant = ( select max(ant) from PopTitler ) ; Indre selectsetning som beregner én verdi create view PopTitler as select Rtle as RIel, count(*) as ant from Film group by Rtle having count(*) > 5 ;

select P.RIel, count(*) as ant from Film F join PopRtler P on F.Rtle = P.RIel group by P.RIel, ant having ant = ( select max(ant) from PopTitler ) ; her kan vi igjen ersta5e viewet PopTitler med select-setningen som definerer det Indre selectsetning som beregner én verdi create view PopTitler as select Rtle as RIel, count(*) as ant from Film group by Rtle having count(*) > 5 ;

select P.RIel, count(*) as ant from Film F join PopRtler P on F.Rtle = P.RIel group by P.RIel, ant having ant = ( select max(ant) from PopTitler ) ; her kan vi igjen ersta5e viewet PopTitler med select-setningen som definerer det Indre selectsetning som beregner én verdi create view PopTitler as select Rtle as RIel, count(*) as ant from Film group by Rtle having count(*) > 5 ;

Relasjonssammenligninger SQL-u5rykket e in R exists R e = any R e > all R evalueres 7l true hviss e finnes som forekomst i R R har minst én forekomst e = minst én vilkårlig verdi i R e > alle verdier i R

Relasjonssammenligninger SQL-u5rykket e in R exists R e = any R e > all R evalueres 7l true hviss e finnes som forekomst i R R har minst én forekomst e = minst én vilkårlig verdi i R e > alle verdier i R Kan forekomme i where- og having-berngelser

AnsaI(id, navn, lonn, avd) Finn antall selgere som tjener mer enn samtlige markedsførere

AnsaI(id, navn, lonn, avd) select count(*) from Ansatt where avd = 'salg' and lonn > all (select lonn from Ansatt where avd = 'marketing'); Finn antall selgere som tjener mer enn samtlige markedsførere

AnsaI(id, navn, lonn, avd) select count(*) from Ansatt where avd = 'salg' and lonn > all (select lonn from Ansatt where avd = 'marketing'); Den indre setningen gir verdien I airibuiet lonn for alle ansaie som har markerng som verdi I airibuiet avd Finn antall selgere som tjener mer enn samtlige markedsførere

Film(filmid, Rtle, prodyear) FilmparRcipaRon(parRd, personid, filmid, pariype) Filmer og rolle for personer med navnet Michael King

Film(filmid, Rtle, prodyear) FilmparRcipaRon(parRd, personid, filmid, pariype) Filmer og rolle for personer med navnet Michael King select personid, title, parttype from film f natural join filmparticipation fp natural join person p where personid = any ( select personid from Person where lastname like 'King' and firstname like 'Michael' );

Film(filmid, Rtle, prodyear) FilmparRcipaRon(parRd, personid, filmid, pariype) Filmer og rolle for personer med navnet Michael King select personid, title, parttype from film f natural join filmparticipation fp natural join person p where personid = any ( select personid from Person where lastname like 'King' and firstname like 'Michael' ); Den indre setningen gir alle forekomster av personid fra FilmparRcipaRon-tabellen med navnet Michael King.

Film(filmid, Rtle, prodyear) Filmcountry(filmid, country) Finn antall filmer som er produsert i nordiske land

Film(filmid, Rtle, prodyear) Filmcountry(filmid, country) select C.country, count(*) from Film F natural join Filmcountry C where C.country in ('Norway', 'Sweden', 'Denmark', 'Finland', 'Iceland') group by C.country;

AnsaI(id, navn, lonn, avd) Avdeling(avd, leder) Prosjektplan(pnr, id, Rmer) navn på ansa5e som ikke har ført noen prosjekjmer

AnsaI(id, navn, lonn, avd) Avdeling(avd, leder) Prosjektplan(pnr, id, Rmer) select navn from Ansatt where id not in (select id from Prosjektplan); navn på ansa5e som ikke har ført noen prosjekjmer

AnsaI(id, navn, lonn, avd) Avdeling(avd, leder) Prosjektplan(pnr, id, Rmer) select navn from Ansatt where id not in (select id from Prosjektplan); Den indre setningen gir alle ansai-id som finnes i Prosjektplan navn på ansa5e som ikke har ført noen prosjekjmer

AnsaI(id, navn, lonn, avd) Avdeling(avd, leder) Prosjektplan(pnr, id, Rmer) Finn navn på ansa5e som skal arbeide mer enn 10 7mer på samtlige av sine prosjekter

AnsaI(id, navn, lonn, avd) Avdeling(avd, leder) Prosjektplan(pnr, id, Rmer) select A.navn from Ansatt A where not exists ( select * from Prosjektplan P where P.id = A.id and P.timer <= 10 ); Finn navn på ansa5e som skal arbeide mer enn 10 7mer på samtlige av sine prosjekter

AnsaI(id, navn, lonn, avd) Avdeling(avd, leder) Prosjektplan(pnr, id, Rmer) select A.navn from Ansatt A where not exists ( select * from Prosjektplan P where P.id = A.id and P.timer <= 10 ); Den indre setningen gir alle forekomster av prosjektplantabellen der den ansaie A.id skal jobbe 10 Rmer eller mindre på prosjektet P.pnr Finn navn på ansa5e som skal arbeide mer enn 10 7mer på samtlige av sine prosjekter

AnsaI(id, navn, lonn, avd) Avdeling(avd, leder) Prosjekt(pnr, leder) Prosjektplan(pnr, id, Rmer) Finn navn på de ansa5e som ikke skal delta på noe prosjekt ledet av en avdelingsleder

AnsaI(id, navn, lonn, avd) Avdeling(avd, leder) Prosjekt(pnr, leder) Prosjektplan(pnr, id, Rmer) Finn navn på de ansa5e som ikke skal delta på noe prosjekt ledet av en avdelingsleder select navn from Ansatt A where not exists ( select * from Prosjekt P, Prosjektplan PL where PL.id = A.id and PL.pnr = P.pnr and P.leder in (select leder from Avdeling) );

AnsaI(id, navn, lonn, avd) Avdeling(avd, leder) Prosjektplan(pnr, id, Rmer) Finn navn på ansa5e som skal delta på alle prosjekter

AnsaI(id, navn, lonn, avd) Avdeling(avd, leder) Prosjektplan(pnr, id, Rmer) Finn navn på ansa5e som skal delta på alle prosjekter select A.navn from Ansatt A where not exists ( select P1.pnr from Prosjektplan P1 where not exists ( select * from Prosjektplan P2 where P2.pnr = P1.pnr and P2.id = A.id ) );

select count(filmid) from filmcountry where filmid not in (select filmid from film) ;

select count(filmid) from filmcountry where filmid not in (select filmid from film) ; fdb=> select count(filmid) fdb-> from filmcountry fdb-> where fdb-> filmid not in (select filmid from film) fdb-> ; -- denne spørringen hadde eksekvert i mer -- enn 3 timer da jeg stanset den: Cancel request sent ERROR: canceling statement due to user request fdb=>

select count(filmid) from filmcountry f where not exists (select filmid from film ff where ff.filmid = f.filmid) ; -- tok mindre enn 1 - ett - sekund!

select count(filmid) from filmcountry f where not exists (select filmid from film ff where ff.filmid = f.filmid) ; -- tok mindre enn 1 - ett - sekund! select count(filmid) from filmcountry where filmid not in (select filmid from film) ;