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



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

Fag TDT4145 Datamodellering og databasesystemer Øving 3: Relasjonsalgebra og SQL

Miniverden og ER- modell

SQL 3: Opprette tabeller, datainnsetting og utsnitt

1. SQL datadefinisjon og manipulering

Metaspråket for å beskrive grammatikk

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

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

Repetisjon: Normalformer og SQL

Integritetsregler i SQL. Primærnøkler

Integritetsregler i SQL

Oppgaver Oppgave a: Sett opp mulige relasjoner

Datamodellering og databaser SQL, del 2

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

Integritetsregler i SQL

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

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

Tilkobling og Triggere

Datamodellering og databaser SQL, del 2

Datamodellering og databaser SQL, del 2

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

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Løsningsskisse til eksamensoppgave i TDT4145 Datamodellering og databasesystemer

SQL: Integritetsregler, triggere og views

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

Oppgave 1 Datamodellering 22 %

Oppgave 1 Datamodellering 25 %

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

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

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

Løsningsskisse til eksamensoppgave i TDT4145 Datamodellering og databasesystemer

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

INF1300 Introduksjon til databaser

Oppgave 1 (Opprett en database og en tabell)

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

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

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

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

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

Løsning til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

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

Databaser kort intro. Tom Heine Nätt

HØGSKOLEN I SØR-TRØNDELAG

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

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

Databaser: Relasjonsmodellen, del I

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

EKSAMEN 6102 / 6102N DATABASER

Løsningsforslag maskindatabasen på Ifi SQL og normalisering

1. Innføring i bruk av MySQL Query Browser

Løsningsforlag for oblig 1, databaser 2010

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

Delinnlevering 2. INF1050, våren Inge Svale Hauger Handagard (ishandag) Tor Hildrum (thildru)

SQL Introduksjonskurs. Oversikt

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

INF1300 Introduksjon til databaser

Løsningsforslag matoppskrifter modellering

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

1. SQL spørringer mot flere tabeller

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

INF130 INF130. INF130:Repetisjon INF130:Repetisjon 1. Tabeller og enkle spørringer. Repetisjon

Applikasjonsutvikling med databaser

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

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

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet. Løsningsforslag

IN2090 Databaser og datamodellering. 06 Enkele joins og nestede SELECT

Utvikling fra kjernen og ut

Database security. Kapittel 14 Building Secure Software. Inf329, Høst 2005 Isabel Maldonado

IN2090 Databaser og datamodellering 07 Datamanipulering

SQL Oppgave 3. SQL oppgave 3. Løsningsforslag

SQL Structured Query Language

IN2090 Databaser og datamodellering 07 Datamanipulering

INF1300 Introduksjon til databaser: SQL Structured Query Language

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Eksamen i emne TDT4165 PROGRAMMERINGSSPRÅK

SQL Structured Query Language

Dette er vår første obligatoriske oppgave i kurset Moderne Databaseteknologi.

Relasjoner terminologi

Systemutvikling fra kjernen og ut, fra skallet og inn

Indre select-setninger Nestede select-setninger

IN2090 Databaser og datamodellering. 09 Aggregering og sortering

Notater: INF1300. Veronika Heimsbakk 8. januar 2013

Tabeller og enkle spørringer

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

Tabelldefinisjon og datamanipulering

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

IN2090 Databaser og datamodellering. 09 Aggregering og sortering

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

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

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

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

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

HØGSKOLEN I SØR-TRØNDELAG

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

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

Videregående programmering 6

SQL: SELECT-spørringer

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

Transkript:

NTNU Norges teknisk-naturvitenskapelige Universitet Institutt for datateknikk og informasjonsvitenskap Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL Side 1 av 6

Oppgave 1 1) 2) 3) 4) 5) 6) ' 7) 8) 9) 10) Side 2 av 6

