SQL SQL Structured Query Language er et deklarativt språk for spørringer mot relasjonsdatabaser Uttrykkskraften er omtrent som den i relasjonsalgebraen utvidet med tilleggsoperatorene SQL inneholder også konstruksjoner for å definere nye relasjonsdatabaser, for å legge inn og endre data i databasen mm INF212 v2003 1 SQL-standarder Flere standarder: ANSI SQL SQL2 (SQL-92) SQL3 (SQL-99) = SQL2 + objekt-relasjonelle egenskaper mm Mange dialekter: Hvert DBMS har sine særegenheter Alle oppfyller ANSI SQL, stort sett også SQL2 Noen deler av SQL er ikke veldefinert (selv ikke i ANSI SQL) og behandles derfor potensielt forskjellig i forskjellige DBMSer INF212 v2003 2 1
SQLs bestanddeler SQL består av en samling konstruksjoner som kan deles opp slik: SDL: Storage Definition Language 3-skjemaarkitekturens 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 INF212 v2003 3 3-skjemaarkitekturen for databaser (repetisjon) Presentasjonslaget beskrevet med eksterne skjemaer (eller views ) hvordan informasjon skal presenteres for ulike brukere Det konseptuelle (eller 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 INF212 v2003 4 2
SQLs DQL select [distinct] ATTRIBUTTLISTE from NAVNELISTE [where WHERE-BETINGELSE] [group by GRUPPERINGSATTRIBUTTER [having HAVING-BETINGELSE] ] [order by ATTRIBUTT [asc desc],...]; INF212 v2003 5 Select-setningen Typisk utseende: select a1, a2,..., aj from r1, r2,..., rk where C; hvor r1, r2,..., rk er relasjonsnavn a1,...,aj er attributter fra r1, r2,..., rk C er en betingelse Essensielt uttrykker konstruksjonen det samme som relasjonsalgebrauttrykket π a1,a2,...,aj (σ C (r1 r2... rk)) INF212 v2003 6 3
Select-setningens enkeltdeler [] angir at en konstruksjon er en valgfri del av setningen from: Navn på de relasjonene spørringen refererer til where: Seleksjonsbetingelse select: Hvilke attributter som skal vises i svaret. Også aggregeringsinformasjon distinct: Fjerner flerforekomster av tuplene 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 INF212 v2003 7 Tuppelvariabeltolkning av select-setningen 1. Tilordne en variabel til hver relasjon i from. 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. Gruppér de utvalgte tuplene i henhold til grupperingsattributtene i group by. Velg ut de gruppene som oppfyller betingelsen i having. 4. Aggreger og velg ut attributter for fremvisning i henhold til beskrivelsen i select. Hvis select distinct, fjernes flerforekomster av de resulterende tuplene. 5. Sortér som beskrevet av order by. INF212 v2003 8 4
Relasjonsalgebratolkning av select-setningen 1. Ta det kartesiske produktet av relasjonene i from 2. Selektér ifølge betingelsen i where 3. Gruppér i henhold til beskrivelsen i group by 4. Velg ut grupper ifølge betingelsen i having 5. Lag en liste av uttrykk for (utvidet) projeksjon og aggregering ifølge select 6. Fjern flerforekomster hvis select distinct 7. Sortér i henhold til order by INF212 v2003 9 Merknader SQL SQL skiller ikke mellom store og små bokstaver, unntatt i tekststrenger SQL beregner bager (med unntak av noen av operatorene) INF212 v2003 10 5
Klassiske operatorer fra relasjonsalgebraen uttrykt i SQL - I Algebra R S R S R-S R S SQL R union S R intersect S R except S R cross join S INF212 v2003 11 Klassiske operatorer fra relasjonsalgebraen uttrykt i SQL - II Algebra σ C (R) π L (R) R C S R S SQL select * from R where C select distinct L from R R join S on C R natural join S INF212 v2003 12 6
Klassiske operatorer fra relasjonsalgebraen uttrykt i SQL - III Algebra ρ S (R) ρ S(B1,...,Bn) (R) SQL select * from R as S select A1 as B1,..., An as Bn from R as S INF212 v2003 13 Bagoperatorer fra relasjonsalgebraen uttrykt i SQL Algebra R S R S R-S π L (R) andre SQL R union all S R intersect all S R except all S select L from R som for klassisk INF212 v2003 14 7
Tilleggsoperatorer fra relasjonsalgebraen uttrykt i SQL Algebra δ(r) γ L (R) τ L (R) R o S R o LS o R C S SQL select * distinct from R select L from R group by <grupperingsattributtene i L> select * from R order by L R natural full outer join S R natural left outer join S R full outer join S on C INF212 v2003 15 Gruppering Hvis γ L (R) skal representeres i SQL, plasseres grupperingsattributtene fra L i group by-klausulen og både grupperingsattributter og aggregeringsuttrykk fra L i select-klausulen. Aggregeringer i select tar formen agg(a), eventuelt agg(a) as B for å navngi resultatattributtet (agg er en av aggregeringsoperatorene sum, avg,..., count). Eks: sum(a), count(a) Andre former: count(*), agg(distinct A) I select med aggregeringer kan bare attributtene nevnt i group by forekomme uaggregert i select-klausulen INF212 v2003 16 8
Gruppering med having-klausul Klausulen i having er en betingelse (et Boolesk 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 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. INF212 v2003 17 Uttrykk i betingelser I 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 et vilkårlig tegn INF212 v2003 18 9
Uttrykk i betingelser II 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 INF212 v2003 19 Navnekonflikter Kvalifiser attributt med relasjonsnavn: R.A Navngi relasjoner med aliaser:...from R as S... (as kan sløyfes). S er en kopi av R med nytt relasjonsnavn Omnavn attributter: select A as B from... A renavnes til B i resultatrelasjonen INF212 v2003 20 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 INF212 v2003 21 Regler for null null som del av et aritmetisk uttrykk, gir null som svar Sammenlikning av null med en verdi, gir unknown som svar Vi får ikke 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 INF212 v2003 22 11
Gruppering og aggregering med null null ignoreres i aggregeringer bortsett fra i count(*) null behandles som en ordinær verdi ved gruppering INF212 v2003 23 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 INF212 v2003 24 12
Nestede select-setninger select-setninger kan nestes til vilkårlig dybde: Finn alle filmtitler som har vært brukt i to eller flere filmer. select title from Movie Old where year < any (select year from Movie where title = Old.title); INF212 v2003 25 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 INF212 v2003 26 13
Kostbare operasjoner i SQL distinct: Sortering er generelt kostbart. Bruk med forsiktighet union, intersect, except: SQL beregner set-variantene av disse (dvs. flerforekomster fjernes). Vurder å bruke union all, intersect all, except all som er bag-variantene. INF212 v2003 27 SQLs DML insert: Innsetting av nye data update: Endring av eksisterende data delete: Sletting av data INF212 v2003 28 14
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 select-setningen. Dette kan ha sideeffekter på beregningen av select-setningen INF212 v2003 29 update, delete update R set A1=E1,.., Ak=Ek [where C]; delete from R [where C]; INF212 v2003 30 15
Datatyper i SQL Datatype int, integer shortint real, float double precision decimal(n,d) char(n), varchar(n) bit(n), bit varying(n) boolean date time Forklaring Heltall (synonyme betegnelser) Heltall, mindre plasskrevende enn int Flyttall (synonyme betegnelser) Flyttall med høyere presisjon n desimale sifre, d etter desimalpunktum Tekst med henholdsvis fast og variabel lengde Bitstreng med henholdsvis fast og variabel lengde Boolesk verdi Dato Klokkeslett INF212 v2003 31 SQLs DDL create: Opprette tabell drop: Fjerne tabell alter table: Endre tabell (legge til nye kolonner) INF212 v2003 32 16
create create table R (A1 type_1 [skranke_1],... An type_n [skranke_n], [LISTE AV SKRANKER] ); INF212 v2003 33 drop table r drop, alter alter table r add Ax Dy alter table r drop Ax r er et relasjonsnavn Ax er et attributt Dy er et domene INF212 v2003 34 17
Indekser DBMS-relatert syntaks: create index X on R(A1,..,Ak); drop index X; Valg av indeks må gjøres med omhu: Eksistens speeder opp spørringer mot vedkommende attributt(er) Innsetting, sletting og oppdatering blir mer komplisert og tidkrevende INF212 v2003 35 Vurdering av indeksbruk StarsIn(movieTitle, movieyear, starname) 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 Tall 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 INF212 v2003 36 18
SQLs VDL create view VIEWNAVN as SELECT-SETNING; drop view VIEWNAVN; INF212 v2003 37 Modifisering av viewdata Oppdaterbare views: Views hvor det er mulig å oversette modifikasjon på tupler i viewet til modifikasjoner på tupler i de basale relasjonene Forenklet: Et view er oppdaterbart hvis det er definert ved en select (ikke distinct) på attributter fra R (basal relasjon eller oppdaterbart view) hvor where ikke involverer R i et subquery listen i select er fyldig nok til at vi kan etterfylle ikke angitte attributter med defaultverdier og slik konstruere et basistuppel som produserer det angitte viewtuppelet INF212 v2003 38 19
SQLs DCL grant PRIVILEGIER on DATABASEELEMENT to BRUKERLISTE [with grant option] revoke PRIVILEGIER on DATABASEELEMENT from BRUKERLISTE INF212 v2003 39 20