SQL. SQL-standarder. Flere standarder: ANSI SQL SQL2 (SQL-92) SQL3 (SQL-99) = SQL2 + objekt-relasjonelle egenskaper mm



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. (forts.) Institutt for Informatikk. INF Ragnar Normann 1

UNIVERSITETET I OSLO SQL. Structured Query Language. (forts.) 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. 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. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

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

INF1300 Introduksjon til databaser: SQL Structured Query Language. En første introduksjon Lysark til forelesning mandag 14.

INF1300 Introduksjon til databaser: SQL Structured Query Language. En første introduksjon Lysark til forelesning onsdag 22.

INF1300 Introduksjon til databaser

INF1300 Introduksjon til databaser: SQL Structured Query Language

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

SQL Structured Query Language

Relasjoner terminologi

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

INF1300 Introduksjon til databaser

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

Relasjonsalgebraen. Algebra

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

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

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

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

Metaspråket for å beskrive grammatikk

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

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

SQL Structured Query Language

SQL Structured Query Language

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

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

Spørsmålskompilering del 1

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

Repetisjon: Normalformer og SQL

Integritetsregler i SQL. Primærnøkler

Spørsmålskompilering del 1

UNIVERSITETET. Relasjonsalgebra. INF Ragnhild Kobro Runde

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

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

SQL: Integritetsregler, triggere og views

Integritetsregler i SQL

Integritetsregler i SQL

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

Relasjoner terminologi

Datamodellering og databaser SQL, del 2

INF1300 Det meste av resten av

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

Utvikling fra kjernen og ut

IN2090 Databaser og datamodellering 07 Datamanipulering

Datamodellering og databaser SQL, del 2

Spørsmålskompilering del 2

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

INF1300 Introduksjon til databaser

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

SQL, del 1 - select. Hva er SQL?

Indre select-setninger Nestede select-setninger

1. SQL datadefinisjon og manipulering

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

SQL, del 1 - select. Hva er SQL?

DBMS Database Management System (repetisjon) Programmeringsgrensesnitt. Serialiserbarhet

LC238D Datamodellering og databaser SQL, del 1 - SELECT

SQL: SELECT-spørringer

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

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

INF1300 Introduksjon til databaser

Oppgave 1 (Opprett en database og en tabell)

Effektiv eksekvering av spørsmål

IN2090 Databaser og datamodellering 07 Datamanipulering

SQL: SELECT-spørringer

SQL Introduksjonskurs. Oversikt

Effektiv eksekvering av spørsmål

Spørsmålskompilering

Spørsmålskompilering. Basert på foiler av Hector Garcia-Molina

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

Utvikling fra kjernen og ut

Effektiv eksekvering av spørsmål

En liten rekap. Spørrespråk. I dag SELECT

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

IN2090 Databaser og datamodellering. 08 Typer og skranker

Relasjonsalgebra. Hva?

IN2090 Databaser og datamodellering. 08 Typer og skranker

EKSAMEN 6102 / 6102N DATABASER

Utvikling fra kjernen og ut

IN2090 Databaser og datamodellering. 06 Enkele joins og nestede SELECT

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

OQL Object Query Language

ORDBMS og OODBMS i praksis

Utvikling fra kjernen og ut

En lett innføring i foreninger (JOINs) i SQL

EKSAMEN DATABASER

Oppgaver Oppgave a: Sett opp mulige relasjoner

DBS18 - Strategier for Query-prosessering

SQL 3: Opprette tabeller, datainnsetting og utsnitt

Tabeller og enkle spørringer

Transkript:

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