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

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

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

INF1300 Det meste av resten av

INF1300 Introduksjon til databaser

Relasjoner terminologi

INF1300 Introduksjon til databaser

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

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

SQL Structured Query Language

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 Structured Query Language

Relasjoner terminologi

INF1300 Introduksjon til databaser: SQL Structured Query Language

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

INF1300 Introduksjon til databaser

SQL Structured Query Language

INF1300 Introduksjon til databaser

Indre select-setninger Nestede select-setninger

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

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

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

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

Notater: INF1300. Veronika Heimsbakk 8. januar 2013

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

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

SQL: SELECT-spørringer

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

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

Repetisjon: Normalformer og SQL

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

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

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

SQL: SELECT-spørringer

SQL for INF1300. Stein Michael Storleer 21. september 2015

SQL for INF1300. Stein Michael Storleer 7. november 2014

Integritetsregler i SQL. Primærnøkler

Integritetsregler i SQL

SQL Structured Query Language. Definere tabeller Skranker Fylle tabeller med data

Integritetsregler i SQL

Metaspråket for å beskrive grammatikk

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

Spørsmålskompilering del 1

Spørsmålskompilering del 1

SQL for INF1300. Stein Michael Storleer 15. september 2016

Relasjonsalgebra Kopi av lysark om relasjonsalgebra. Vi går igjennom denne for å lage et matematisk fundament for forståelsen av hvordan

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

SQL: Integritetsregler, triggere og views

INF1300 Introduksjon til databaser

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

Datamodellering og databaser SQL, del 2

Datamodellering og databaser SQL, del 2

Datamodellering og databaser SQL, del 2

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

UNIVERSITETET. triggere og views. Institutt for Informatikk. INF Arne Maus 1

IN2090 Databaser og datamodellering. 09 Aggregering og sortering

IN2090 Databaser og datamodellering. 09 Aggregering og sortering

Utvikling fra kjernen og ut

UNIVERSITETET I OSLO RELASJONSALGEBRA. Regning med relasjoner. Institutt for Informatikk. INF Ragnar Normann

Relasjonsalgebraen. Algebra

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)

INF1300 Relasjonsalgebra og SQL, mengder og bager. Lysark for forelesning v. 2.1

Bruke SQL fra Python. Med Psycopg2

IN2090 Databaser og datamodellering. 06 Enkele joins og nestede SELECT

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO RELASJONSALGEBRA. Regning med relasjoner. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

UNIVERSITETET I OSLO RELASJONSALGEBRA. Regning med relasjoner. Institutt for Informatikk. INF Ellen Munthe-Kaas

UNIVERSITETET RELASJONSALGEBRA. Regning g med relasjoner. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

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

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

1. SQL datadefinisjon og manipulering

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

Miniverden og ER- modell

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

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Samtidighetsfenomener og anomalier i eksekveringsplaner. INF Ellen Munthe-Kaas 1

SQL, del 1 - select. Hva er SQL?

Oppgave 1 (Opprett en database og en tabell)

IN2090 Databaser og datamodellering 07 Datamanipulering

PENSUM H2012 INF1300. Joakim Myrvoll Johansen. Pensum fra forelesnings-foilere

UNIVERSITETET I OSLO RELASJONSALGEBRA. Regning med relasjoner. Institutt for Informatikk INF Ellen Munthe-Kaas

Databaser. Relasjonsmodellen 1 Læreboka: Kap. 2 Relasjonsmodellen Faglærere: Tore Mallaug, Kjell Toft Hansen

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

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

SQL. ISO SQL-standardene. Structured Query Language. Bruk av SQL. En innledende kommentar SQL-89 SQL-92 SQL:1999

SQL og Mengdelære. Oracle, MySQL, Access, bruker forskjellige syntaks.

UNIVERSITETET I OSLO RELASJONSALGEBRA. Regning med relasjoner. Institutt for Informatikk INF Ellen Munthe-Kaas

SQL, del 1 - select. Hva er SQL?

Ekstramateriale: Eksempel på PostgreSQL 8.4 og SQL:1999 (ikke pensum 2012)

Utvikling fra kjernen og ut

LC238D Datamodellering og databaser SQL, del 1 - SELECT

Oppgaver Oppgave a: Sett opp mulige relasjoner

SQL 3: Opprette tabeller, datainnsetting og utsnitt

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

Tabeller og enkle spørringer

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

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

Transkript:

Skjema Prosjekt(PId, Pnavn, KId, Pleder, StartDato) Ansatt(AId, Navn, Tittel, Fdato, Pnr, AnsDato) Timeliste(AId, Dato, PId, Timer) Kunde(KId, Knavn, Adresse) Oppgave: Finn navn og tittel på alle som har arbeidet på prosjektet «Vintersalg» Løsning s e l e c t d i s t i n c t Navn, T i t t e l from Ansatt A, T i m e l i s t e T, P r o s j e k t P where Pnavn = V i n t e r s a l g s e l e k s j o n s b e t i n g e l s e and ( T. AId = A. AId j o i n b e t i n g e l s e 1 and P. PId = T. PId j o i n b e t i n g e l s e 2 ) ; Her består join-betingelsen av to ledd. Den binder sammen en forekomst fra hver av de tre tabellene Ansatt, Timeliste og Prosjekt

Skjema Prosjekt(PId, Pnavn, KId, Pleder, StartDato) Ansatt(AId, Navn, Tittel, Fdato, Pnr, AnsDato) Timeliste(AId, Dato, PId, Timer) Kunde(KId, Knavn, Adresse) Oppgave: Finn navn og tittel på alle som har arbeidet på prosjektet «Vintersalg» Løsning s e l e c t d i s t i n c t Navn, T i t t e l from Ansatt A j o i n T i m e l i s t e T on T. AId = A. AId j o i n b. 1 n a t u r a l j o i n P r o s j e k t P j o i n b. 2 where Pnavn = V i n t e r s a l g ; s e l e k s j o n s b e t i n g e l s e Her består join-betingelsen av to ledd. Den binder sammen en forekomst fra hver av de tre tabellene Ansatt, Timeliste og Prosjekt

Skjema Prosjekt(PId, Pnavn, KId, Pleder, StartDato) Ansatt(AId, Navn, Tittel, Fdato, Pnr, AnsDato) Timeliste(AId, Dato, PId, Timer) Kunde(KId, Knavn, Adresse) Oppgave: Finn navn og tittel på alle som har arbeidet på prosjektet «Vintersalg» Løsning s e l e c t d i s t i n c t Navn, T i t t e l from Ansatt A n a t u r a l j o i n T i m e l i s t e T j o i n b. 1 n a t u r a l j o i n P r o s j e k t P j o i n b. 2 where Pnavn = V i n t e r s a l g ; s e l e k s j o n s b e t i n g e l s e Her består join-betingelsen av to ledd. Den binder sammen en forekomst fra hver av de tre tabellene Ansatt, Timeliste og Prosjekt

