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

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

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 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. (The intergalactic dataspeak) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

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

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

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

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

UNIVERSITETET I OSLO 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

INF1300 Introduksjon til databaser

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

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

INF1300 Introduksjon til databaser: SQL Structured Query Language

SQL Structured Query Language

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

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

INF1300 Introduksjon til databaser

SQL: SELECT-spørringer

SQL: SELECT-spørringer

SQL Structured Query Language

Relasjoner terminologi

SQL Structured Query Language

Relasjonsalgebraen. Algebra

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

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

Relasjonsalgebra Kopi av lysark om relasjonsalgebra. Vi går igjennom denne for å lage et matematisk fundament for forståelsen av hvordan

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

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

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

UNIVERSITETET I OSLO RELASJONSALGEBRA. Regning med relasjoner. Institutt for Informatikk. INF Ragnar Normann

Metaspråket for å beskrive grammatikk

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

Relasjoner terminologi

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

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

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

Spørsmålskompilering del 1

Repetisjon: Normalformer og SQL

Integritetsregler i SQL

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

INF1300 Introduksjon til databaser

INF1300 Det meste av resten av

Spørsmålskompilering del 1

Integritetsregler i SQL

Integritetsregler i SQL. Primærnøkler

UNIVERSITETET. Relasjonsalgebra. INF Ragnhild Kobro Runde

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

SQL: Integritetsregler, triggere og views

DBMS Database Management System (repetisjon) Programmeringsgrensesnitt. Serialiserbarhet

Indre select-setninger Nestede select-setninger

1. SQL datadefinisjon og manipulering

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

INF1300 Introduksjon til databaser

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

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

Datamodellering og databaser SQL, del 2

Datamodellering og databaser SQL, del 2

Datamodellering og databaser SQL, del 2

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

Effektiv eksekvering av spørsmål

IN2090 Databaser og datamodellering 07 Datamanipulering

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

Tilkobling og Triggere

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

UNIVERSITETET SQL-99. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Utvikling fra kjernen og ut

Databaser: Relasjonsmodellen, del I

ORDBMS og OODBMS i praksis

Spørsmålskompilering del 2

Miniverden og ER- modell

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

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

Effektiv eksekvering av spørsmål

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

Databaser fra et logikkperspektiv

INF1300 Introduksjon til databaser

Effektiv eksekvering av spørsmål

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

SQL, del 1 - select. Hva er SQL?

Effektiv eksekvering av spørsmål

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

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

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

Oppgave 1 (Opprett en database og en tabell)

2: Hvilke verdier forekommer i attributtet filmtype i relasjonen filmitem? Lag en oversikt over filmtypene og hvor mange filmer innen hver type.

IN2090 Databaser og datamodellering. 06 Enkele joins og nestede SELECT

SQL, del 1 - select. Hva er SQL?

LC238D Datamodellering og databaser SQL, del 1 - SELECT

INF212 - Databaseteori. Kursinnhold

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

SQL og Mengdelære. Oracle, MySQL, Access, bruker forskjellige syntaks.

SQL Introduksjonskurs. Oversikt

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

Relasjonsalgebra. Hva?

DBS18 - Strategier for Query-prosessering

Transkript:

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

SQL SQL Structured Query Language er et deklarativt språk for spørringer mot relasjonsdatabaser Uttrykkskraften er omtrent som i relasjonsalgebraen utvidet med tilleggsoperatorene SQL inneholder også konstruksjoner for å definere nye relasjonsdatabaser, for å legge inn og endre data i databasen, mm INF3100 8.2.2016 Ellen Munthe-Kaas 2