11) Oppgave 2 α) CREATE TABLE KUNDE (KUNDENR INT NOT NULL, NAVN VARCHAR(20) NOT NULL, KREDITTGRENSE INT NOT NULL, POSTNR CHAR(4), PRIMARY KEY (KUNDENR), FOREIGN KEY (POSTNR) REFERENCES POSTSTED(POSTNR) CREATE TABLE POSTSTED (POSTNR CHAR(4) NOT NULL, POSTSTED VARCHAR(20) NOT NULL, PRIMARY KEY (POSTNR) CREATE TABLE BESTILLING (ARTNR CHAR(1) NOT NULL, KUNDENR INT NOT NULL, ANT INT NOT NULL, PRIMARY KEY (ARTNR, KUNDENR), FOREIGN KEY (ARTNR) REFERENCES ARTIKKEL(ARTNR), FOREIGN KEY (KUNDENR) REFERENCES KUNDE(KUNDENR) CREATE TABLE ARTIKKEL (ARTNR CHAR(1) NOT NULL, NAVN VARCHAR(20) NOT NULL, ANT INT NOT NULL, PRIS DECIMAL(5,2) NOT NULL, PRIMARY KEY (ARTNR), UNIQUE (NAVN) β) For å forplante endringer i KUNDE eller ARTIKKEL til tabellen BESTILLING, kan vi endre deklarasjonene av fremmednøklene slik at vi oppnår ønsket effekt: CREATE TABLE BESTILLING ( FOREIGN KEY (ARTNR) REFERENCES ARTIKKEL(ARTNR) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (KUNDENR) REFERENCES KUNDE(KUNDENR) ON DELETE CASCADE ON UPDATE CASCADE For postnumre virker det mest naturlig å la endringer forplantes til KUNDE, mens vi lar være å gjøre noe hvis et poststed blir nedlagt (slettet) slik at brukerne kan håndtere situasjonen: CREATE TABLE KUNDE ( Side 3 av 6

FOREIGN KEY (POSTNR) REFERENCES POSTSTED(POSTNR) ON UPDATE CASCADE χ) For å undersøke om kravet er oppfylt må vi gjøre en spørring som involverer aggregering og som trenger data fra flere tabeller. Vi kan ikke få spesifisert kravet som en del av tabelldefinisjonene i a) og vi må lage en generell regel, en såkalt assertion : CREATE ASSERTION KREDITT_BEGRENSNING CHECK ( NOT EXIST ( SELECT K.KUNDENR, K.KREDITTGRENSE, SUM(B.KVANTUM * A.PRIS) FROM KUNDE K, BESTILLING B, ARTIKKEL A WHERE B.ARTNR = A.ARTNR AND B.KUNDENR = K.KUNDENR GROUP BY K.KUNDENR, K.KREDITTGRENSE HAVING SUM(B.KVANTUM * A.PRIS) > KREDITTGRENSE) Legg merke til at vi må ta med KREDITTGRENSE i SELECT-linja for å kunne bruke den i HAVING-betingelsen. Oppgave 3 a) SELECT TITTEL FROM BOK; b) SELECT * FROM FORFATTER WHERE NASJONALITET='Norsk'; c) SELECT FORLAGID, FORLAGNAVN, TELEFON FROM FORLAG WHERE ADRESSE='Oslo' ORDER BY FORLAGNAVN; d) SELECT TITTEL, FORLAGNAVN FROM BOK, FORLAG WHERE BOK.FORLAGID=FORLAG.FORLAGID; e) SELECT TITTEL, UTGITTÅR FROM BOK, BOKFORFATTER, FORFATTER WHERE BOK.BOKID=BOKFORFATTER.BOKID AND BOKFORFATTER.FORFATTERID=FORFATTER.FORFATTERID AND FORNAVN='Knut' AND ETTERNAVN='Hamsun'; f) SELECT FORNAVN, ETTERNAVN, FØDEÅR FROM FORFATTER WHERE ETTERNAVN LIKE 'H%'; g) SELECT COUNT(*) FROM FORLAG; h) SELECT TITTEL, FORNAVN, ETTERNAVN, FORLAGNAVN FROM BOK, FORLAG, FORFATTER, BOKFORFATTER WHERE BOK.BOKID=BOKFORFATTER.BOKID AND BOK.FORLAGID=FORLAG.FORLAGID AND NASJONALITET='Britisk'; i) SELECT FORFATTER.FORNAVN, FORFATTER.ETTERNAVN, COUNT(*) FROM BOK, FORFATTER, BOKFORFATTER WHERE BOK.BOKID=BOKFORFATTER.BOKID AND BOKFORFATTER.FORFATTERID=FORFATTER.FORFATTERID GROUP BY FORFATTER.FORNAVN, FORFATTER.ETTERNAVN ORDER BY COUNT(*) DESC; j) SELECT TITTEL, UTGITTÅR FROM BOK WHERE UTGITTÅR=(SELECT MIN(UTGITTÅR) FROM BOK k) SELECT F.FORLAGNAVN, COUNT(*) FROM FORLAG F, BOK B WHERE B.FORLAGID=F.FORLAGID GROUP BY F.FORLAGNAVN HAVING COUNT(*)>2; Side 4 av 6

