Datenbanksysteme Klausurvorbereitung

SQL

SQL besteht aus folgenden Teilsprachen

Sichten und Ebenen

image-20210712145537551

 

Datenbanken/Relationen:

Syntax Datenbank/Relation anlegen:

Syntax Relationenkomponente:

Deklaration eines Attributs oder einer Integritätsbedingung

Beispiel:

 

Integritätsbedigung:

Beispiel:

Löschen/Ändern:

OperationSyntax
Datenbank löschendrop database
Relation löschendrop table
Relation ändernalter table add

 

Tupel

Einfügen:

Syntax:

Beispiel:

Löschen:

Syntax:

Beispiel:

 

Sicherstellung der Integritätsbedingungen

Nach dem Einfügen wird i. A. überprüft, ob die Integritätsbedingung noch erfüllt sind.

Wenn nicht, wird die Operation rückgängig gemacht und ein Fehler gemeldet.

 

Anfragen

Grundschema:

Syntax:

Selektion

Vereinigung

(Duplikate werden eliminiert)

Beispiel:

Differenz

Entsprechend gelten bei except die Regelnder Mengensemantik.

Voraussetzung: Schemaverträglichkeit

Beispiel:

Umbenennung

Syntax:

Beispiel:

Kartesisches Produkt

Attribute der Schemata müssen in SQL nichtdisjunkt sein.

Ein Join kann durch eine zusätzliche where-Klausel formuliert werden.

Beispiel:

 

Multimengensemantik

 

Atomare Formeln

OperationSyntaxBeispiel
BetweenA between B and C 
Like (Wildcards möglich)A like B 
Wildcards▪ % repräsentiert beliebig viele Zeichen ▪ _ repräsentiert genau ein Zeichenselect PName from Personal where Vorname like 'M%g_t
InA in (b,c,… , z) 
Sonderbehandlung für NULL-Wertewhere is nullselect * from PMZuteilung where note is null;

Joins

ArtBemerkungBeispiel
Join select * from r, s where r.A = s.B
Semi-Join select r.* from r, s where r.A = s.B
Innerer Theta-Join from r inner join s on r.A > s.B
Innerer Equi-Join über ein gemeinsames Attribut AResultatschema enthält das Attribut A genau einmal.from r inner join s using (A)
Natural Join from R natural inner join S
Outer-Joins
ArtBeispiel
left outer joinfrom r left outer join s on r.A = s.B
right outer joinfrom r right outer join s on r.A = s.B
full outer joinfrom r full outer join s on r.A = s.B

Beispiel:

image-20210712145633400

 

Skalare Aggregate

Liefert zu einer Menge/Multimenge von Werten einen Wert zurück.

Beispiel:

In count(*) kann distinct nicht genutzt werden.

Unterschied von sum und avg zu count: Bei einer leeren Eingabe wird der Wert NULL und nicht die Zahl 0 zurückgeliefert.

Gruppierung (Vektoraggregate)

Beispiel:

Having-Klausel

Filtern von Gruppen, die gewisse Bedingungen erfüllen, wie z. B. Anzahl der Tupel in einer Gruppe > 5.

Beispiel:

Sortierte Ausgabe

NULLS { FIRST | LAST }: Behandlung von Nullwerten , zuerst oder am Ende der sortierten Ausgabe

Syntax:

Beispiel:

Limit-Klausel

Sinnvoll nur bei SQL-Anfragen mit order-by-Klausel.

Syntax:

Beispiel:

Zusammenfassung

Zusammensetzung einer SQL-Anfrage

Unteranfragen

Varianten von Unteranfragen

  1. relationerzeugende Unteranfrage (engl.: table subquery):

    In SQL kann überall dort, wo bisher eine Relation steht, eine temporäre Relation in Form einer SQL-Anfrage verwendet werden.

  2. tupelerzeugende Unteranfrage (engl.: row subquery):

    In SQL kann überall dort, wo ein Tupel stehen darf, eine Unteranfrage stehen, die genau ein Tupel produziert.

  3. werterzeugende Unteranfrage (engl. scalar subquery):

    In SQL kann überall dort, wo ein Wert verlangt wird, eine temporäre Relation mit einem Attribut und einer Spalte verwendet werden.

Beispiel:

Korrelierte Unteranfrage

Unteranfrage sind von der äußeren Anfrage abhängig.

Diese Auswertung ist i. A. sehr teuer und es stellt sich deshalb die Frage, ob man diese Anfragen noch anders ohne eine korrelierte Unteranfrage berechnen kann. Wenn es gelingt, spricht man vom Dekorrelieren der Unteranfrage.

