Dagens program. Kunnskapsorganisasjon og gjenfinning 1. Spørring mot databaser: SQL 2 - Spørring mot flere tabeller 12.11.2014

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

Kunnskapsorganisasjon og gjenfinning 1. Relasjonsmodellen og -databaser

Kunnskapsorganisasjon og gjenfinning 1

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

2 of :19 1 of :19 [Kurssidene] [ ABI - fagsider bibin ]

SQL Oppgave 3. SQL oppgave 3. Løsningsforslag

1. SQL spørringer mot flere tabeller

Objektorientering i ER-modeller EER-modeller Enhanced Entity Relationship Models

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

Tabeller og enkle spørringer

Kunnskapsorganisasjon og gjenfinning sider (inklusive forside og vedlegg)

HØGSKOLEN I SØR-TRØNDELAG

Fakultet for samfunnsfag Bibliotek- og informasjonsvitenskap Kunnskapsorganisasjon og gjenfinning 1.2

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

INF3100 V2016 Obligatorisk oppgave nr. 1

Romlig datamanipulering

Oppgave 3 - normalisering

INF3100 V2015 Obligatorisk oppgave nr. 1

1. SQL datadefinisjon og manipulering

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

Spørringer mot flere tabeller

Andre sett obligatoriske oppgaver i INF3100 V2013

Etternavn Fornavn Født Død Annet Felt

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

BRUK AV KONFIRMANTDATA

UNIVERSITETET I OSLO

RUTEPLANLEGGINGSSYSTEM BRUKERVEILEDNING

Eksamen i Internetteknologi Fagkode: ITE1526

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

HØGSKOLEN I OSLO Avdeling for journalistikk, bibliotek- og informasjonsfag Bibliotek- og informasjonsstudiene

Repetisjon: Normalformer og SQL

Brukerveiledning for import av publikasjoner ved UiTø

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

IN3020 V2019 Obligatorisk oppgave nr. 1

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

Eksamen i Internetteknologi Fagkode: ITE1526

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

BIB2200 Kunnskapsorganisasjon 2 (KONT)

Tilkobling og Triggere

6. Prosjekter Generelt

Oversikt over Document Portal

OKOK DataPower Learning AS Rapporter 1

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

Objektorientering i ER-modeller EER-modeller Enhanced Entity Relationship Models

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

Dagens barn har nå et mye større utvalg av kanaler og annen teknologi enn det førtidens barn hadde. Ikke alle familier hadde eget fjernsyn på

EKSAMEN 6102 / 6102N DATABASER

HØGSKOLEN I SØR-TRØNDELAG

Utnytt browsermulighetene i Unit4 Lønn og Personal Kenneth Torstveit Sjefskonsulent EVRY

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

Databaser kort intro. Tom Heine Nätt

Databasedesign HVA? HVORDAN? E/R diagram. Begrepsmessig databasedesign. Logisk databasedesign. Fysisk databasedesign

Hvordan foreslå kandidater for valg til landsmøtet 2011 / Hvordan fylle ut villighetserklæring dersom man er foreslått som kandidat for valg

Veiledning for vedlikehold av støtteapparat og spillere i Oppegård IL Fotball

EKSAMEN DATABASER

PORTAL FORLAG Referanser og litteraturliste

Hvordan aktivere pakker og enkelttitler

UNIVERSITETET I OSLO

INF1300 Introduksjon til databaser

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

infotorg Enkel brukermanual

Enalyzer Norge. Nice to know - ESS

OKOK DataPower Learning AS Administrasjon 1

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

Last ned Hemmeligheten bak varig velvære - Inna Segal

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

Datamodellering: ER-modeller ER = Enitity-Relationship del 1: Notasjon og oversetting av ulike ER-modeller til tilsvarende relasjonsmodeller

Brukermanual Administrasjon

UNIVERSITETET I OSLO

1. Relasjonsmodellen Kommentarer til læreboka

SQL 3: Opprette tabeller, datainnsetting og utsnitt

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

UiS-IKT Kompetanse Word Adresselister og fletting

Metaspråket for å beskrive grammatikk

Emnenavn: Ny/utsatt eksamen. Eksamenstid: Faglærer: Edgar Bostrøm. Erik Åsberg. Davide Roverso

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

Bruksanvisning for administrasjon av

Objektorientering i ER-modeller EER-modeller Enhanced Entity Relationship Models

Oppgave 1 Datamodellering 25 %