Mange standarder: SQL-standarder ANSI SQL (1986) SQL-92 (SQL2) - oppdatert og utvidet versjon av ANSI SQL SQL:1999 (SQL3) - regulære uttrykk, rekursive queries, triggere, ikke-skalare typer, objekt-orienterte mekanismer SQL:2003 - kolonner med autogenererte verdier, XML datatype, vindusfunksjonalitet SQL:2006 - integrasjon av XMLs XQuery med SQL mm SQL:2008 - instead of-triggere mm SQL:2011 - forbedret støtte for behandling av tid (temporale databaser) INF3100 8.2.2016 Ellen Munthe-Kaas 3

SQL-dialekter Mange dialekter: Hvert DBMS har sine særegenheter Alle oppfyller ANSI SQL og det meste av SQL-92. I tillegg støtter hvert DBMS utvalgte deler av de øvrige standardene. Utover dette har hvert DBMS egendefinerte språkkonstruksjoner og funksjoner Noen deler av SQL er ikke veldefinert (selv ikke i ANSI SQL) og behandles derfor potensielt forskjellig i forskjellige DBMSer INF3100 8.2.2016 Ellen Munthe-Kaas 4

SQLs bestanddeler SQL består av en samling konstruksjoner som funksjonelt, men ikke syntaktisk, kan deles opp slik: SDL: Storage Definition Language 3-skjema-arkitekturens fysiske lag DDL: Data Definition Language 3-skjemaarkitekturens konseptuelle lag VDL: View Definition Language 3-skjemaarkitekturens presentasjonslag DML: Data Manipulation Language innlegging, endring og sletting av data DQL: Data Query Language spørrespråk DCL: Data Control Language integritet og sikkerhet INF3100 8.2.2016 Ellen Munthe-Kaas 5

3-skjemaarkitekturen for databaser (repetisjon) Presentasjonslaget beskrevet med eksterne skjemaer («views») hvordan informasjon skal presenteres for ulike brukere Det logiske laget beskrevet i det begrepsmessige skjemaet hva som kan lagres og hva som er lovlige forandringer Det fysiske laget beskrevet i det interne skjemaet hvordan informasjon lagres, forandres og bearbeides INF3100 8.2.2016 Ellen Munthe-Kaas 6

SQLs DQL select [distinct] <attributtliste> from <navneliste> [where <where-betingelse>] [group by <grupperingsattributter> [having <having-betingelse>] ] [order by <attributt> [asc desc] [, <attributt> [asc desc] ]... ]; [ ] betyr at dette leddet er en valgfri del av setningen betyr at leddet kan gjentas vilkårlig mange ganger S union T, S union all T S intersect T, S intersect all T S except T, S except all T with... select...... INF3100 8.2.2016 Ellen Munthe-Kaas 7

Tuppelvariabeltolkning av select-setningen 1. Til hver relasjon i from tilordnes en variabel. Variablene kalles tuppelvariable. 2. La hver tuppelvariabel systematisk gjennomløpe tuplene i den tilhørende relasjonen (f.eks. ved nestede løkker, en for hver tuppelvariabel). Plukk ut de tuplene der where-betingelsen holder. 3. Grupper de utvalgte tuplene i henhold til grupperingsattributtene i group by. 4. Velg ut de gruppene som oppfyller betingelsen i having 5. Sorter som beskrevet av order by. 6. Aggreger og velg ut attributter for fremvisning i henhold til beskrivelsen i select. 7. Hvis select distinct, fjern flerforekomster (duplikater) fra resultattuplene. INF3100 8.2.2016 Ellen Munthe-Kaas 8

Relasjonsalgebratolkning av select-setningen Hvis vi ser nøye på vanlige select-setninger, er det ofte to vesensforskjellige typer setningsledd i where-klausulen: Seleksjon av tupler i en relasjon Join av tupler på tvers av relasjoner INF3100 8.2.2016 Ellen Munthe-Kaas 9

Relasjonsalgebratolkning av selectsetningen (forts.) For å få et uttrykk som er rimelig effektivt beregnbart, vil databasesystemet oversette til et uttrykk som likner det vi får ved å gjøre følgende: 1. Join relasjonene i from i henhold til joinbetingelsene i where 2. Selekter ifølge seleksjonsbetingelsene i where 3. Grupper i henhold til beskrivelsen i group by 4. Aggreger i henhold til aggregeringsbeskrivelsene i select og having 5. Velg ut grupper ifølge betingelsen i having 6. Lag en liste av uttrykk for (utvidet) projeksjon ifølge select 7. Sorter i henhold til order by 8. Fjern flerforekomster hvis select distinct INF3100 8.2.2016 Ellen Munthe-Kaas 10

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 8.2.2016 Ellen Munthe-Kaas 11

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 8.2.2016 Ellen Munthe-Kaas 12

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 8.2.2016 Ellen Munthe-Kaas 13

unknown unknown and true = unknown unknown and false = false unknown or true = true unknown or false = unknown not unknown = unknown Det er ikke lov å 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 8.2.2016 Ellen Munthe-Kaas 14

coalesce og nullif coalesce(<uttrykk 1 >, <uttrykk 2 > [,...]) Returnerer første uttrykk som evaluerer til en verdi forskjellig fra null (eller null hvis samtlige uttrykk evaluerer til null). Eksempel: select filmid, coalesce(filmdescr, '(ingen)') as descr from filmdescription where... nullif(<uttrykk 1 >, <uttrykk 2 >) Returnerer null hvis uttrykk 1 og uttrykk 2 evaluerer til samme verdi, ellers returneres verdien av uttrykk 1. Eksempel: select lastname, nullif(firstname, ' ') as firstname from person where...; INF3100 8.2.2016 Ellen Munthe-Kaas 15

case I case when <betingelse> then <svaruttrykk> [when... ] [else <svaruttrykk>] end Returnerer verdien av uttrykket i første then-gren der tilhørende betingelse evaluerer til true. Hvis ingen av betingelsene er sanne, returneres verdien av uttrykket i else-grenen (eller null hvis det ikke er noen else-gren). Eksempel: select varenr, nypris/gmlpris as okning from vare where case when coalesce(gmlpris, 0) <> 0 then nypris/gmlpris > 1 else false end; INF3100 8.2.2016 Ellen Munthe-Kaas 16

case II Hvis alle betingelsene er på formen uttrykk = verdi x, kan man bruke case <uttrykk> when <verdi 1 > then <svaruttrykk> [when <verdi 2 > then... ] [else <svaruttrykk>] end Eksempel: select filmid, case filmtype when 'C' then 'kinofilm' when 'TV' then 'fjernsynsfilm' else 'annet' end as filmtp from filmitem where... INF3100 8.2.2016 Ellen Munthe-Kaas 17

Relasjonssammenligninger I exists kan brukes for å sjekke om en relasjon inneholder noe eller er tom: exists R (betyr at det finnes minst ett tuppel i R) not exists R (betyr at det ikke finnes noen tupler i R) in, any og all kan brukes for å sammenligne et attributt eller en liste av attributter med innholdet i en hel relasjon: 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 8.2.2016 Ellen Munthe-Kaas 18

Relasjonssammenligninger II exists (select * from R) betyr at t.t R (les: "det eksisterer et tuppel t i R"), dvs. at instansen til R ikke er tom. Med andre ord: exists er SQLs eksistenskvantor SQL har ingen tilsvarende allkvantor Vi kan bruke 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 8.2.2016 Ellen Munthe-Kaas 19

Relasjonssammenligninger III 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 (subqueriet) INF3100 8.2.2016 Ellen Munthe-Kaas 20

Relasjonssammenligninger IV [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 8.2.2016 Ellen Munthe-Kaas 21

Nestede select-setninger select-setninger kan nestes til vilkårlig dybde Skopregler: Et (ikke-kvalifisert) 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. Skopreglene kan brytes ved å kvalifisere attributtet med navnet på en tuppelvariabel fra en omsluttende query INF3100 8.2.2016 Ellen Munthe-Kaas 22

Eksempel Skjema: Prosjekt(prnr, pnavn, kunde, pleder, startdato) Ansatt(anr, navn, tittel, fdato, pnr, ansdato) Timeliste(anr, dato, prnr, timer) Kunde(knr, knavn, adresse) Finn navn og tittel på de ansatte som har arbeidet på alle prosjekter som er påbegynt etter 2014 og er bestilt av kunden «ABC». INF3100 8.2.2016 Ellen Munthe-Kaas 23

Eksempel (forts.) select navn, tittel from Ansatt a where not exists ( select * from Kunde k, Prosjekt p where knavn = 'ABC' and knr = kunde and startdato > '2014-12-31' and not exists ( select * from Timeliste t where anr = a.anr and prnr = p.prnr)); Dette er et eksempel på korrellerte subqueries: For hver a.anr i select... from... og hver p.prnr i select... from... må select... from... beregnes på nytt. INF3100 8.2.2016 Ellen Munthe-Kaas 24

with-select with <cte-navn 1 > as (<select-setning>) [, <cte-navn 2 > as (<select-setning>),...] select... from... Kalles gjerne CTEer (Common Table Expressions) Alternativ til nestede select-setninger Kan benyttes i stedenfor nestede select-setninger som ikke er korrelerte (dvs. hvis evalueringen ikke avhenger av verdier i omsluttende queries) Selv om select-setningen refererer til en CTE flere steder, blir den bare evaluert én gang INF3100 8.2.2016 Ellen Munthe-Kaas 25

Eksempel with regionalsales as ( select region, sum(amount) as total from orders group by region ), topregions as ( select region from regionalsales where total > (select sum(total)/10 from regionalsales) ) select region, product, sum(quantity) as produnits, sum(amount) as prodsales from orders where region in (select region from topregions) group by region, product; INF3100 8.2.2016 Ellen Munthe-Kaas 26

Rekursiv SQL: with-recursive with recursive <cte-navn>(<cte-attributtliste>) as ( <ikke-rekursiv term> union union all -- velg én <rekursiv term> ) select... from... Den ikke-rekursive termen er en vanlig select-setning Den rekursive termen er en select-setning som bruker <cte-navn> nesten som om det var en vanlig tabell (det er enkelte krav som må oppfylles) Både den ikke-rekursive og den rekursive termen må returnere tupler med attributter som stemmer overens med cte-attributtlisten Kan generelt ha en liste av rekursive og ikke-rekursive CTEer før select-setningen INF3100 8.2.2016 Ellen Munthe-Kaas 27

Eksempel Gitt tabellen fly(fraby, tilby, carrier, flightnr, pris). Finn alle byer man kan nå fra New York eller Chicago, antall flybytter (connections) og totalpris. Skriv ut resultater med maksimalt 3 flybytter. with recursive destinasjon(fra, til, antconn, totpris) as ( select f.fraby, f.tilby, 0, f.pris from fly f where f.fraby = 'New York' or f.fraby = 'Chicago' union all select d.fra, g.tilby, d.antconn + 1, d.totpris + g.pris from destinasjon d, fly g where d.til = g.fraby and d.antconn < 3 ) select * from destinasjon b; Svarmengden har med reiser som er innom en og samme by flere ganger. Hvis testen på antconn flyttes til hoved-select-setningen, vil beregningen ikke terminere (selv ikke med union) fordi det stadig genereres tupler med høyere verdi i antconn og totpris. INF3100 8.2.2016 Ellen Munthe-Kaas 28

Evaluering av rekursive CTEer Under evalueringen benyttes en arbeidstabell. 1. Evaluer den ikke-rekursive termen. Hvis union, slett flerforekomster av tupler. Plasser resultatmengden i <cte-navn>-tabellen og i arbeidstabellen. 2. Så lenge arbeidstabellen ikke er tom, gjenta følgende: a. Substituer innholdet av arbeidstabellen inn for forekomster av <cte-navn> i den rekursive termen, og evaluer den rekursive termen. Hvis union, slett flerforekomster av tupler i resultatmengden, og slett også fra resultatmengden tupler som allerede finnes i <cte-navn>-tabellen. b. Legg tuplene i resultatmengden inn i <cte-navn>-tabellen, og erstatt innholdet i arbeidstabellen med resultatmengden. Strengt tatt er dette iterasjon, men i SQL-terminologi kalles det altså rekursjon. Merk at hver iterasjon bare tar hensyn til resultattuplene fra forrige iterasjon (og altså ikke unionen av alle resultattupler generert hittil). INF3100 8.2.2016 Ellen Munthe-Kaas 29

Krav til rekursive CTEer Det er tillatt med gjensidig rekursive CTEer hvis en iterasjon bare kan legge til nye tupler; en iterasjon får aldri medføre at det slettes tupler i resultatmengden til de andre CTEene: Hver CTE må benytte de andre CTEene på en monoton måte. For å sikre kravet, har hvert DBMS sine begrensninger på hva slags select-setninger som er tillatt i den rekursive termen Begrensningene sikrer ikke at evalueringen av en rekursiv CTE terminerer; dette er SQL-programmererens ansvar Hva slags rekursivitet som støttes av et DBMS, varierer: PostgreSQL, DB2, SQL Server støtter with recursive (i DB2 og SQL Server sløyfes nøkkelordet recursive) Oracle og DB2 har en variant (som ikke er standard SQL) på formen select.. from.. start with.. connect by.. INF3100 8.2.2016 Ellen Munthe-Kaas 30

Datatyper i SQL som bryter 1NF array: ordnet samling av elementer Brukerdefinerte datatyper (User-defined Data Types, UDTer) Brukt til å realisere klasser i objekt-relasjonelle databaser: Typede relasjoner Brukt som datatyper: Record-liknende multiset INF3100 8.2.2016 Ellen Munthe-Kaas 31

Array: Deklarasjon og konstruktorer Deklarasjon: create table genomsekvens ( id integer primary key, kromosomnr integer not null, kodon char(3) array[1000] not null); Hvis man ikke ønsker å angi en øvre lengde: kodon char(3) array not null Konstruktorer: insert into genomsekvens values (2913, 3, array['cug', 'AAG', 'GGU, 'AAG']); insert into genomsekvens values (13665, 6, array(select.. from..)); INF3100 8.2.2016 Ellen Munthe-Kaas 32

Operasjoner på arrayer Plukke ut et element: select kodon[2] from genomsekvens... Konkatenering: g1.kodon 'ACU' g1.kodon g2.kodon Finne antall elementer:.. where cardinality(kodon) > 100.. Sammenlikne eksakt innhold: g1.kodon = g2. kodon g1.kodon <> g2. kodon Sammenlikne med hvert element i en array: any, all.. where 'UAA' = any (kodon).... where kodon[3] = any (array[ GGU', UGG', UAA']).. Flate ut en array: select kromosomnr, unnest(kodon) from genomsekvens; INF3100 8.2.2016 Ellen Munthe-Kaas 33

Eksempel with recursive destinasjon(fra, til, byoversikt, antconn, totpris) as ( select f.fraby, f.tilby, array[f.fraby, f.tilby], 0, f.pris from fly f where f.fraby = 'New York' or f.fraby = 'Chicago' union all select d.fra, g.tilby, d.byoversikt g.tilby, d.antconn + 1, d.totpris + g.pris from destinasjon d, fly g where d.til = g.fraby and g.tilby <> all(byoversikt) ) select b.fra, b.til, b.antconn, b.totpris from destinasjon b where b. antconn <= 3; Her går det bra å flytte testen på antconn til hoved-select-setningen og benytte union all fordi det er et endelig antall byer og vi ved hjelp av arrayen byoversikt unngår løkker (dvs. reiser som er innom en by flere ganger). INF3100 8.2.2016 Ellen Munthe-Kaas 34

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 8.2.2016 Ellen Munthe-Kaas 35

SQLs VDL create view <viewnavn> [<attributtliste>] as select.. from..; create recursive view <viewnavn>(<attributtliste>) as <ikke-rekursiv term> union union all <rekursiv term>; drop view viewnavn; INF3100 8.2.2016 Ellen Munthe-Kaas 36

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

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 8.2.2016 Ellen Munthe-Kaas 38

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 8.2.2016 Ellen Munthe-Kaas 39

Vurdering av indeksbruk Anta at StarsIn(movieTitle, movieyear, starname) har størrelse 10 blokker. Anta at det i snitt er 5 filmstjerner i hver film, og at hver filmstjerne 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 diskaksesser (lese + skrive blokker fra/til disk). Indeks: Ingen starname movietitle Begge Q 1 10 6 10 6 Q 2 10 10 4 4 I 2 4 4 6 Snitt: 2+8p 1 +8p 2 4+2p 1 +6p 2 4+6p 1 6-2p 2 INF3100 8.2.2016 Ellen Munthe-Kaas 40

SQLs DCL Hver bruker har en autorisasjonsid Hver ID tilordnes privilegier: select: Tillat select på noen attributter i en relasjon insert: Tillat insert på noen attributter i en relasjon update: Tillat update på noen attributter i en relasjon delete: Tillat delete på en relasjon references: Tillat bruk av en relasjon i en integritetsregel (assertion/attributtbasert/tuppelbasert) usage: Tillat bruk av et databaseelement trigger: Tillat definisjon av triggere mot en relasjon execute: Tillat eksekvering av PSM-kodebiter under: Tillat opprettelse av subtyper INF3100 8.2.2016 Ellen Munthe-Kaas 41

Privilegier Privilegier tildeles ved grant <privilegier> on <databaseelement> to <brukere> [with grant option]; og fratas ved revoke <privilegier> on <databaseelement> from <brukere> [cascade restrict] INF3100 8.2.2016 Ellen Munthe-Kaas 42

Ekstramateriale INF3100 8.2.2016 Ellen Munthe-Kaas 43

Select-setningens enkeltdeler I select Angir hvilke attributter som skal vises i svaret (også aggregeringsinformasjon) distinct Fjerner flerforekomster (duplikater) av svartuplene from Navn på de relasjonene spørringen refererer til where Seleksjonsbetingelse (kan inneholde en eller flere join-betingelser) INF3100 8.2.2016 Ellen Munthe-Kaas 44

Select-setningens enkeltdeler II group by Angir grupperingsattributter til bruk ved aggregering having Angir en betingelse på resultatet av grupperingen; velger ut noen av gruppene Kan aggregere som del av utvelgelsesprosessen order by Ordner tuplene i henhold til angitte kriterier (kriterier som kan inngå i ordningen, er alle attributter, aggregeringer, algebraiske uttrykk over attributter,...) INF3100 8.2.2016 Ellen Munthe-Kaas 45

Uttrykk i betingelser I where-betingelsen er et boolsk uttrykk hvor atomene har en av følgende former: Verdisammenlikning: P op Q P og Q må ha samme domene, minst en av dem må være et attributt, den andre kan være en konstant op {=, <, >, <=, >=, <>, like} null-test: P is null eller P is not null Relasjonssammenlikning: exists, in, all, any INF3100 8.2.2016 Ellen Munthe-Kaas 46

Uttrykk i betingelser II Spesialregler for sammenlikning av strenger : Leksikografisk ordning: s<t, s>t, s<=t, s>=t Sammenlikning: s=t, s<>t Mønstergjenkjenning: s like p p er et mønster hvor % matcher en vilkårlig sekvens (null eller flere tegn) _ matcher ett vilkårlig tegn INF3100 8.2.2016 Ellen Munthe-Kaas 47

Uttrykk i betingelser III Datoer og tidspunkter: Dato: date yyyy-mm-dd Tidspunkt: time hh:mm:ss Tidspunkt med finere gradering enn sekund: time hh:mm:ss.ccc... Tidspunkt før GMT: time hh:mm:ss+h:mm Tidspunkt etter GMT: time hh:mm:ss-h:mm Dato og tid: timestamp yyyy-mm-dd hh:mm:ss INF3100 8.2.2016 Ellen Munthe-Kaas 48

Gruppering Gruppering er å uttrykke relasjonsoperatoren γ L (R) i SQL Grupperingsattributtene fra L plasseres i group by-klausulen Både grupperingsattributter og aggregeringsuttrykk fra L plasseres i select-klausulen INF3100 8.2.2016 Ellen Munthe-Kaas 49

Aggregering Aggregeringer i select tar formen agg(a), eventuelt agg(a) as B for å navngi resultatattributtet agg er en av aggregeringsoperatorene sum, avg, max, min, count Eks: sum(a), count(a) Andre former: count(*), agg(distinct A) I en select med gruppering kan bare attributter nevnt i group by forekomme uaggregert i select-klausulen! INF3100 8.2.2016 Ellen Munthe-Kaas 50

Gruppering med having-klausul Klausulen i having er en betingelse (et boolsk uttrykk) satt sammen av attributter fra relasjonene i from Aggregering i having anvendes på gruppene dannet i henhold til tilhørende group by-klausul Bare attributtene i group by kan forekomme uaggregert i having-klausulen! Virkemåte: Etter gruppering beregnes betingelsen for hver enkelt gruppe som et hele Bare de gruppene som oppfyller betingelsen, tas med i den videre beregningen INF3100 8.2.2016 Ellen Munthe-Kaas 51

Navnekonflikter Kvalifiser attributter med relasjonsnavn: R.A Navngi relasjoner med aliaser:...from R as S... (as kan sløyfes) S blir en kopi av R med nytt relasjonsnavn Gi attributter nytt navn: select A as B from... A renavnes til B i resultatrelasjonen INF3100 8.2.2016 Ellen Munthe-Kaas 52

Klassiske operatorer fra relasjonsalgebraen uttrykt i SQL I Algebra R S R S R S R S SQL (select * from R) union (select * from S); (select * from R) intersect (select * from S); (select * from R) except (select * from S); (select * from R) cross join S; select * from R, S; Husk krav om mengdekompatibilitet for R og S i union, intersect, except! INF3100 8.2.2016 Ellen Munthe-Kaas 53

Klassiske operatorer fra relasjonsalgebraen uttrykt i SQL II Algebra SQL σ C (R) select * from R where C; π L (R) select distinct L from R; R C S select * from R join S on C; R S select * from R natural join S; INF3100 8.2.2016 Ellen Munthe-Kaas 54

Klassiske operatorer fra relasjonsalgebraen uttrykt i SQL - III Algebra SQL ρ S (R) select * from R as S; ρ S(B1,...,B n )(R) det nærmeste vi kommer, er select A 1 as B 1,..., A n as B n from R as S; INF3100 8.2.2016 Ellen Munthe-Kaas 55

Bagoperatorer fra relasjonsalgebraen uttrykt i SQL Algebra SQL R S R S R S (select * from R) union all (select * from S); (select * from R) intersect all (select * from S); (select * from R) except all (select * from S); π L (R) select L from R; resten som for klassisk SQL INF3100 8.2.2016 Ellen Munthe-Kaas 56

Tilleggsoperatorer fra relasjonsalgebraen uttrykt i SQL Algebra SQL δ(r) select distinct * from R; γ L (R) select L from R group by <grupperingsattributtene i L>; τ L (R) select * from R order by L; R o S select * from R natural full outer join S; R o LS select * from R natural left outer join S; R o C S select * from R full outer join S on C; INF3100 8.2.2016 Ellen Munthe-Kaas 57