SQL

advertisement
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
Download