Datamodellering og databaser http://www.aitel.hist.no/fag/_dmdb/ SQL, del 2



Like dokumenter
Datamodellering og databaser SQL, del 2

Datamodellering og databaser SQL, del 2

SQL 3: Opprette tabeller, datainnsetting og utsnitt

SQL, del 1 - select. Hva er SQL?

SQL, del 1 - select. Hva er SQL?

LC238D Datamodellering og databaser SQL, del 1 - SELECT

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

Metaspråket for å beskrive grammatikk

Oppgaver Oppgave a: Sett opp mulige relasjoner

1. SQL datadefinisjon og manipulering

Integritetsregler i SQL. Primærnøkler

Integritetsregler i SQL

EKSAMEN 6102 / 6102N DATABASER

Repetisjon: Normalformer og SQL

Databaser: Relasjonsmodellen, del I

Miniverden og ER- modell

Oppgave 1 (Opprett en database og en tabell)

Normalisering. Hva er normalisering?

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

Normalisering. Hva er normalisering?

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

Integritetsregler i SQL

EKSAMEN DATABASER

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

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

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

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

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

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

HØGSKOLEN I SØR-TRØNDELAG

Tilkobling og Triggere

EKSAMEN 6102 / 6102N DATABASER

SQL: Integritetsregler, triggere og views

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

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

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

Applikasjonsutvikling med databaser

IN2090 Databaser og datamodellering 07 Datamanipulering

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

Transaksjoner og flerbrukerproblematikk. Transaksjoner

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

SLUTTPRØVE 5602 DATABASER I (inkludert vedlegg og denne forsida) Vedlegg: A: Eksempeldata og B: Svarark til oppgave 4

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

Utvikling fra kjernen og ut

Å bruke Java API-et til å sortere tabeller/arraylister der elementene er (referanser til) objekter

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

1. Innføring i bruk av MySQL Query Browser

9. ASP med databasekopling, del II

Øvingsoppgave uke 3. Fanger i fengsel

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

EKSAMEN DATABASER

Eksamen i IBE102 Webutvikling Våren 2017.

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

Transaksjoner og flerbrukerproblematikk. Transaksjoner

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

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

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

Normalisering. Hva er normalisering?

ORDBMS og OODBMS i praksis

HØGSKOLEN I SØR-TRØNDELAG

Sikkerhet og tilgangskontroll i RDBMS-er

INF1300 Introduksjon til databaser

5602 DATABASER Bokmål/nynorsk. 17 (inkludert denne forsiden) Eksamensresultatene blir offentliggjort på Studentweb.

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

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

EKSAMEN. Emnekode: ITF Emne: Databaser. Dato: Eksamenstid: Hjelpemidler: Syntaksoversikt (vedlagt oppgaven)

IN2090 Databaser og datamodellering 07 Datamanipulering

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.

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

1. Introduksjon til Oracle Express Edition

PostGIS som navet i dataforvaltningen ved Skog og landskap

10. ASP og SQL Innledning Recordset-objektet. Innhold. Referanse til læreboka Kapittel Se detaljer nedenfor.

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

HØGSKOLEN I SØR-TRØNDELAG

INF1300 Introduksjon til databaser

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

IN2090 Databaser og datamodellering. 08 Typer og skranker

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

Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting STOL ALDRI PÅ KLIENTEN!

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

Systemutvikling fra kjernen og ut, fra skallet og inn

INF1300 Introduksjon til databaser

Oppgave #1 Tablespacer, Tabeller, Indexer, og Brukere

Ekvivalente stier (Equivalence of Path, EOP) i storm

Løsningsforslag maskindatabasen på Ifi SQL og normalisering

HØGSKOLEN I SØR-TRØNDELAG

svarforslag SLUTTEKSAMEN IBE211 Databaser, våren 2015

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

Videregående programmering 6

SQL Introduksjonskurs. Oversikt

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

INF1300 Introduksjon til databaser: SQL Structured Query Language

Løsning til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Databaser kort intro. Tom Heine Nätt

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

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

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Transkript:

http://www.aitel.hist.no/fag/_dmdb/ SQL, del 2 Eksempelbase side 2 Virtuelle tabeller (views) side 3-6 NULL-verdier side 7-14 UPDATE-setningen side 15-16 INSERT-setningen side 17 DELETE-setningen side 18 Indekser side 19 Læreboka: Side 115-120, 142-150, 169-175, 270-274 Se også http://www.sqlzoo.net/ Forelesning 9, uke 41 Eksempelbase leverandor lev_nr lev_navn status lev_by 1 Svendsen 20 Lillehammer 2 Jensen 10 Porsgrunn 3 Bø 30 Porsgrunn 4 Christiansen 20 Lillehammer 5 Andersen 30 Arendal produkt prod_nr prod_navn kode vekt prod_by 1 synåler rød 12 Lillehammer 2 binders grønn 17 Porsgrunn 3 skruer blå 17 Risør 4 skruer rød 14 Lillehammer leveranse lev_nr prod_nr antall 1 1 300 1 2 200 1 3 400 1 4 200 1 5 100 2 1 300 2 2 400 3 2 200 4 2 200 4 4 300 4 5 400 5 knapper blå 12 Porsgrunn 6 spiker rød 19 Lillehammer side 2 1

Virtuelle tabeller views ikke øyeblikksbilder Syntaks: CREATE VIEW navn AS spørring; Eksempel: create view daarlige_leverandorer as select lev_nr, lev_navn, status from leverandor where status < 30; select * from daarlige_leverandorer; Vi lager ikke en fysisk tabell, men vi gir navn til et vindu mot databasen Kan bruke et view på samme måte som en vanlig fysisk tabell, men det er begrensninger på oppdateringer. Aktuelt for å forenkle spørringer. Aktuelt for å lage spesialtilpassede utsnitt. lev_nr lev_navn status lev_by 1 Svendsen 20 Lillehammer 2 Jensen 10 Porsgrunn 3 Bø 30 Porsgrunn 4 Christiansen 20 Lillehammer 5 Andersen 30 Arendal side 3 Oppdatering via virtuelle tabeller (views) Hva skal til for at en skal kunne oppdatere tabeller (insert, delete, update) som vises i et vindu (view)? SQL-standard: Vinduet må være basert på kun én tabell. Definisjonen må ikke inneholde uttrykk, funksjoner, mengdeoperatorer, de reserverte ordene DISTINCT, GROUP BY eller ORDER BY. Oracle godtar i visse tilfeller oppdatering av vinduer som er basert på mer enn én tabell JavaDB støtter ikke oppdatering via view s i det hele tatt side 4 2

Oppdatering via virtuelle tabeller (views) (ikke implementert i JavaDB) UPDATE UPDATE daarlige_leverandorer SET lev_navn = 'Olsen' WHERE lev_nr = 5; DELETE DELETE FROM daarlige_leverandorer WHERE lev_nr = 4; (krever: DELETE FROM leveranse WHERE lev_nr = 4;) INSERT INSERT INTO daarlige_leverandorer VALUES(8, 'Bye', 40); Opprettes, men vises ikke i den virtuelle tabellen WITH CHECK OPTION forhindrer at rader som ikke passer inn i den virtuelle tabellen blir lagt inn: CREATE VIEW daarlige_leverandorer2 AS SELECT lev_nr, lev_navn,status FROM leverandor WHERE status < 30 WITH CHECK OPTION; Forandrer dataene i den fysiske tabellen leverandor. side 5 Oppdatering via virtuelle tabeller basert på mer enn én fysisk tabell (ikke pensum) CREATE VIEW lev_info AS SELECT l.lev_nr, lev_navn, p.prod_nr, prod_navn, leveranse.antall FROM leverandor l, leveranse, produkt p WHERE l.lev_nr = leveranse.lev_nr AND p.prod_nr = leveranse.prod_nr AND p.prod_nr < 3; SELECT * FROM lev_info; observer utskrift! Ikke tillatt: UPDATE lev_info SET lev_navn = Hansen WHERE lev_nr = 2; Tillatt i Oracle: UPDATE lev_info SET antall = 500 WHERE lev_nr = 2 AND prod_nr = 1; UPDATE lev_info SET antall = 700 WHERE lev_nr = 2; side 6 3

NULL-verdier NULL betyr at dataverdien mangler. Det er ikke det samme som tallverdien 0 eller et tekstfelt som inneholder bare blanke tegn. Kan spare oss for mye problemer dersom vi kan unngå NULL-verdier. Kan bruke DEFAULT til å angi verdi som skal gjelde dersom spesiell verdi ikke oppgis: CREATE TABLE leverandor( lev_nr INTEGER, lev_navn VARCHAR(15) NOT NULL, status INTEGER DEFAULT 0, lev_by VARCHAR(15) DEFAULT ' ', CONSTRAINT lev_pk PRIMARY KEY(lev_nr)); Merk at i Oracle (ikke i JavaDB) blir den tomme strengen '' tolket som NULL. For at det ikke skal skje må strengen innholde minst ett blankt tegn. DEFAULT-verdiene tas i bruk f.eks. slik: INSERT INTO leverandor(lev_nr, lev_navn) VALUES(1234, 'Svendsen'); Kan vanligvis ikke bruke default-verdier for fremmednøkler. side 7 NULL-verdier, forts Eksempel tabellen lev_med_null: lev_nr lev_navn status lev_by 1 Svendsen NULL NULL 2 Jensen 10 Porsgrunn 3 Bø 30 Porsgrunn 4 Christiansen 20 Lillehammer 5 Andersen 30 Arendal 6 Jensen NULL NULL 7 Hansen 40 NULL CREATE TABLE lev_med_null( lev_nr INTEGER, lev_navn VARCHAR(15) NOT NULL, status INTEGER, lev_by VARCHAR(15), CONSTRAINT lev_med_null_pk PRIMARY KEY(lev_nr)); INSERT INTO lev_med_null SELECT * FROM leverandor; INSERT INTO lev_med_null( lev_nr, lev_navn, status, lev_by) VALUES(6, 'Jensen', NULL, NULL); INSERT INTO lev_med_null( lev_nr, lev_navn, status, lev_by) VALUES(7, 'Hansen', 40, NULL); UPDATE lev_med_null SET status = NULL, lev_by = NULL where lev_nr = 1; side 8 4

