Relationenalgebra: Funktion Projektion Syntax Anmerkung Selektion σ [ Bedingung ] (Relation) π [ Attributemenge ] (Relation) ∈ {<, ≤, =, ≥, >} Verbund Umbenennung (Relation1) (Relation2) β[ neu ← alt ] (Relation) Vereinigung/Durchschnitt/ (Relation1) (Relation2)/ Differenz (Relation1) (Relation2)/ (Relation1) – (Relation2) Bedingung: Attribut Konstante/Attribut Verknüpfungen mit ∧,∨, ¬ Kommutativ, assoziativ nötig für Mengenoperationen Gleiche Attributnamen notwendig! vgl. Umbenennung Bereichskalkül: Funktion Projektion Selektion Verbund Syntax {y1, . . ., yk| ∃x1 . . . ∃xn R(x1, . . . , xn) ∧ y1 = xi1 ∧ . . . ∧ yk = xik} bzw. {y1, . . ., yk| R(x1, y1, . . ., yk, . . . xn)} {x1, . . ., xn| R(x1, . . . , xn) ∧ (Bedingung)} {x1, . . ., xnxn+1, . . ., xn+m-i | R(x1, . . . , xn) ∧ S(x1, . . . , xixn+1, . . ., xn+m-i} SQL: select-Anweisung: select [distinct] *|{Attribut}|{Aggregat/Arithmektik} [as Name] from Relation(en) [where Bedingung] [group by Attribut(e) [having Bedingung]] [order by Attribut1 [asc|desc]] distinct – keine mehrfach Vorkommen (default ist all) des Attributs * – alle Attribute der Relation Umbenennung durch as nach „Name“ Aggregat- und Arithmetikfunktionen: [Y[+,-,*,/]Z][count(X)|sum(X)|avg(X)|max(X)|min(X)] wobei: X = [distinct|all]Attribut...nur [eventuelle Forderung unterschiedliche] Attributwerte Y,Z...Attributwert oder Konstante Relationen, können auch (bsp.-weise bei identischen Attributnamen) mit Variablen versehen werden: Relation1 r, Relation2 t, Relation3 u Bedingungen: Attribut =,<,>,>=,<= Attribut/Konstante Attribut in (Menge), wobei Menge eine Aufzählung (z.B. („a“, „b“, „c“)) oder wiederum eine select-Klausel sein kann exists (Menge), wenn diese Menge nicht leer Attribut =,<,>,>=,<= all|any (Menge), wobei all=All- und any=Existenzquantor Attribut like „_test%“, Wildcards: _=genau ein bzw. % kein oder mehrere Zeichen Attribut is [not] null, für Prüfung auf null bzw. kein Nullwert group by – gruppieren der from...where Tupel nach gewünschten Attributen having – mögliche Bedingungen der Gruppierung, Aggregatfunktionen2 sind erlaubt order by: asc – aufsteigend, desc – absteigend 1 2 Dieses muss in der Attributmenge zwischen select und from enthalten sein über nicht Gruppierungsattributen update-Anweisung: update Basisrelation set Attribut1 = Neuer_Wert, ... [where Bedingung] Neuer_Wert, kann auch Arithmetikoperationen enthalten (z.B. Attribut1=Attribut1+1000) delete-Anweisung: delete from Basisrelation [where Bedingung] insert-Anweisung: insert into Basisrelation [(Attribut1, ...)] values (Konstante1, ...) create table-Anweisung: create table Name (Attributname Wertebereich [Optionen],...,[ForeignKey]) Optionen: not null, primary key, default Foreignkey (Fremdschlüssel): foreign key (Attribut) references Relation (Attribut3) Überprüfungsauslöser: on delete|update dann tue: cascade | set null | set default | no action zum Zeitpunkt: deferred | immediate (deferred: Zurückstellen an das Ende der Transaktion, immediate: sofortige Prüfung bei jeder relevanten Datenbankänderung) create assertion-Anweisung (Zusicherung): create assertion Name check ( prädikat ) create trigger-Anweisung (Rücksetzung): create trigger Name after|before Ereignis on Relation [when Bedingung] begin atomic SQL-Anweisung1; SQL-Anw2;... end - Ereignis: insert|update [of Liste von Attributen]|delete - for each row bzw. for each statement: Aktivierung des Triggers für jede Einzeländerungen einer mengenwertigen Änderung oder nur einmal für die gesamte Änderung - before bzw. after: Aktivierung vor oder nach der Änderung - referencing new as bzw. referencing old as: Binden einer Tupelvariable an die neu eingefügten bzw. gerade gelöschten („alten’“) Tupel einer Relation - SQL-Anweisung: z.B. rollback, delete-Anweisung, etc. create view-Anweisung create view Name [SchemaDeklaration] as SQLAnfrage [with check option] Einschränkungen: - änderbar nur Selektions- und Projektionssichten (Verbund und Mengenoperationen nicht erlaubt) - 1:1-Zuordnung von Sichttupeln zu Basistupeln: kein distinct in Projektionssichten - Arithmetik und Aggregatfunktionen im select-Teil sind verboten - genau eine Referenz auf einen Relationsnamen im from-Teil erlaubt (auch kein Selbstverbund) - keine Unteranfragen mit “Selbstbezug” im where-Teil erlaubt (Relationsname im obersten SFW-Block nicht in from-Teilen von Unteranfragen verwenden) - group by und having verboten 3 in dieser letzten Relation