220 likes | 374 Views
Databaser – SQL, Structured Query Language. 1. SQL. Grundlæggende om SQL select-udtryk syntaks og semantik SQL og relationel algebra mængdeoperationer (forenings-, fælles- og differensmængde) natural join tupel-variabler opdateringer Goodies ordning aggregeringsfunktioner DDL.
E N D
1. SQL • Grundlæggende om SQL • select-udtryk • syntaks og semantik • SQL og relationel algebra • mængdeoperationer (forenings-, fælles- og differensmængde) • natural join • tupel-variabler • opdateringer • Goodies • ordning • aggregeringsfunktioner • DDL
: project : kartesisk produkt : selection predicate Select-statement SQL’s select-statement ser typisk ud som følger: selectA1, A2, ..., An fromr1, r2, ..., rm whereP hvor (for alle i, 1 i n): Ai : attribut ri : relation P : prædikat
select distinctA1, A2, ..., An fromr1, r2, ..., rm whereP A1, A2, ..., An (P(r1 r2 ... rm)) Syntaks og semantik SelectStatement ::= ”select” [ ”distinct” | ”all” ] ( AttributeList | ”*” ) ”from” RelationList [ ”where” Predicate ] 3. 1. 2.
Eksempel-relation Populære amerikanske Broadway Musicals (PABM)
En eksempel-relation Musical-skabere (MC)
Eksempel, (1) (PABM, Perfs > 2000) select * fromPABM wherePerfs > 2000
Eksempel, (2) (PABM, Theater = Forty-Sixth St.) select * fromPABM whereTheater = ”Forty-Sixth St.”
Eksempel, ((PABM, Theater = Forty-Sixth St.), Title, Perfs) selectTitle, Perfs fromPABM whereTheater = ”Forty-Sixth St.”
Mængdeoperationer I SQL er det muligt at udtrykke de tre mængdeoperationer union (): SelectStmtunionSelectStmt intersect (): SelectStmtintersectSelectStmt difference (): SelectStmtminusSelectStmt Eksempler select * fromPABM wherePerfs > 2000 union select * fromPABM whereMonth = 3 selectTitle fromPABM wherePerfs > 2000 intersect selectTitle fromMC whereBook = Lyrics
Test for ”membership” () SQL trækker på elementer fra relationskalkylen til at teste på om en tupel er element i en relation. Eksempel: Vi er interesseret i alle show, opført efter 1960, hvor bogen og lyrikken er skrevet af de samme forfattere. select distinctTitle fromPABM whereYear >= 1960 and Title in ( selectTitle fromMC whereLyrics = Book )
... i småbidder • selectTitle • fromMC • whereLyrics = Book
... i småbidder • select distinctTitle • fromPABM • whereYear >= 1960 and • Title in (x)
’all’, ’some’ og ’exists’ I SQL er det muligt i et prædikat at skrive A allRA someRexistsR hvor betegner en af de relationelle operatorer <, >, , , , =, . Betydningen er A allR ( x | x R : A x) A someR ( x | x R : A x) existsR R Ø Specialtilfældet ’= some’ har vi set før. Hvor?
Natural join I SQL er det ikke muligt direkte at udtrykke natural join, men da natural join er defineret i termer af kartesisk produkt, select og project, er det en smal sag at realisere join i SQL. r s = RS (r.A1 = s.A1 r.A2 = s.A2 ... r.An = s.An (r s)) Ovenstående er under antagelse af at vi opererer med relationer r og s med respektive skema R og S hvor R S = { A1, A2, ..., An }.
Eksempel, Where Author selectTitle, Theater, Book fromWhere, Author whereWhere.Title = Author.Title Where Author
Tupel-variabler SQL har lånt idéen om tupel-variabler fra tupel-relationskalkylen. Tupel-variabler er specielt nyttige til at sammenligne tupler fra samme relation. I den situation benytter den relationelle algebra sig af omdøbning (rename). Eksempel: Vi er interesseret i alle show der har været opført samme sted som My Fair Lady. select distinctT.Title fromPABMS, PABMT whereS.Title = ”MyFair Lady” and S.Theater = T.Theater
Opdateringer Sletning delete r whereP Indsættelse insert intor values (a1, a2, ..., an) (null) insert intor SelectStmt Opdatering updater setA = Exp whereP
Goodies I SQL er det muligt at ordne resultatet af en forespørgsel, ligesom det er muligt at benytte såkaldte aggregeringsfunktioner. Mulighe-derne er sammenfattet i følgende syntaksdefinition: SelectStatement ::= ”select” [ ”distinct” | ”all” ] ( AttributeList | ”*” ) ”from” RelationList [ ”where” Predicate ] ( [ ”order by” (AttributeOrder)+ ] | [ ”group by” AttributeList [ ”having”Predicate ] ] ) Order ::= ”asc” | ”desc”
Ordning Eksempel selectTitle, Month, Day, Year fromPABM whereYear >= 1960 order byYeardesc, Monthdesc, Daydesc
Aggregeringsfunktioner I SQL er det muligt at beregne funktioner over grupper af tupler ved hjælp af ’group by’. Tupler med samme værdi på attributter opremset i ’group by’, grupperes sammen. Der kan udvælges på gruppeniveau med ’having’. Følgende aggregeringsfunktioner er tilgængelige i SQL: avg average sum sum min minimum count tæller max maximum Eksempel selectTheater, avg (Perfs), count (Title) fromPABM group byTheater havingavg (Perfs) > 100
DDL Relationer oprettes, slettes og ændres som følger: Opretcreate table r (A1D1, A2D2, ..., AnDn) Sletdrop tabler Ændralter tableraddAD hvor (for alle i, 1 i n): Ai : attribut Di : domæne