Formale Abfragesprachen

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

σ\sigma Selektion

π\pi Projektion

\cup Vereinigung

- Differenz

×\times Kreuzprodukt

ρ\rho Umbenennung

Ableitbate Operatoren (Syntactic Sugar)

\bowtie join (Natürlicher Verbund)

 full outer join

,⟕, ⟖ left / right full-join

,\rtimes, \ltimes left / right semi-join

\cap Durchschnitt

÷\div Division


σF(R)\sigma_{\mathrm{F}}(\mathrm{R })Selektion

Wähle alle Tupeln die Formel F\small \mathrm{F} erfüllen.

att(σF(R))=att(R) \operatorname{att}\left(\sigma_{\mathrm{F}}(\mathrm{R})\right)=\operatorname{att}(\mathrm{R}) Schema von RelationR\small\mathrm{R}

σF(R)={tRt erfu¨llt F} \sigma_{\mathrm{F}}(\mathrm{R})=\{t \in R \mid t \text { erfüllt } \mathrm{F}\} Ausprägung

πAi(R)\pi_{A_i}(\mathrm{R})Projektion

Wähle alle Attribute Ai\small A_i (und lösche Duplikate).

att(πAi(R))=Ai \operatorname{att}\left(\pi_{A_{i}}(\mathrm{R})\right)=A_{i} 

{ttR:t.Ai=t} \left\{t^{\prime} \mid \exists t \in \mathrm{R}: t . A_{i}=t^{\prime}\right\} 

In sql stehtselecteigentlich für Projektion und nicht Selektion.

RS\mathrm{R} \cup \mathrm{S}Vereinigung

Nur wenn Schema von R\small \mathrm{R} und S\small \mathrm{S} gleich ist: att(R)=att(S) \small \operatorname{att}(\mathrm{R})=\operatorname{att}(\mathrm{S})  .

Wähle alle Tupel aus die in R\small \mathrm{R} oder S\small \mathrm{S} vorkommen.

att(RS)=att(R) \operatorname{att}(\mathrm{R} \cup \mathrm{S})=\operatorname{att}(\mathrm{R}) 

{ttR oder tS} \{t \mid t \in \mathrm{R} \text { oder } t \in \mathrm{S}\} 

RS\mathrm{R} - \mathrm{S}Differenz

Nur wenn Schema von R\small \mathrm{R} und S\small \mathrm{S} gleich ist: att(R)=att(S) \small \operatorname{att}(\mathrm{R})=\operatorname{att}(\mathrm{S})  .

Wähle alle Tupel die in R\small \mathrm{R} aber nicht in S\small \mathrm{S} vorkommen

att(RS)=att(R) \operatorname{att}(\mathrm{R} -\mathrm{S})=\operatorname{att}(\mathrm{R}) 

{ttR und t∉S} \{t \mid t \in \mathrm{R} \text { und } t \not\in \mathrm{S}\} 

R×S\mathrm{R} \times \mathrm{S}Kreuzprodukt

Gebe alle möglichen Kombinationen von Tupeln aus R\small \mathrm{R} und S\small \mathrm{S} .

Angenommen: att(R)=(A1,,Am) \small \operatorname{att}(\mathrm{R})=\left(A_{1}, \ldots, A_{m}\right)  , att(S)=(B1,,Bn) \small \operatorname{att}(\mathrm{S})=\left(B_{1}, \ldots, B_{n}\right) 

att(R×S)=(A1,,Am,B1,,Bn) \operatorname{att}(\mathrm{R} \times \mathrm{S})=\left(A_{1}, \ldots, A_{m}, B_{1}, \ldots, B_{n}\right) 

{t1t2t1R:t.[A1,,Am]=t1 und t2S:t.[B1,,Bn]=t2} \left\{t_1 \cdot t_2 \mid \exists t_{1} \in \mathrm{R}: t.\left[A_{1}, \ldots, A_{m}\right]=t_{1}\right. \text { und } \left.\exists t_{2} \in \mathrm{S}: t .\left[B_{1}, \ldots, B_{n}\right]=t_{2}\right\} 