l) SELECT F.FORLAGNAVN FROM FORLAG F WHERE F.FORLAGID NOT IN( SELECT F.FORLAGID FROM FORLAG F, BOK B WHERE F.FORLAGID=B.FORLAGID Oppgave 4 a) Hensikten med virtuelle tabeller (views) er å definere nye abstraksjoner basert på eksisterende tabeller for å forenkle bruken av tabellene. Views kan også benyttes som en sikkerhetsmekanisme. Problemet med views er rettet mot oppdaterbarhet. Det kan ofte være vanskelig eller umulig å definere hvordan en oppdatering gjennom et view skal avbildes på basistabellene. I det generelle tilfelle vil man derfor forby oppdateringer gjennom views. De samme problemene gjelder også for slettinger og innsettninger. I noen tilfeller kan imidlertid manipulering gjennom views gis en entydig tolkning overfor basis-tabellene. b) CREATE VIEW PROJECT2 (PNAME, DNAME, NO_OF_EMPLS, TOTAL_HOURS) AS SELECT PNAME, DNAME, COUNT(*), SUM(HOURS) FROM PROJECT, DEPARTMENT,WORKS_ON WHERE DNUM = DNUMBER AND PNUMBER = PNO GROUP BY PNAME; c) 1) SELECT DNO, COUNT(*), SUM(SALARY), AVG(SALARY) FROM EMPLOYEE GROUP BY DNO; 2) SELECT DNO, COUNT(*) FROM EMPLOYEE GROUP BY DNO HAVING SUM(SALARY) > 10000; 3) Viewet er definert over en tabell, men inneholder aggregater, og det er derfor ikke oppdatertbart, Slike som viewet er definert, er det en tabell med avdelingsnummer og aggregerte data om ansatte. Hvis vi ønsker å endre et avdelingsnummer, bør vi oppdatere DEPARTEMENT og sørge for at EMPLOYEE blir oppdatert etter hensikten. 4) Samme betraktninger om oppdateringer av vews med aggregater som i c). Skal vi slette avdelinger, må vi oppdatere DEPARTMENT-tabellen og deretter slette eller bytte avdeling for de ansatte. Oppgave 5 a) SELECT * FROM Supplier WHERE status>15; b) SELECT sname, s.city FROM Supplier s, SuppliesPart sp, Part p WHERE s.sno=sp.sno AND sp.pno=p.pno AND p.pname='screw'; Evt. SELECT DISTINCT. Kan like gjerne ha et nøstet IN-query her: SELECT sname, city FROM Supplier WHERE sno IN (SELECT sno FROM SupplierPart sp, Part p WHERE sp.pno=p.pno AND pname='screw' c) SELECT pno, pname FROM Part WHERE pno IN (SELECT pno FROM SuppliesPart GROUP BY pno HAVING COUNT(*)>1 d) SELECT COUNT(*) Side 5 av 6

FROM Supplier e) SELECT s.city FROM Supplier s, Part p, SuppliesPart sp WHERE s.sno=sp.sno AND sp.pno=p.pno AND p.weight>10; f) SELECT DISTINCT sname WHERE sno NOT IN (SELECT sp.sno FROM SuppliesPart sp, Part p WHERE sp.pno=p.pno AND p.pname='screw') ORDER BY sname; Side 6 av 6