Relationenalgebra, Bereichskalkül und SQL

Werbung
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
Herunterladen