81,9(56,7(7(7,26/2 'HWPDWHPDWLVNQDWXUYLWHQVNDSHOLJHIDNXOWHW

UNIVERSITETET I OSLO

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

Oppgaver Oppgave a: Sett opp mulige relasjoner

Utviklingssak/ID Resume Endring (g2) Rettet i versjon (g1) Rettet i versjon

Datamodellering med E/R

student s104111, s107911, s122357

NORSK RIKSKRINGKASTING AS 102 RADIO OG FJERNSYN 1 A V T A L E R AVTALE. mellom. NORSK RIKSKRINGKASTING AS (nedenfor kalt NRK)

DBS18 - Strategier for Query-prosessering

Last ned. Beskrivelse mangler. Se gjerne forlagets (Gyldendal) hjemmeside, der det kan finnes mer informasjon.

Kunnskapsorganisasjon og gjenfinning 1.1. Introduksjon til databaseteori. Tine L. Frost, Jørn Helge B. Dahl og Kim Tallerås

INF 329: Web-Teknologier. Dataimplementasjon. Fra Kapittel 11 i «Designing Data-Intensive Web Applications» Presentasjonsdato: 17/10/2004

Det gjenstår nå kun å definere hva som skal være primærnøkkel i rolle rabellen.

Introduksjon til beslutningsstrukturer

Dublettsammenslåing. GolfBox A/S Sensommervej 34 F 8600 Silkeborg, Danmark Tlf.: :info@golfbox.no Web:golfbox.

Relasjonsalgebra. Hva?

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

Brukerveiledning lisensregistrering 2007

Innbydelse til Slopestyle NorgesCup Vierli 19.Desember 2015 WSF Renn National

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

Transkript:

Kunnskapsorganisasjon og gjenfinning 1 Spørring mot databaser: SQL 2 - Spørring mot flere tabeller SQL 2 - flere tabeller 12.11.2014 Dagens program SQL oppgave 2 - løsningsforslag Spørring mot flere tabeller SQL oppgave 1

SQL kort sagt SELECT kolonner - Her velges det hvilke kolonner som skal vises i trefflista - Beregningsfunksjoner utføres også her. FROM tabeller - Her velges det hvilke(n) tabell(er) det skal søkes i. [WHERE betingelser] - Her formuleres betingelsene for søket (valgfri) - Det kan søkes i andre kolonner enn dem som vises i trefflisten (SELECT) [GROUP BY kolonner] - Brukes til å gruppere treffene (valgfri) - Brukes gjerne sammen med beregningsfunksjoner [ORDER BY kolonner]; - Her sorteres treffene (valgfri) SQL oppgave 2 løsningsforslag 2

Spørring mot flere tabeller Ubegrenset antall kolonner Ubegrenset antall tabeller Kobling: primærnøkler og fremmednøkler Join-betingelse Utgangspunktet for spørringer NRK-eksempel Program (ProgramID, Programtittel, Programinfo, Kategori, Varighet, Aldersgrense, Tilgjengelighet, Teksting, Episodenr, sesongid) Innslag (InnslagID, Innslagtittel) Sesong (SesongID, Sesongnavn, Episodeantall, SerieID) Serie (SerieID, Serietittel, Seriebeskrivelse) Medvirkende (MedvirkendeID, Fornavn, Etternavn) Sendetidspunkt (TidspunktID, Kanal, Sendedato, Klokkeslett, ProgramID) Programinnhold (InnslagID, ProgramID, Nummer, Tidskode) Deltagelse (ProgramID, MedvirkendeID, Rolle)

Hente data fra flere tabeller SELECT kolonner FROM tabeller; Spørring mot flere tabeller: bruker komma mellom tabellnavnene Vi vil hente ut en liste over alle programmer og deres sendetidspunkter: Program (ProgramID, Programtittel, Programinfo, Kategori, Varighet, Aldersgrense, Tilgjengelighet, Teksting, Episodenr, sesongid) Sendetidspunkt (TidspunktID, Kanal, Sendedato, Klokkeslett, ProgramID) Forslag til SQL-spørring: SELECT ProgramID, Programtittel, Episodenr, TidspunktID, Kanal, Sendedato, Klokkeslett, ProgramID FROM Program, Sendetidspunkt; SELECT ProgramID, Programtittel, Episodenr, TidspunktID, Kanal, Sendedato, Klokkeslett, ProgramID FROM Program, Sendetidspunkt; ProgramID Programtittel Episodenr TidspunktID Kanal Sendedato Klokkeslett ProgramID 1 Sjokoladesuget7 50 NRK1 12.08.2014 22:15 1 2 Sportsrevyen 7 50 NRK1 12.08.2014 22:15 1 10:1 10 50 NRK1 12.08.2014 22:15 1 1 Sjokoladesuget7 51 NRK1 09.0.2014 19:45 2 2 Sportsrevyen 7 51 NRK1 09.0.2014 19:45 2 10:1 10 51 NRK1 09.0.2014 19:45 2 1 Sjokoladesuget7 52 NRK 02.09.2014 2:25 2 Sportsrevyen 7 52 NRK 02.09.2014 2:25 10:1 10 52 NRK 02.09.2014 2:25 Hva har skjedd her? 4

Kartesisk produkt Resultatet er det kartesiske produktet av de to tabellene. Hver rad i én tabell kombineres med hver rad i en annen tabell Resultattabellens rader: Produktet av radene i de to tabellene (rader i Program) x (rader i Sendetidspunkt) = 9 rader Resultattabellens kolonner: Summen av kolonnene i de to tabellene (kolonner i Program) + 5 (kolonner i Sendetidspunkt) = 8 kolonner Resultat: mange irrelevante rader Riktige rader i tabellen ProgramID Programtittel Episodenr TidspunktID Kanal Sendedato Klokkeslett ProgramID 1 Sjokoladesuget 7 50 NRK1 12.08.2014 22:15 1 2 Sportsrevyen 7 50 NRK1 12.08.2014 22:15 1 10:1 10 50 NRK1 12.08.2014 22:15 1 1 Sjokoladesuget 7 51 NRK1 09.0.2014 19:45 2 2 Sportsrevyen 7 51 NRK1 09.0.2014 19:45 2 10:1 10 51 NRK1 09.0.2014 19:45 2 1 Sjokoladesuget 7 52 NRK 02.09.2014 2:25 2 Sportsrevyen 7 52 NRK 02.09.2014 2:25 10:1 10 52 NRK 02.09.2014 2:25 5

Kvalifiserte kolonnenavn Brukes dersom flere tabeller har kolonner med identisk navn Typisk: primærnøkler og fremmednøkler tabellnavn.kolonnenavn Må brukes i spørringer mot flere tabeller SELECT Program.ProgramID, Programtittel, Episodenr, TidspunktID, Kanal, Sendedato, Klokkeslett, Sendetidspunkt.ProgramID FROM Program, Sendetidspunkt; Løsning: Join-betingelse ProgramID er primærnøkkel i Program og fremmednøkkel i Sendetidspunkt. Riktige rader i kartesisk produkt-tabellen: ProgramID har identiske verdier i de to kolonnene For å hente ut bare radene med identiske verdier: join-betingelse SELECT Program.ProgramID, Programtittel, Episodenr, TidspunktID, Kanal, Sendedato, Klokkeslett, Sendetidspunkt.ProgramID FROM Program, Sendetidspunkt WHERE Program.ProgramID = Sendetidspunkt.ProgramID; 6

Resultat med join-betingelse SELECT Program.ProgramID, Programtittel, Episodenr, TidspunktID, Kanal, Sendedato, Klokkeslett, Sendetidspunkt.ProgramID FROM Program, Sendetidspunkt WHERE Program.ProgramID = Sendetidspunkt.ProgramID; Program. ProgramID Programtittel Episodenr TidspunktID Kanal Sendetidspunkt. Sendedato Klokkeslett ProgramID 1 Sjokoladesuget 7 50 NRK1 12.08.2014 22:15 1 2 Sportsrevyen 7 51 NRK1 09.0.2014 19:45 2 10:1 10 52 NRK 02.09.2014 2:25 Vise ProgramID bare 1 gang Ny spørring: SELECT Program.ProgramID, Programtittel, Episodenr, TidspunktID, Kanal, Sendedato, Klokkeslett FROM Program, Sendetidspunkt WHERE Program.ProgramID = Sendetidspunkt.ProgramID; Program. ProgramID Programtittel Episodenr TidspunktID Kanal Sendedato Klokkeslett 1 Sjokoladesuget 7 50 NRK1 12.08.2014 22:15 2 Sportsrevyen 7 51 NRK1 09.0.2014 19:45 10:1 10 52 NRK 02.09.2014 2:25 7

Hvilke programmer ble vist på NRK1? Datene er lagret i to tabeller: Program (ProgramID, Programtittel, Programinfo, Kategori, Varighet, Aldersgrense, Tilgjengelighet, Teksting, Episodenr, sesongid) Sendetidspunkt (TidspunktID, Kanal, Sendedato, Klokkeslett, ProgramID) SELECT Programtittel, Kanal FROM Program, Sendetidspunkt WHERE Kanal= NRK1 AND Program.ProgramID = Sendetidspunkt.ProgramID; Programtittel Kanal Sjokoladesuget NRK1 Sportsrevyen NRK1 Foreløpig oppsummering Med join-betingelser unngår vi å få det kartesiske produkt som svar på spørringen vår. Én-til-mange sammenhengstype: én join-betingelse. Rekkefølgen på tabellene har ingen betydning. Når flere kolonner har samme navn, må vi bruke kvalifiserte kolonnenavn: tabellnavn.kolonnenavn 8

Mange-til-mange sammenhengstyper Tre relasjoner: De to opprinnelige entitetstypene koblingstabellen To join-betingelser Antallet join-betingelser i en spørring: = antallet tabeller 1 Hvilke medvirkende har deltatt i de forskjellige programmene? Må spørre mot tre tabeller: Program (ProgramID, Programtittel, Programinfo, Kategori, Varighet, Aldersgrense, Tilgjengelighet, Teksting, Episodenr, sesongid) Medvirkende (MedvirkendeID, Fornavn, Etternavn) Deltagelse (ProgramID, MedvirkendeID, Rolle) SELECT Fornavn, Etternavn, Programtittel FROM Program, Medvirkende, Deltagelse WHERE Program.ProgramID = Deltagelse.ProgramID AND Medvirkende.MedvirkendeID = Deltagelse.MedvirkendeID; 9

SELECT Fornavn, Etternavn, Programtittel FROM Program, Medvirkende, Deltagelse WHERE Program.ProgramID = Deltagelse.ProgramID AND Medvirkende.MedvirkendeID = Deltagelse.MedvirkendeID; Fornavn Etternavn Programtittel Kirsten Rokstad Sjokoladesuget Andreas Hagen Sportsrevyen Maria Bello 10:1 Maria Bello 10:1 Maria Bello er både skuespiller og regissør i 10:1 Spørring uten dubletter SELECT DISTINCT Fornavn, Etternavn, Programtittel FROM Program, Medvirkende, Deltagelse WHERE Program.ProgramID = Deltagelse.ProgramID AND Medvirkende.MedvirkendeID = Deltagelse.MedvirkendeID; Fornavn Etternavn Programtittel Kirsten Rokstad Sjokoladesuget Andreas Hagen Sportsrevyen Maria Bello 10:1 10

Hvilke programmer har Maria Bello medvirket i, og med hvilke roller? Aktuelle tabeller: Program (ProgramID, Programtittel, Programinfo, Kategori, Varighet, Aldersgrense, Tilgjengelighet, Teksting, Episodenr, sesongid) Medvirkende (MedvirkendeID, Fornavn, Etternavn) Deltagelse (ProgramID, MedvirkendeID, Rolle) SELECT Programtittel, Fornavn, Etternavn, Rolle FROM Program, Medvirkende, Deltagelse WHERE Fornavn = Maria AND Etternavn = Bello AND Program.ProgramID = Deltagelse.ProgramID AND Medvirkende.MedvirkendeID = Deltagelse.MedvirkendeID; Programtittel Fornavn Etternavn Rolle 10:1 Maria Bello Skuespiller 10:1 Maria Bello Regissør Hvilke innslag inneholder Sjokoladesuget? Tabeller med relevante data: Program (ProgramID, Programtittel, Programinfo, Kategori, Varighet, Aldersgrense, Tilgjengelighet, Teksting, Episodenr, sesongid) Innslag (InnslagID, Innslagtittel) Programinnhold (InnslagID, ProgramID, Nummer, Tidskode) SELECT Programtittel, Innslagtittel FROM Program, Innslag, Programinnhold WHERE Programtittel = Sjokoladesuget AND Program.ProgramID = Programinnhold.ProgramID AND Innslag.InnslagID = Programinnhold.InnslagID; Programtittel Sjokoladesuget Sjokoladesuget Innslagtittel Øyvors hemmelighet På Nobellinstituttet 11

Hvilken tidskode har innslaget Øyvors hemmelighet i Sjokoladesuget? Tabeller med relevante data: Program (ProgramID, Programtittel, Programinfo, Kategori, Varighet, Aldersgrense, Tilgjengelighet, Teksting, Episodenr, sesongid) Innslag (InnslagID, Innslagtittel) Programinnhold (InnslagID, ProgramID, Nummer, Tidskode) SELECT Programtittel, Innslagtittel, Tidskode FROM Program, Innslag, Programinnhold WHERE Programtittel = Sjokoladesuget AND Innslagtittel = Øyvors hemmelighet AND Program.ProgramID = Programinnhold.ProgramID AND Innslag.InnslagID = Programinnhold.InnslagID; Programtittel Innslagtittel Tidskode Sjokoladesuget Øyvors hemmelighet 00:00:16 Spørring mot flere tabeller med en beregningsfunksjon Hvor mange innslag er det i henholdsvis Sjokoladesuget og Sportsrevyen? tabeller med relevant data: Program (ProgramID, Programtittel, Programinfo, Kategori, Varighet, Aldersgrense, Tilgjengelighet, Teksting, Episodenr, sesongid) Innslag (InnslagID, Innslagtittel) Programinnhold (InnslagID, ProgramID, Nummer, Tidskode) SELECT Programtittel, COUNT(Innslag.InnslagID) AS 'Antall innslag' FROM Program, Innslag, Programinnhold WHERE (Programtittel = Sjokoladesuget' OR Programtittel = Sportsrevyen') AND Program.ProgramID = Programinnhold.ProgramID AND Innslag.InnslagID = Programinnhold.InnslagID GROUP BY Programtittel; Programtittel Sjokoladesuget 2 Sportsrevyen 2 Antall innslag 12

Spørring mot flere tabeller med en beregningsfunksjon Vi kan spørre mot deler av tabellene fra en mange til mangesammenhengstype, og dermed forenkle forrige spørring: 2 tabeller med relevant data: Program (ProgramID, Programtittel, Programinfo, Kategori, Varighet, Aldersgrense, Tilgjengelighet, Teksting, Episodenr, sesongid) Programinnhold (InnslagID, ProgramID, Nummer, Tidskode) SELECT Programtittel, COUNT(InnslagID) AS 'Antall innslag' FROM Program, Programinnhold WHERE (Programtittel = Sjokoladesuget' OR Programtittel = Sportsrevyen') AND Program.ProgramID = Programinnhold.ProgramID GROUP BY Programtittel; Programtittel Sjokoladesuget 2 Sportsrevyen 2 Antall innslag Hvilke programmer ble vist 09.0.2014 og hvilke medvirkende hadde de? 4 tabeller med relevant data: Program (ProgramID, Programtittel, Programinfo, Kategori, Varighet, Aldersgrense, Tilgjengelighet, Teksting, Episodenr, sesongid) Medvirkende (MedvirkendeID, Fornavn, Etternavn) Sendetidspunkt (TidspunktID, Kanal, Sendedato, Klokkeslett, ProgramID) Deltagelse (ProgramID, MedvirkendeID, Rolle) SELECT Programtittel, Fornavn, Etternavn FROM Program, Medvirkende, Sendetidspunkt, Deltagelse WHERE Sendedato = 09.0.2014 AND Program.ProgramID = Deltagelse.ProgramID AND Medvirkende.MedvirkendeID = Deltagelse.MedvirkendeID AND Program.ProgramID = Sendetidspunk.ProgramID; Programtittel Fornavn Etternavn Sportsrevyen Andreas Hagen 1

Aliaser Brukes ved mange, lange tabellnavn i komplekse spørringer Defineres rett etter tabellnavnet i FROM Bruker aliaset senere i spørringen Eksempel: SELECT Programtittel, Fornavn, Etternavn FROM Program P, Medvirkende M, Sendetidspunkt S, Deltagelse D WHERE Sendedato = 09.0.2014 AND P.ProgramID = D.ProgramID AND M.MedvirkendeID = D.MedvirkendeID AND P.ProgramID = S.ProgramID; SQL Oppgave Gjennomgang 25. november Lag SQL-spørringene i oppgavene under ved hjelp av phpmyadmin mot databasen Bokormen. 1. Hent ut et adresseregister som inneholder fornavn, etternavn, adresse, postnr og sted for alle medlemmene i Bokormen. 2. Hvilke boktitler er utgitt av Cappelen?. Vis en fordeling av antallet bøker hvert forlag har utgitt. 4. Hent ut en liste som inneholder ISBN og tittel for alle bøkene i databasen, samt ansvarliges fornavn, etternavn og rolle. Listen skal sorteres stigende på tittel (fra A til Å). 5. Hvilke bøker ble tilbudt i de tre bokklubbene som månedens bok i november 2005? Svaret skal vise tittel på boken og klubbnavn og sorteres stigende på klubbnavn. 6. Hvilke boktitler skrevet av Astrid Lindgren er tilbudt i Leselusen? 14