Structured Query Language, SQL Kalkülteil • vom American National Standards Institute, ANSI, genormte Datenbanksprache. • enthält eine Teilsprache, die eine relationale Anfragesprache ist, • Mischung von − tupelorientierten Relationenkalkül − mit einigen algebraischen Elementen, − angereichert durch arithmetische und − textverarbeitende Elemente. 1. Semantik: erzeuge alle Kombinationen von Tupeln µ1 aus R1,...,µk aus Rk (wobei die Ri nicht notwendig verschieden sein müssen); Syntax: binde Tupelvariable µ1 an Relationensymbol R1,..., Tupelvariable µk an Relationensymbol Rk; 2. Semantik: wähle diejenigen Kombinationen aus, für die eine Formel Φ mit Prädikatenzeichen für Komponentenvergleiche wie = oder ≠ gültig ist; Syntax: setze aus Tupelvariablen und passenden Attributen gebildete Attributterme der Form µ.A in aussagenlogische Kombination von Prädikatenzeichen für Vergleiche von Werten ein; 3. Semantik: liefere dann die Komponenten µi1(A1),...,µil(Al) dieser Kombinationen; Syntax: bilde Liste der diese Komponenten bezeichnenden Attributterme µi1.A1,...,µil.Al. J. Biskup Informationssysteme SQL 24.11.96 11.1 J. Biskup Informationssysteme SQL 24.11.96 11.2 Dreischrittverfahren Vereinfachungen • algebraisch π{Ri1.A1,..., Ril.Al} (σΦ (R1 × ... × Rk)) • Anstatt in der FROM-Klausel durch “Ri µi” eine Tupelvariable µi an das Relationensymbol Ri zu binden, darf man in der SELECT- und der WHERE-Klausel das Relationensymbol selbst wie eine Tupelvariable benutzen und die entsprechende Bindung “Ri Ri” zu “Ri” abkürzen. • In der SQL-Syntax wird Teil 1 durch das Schlüsselwort FROM eingeleitet, Teil 2 durch das Schlüsselwort WHERE eingeleitet, Teil 3 vorangestellt und durch das Schlüsselwort SELECT (eigentlich wäre PROJECT angebracht) eingeleitet. • entsprechender SQL-Ausdruck hat dann folgendes Aussehen: SELECT DISTINCT µi1.A1,...,µil.Al • Anstatt eine Komponente µ(A) durch den entsprechenden vollständigen Attributterm µ.A zu bezeichnen, darf man auch nur das Attribut A verwenden, wenn entsprechend der FROM-Klausel und des Datenbankschemas die fehlende Tupelvariable eindeutig in Form eines Relationensymbols ergänzt werden kann. FROM R1 µ1,...,Rk µk • Enthält die Attributtermliste in der SELECT-Klausel alle entsprechend der FROM-Klausel bildbaren Attributterme, so kann sie durch * abgekürzt werden. WHERE Φ J. Biskup Informationssysteme SQL 24.11.96 11.3 J. Biskup Informationssysteme SQL 24.11.96 11.4 Schema: • Anfragewunsch “Bestimme für das Kind theresia ihr Geschlecht und ihre Eltern!” < PERSON | {Name, Geschlecht} | > < BEH | {Patient, Arzt, ArtPro} | > < ELT | {Name, Eltern} | > • Ausdruck der Relationenalgebra: σName=theresia (PERSON ELT). • SQL-Anfrage: Hypergraph: SELECT * DISTINCT FROM PERSON, ELT PERSON WHERE AND Geschlecht ELT PERSON.Name = ELT.Name PERSON.Name = 'theresia' Name Eltern Patient Mensch Arzt ArtPro BEH J. Biskup Informationssysteme SQL 24.11.96 11.5 J. Biskup Informationssysteme SQL 24.11.96 11.6 • Anfragewunsch: “Bestimme alle Ärzte, die weibliche Patienten behandeln!” • Anfragewunsch: “Bestimme die Großeltern des Kindes theresia!” • Ausdruck der Relationenalgebra: • SQL-Anfrage: πArzt (σGeschlecht = weib (σPatient = Name (BEH SELECT PERSON) ) ). GRAD2.Eltern FROM WHERE • Eine entsprechende SQL-Anfrage: SELECT DISTINCT FROM GRAD1, ELT GRAD1.Eltern = GRAD2.Name AND Arzt GRAD2 GRAD1.Name = 'theresia' BEH, PERSON WHERE BEH.Patient = PERSON.Name AND J. Biskup ELT Informationssysteme PERSON.Geschlecht = 'weib' SQL 24.11.96 11.7 J. Biskup Informationssysteme SQL 24.11.96 11.8 Kalkülteile von SQL: Attributtermliste Attributterm , einfache SQL- SELECT DISTINCT FROM WHERE * Attributtermliste Variablenbindungsliste Tupelvariable Formel . Relationensymbol Attributterm Variablenbindungsliste Attribut Relationensymbol Tupelvariable , J. Biskup Informationssysteme SQL 24.11.96 11.9 J. Biskup Informationssysteme SQL 24.11.96 11.10 algebraischer Teil von SQL Formel Atomformel NOT Formel SQL-Anfrage einfache SQL-Anfrage AND Formel Formel INTERSECT OR ( Formel UNION ) SQLAnfrage MINUS Atomformel Term Vergleichsprädikat einf. SQL-Anfrage EXISTS Term Term Attributterm Konstantenzeichen Vergleichsprädikat = ≠ J. Biskup Informationssysteme SQL 24.11.96 11.11 J. Biskup Informationssysteme SQL 24.11.96 11.12 Natürlicher Verbund: Der algebraische Teil erlaubt Seien < R | {A1,..., Ak, B1,..., Bl} | > und < S | {B1,..., Bl, C1,...,Cm} | > zwei Relationenschemas. durch den Kalkülteil gebildete Ergebnisse mengentheoretisch zu verknüpfen. Der arithmetische Teil erlaubt, Der natürliche Verbund von R und S wird bezeichnet durch die vier Grundrechenarten mitsamt den arithmetischen Vergleichsoperationen und SELECT DISTINCT in der kommerziellen Datenverarbeitung häufig benötigte Aggregatfunktionen wie Durchschnitt, Summe, Maximum, Minimum, Anzahl R.A1,...,R.Ak, R.B1,...,R.Bl, S.C1,...,S.Cm FROM R, S innerhalb von SQL zu benutzen. WHERE R.B1 = S.B1 AND R.B2 = S.B2 ... AND R.Bl = S.Bl. Der textverarbeitende Teil erlaubt, Konstantenzeichen als nichtatomare Zeichenfolgen zu behandeln, A=c-Selektion: die man bezüglich des Vorkommens von Teilworten testen, konkatenieren usw. kann. Sei < R | X | > ein Relationenschema mit A ∈ X. Die A = c-Selektion von R wird bezeichnet durch weitere Sprachmittel: SELECT DISTINCT * • SQL-Anfragen ineinander schachteln, FROM R • Entfernung von Duplikaten in Ergebnissen unterdrücken, • Ergebnisse weiter aufbereiten. J. Biskup Informationssysteme SQL WHERE A = 'c'. 24.11.96 11.13 J. Biskup Informationssysteme SQL 24.11.96 11.14 Projektion: A=B-Vergleich: Sei < R | X | > ein Relationenschema und {A1,..., Ak} ⊂ X. Sei < R | X | > ein Relationenschema mit {A, B} ⊂ X. Die Projektion von R auf {A1,..., Ak} wird bezeichnet durch Der A = B-Vergleich von R wird bezeichnet durch SELECT DISTINCT * SELECT DISTINCT A1,...,Ak FROM R FROM R. WHERE A = B. Vereinigung: Differenz: Seien < R | X | > und < S | X | > vereinigungsverträgliche Relationenschemas. Seien < R | X | > und < S | X | > vereinigungsverträgliche Relationenschemas. Die Vereinigung von R und S wird bezeichnet durch Die Differenz von R und S wird bezeichnet durch SELECT DISTINCT * SELECT DISTINCT * FROM R FROM R UNION MINUS SELECT DISTINCT * SELECT DISTINCT * FROM S FROM S. J. Biskup Informationssysteme SQL 24.11.96 11.15 J. Biskup Informationssysteme SQL 24.11.96 11.16