Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle.

Slides:



Advertisements
Liknende presentasjoner
Mer om SQL-spørringer og funksjoner
Advertisements

Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Hans Olav Norheim
Tabeller av objekter Klassen ArrayList
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
LC238D Datamodellering og databaser Else Lervik, september 2012 Forelesning 6, Uke 39 Objektorientering i ER-modeller.
© 2006 IFS AB. All rights reserved.
Fremgangsmåte for å oppdatere brikkenavn og antall i T-DOC for operasjonsavdelingene Trondheim, 8. juni 2010.
Mange til mange sammenhengen
Høgskolen i Oslo Webprogrammering SQL og databaser del 3.
Java database persistence framework.  SELECT by FROM postnr AS p WHERE ( SELECT DISTINCT postnr FROM addr AS a WHERE user.adrId = a.Id ) = p.postnr;
LC238D Datamodellering og databaser Introduksjon til fagfeltet Else Lervik, august 2012Forelesning 1, uke 34 Datafilerside.
TIF seminar -Visual Basic (VBA) og RExcel Elisabeth Orskaug Norsk Regnesentral Oslo, 8. november 2011.
Avansert SQL og problemløsning
SQL, del 1 - select Hva er SQL? side 2 Eksempelbase side 3
Databaser Verktøybok om Access med innslag av Frontpage: Snarveien til Access.
Databaseteori.
LC238D Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, uke 45 Transaksjoner og flerbrukerproblematikk.
Omlasting, direkteleveranser og flere vareslag. LOG530 Distribusjonsplanlegging 2 2 Vi har nå utvidet nettverket med flere vareslag. Vi har samme distribusjonsnett.
Databasehåndtering med MySQL
© Lars-Erik Kindblad.  Et platformuavhengig verktøy for å automatisere build prosesser.  Støttes og drives av Apache Software Foundation.  Kommer ferdig.
Eksempel AOA (Activity On Arc)
1 Øvingsforelesning 7 Kai Olav Ellefsen. 2 I dag… Databaser: Databasedesign og SQL JSP: Koble databasen til nettsiden Kai Olav Ellefsen, NTNU, 2010.
ANDROID-PROGRAMMERING VÅREN ACTIVITY OG INTENTS Repetisjon fra forrige gang.
SQL The questing beast Sir Thomas Mallory. Codds krav 5.Krav om omfattende språk for datahåndtering Det må finnes et relasjonelt språk som støtter datadefinisjon,
Filer Finne minste Finne Største Beregne gjennomsnitt Variabler Tabeller – Arrays Lage frekvenstabell.
Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, uke 44 Å programmere databasetjeneren – JavaDB.
Relasjonsmodellen, del II
Normalisering Framstillingen avviker noe fra læreboka,
Se ellers læreboka, kap , side
LC238D Datamodellering og databaser Else Lervik, september 2012 Forelesning 6, Uke 39 Objektorientering i ER-modeller.
Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle.
Siste forelesning ER/EER-modellering
Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse.
In 135 Datamodellering og databaser Introduksjon, Enkeltentiteten, Informasjon Ola Bø.
LC238D Datamodellering og databaser Else Lervik, september 2011 Forelesning 6, Uke 38 Objektorientering i ER-modeller.
Sqlite Et lite eksempel på en SQL- database. SQL kan startes på ulike måter Kommandolinjeversjon or Windows –Programmet må innstalleres Hentes fra
DAG HOFTUN KNUTSEN Bruk og misbruk av SQL DAG HOFTUN KNUTSEN
Entity Framework Andreas Knudsen, Bekk Consulting AS 31/
SQLHiA Transaksjoner. SQLHiA TransaksjonDefinisjon En transaksjon er en serie av en eller flere SQL-statement som til sammen danner en logisk enhet. Med.
1 Arrayer og form(ularer) (Kapittel 4). 2 Mål  Forstå assosiative og superglobale arrays  Kunne behandle webformularer (forms)  Kjenne forskjellen.
1 Organisering av kode (Kapittel 5). 2 Mål ● Forstå inkludering er og hvilken gevinst det gir ● Lære å utvikle egne funksjoner ● Forstå variablenes virkemåte.
Structured Query Language Kræsj-kurs
Høgskolen i Oslo Webprogrammering Ajax og PHP. I dag l Hvordan få en bedre brukeropplevelse via Ajax- script l Gjennomgang av kode l Oppgaveløsning på.
ER-modellen, notasjon ENTITETS- Attributter TYPE Relasjon
Eksempel på SQL ”SQL-setninger” har en struktur som likner på ”naturlig språk”, med ”verb, subjekter og adjektiver”. SQL-setningene begynner alltid med.
DATABASE: Oppgave 2 et medlemsregister for en idrettsklubb med flere idrettsgrener (fotball, håndball, osv). klubben ønsker å lagre informasjon om medlemmenes.
Andre funksjoner. Her kommer en beskrivelse av søkefunksjoner, knapper og annen funksjonalitet. 2.
Introduksjon I126 Databaser og datamodellering Høsten 2000 Institutt for informatikk Universitet i Bergen.
Fødselsdato (dmå) er født har lønn Ansatt (ansnr) Beløp (NKr)+ Telefon
Vi viser litt fra CD’en Norges Eiendommer. Hvordan en rapport defineres og skrives ut.
Linq To SQL Fagdag 20. November DataContext  DataContexten er mappingen mot databasen –Generer objekter for alle entiteter (tabeller), med properties.
Oppgaver til kodegenerering etc. INF-5110, 2013 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet,
Mandag Excel.
Kontinuerlig kvalitetskontroll. Hvordan komme helt i mål.
INF3100 – – Ellen Munthe-Kaas Indeksering UNIVERSITETET I OSLO © Institutt for Informatikk Utvalgte animerte lysark: lysark nr. 7, 8, 9, 10,
Eksempel: Sletting ved tynn indeks Slett post med a = 60 –Ingen endring nødvendig i indeksen. Slett post med a = 40 –Den første posten i blokken er blitt.
Termbaser Lars Nygaard. Termbaser Database over begreper Innhold –Definisjoner –Oversettelser –Leksikalske relasjoner –Eksempler.
Se ellers læreboka, kap , side
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Web-grensesnitt Øyvind A. Bratne - April 2004.
Mer avansert kryptering Mål: Kode et dokument slik at det blir uleselig for de som ikke har kodenøkkelen.
HUMIT1731 Hypermedier Introduksjon til XSL Transformation (XSLT)
Jæger: Robuste og sikre systemer INF150 Programmering torsdag 14.9 Ulike måter for å lese inn og skrive ut data. Kap. 3.5 mer om if – setninger Ferdige.
FUNKSJONSBESKRIVELSE En detaljert forklaring for kunden hvordan en funksjon er tiltenkt å virke Viktig for å sette forventningsstyring, begrensninger og.
Bompasseringer Mål: Slå sammen data om bompasseringer fra mange bomselskap. Sende ut en samlefaktura til hver bileier.
Oversikt Access Hva en bør beherske så langt. Tabeller Felt Typer (heltall, desimaltall, tekst, Boolean) Primary Key.
Utvalgte animerte lysark: lysark nr. 7, 8, 9, 10, 26, 28, 30, 33, 35
Brukstips! Tekstfeltene i denne filen er tabeller. Du kan endre skrifttype og størrelse etter ønske. Jeg syns det er greit å lagre filen med et annet navn.
Prevas Connector og WHM versjon 4.0
Utskrift av presentasjonen:

Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle tabeller (views)side 3-6 NULL-verdierside 7-14 UPDATE-setningenside INSERT-setningenside 17 DELETE-setningenside 18 Indekserside 19 Læreboka: Side , , , Se også