Speicherbedarf:RS|\mathrm{R}| \cdot |\mathrm{S}|

Durchschnittlich ist join effizienter als das Kreuzprodukt.

ρ\rhoUmbenennung

Umbenennung von Attributen

ρAB(R)\rho_{A \leftarrow B}(\mathrm{R})

Umbenennung von Relationen

ρS(R)\rho_{\mathrm{S}}(\mathrm{R})


RS\mathrm{R} \bowtie \mathrm{S}Join (natürlicher Verbund)

  1. Bilde R×S\small \mathrm{R} \times \mathrm{S}
  1. Finde attribute die doppelt vorkommen und verknüpfe Tupel miteinander die gleichen Attributnamen und Werte haben
  1. Entferne Attribute die doppelt vorkommen mit dem selben Namen

    Angenommen

    R(A1,,Am,B1,Bk) \mathrm R\left(A_{1}, \ldots, A_{m}, B_{1}, \ldots B_{k}\right) 

    S(B1,Bk,C1,Cn) \mathrm S\left(B_{1}, \ldots B_{k}, C_{1}, \ldots C_{n}\right) 

    Dann

RθS\mathrm{R} \bowtie_\theta \mathrm{S}Join (allgemeiner Verbund)

Keine gleichnamigen attribute notwendig.

RθS=σθ(R×S) \mathrm R \bowtie_{\theta} \mathrm S=\sigma_{\theta}(\mathrm R \times \mathrm S) 

R ⟗ S\mathrm{R}~ ⟗ ~\mathrm{S}full outer join

R ⟕ S\mathrm{R}~ ⟕ ~\mathrm{S}left full-join

RS\mathrm{R~} ⟖\mathrm{~S}right full-join

RS\mathrm{R}\ltimes\mathrm{S}left semi-join

RS\mathrm{R} \rtimes \mathrm{S}right semi-join

RS\mathrm{R} \cap\mathrm{S}Durchschnitt

RS=R(RS)\mathrm R \cap \mathrm S=\mathrm R-(\mathrm R-\mathrm S)

R÷S\mathrm{R} \div \mathrm{S}Division

Siehe https://de.wikibooks.org/wiki/Relationenalgebra_und_SQL:_Division

R\small \mathrm R und S\small \mathrm S sind Relationen wobei att(S)att(R) \small \operatorname{att}(\mathrm S) \sube \operatorname{att}(\mathrm R)  .

tR÷St \in \mathrm{R} \div \mathrm{S} wenn

sSrR:r.att(S)=s \forall s \in \mathrm S~~\exists r \in \mathrm R: ~~r.\text{att(S)}= s 

Dann nehmen wir für die Tupel diese rr (aber entfernen davon die Attribute von SS )

r.(att(R)att(S))=tr.(\text{att(R)}-\text{att(S)})= t

Division lässt sich mit Basisoperationen ausdrücken:

R÷S=πf(R)πf((πf(R)×S)R) \mathrm R \div \mathrm S=\pi_{f}(\mathrm R)- \pi_{f}\left(\left(\pi_{f}(\mathrm R) \times \mathrm S\right)-\mathrm R\right) 

f=att(R)att(S)f = {\text{att(R)}-\text{att(S)}}Keine Attribute vonS\small \mathrm{S}inR\small \mathrm{R}

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.

SindR\small \mathrm RundS\mathrm SAusdrü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)\small P(t) darf logische, vergleichende Operatoren und Allquantor / Existenzquantor enthalten.

Relationaler Tupelkalkül{tP(t)}\{t \mid P(t)\}

Relationaler Domänenkalkül {[v1,v2,,vn]P(v1,v2,,vn)} \left\{\left[v_{1}, v_{2}, \ldots, v_{n}\right] \mid P\left(v_{1}, v_{2}, \ldots, v_{n}\right)\right\} 

Sichere Ausdrücke

Keine unendlichen Eingaben oder Ausgaben wie zB

{t¬(tR)}\{t \mid \neg(t \in R)\}

{[a]¬([a]R)}\{[a] \mid \neg([a] \in 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.