Formale Datenbankabfragesprachen (Formal Query Languages)
Theoretische Grundlage für SQL
Alle 3 Sprachen sind gleich mächtig (unter Einschränkung auf sicheren Ausdrücken).
Menge von Tupeln
keine Ordnung
keine Wiederholungen
Relationale Algebra
Manche Operatoren manipulieren ganze Relation, andere nur einzelne Tupel.
Operatoren
Primitive Operatoren
σ
Selektion
π
Projektion
∪
Vereinigung
−
Differenz
×
Kreuzprodukt
ρ
Umbenennung
Ableitbate Operatoren (Syntactic Sugar)
⋈
join
(Natürlicher Verbund)
⟗
full outer join
⟕,⟖
left / right full-join
⋊,⋉
left / right semi-join
∩
Durchschnitt
÷
Division
σF(R)Selektion
Wähle alle Tupeln die Formel
F
erfüllen.
att(σF(R))=att(R)Schema von RelationR
σF(R)={t∈R∣t erfu¨llt F}Ausprägung
πAi(R)Projektion
Wähle alle Attribute
Ai
(und lösche Duplikate).
att(πA
i
(R))=Ai
{t′∣∃t∈R:t.Ai=t′}
In sql stehtselect
eigentlich für Projektion und nicht Selektion.
R∪SVereinigung
Nur wenn Schema von
R
und
S
gleich ist:
att(R)=att(S)
.
Wähle alle Tupel aus die in
R
oder
S
vorkommen.
att(R∪S)=att(R)
{t∣t∈R oder t∈S}
R−SDifferenz
Nur wenn Schema von
R
und
S
gleich ist:
att(R)=att(S)
.
Wähle alle Tupel die in
R
aber nicht in
S
vorkommen
att(R−S)=att(R)
{t∣t∈R und t∈S}
R×SKreuzprodukt
Gebe alle möglichen Kombinationen von Tupeln aus
R
und
S
.
Angenommen:
att(R)=(A1,…,Am)
,
att(S)=(B1,…,Bn)
att(R×S)=(A1,…,Am,B1,…,Bn)
{t1⋅t2∣∃t1∈R:t.[A1,…,Am]=t1 und ∃t2∈S:t.[B1,…,Bn]=t2}
Speicherbedarf:∣R∣⋅∣S∣
Durchschnittlich ist join effizienter als das Kreuzprodukt.
ρUmbenennung
Umbenennung von Attributen
ρA←B(R)
Umbenennung von Relationen
ρS(R)
R⋈SJoin (natürlicher Verbund)
-
Bilde
R×S
- Finde attribute die doppelt vorkommen und verknüpfe Tupel miteinander die gleichen Attributnamen und Werte haben
-
Entferne Attribute die doppelt vorkommen mit dem selben Namen
Angenommen
R(A1,…,Am,B1,…B
k
)
S(B1,…B
k
,C1,…Cn)
Dann
R⋈θSJoin (allgemeiner Verbund)
Keine gleichnamigen attribute notwendig.
R⋈θS=σθ(R×S)
R⟗Sfull outer join
R⟕Sleft full-join
R⟖Sright full-join
R⋉Sleft semi-join
R⋊Sright semi-join
R∩SDurchschnitt
R∩S=R−(R−S)
R÷SDivision
Siehe
https://de.wikibooks.org/wiki/Relationenalgebra_und_SQL:_Division
R
und
S
sind Relationen wobei
att(S)⊆att(R)
.
t∈R÷S
wenn
∀s∈S∃r∈R:r.att(S)=s
Dann nehmen wir für die Tupel diese
r
(aber entfernen davon die Attribute von
S
)
r.(att(R)−att(S))=t
Division lässt sich mit Basisoperationen ausdrücken:
R÷S=πf(R)−πf((π
f
(R)×S)−R)
f=att(R)−att(S)Keine Attribute vonSinR
Syntax
Eine Abfragesprache ist relational abgeschlossen wenn sowohl input als auch output Relationen sind.
Basis-Ausdrücke
Relationen der Datenbank
Konstante Relationen
= nur ein Tupel mit einer Spalte. Kann nur einen Eintrag haben oder keinen Inhalt.
SindRundSAusdrücke der relationalen Algebra
dann können rekursiv alle primitiven operatoren auf sie angewendet werden und sie sind weiterhin gültige Ausdrücke.
Relationenkalkül
Formel
P(t)
darf logische, vergleichende Operatoren und Allquantor / Existenzquantor enthalten.
Relationaler Tupelkalkül{t∣P(t)}
Relationaler Domänenkalkül
{[v1,v2,…,vn]∣P(v1,v2,…,vn)}
Sichere Ausdrücke
Keine unendlichen Eingaben oder Ausgaben wie zB
{t∣¬(t∈R)}
{[a]∣¬([a]∈R)}
Definition Sicher
Ein Ausdruck des Tupelkalküls heißt sicher, wenn das Ergebnis des Ausdrucks eine Teilmenge der Domäne ist.
Domäne
Alle Konstanten aus der Formel und Menge aller möglichen Attributwerte.