Datamodellering og databaser Else Lervik, oktober 2011 side 2 Eksempelbase prod_nrprod_navnkodevektprod_by 1synålerrød12Lillehammer 2bindersgrønn17Porsgrunn 3skruerblå17Risør 4skruerrød14Lillehammer 5knapperblå12Porsgrunn 6spikerrød19Lillehammer lev_nrlev_navnstatuslev_by 1Svendsen20Lillehammer 2Jensen10Porsgrunn 3Bø30Porsgrunn 4Christiansen20Lillehammer 5Andersen30Arendal lev_nrprod_nrantall leveranse leverandor produkt

Datamodellering og databaser Else Lervik, oktober 2011 side 3 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_nrlev_navnstatuslev_by 1Svendsen20Lillehammer 2Jensen10Porsgrunn 3Bø30Porsgrunn 4Christiansen20Lillehammer 5Andersen30Arendal

Datamodellering og databaser Else Lervik, oktober 2011 side 4 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

Datamodellering og databaser Else Lervik, oktober 2011 side 5 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.

Datamodellering og databaser Else Lervik, oktober 2011 side 6 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;

Datamodellering og databaser Else Lervik, oktober 2011 side 7 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.

Datamodellering og databaser Else Lervik, oktober 2011 side 8 NULL-verdier, forts lev_nrlev_navnstatuslev_by 1SvendsenNULL 2Jensen10Porsgrunn 3Bø30Porsgrunn 4Christiansen20Lillehammer 5Andersen30Arendal 6JensenNULL 7Hansen40NULL Eksempel – tabellen lev_med_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;

Datamodellering og databaser Else Lervik, oktober 2011 side 9 Test på NULL-verdier •Test på likhet •Test på ulikhet

Datamodellering og databaser Else Lervik, oktober 2011 side 10 Du må alltid ta hensyn til mulige NULL-verdier •Eksempel: –Finn alle som ikke er stasjonert på Lillehammer

Datamodellering og databaser Else Lervik, oktober 2011 side 11 COUNT( ), GROUP BY og NULL •COUNT(*) •COUNT(lev_by) •COUNT(DISTINCT lev_by) •GROUP BY

Datamodellering og databaser Else Lervik, oktober 2011 side 12 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;

Datamodellering og databaser Else Lervik, oktober 2011 side 13 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

Datamodellering og databaser Else Lervik, oktober 2011 side 14 NULL-verdier i delspørringer •Eksempler

Datamodellering og databaser Else Lervik, oktober 2011 side 15 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

Datamodellering og databaser Else Lervik, oktober 2011 side 16 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

Datamodellering og databaser Else Lervik, oktober 2011 side 17 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

Datamodellering og databaser Else Lervik, oktober 2011 side 18 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)

Datamodellering og databaser Else Lervik, oktober 2011 side 19 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