Beispiel:

image-20210712145702231

Diese Anfrage liefert für jede Person B mit Personalnummer B.pnr genau einen Wert!

Mit solchen Unteranfragen kann jede group-by Klausel nachgebaut werden

Bespiel:

Unteranfragen sind ausdrucksstärker.

Unteranfragen in der where-Klausel treten sehr oft in korrelierter Weise auf.

image-20210712145720566

 

Sichtbarkeiteiner Tupelvariable

 

Unkorrelierte Unteranfragen

Wenn eine Unteranfrage unabhängig von der äußeren Anfrage ist, spricht man von einer unkorrelierten Unteranfrage.

Im Gegensatz zu einer korrelierten Anfrage ist dann eine einmalige Auswertung der Unteranfrage möglich.

Die Kosten bei der Auswertung solcher Unteranfragen sind i. A. niedrig

Relationerzeugende Unteranfragen

Statt einer persistenten Relation kann eine Unteranfrage als „temporäre“ Relation benutzt werden.

Dabei wird die Unteranfrage geklammert.

Solche Anfragen können in der From- und Where-Klausel auftreten.

image-20210712145741460

Mengenwertige Unteranfragen

Durch das Schlüsselwort in kann getestet werden, ob ein Attribut einen Wert in einer Menge annimmt.

image-20210712145755331

Durch Negation lässt sich auch not in testen.

 

Differenz mit Unteranfragen

Differenz zwischen zwei Relationen

Beispiel:

Berechne alle Angestellten, die derzeit keine Maschine bedienen können.

Allquantifizierte Anfragen

Für den Benutzer sind allquantifizierte Anfragen besonders wichtig: alle Tupel einer Relation (Unteranfrage) erfüllen etwas.

Es gibt keine Allquantoren in SQL, stattdessen müssen die Anfragen auf den Existenz Operator exists abgebildet werden.

image-20210712145818760

Einfache allquantifizierte Anfragen mit all

Semantik ALL

Beispiel all:

Hier gibt es noch ein Problem, wenn note = null ist.

Beispiel some/any:

Statt einer Menge mit Werten kann wiederum eine Relation mit einem Attribut verwendet werden.

Index

Beispiel:

Tradeof:

Indexstrukturen:

Rekursive Anfragen

 

image-20210712145848649

Beispiel:

Beachte: with ist nur zusammen mit EINER Anfrage erlaubt.

The following items are not allowed in a recursive with-clause (SQL server):

 

Sichten

Motivation

Bei lesenden Anfragen: Keine Unterscheidung zwischen Sichten und Relationen (Unterstützung von Änderungsoperationen in Sichten).

Sichten anlegen:

Syntax:

Beispiel:

Schlüsselwort with check option:

Nur die Datensätze können in eine Sicht eingefügt werden, die bei einer Suche in der Sicht wieder gefunden werden können.

➔ Dies ist die einzig sinnvolle Variante einer Sicht.

Sicht löschen:

Updates nicht immer möglich

Problem:

Eindeutige Delegation der Änderung an Relationen

Beispiel:

Oracle unterstützt Änderungen nur dann, wenn

Materialisierte Sichten

Beispiel:

Dadurch werden die Ergebnisse der SQL-Anfrage unter dem Namen magg_view explizit gespeichert.

Im Gegensatz zu einer normalen View kann man keine Änderungsoperationen auf einer materialisierten View durchführen.

Soll die View neu berechnet werden, muss dies explizit vom Benutzer ausgelöst werden.

Namensräume

Motivation: Vermeidung von Namenskonflikten bei Tabellen, Sichten und Indexen

Syntax:

Beispiel:

Wertebereiche

Einschränkung bestehender Datentypen durch Hinzufügen von Integritätsbedingungen.

Verwendung in verschiedenen Relationen

Syntax:

Beispiel:

Weitere Funktionalität:

Verfügbare Datentypen

Eine kleine Auswahl (aus dem SQL Standard):

bigint, bit, bit varying, boolean, char, character varying, character, varchar, date, double precision, integer, interval, numeric, decimal, real, smallint, time, timestamp, xml, json

Jedes System hat zusätzlich noch spezifische Datentypen:

PostgreSQL → siehe Benutzermanual

Beispiel: date, timestamp, serial

Klassen von Integritätsbedingungen

Statische Bedingungen

Definiert der erlaubten Datenbankzustände

Dynamische Bedingungen

Definition der erlaubten Zustandsänderungen in einer Datenbank.

Check-Bedingungen

Beispiel:

Eine Integritätsbedingung kann nun mit folgenden Schlüsselworten versehen werden: