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. 2. 3. 4. 5. Tilordne en variabel til hver relasjon i from. Variablene kalles tuppelvariable. 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. Gruppér de utvalgte tuplene i henhold til grupperingsattributtene i group by. Velg ut de gruppene som oppfyller betingelsen i having. Aggreger og velg ut attributter for fremvisning i henhold til beskrivelsen i select. Hvis select distinct, fjernes flerforekomster av de resulterende tuplene. 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 SQL R∪S R union S R∩S R intersect S R-S R except S R×S R cross join S INF212 v2003 11 Klassiske operatorer fra relasjonsalgebraen uttrykt i SQL - II Algebra SQL σC(R) select * from R where C πL(R) select distinct L from R RCS R join S on C R R natural join S S INF212 v2003 12 6 Klassiske operatorer fra relasjonsalgebraen uttrykt i SQL - III Algebra SQL ρS(R) select * from R as S ρS(B1,...,Bn)(R) select A1 as B1, ..., An as Bn from R as S INF212 v2003 13 Bagoperatorer fra relasjonsalgebraen uttrykt i SQL Algebra SQL R∪S R union all S R∩S R intersect all S R-S R except all S πL(R) select L from R andre som for klassisk INF212 v2003 14 7 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 Ro S R natural full outer join S R o LS R natural left outer join S o R CS 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 Forklaring int, integer Heltall (synonyme betegnelser) shortint Heltall, mindre plasskrevende enn int real, float Flyttall (synonyme betegnelser) double precision Flyttall med høyere presisjon decimal(n,d) n desimale sifre, d etter desimalpunktum char(n), varchar(n) Tekst med henholdsvis fast og variabel lengde bit(n), bit varying(n) Bitstreng med henholdsvis fast og variabel lengde boolean Boolesk verdi date Dato time 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, alter drop table r 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) Q1: select movieTitle, movieYear from StarsIn where starName=s; Q2: select starName from StarsIn where movieTitle=t and movieYear=y; I: insert into StarsIn values (t,y,s); pi: Andel av tiden benyttet på Qi, i=1,2 Tall angir antall disk-aksesser Indeks: Ingen starName movieTitle Begge Q1 10 4 10 4 Q2 10 10 4 4 I 2 4 4 6 Snitt: 2+8p1+8p2 4+6p2 4+6p1 6-2p1-2p2 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