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

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

UNIVERSITETET SQL. Structured Query Language (forts.) 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

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

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

INF1300 Introduksjon til databaser

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.

INF1300 Introduksjon til databaser

Integritetsregler i SQL

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

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

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

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

Metaspråket for å beskrive grammatikk

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

Integritetsregler i SQL. Primærnøkler

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

Integritetsregler i SQL

SQL Structured Query Language

INF1300 Introduksjon til databaser

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

Spørsmålskompilering del 1

Repetisjon: Normalformer og SQL

Spørsmålskompilering del 1

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

Datamodellering og databaser SQL, del 2

SQL: SELECT-spørringer

Datamodellering og databaser SQL, del 2

Utvikling fra kjernen og ut

Indre select-setninger Nestede select-setninger

Datamodellering og databaser SQL, del 2

INF1300 Introduksjon til databaser

1. SQL datadefinisjon og manipulering

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

SQL: SELECT-spørringer

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

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

Relasjonsalgebraen. Algebra

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

Utvikling fra kjernen og ut

Oppgave 1 (Opprett en database og en tabell)

Spørsmålskompilering del 2

IN2090 Databaser og datamodellering. 08 Typer og skranker

IN2090 Databaser og datamodellering. 08 Typer og skranker

Oppgaver Oppgave a: Sett opp mulige relasjoner

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

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

DBMS Database Management System (repetisjon) Programmeringsgrensesnitt. Serialiserbarhet

Databasers typesystem. IN2090 Databaser og datamodellering. 08 Typer og skranker. SQL-standarden vs. RDBMSer. Hvilke datatyper har vi

SQL 3: Opprette tabeller, datainnsetting og utsnitt

SQL, del 1 - select. Hva er SQL?

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

INF1300 Introduksjon til databaser

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

OQL Object Query Language

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

ORDBMS og OODBMS i praksis

IN2090 Databaser og datamodellering 07 Datamanipulering

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

Effektiv eksekvering av spørsmål

Effektiv eksekvering av spørsmål

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

SQL Introduksjonskurs. Oversikt

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

SQL, del 1 - select. Hva er SQL?

LC238D Datamodellering og databaser SQL, del 1 - SELECT

EKSAMEN 6102 / 6102N DATABASER

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

INF3100 V2018 Obligatorisk oppgave nr. 2

IN2090 Introduksjon til databaser

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

Tilkobling og Triggere

Et objektorientert spørrespr. rrespråk: Object Query Language (OQL)

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

Dagens tema: Relasjonsmodellen (funksjonelle avhengigheter og nøkler, integritetsregler) Realisering: Fra ORM til relasjoner

Transkript:

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

null Resultatet av å evaluere et uttrykk som produserer en skalar verdi, kan være null Mulige tolkninger av null: Verdien fins, men er ukjent Verdi her har ingen mening Verdi fins, men er priviligert informasjon INF3100 11.2.2008 Ellen Munthe-Kaas 2

Regler for null null som del av et aritmetisk uttrykk, gir null som svar Sammenlikning av null med en verdi, gir unknown som svar unntak: is distinct from (som er omtrent som <>, men sammenlikner som om null var en verdi) Det er ikke lov å bruke null eksplisitt som del av et uttrykk Vi kan spørre om resultatet av en beregning er null: A is null A is not null INF3100 11.2.2008 Ellen Munthe-Kaas 3

Gruppering og aggregering med null null ignoreres i aggregeringer bortsett fra i count(*) Eksempel: Hvis A er attributt i relasjonen R, vil select count(a) from R gi antall rader i R hvor A ikke er null select count(*) from R gi antall rader i R (inklusive de som er null i alle attributter) null behandles som en ordinær verdi ved gruppering INF3100 11.2.2008 Ellen Munthe-Kaas 4

unknown unknown and true = unknown unknown and false = false unknown or true = true unknown or false = unknown not unknown = unknown Vi får ikke bruke unknown eksplisitt som del av et uttrykk Hvis en betingelse evalueres til unknown for et tuppel, vil tuppelet ikke komme med i svaret Vi kan spørre om resultatet av en beregning er unknown: A is unknown A is not unknown INF3100 11.2.2008 Ellen Munthe-Kaas 5