SQLs DML (Data manipulation language insert: Innsetting av nye data update: Endring av eksisterende data delete: Sletting av data

insert insert into R(A 1, A 2,..., A k ) values (v 1, v 2,..., v k ); insert into R(A 1, A 2,..., A k ) select-setning; Attributtlisten kan sløyfes hvis den dekker samtlige attributter i R og følger attributtenes default rekkefølge NB optimaliseringer i DBMSet kan medføre at tuplene legges inn etterhvert som de beregnes i select-setningen. Dette kan ha sideeffekter på beregningen av select-setningen

update, delete update R set A 1 = E 1,..., A k = E k [where C]; delete from R [where C]; R er en relasjon, A i er attributter (kolonnenavn) og E j uttrykk. [ ] betyr at dette leddet er en valgfri del av setningen

Aggregeringsfunksjoner SQL har fem aggregeringsfunksjoner: navn count min max sum avg virkning (returnerer) teller antall finner minste verdi finner største verdi summerer verdier finner gjennomsnitt av verdier

count() s e l e c t count ( ) from p e r s o n ; gir antall tupler i tabellen s e l e c t count ( ) as a n t T u p l e r from p e r s o n ; Som for alle attributter i select-listen, kan vi gi count(*) et nytt navn. s e l e c t count ( gender ) from p e r s o n ; gir antall tupler i tabellen hvor attributtet gender ikke er null s e l e c t count ( d i s t i n c t f i r s t n a m e ) from p e r s o n ; gir antall forskjellige verdier i attributtet firstname (null telles ikke med)

min() og max() min(attributt) og max(attributt) gir henholdsvis minste og største verdi av attributtet Attributtet må være numerisk eller tekstlig (date og time håndteres som tekststrenger) Eksempel: Gitt tabellen Ansatt(anr, navn, lonn, avd). Finn den største lønnsforskjellen i salgsavdelingen: s e l e c t max ( l o n n ) min ( l o n n ) from Ansatt where avd = S a l g ; Merk at det ikke er lov å ha regneuttrykk som parameter i min() og max()

sum() og avg() sum(attributt) og avg(attributt) beregner henholdsvis summen og gjennomsnittet av verdiene i attributtet Attributtet må være numerisk Tupler hvor attributtet er null, blir ignorert. (Dette er viktig for avg()) Eksempel: Gitt tabellen Ansatt(anr, navn, lonn, avd). Finn sum lønnsutgifter og gjennomsnittslønn for salgsavdelingen: s e l e c t sum ( l o n n ), avg ( l o n n ) from Ansatt where avd = s a l g ;

group by (gruppering) Gruppering er å dele forekomstene inn i grupper og så gi en resultatlinje for hver gruppe Syntaksen er slik: s e l e c t < r e s u l t a t a t t r i b u t t l i s t e > from <t a b e l l l i s t e > where <b e t i n g e l s e > group by <g r u p p e r i n g s a t t r i b u t t l i s t e >; Resultatet beregnes slik: 1. Beregn select * from <tabell-liste> where <betingelse> 2. Lag grupper av de tuplene som er like i alle grupperingsattributtene 3. Utfør aggregeringsfunksjonene lokalt innenfor hver gruppe og presenter én resultatlinje for hver gruppe En god regel er å inkludere alle grupperingsattributtene i resultatattributt-listen. Merk: Attributter som ikke er grupperingsattributter, må være funksjonelt avhengige av grupperingsattributtene.

Eksempel Finn antall ansatte i hver avdeling og gjennomsnittlig lønn for disse: Ansatt(anr, navn, lonn, avd) Avdeling(avdnr, a-navn, leder) Prosjektplan(pnr, anr, timer) s e l e c t a navn, count ( ), avg ( l o n n ) from Ansatt, A v d e l i n g where avd = avdnr j o i n b e t i n g e l s e group by a navn ; Dette forutsetter at a-navn er en kandidatnøkkel. Hvis ikke måtte vi hatt group by avdnr. I så fall må vi muligens ta med avdnr i select-listen

Eksempel med eksplisitt join Finn antall ansatte i hver avdeling og gjennomsnittlig lønn for disse: Ansatt(anr, navn, lonn, avd) Avdeling(avdnr, a-navn, leder) Prosjektplan(pnr, anr, timer) s e l e c t a navn, count ( ), avg ( l o n n ) from Ansatt j o i n A v d e l i n g on avd = avdnr group by a navn ; Dette forutsetter at a-navn er en kandidatnøkkel. Hvis ikke måtte vi hatt group by avdnr. I så fall må vi muligens ta med avdnr i select-listen

Eksempel For hvert prosjekt, list opp medvirkende avdelinger og sorter dem etter innsats: Ansatt(anr, navn, lonn, avd) Avdeling(avdnr, a-navn, leder) Prosjektplan(pnr, anr, timer) s e l e c t pnr as p r o s j e k t, avdnr as avdnummer, a navn as a v d e l i n g, sum ( t i m e r ) as i n n s a t s from Ansatt A, Avdeling, P r o s j e k t p l a n P where avd = avdnr and A. anr = P. anr group by pnr, avdnr, a navn o r d e r by pnr, sum ( t i m e r ) d e s c ; Siste linje kan erstattes med o r d e r by p r o s j e k t, i n n s a t s d e s c ;

Eksempel Samme oppgave, men ta bare med avdelinger som skal bidra med minst 100 timer på prosjektet: Ansatt(anr, navn, lonn, avd) Avdeling(avdnr, a-navn, leder) Prosjektplan(pnr, anr, timer) s e l e c t pnr as p r o s j e k t, avdnr as avdnummer, a navn as a v d e l i n g, sum ( t i m e r ) as i n n s a t s from Ansatt A, Avdeling, P r o s j e k t p l a n P where avd = avdnr and A. anr = P. anr group by pnr, avdnr, a navn h a v i n g sum ( t i m e r ) > 99 o r d e r by p r o s j e k t, i n n s a t s d e s c ;

Nestede spørsmål Gitt tabellen Ansatt(anr, navn, lonn, avd) Finn antall selgere som tjener mer enn det dobbelte av markedsførernes gjennomsnittslønn s e l e c t count from Ansatt where avd = s a l g and l o n n > ( s e l e c t 2 avg ( l o n n ) from Ansatt where avd = m a r k e t i n g ) ; Merk: En select inne i where-betingelsen må være omsluttet av parenteser

For hvert prosjekt, list opp medvirkende avdelinger som har minst 10 ansatte og sorter dem etter innsats (Altså: ta bare med avdelinger som har minst 10 ansatte): Ansatt(anr, navn, lonn, avd) Avdeling(avdnr, a-navn, leder) Prosjektplan(pnr, anr, timer) s e l e c t pnr as p r o s j e k t, avdnr as avdnummer, a navn as a v d e l i n g, sum ( t i m e r ) as i n n s a t s from Ansatt A, Avdeling, P r o s j e k t p l a n P where avd = avdnr and A. anr = P. anr group by pnr, avdnr, a navn h a v i n g sum ( t i m e r ) > 99 and 9 < ( s e l e c t count ( ) from Ansatt A1 where A1. avd = avdnr ) o r d e r by p r o s j e k t, i n n s a t s d e sc ; Merk bruken av avdnr i den indre select-setningen! Den gjør at den indre select-setningen må beregnes én gang for hver verdi av avdnr beregnet i den ytre select-setningen

Generelt utseende av SQL-spørsmål s e l e c t [ d i s t i n c t ] < r e s u l t a t a t t r i b u t t e r > from <t a b e l l e r > [ where <u t v a l g b e t i n g e l s e > ] [ group by <g r u p p e r i n g s a t t r i b u t t e r > [ h a v i n g <r e s u l t a t b e t i n g e l s e > ] ] [ o r d e r by <o r d n i n g s a t t r i b u t t e r > ] Regler: Ordningsattributtene har utseendet: <attributt> [asc desc] Ordningsattributtene må være blant resultatattributtene Ifølge SQL-standarden skal grupperingsattributtene alltid være blant resultatattributtene, men de fleste DBMSer krever ikke dette

WHERE vs. HAVING where-betingelsen velger ut de tuplene som skal danne datagrunnlaget for grupperingen having-betingelsen plukker ut de tuplene fra det ferdig-grupperte resultatet som skal med i det endelige svaret having-betingelsen kan inneholde aggregatfunksjoner, men det kan ikke where-betingelsen Siden having håndterer en (mye) mindre datamengde enn where, er det i kompliserte spørringer lurt å legge så mye som mulig av logikken inn i having-betingelsen

Hvordan SQL-spørsmål med GROUP BY evalueres 1. Selekter ifølge seleksjonsbetingelsene i where 2. Join relasjonene i from i henhold til joinbetingelsene i where 3. Grupper resultattuplene i henhold til like verdier i grupperingsattributtene angitt i group by-klausulen 4. Fjern de gruppene som ikke oppfyller resultatbetingelsen i having-klausulen 5. Projiser ifølge attributtene i select 6. Fjern flerforekomster hvis select distinc 7. Sorter i henhold til order by