Test på NULL-verdier Test på likhet Test på ulikhet side 9 Du må alltid ta hensyn til mulige NULL-verdier Eksempel: Finn alle som ikke er stasjonert på Lillehammer side 10 5

COUNT( ), GROUP BY og NULL COUNT(*) COUNT(lev_by) COUNT(DISTINCT lev_by) GROUP BY side 11 DISTINCT, aggregeringsfunksjoner og NULL-verdier DISTINCT SELECT DISTINCT status FROM lev_med_null; Aggregeringsfunksjoner Finn gjennomsnittlig statusverdi SELECT AVG(status) FROM lev_med_null; SELECT SUM(status) / COUNT(status) FROM lev_med_null; SELECT SUM(status) / COUNT(*) FROM lev_med_null; side 12 6

NULL-verdier i beregninger Beregninger med NULL NULL-verdier er ikke lik noen annen verdi (unntak GROUP BY og DISTINCT der en NULL-verdi behandles som lik med en annen NULL-verdi): Rader med NULL-verdier i sammenlikningsfeltet blir dermed ikke med i indre forening Gjelder spesielt der fremmednøkler er NULL For å få med disse må en bruke LEFT/RIGHT JOIN side 13 NULL-verdier i delspørringer Eksempler side 14 7

UPDATE-setningen Produkt 2 skal skifte til fargekode gul, og vekten skal økes med 3: update produkt set kode = gul, vekt = 3 where prod_nr = 2; Gjør om alle vektene fra gram til kilo update produkt set vekt = vekt / 1000; Nullstill antall levert for alle leverandører i Porsgrunn: update leveranse set antall = 0 where lev_nr in (select lev_nr from leverandor where lev_by = Porsgrunn ); Sett lev_by til NULL for leverandør 3: update leverandor set lev_by = null where lev_nr = 3 side 15 Endre primærnøkkelverdi Endre leverandør-nummer 3 til 7: UPDATE leverandor SET lev_nr = 7 WHERE lev_nr = 3; ikke tillatt hvis autonummerert verdi ikke tillatt pga fremmednøkkelverdi i leveranse UPDATE CASCADE ville gjort dette mulig, og også endret alle aktuelle fremmednøkkelverdier dersom primærnøkkelen ikke er et løpenummer, må vi regne med at det før eller senere kan bli aktuelt å forandre på den system uten UPDATE CASCADE lage ny leverandør-rad, endre lev_nr i leveranse til å referere til denne nye raden, slette opprinnelige leverandør-rad må defineres som én transaksjon side 16 8

INSERT-setningen Enkle INSERT-setninger INSERT INTO leverandor(lev_nr, lev_navn, status, lev_by) VALUES(10, 'Åseby', 20, 'Oslo'); INSERT INTO leverandor(lev_nr, lev_navn) VALUES(DEFAULT, 'Hansen'); For øvrige felt brukes DEFAULT- og NULL-verdier Kopierer data fra en tabell til en annen (aktuelt ved historikk): CREATE TABLE daarlige_leverandor( lev_nr INTEGER PRIMARY KEY, lev_navn VARCHAR(15) NOT NULL, status INTEGER, lev_by VARCHAR(15)); INSERT INTO daarlige_leverandor(lev_nr, lev_navn, status, lev_by) SELECT * FROM leverandor WHERE status < 30; Bør vurdere å slette dataene som er kopiert fra tabellen leverandor side 17 DELETE-setningen DELETE FROM leveranse; sletter alle dataene DELETE FROM leveranse WHERE... DELETE FROM leverandor WHERE lev_nr = 3; ikke tillatt hvis leverandøren har leveranse (fremmednøkkelkrav) side 18 9

Indekser Indekser muliggjør hurtigsøking blant dataene Vanlig at primærnøkler og fremmednøkler indekseres automatisk, se f.eks. NetBeans/JavaDB Indeksen lagret på egen fil liten fil som ofte får plass i minnet nøkkelverdi og peker til de fysiske dataene (blokka der dataene er lagret, én diskaksess pr oppslag) Kan ha flere indekser pr tabell Indeksene ofte organisert som B+-tre (se figur side 273) Mulig å opprette ekstra indekser på kolonner som en vet at ofte etterspørres CREATE INDEX indeksnavn ON tabell(kolonnenavn); DROP INDEX indeksnavn; Indekser gir raskere søk, men tregere oppdatering side 19 10