Relasjonssammenligninger I SQL har fem operatorer som sammenligner med innholdet i en hel relasjon: exists R (betyr forekomst i R) in R (betyr R) not in R (betyr R) any R (betyr en vilkårlig verdi i R) all R (betyr alle verdier i R) INF3100 11.2.2008 Ellen Munthe-Kaas 6

Relasjonssammenligninger II any og all brukes i praksis bare på relasjoner med ett attributt some er synonym for any = any er ekvivalent med in Eksempel: V.pris < all ( select R.verdi from. where. ) Dette betyr at V.pris skal være mindre enn den minste R.verdi vi fant i delspørsmålet (sub-queriet) INF3100 11.2.2008 Ellen Munthe-Kaas 7

Relasjonssammenligninger III [not] in kan brukes på ett attributt eller på en liste av attributter Eksempler: V.knr not in (select kunde from. where. ) (A.navn, frisør ) in (select navn, yrke from. where. ) INF3100 11.2.2008 Ellen Munthe-Kaas 8

Relasjonssammenligninger IV exists (select * from R) betyr at t (t R), dvs. at ekstensjonen til R ikke er tom Med andre ord: exists er SQLs eksistenskvantor SQL har ingen tilsvarende allkvantor Vi bruker formelen t(p(t)) ( t(p(t))) ( t( P(t))) Dette betyr at vi kan uttrykke at betingelsen C holder for alle tupler i R slik: not exists (select * from R where not C) INF3100 11.2.2008 Ellen Munthe-Kaas 9

Nestede select-setninger select-setninger kan nestes til vilkårlig dybde Eksempel: Finn alle filmtitler som har vært brukt i to eller flere filmer. select distinct title from Movie Old where year < any (select year from Movie where title = Old.title); INF3100 11.2.2008 Ellen Munthe-Kaas 10

Skopregler Et attributt i en subquery tilhører en av tuppelvariablene i subqueryet hvis en av disse har dette attributtet Hvis ikke, søkes attributtet i nærmeste omsluttende (sub)querys tuppelvariable, osv Skopregelen kan brytes ved å kvalifisere attributtet med navnet på en tuppelvariabel fra en omsluttende query INF3100 11.2.2008 Ellen Munthe-Kaas 11

Kostbare operasjoner i SQL distinct: Sortering er generelt kostbart Bør brukes med forsiktighet union, intersect, except: SQL beregner set-variantene av disse (dvs. at flerforekomster fjernes) Vurder å bruke union all, intersect all, except all som er bag-variantene INF3100 11.2.2008 Ellen Munthe-Kaas 12

SQLs DML insert: Innsetting av nye data update: Endring av eksisterende data delete: Sletting av data INF3100 11.2.2008 Ellen Munthe-Kaas 13

insert insert into R(A1, A2,..., Ak) values (v1, v2,..., vk); insert into R(A1, A2,..., Ak) 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 selectsetningen. Dette kan ha sideeffekter på beregningen av select-setningen! INF3100 11.2.2008 Ellen Munthe-Kaas 14

update, delete update R set A 1 =E 1,.., A k =E k [where C]; delete from R [where C]; INF3100 11.2.2008 Ellen Munthe-Kaas 15

Datatyper i SQL Datatype integer smallint real, float double precision numeric(p,s) char(n), varchar(n) text bit(n), bit varying(n) boolean date time timestamp Forklaring Heltall Heltall, mindre plasskrevende enn integer Flyttall (synonyme betegnelser) Flyttall med høyere presisjon p signifikante sifre, s sifre etter desimalpunktum Tekst med henholdsvis fast og variabel lengde Tekst med vilkårlig lengde. Ikke-standard SQL! Bitstreng med henholdsvis fast og variabel lengde Boolsk verdi Dato Klokkeslett Dato og klokkeslett INF3100 11.2.2008 Ellen Munthe-Kaas 16

SQLs DDL create: Opprette tabell drop: Fjerne tabell alter table: Endre tabell Herunder: Legge til eller fjerne kolonner Legge til eller fjerne indekser Legge til, fjerne eller endre integritetsregler (constraints) INF3100 11.2.2008 Ellen Munthe-Kaas 17

create create table R (A 1 type_1 [skranke_1],... A n type_n [skranke_n], [LISTE AV SKRANKER] ); INF3100 11.2.2008 Ellen Munthe-Kaas 18

drop, alter drop table R alter table R add A x D y alter table R drop A x R er et relasjonsnavn A x er et attributt D y er et domene INF3100 11.2.2008 Ellen Munthe-Kaas 19

Indekser DBMS-avhengig syntaks: create index X on R(A 1,..,A k ); drop index X; Valg av indekser må gjøres med omhu Indekser gjør at spørringer mot vedkommende attributt(er) går mye fortere innsetting, sletting og oppdatering blir mer komplisert og tidkrevende INF3100 11.2.2008 Ellen Munthe-Kaas 20

Vurdering av indeksbruk Anta at StarsIn(movieTitle, movieyear, starname) har størrelse 10 blokker Anta at det i middel er 3 stjerner i hver film, og at hver stjerne spiller i 3 filmer Q 1 : select movietitle, movieyear from StarsIn where starname=s; Q 2 : select starname from StarsIn where movietitle=t and movieyear=y; I: insert into StarsIn values (t,y,s); p i : Andel av tiden benyttet på Q i, i=1,2, så andel tid brukt på I er 1 (p 1 +p 2 ) Tallene i tabellen angir antall disk-aksesser Indeks: Ingen starname movietitle Begge Q 1 10 4 10 4 Q 2 10 10 4 4 I 2 4 4 6 Snitt: 2+8p 1 +8p 2 4+6p 2 4+6p 1 6-2p 1-2p 2 INF3100 11.2.2008 Ellen Munthe-Kaas 21

SQLs VDL create view VIEWNAVN as SELECT-SETNING; drop view VIEWNAVN; INF3100 11.2.2008 Ellen Munthe-Kaas 22

Modifisering av viewdata Oppdaterbare views Views hvor det er mulig å oversette modifikasjon på tupler i viewet til modifikasjoner på tupler i basisrelasjonene Forenklet: Et view er oppdaterbart hvis det er definert ved en select (ikke distinct) på attributter fra en basisrelasjon eller et annet oppdaterbart view R hvor where ikke involverer R i et subquery listen i select er fyldig nok til at vi kan etterfylle ikke angitte attributter med defaultverdier eller null og slik konstruere et basistuppel som produserer det angitte viewtuppelet INF3100 11.2.2008 Ellen Munthe-Kaas 23

SQLs DCL grant PRIVILEGIER on DATABASEELEMENT to BRUKERLISTE [with grant option] revoke PRIVILEGIER on DATABASEELEMENT from BRUKERLISTE Vi tar detaljene i neste forelesning INF3100 11.2.2008 Ellen Munthe-Kaas 24

Øvingsoppgave 3 Skjema: Prosjekt(P#,Pnavn,Kunde,Pleder,StartDato) Ansatt(A#,Navn,Tittel,Fdato,Pnr,AnsDato) Timeliste(A#,Dato,P#,Timer) Kunde(K#,Knavn,Adresse) Oppgave: Finn navn, totalt antall timer utført på, og startdato for alle prosjekter bestilt av kunden «Pust og pes AS». Sorter dem slik at det nyeste prosjektet kommer først. INF3100 11.2.2008 Ellen Munthe-Kaas 25

Øvingsoppgave 3 Prosjekt(P#,Pnavn,Kunde,Pleder,StartDato) Ansatt(A#,Navn,Tittel,Fdato,Pnr,AnsDato) Timeliste(A#,Dato,P#,Timer) Kunde(K#,Knavn,Adresse) Løsning: select from where Pnavn, SUM(Timer) as TimeSum, StartDato Kunde K, Timeliste T, Prosjekt P Knavn = Pust og pes AS and K# = P.Kunde and P.P# = T.P# group by P.P#, Pnavn, StartDato order by StartDato desc INF3100 11.2.2008 Ellen Munthe-Kaas 26