Fakultät Bauingenieurwesen Institut für Bauinformatik, Prof. Dr.-Ing. Raimar J. Scherer Informationsmanagement u. Numerische Methoden Relationale und Objekt-orientierte Datenstrukturen 6. Semester 2. Vorlesung: SQL II
Übersicht 1) Daten im Bauwesen 2) Von Tabellen zu Relationen 3) Die Datenbanksprache SQL a) Historie b) Eigenschaften c) Sprachelemente i. Schlüsselwörter ii. Syntax iii. Datendefinition: Create, Datentypen iv. Datenmanipulation: INSERT, UPDATE, DELETE v. Abfrage: Select Folie 2
Operationen auf relationalen Datenstrukturen Die 4 Grundoperationen sind: 1. Projektion 2. Vereinigung 3. Restriktion 4. Division. Sie basieren auf den 3 klassischen Mengenoperationen: Vereinigung: r 1 r 2 : = {x x r 1 oder x r 2 } Durchschnitt: r 1 r 2 : = {x x r 1 und x r 2 } Differenz: r 1 \ r 2 : = {x x r 1 und x r 2 } Die Verknüpfung dieser Operationen mit der Objektmenge wird auch als Relationenalgebra bezeichnet. Die Operationen gelten für beliebige n-stellige Relationen mit n 2. Alle Operationen werden durch den SELECT Befehl abgebildet.
Projektion Durch die Projektion werden aus einer n-stelligen Relation einzelne Spalten entfernt, d.h. die Relation wird auf eine neue Relation projiziert, die genau die nicht zu entfernenden Spalten enthält. Die Zeilen, die identische Werte enthalten, sind nur einmal zu erstellen, d. h. doppelte Zeilen werden gelöscht. Die Projektionsoperation wird mit π bezeichnet, R neu = π (L) R alt L ist eine Liste von den Attributen, die erhalten bleiben. R neu muss natürlich eine n-stellige Relation mit n > 2 sein. Beispiel: Mitarbeiterkurzform = π (Pers.-Nr., Name, Vorname) Mitarbeiter Neue Relation Attribute der neuen Relation Ursprüngl. Relation Folie 4 2. VO Informationsmanagement: SQL
Projektion Mitarbeiter Pers- Nr. Name Vorname Wohnort Geschlecht Beruf Steuerklasse 1 1015 Müller Hans Dresden m Müller 1 2 1055 Müller Rolf Freiberg m Bäcker 3 3 1075 Klein Otto Radeberg m Maler 1 4 2015 Adler Fritz Dresden m Polititker 3 5 2020 Schmidt Anton Freiberg m Student 5 6 2090 Walther Anna Zittau w Lehrerin 1 R neu = π (Mitarb., Pers-Nr., Name, Vorname) R alt Mitarbeiter Pers-Nr. Name Vorname Folie 5 1 1015 Müller Hans 2 1055 Müller Rolf 3 1075 Klein Otto 4 2015 Adler Fritz 5 2020 Schmidt Anton 6 2090 Walther Anna
Verbund 1) Bildung des Kreuzproduktes zweier Mengen 2) Selektion nach einer definierten Bedingung Mutter M_Name Kind Vater V_Name Kind Alter des Kindes Anabel Sophia Jörg Enrico 4 Marlen Werner Lotta 7 Almuth Thomas Tom 5 Heike Marc Anna 3 Charlotte Eltern = Vater Vater.Kind = Mutter.Kind Mutter Eltern V_Name Kind Alter des Kindes M_Name Jörg Enrico 4 Anabel Werner Lotta 7 Sophia Thomas Tom 5 Almuth Marc Anna 3 Heike Enrico Lotta Ina Tom Anna Franco Folie 6 2. VO Informationsmanagement:
Vereinigung Vereinigung Aus zwei typkompatiblen Relationen Rel m und Rel t wird eine neue Relation erzeugt, die alle Tupel t enthält, die in wenigstens einer der beiden Relationen vorkommen: Rel m Rel t : = { t t Rel t Rel } m t Anmerkung: Sind die zu vereinigenden Relationen nicht typkompatibel muss zunächst eine Anpassung stattfinden, indem beide Relationen durch eine Projektion bspw. auf semantisch identische Attribute beschränkt werden. Die Vereinigung ist assoziativ und kommutativ. Folie 7 2. VO Informationsmanagement
Vereinigung Pers- Nr. Name Vorname Steuerklasse Kunden- Nr. Name Vorname Wohnort 1015 Müller Hans 1 1055 Müller Rolf 3 1075 Klein Otto 1 2015 Adler Fritz 3 1 Meier Heiner Dresden 2 Müller Rolf Freiberg 3 Weber Gabi Radeberg 4 Adler Fritz Dresden 2020 Schmidt Anton 5 2090 Walther Anna 1 Rel neu = Mitarbeiter {Name,Vorname} υ Kunden {Name,Vorname} Name Müller Müller Klein Adler Schmidt Walther Meier Weber Vorname Hans Rolf Otto Fritz Anton Anna Heiner Gabi Folie 8 2. VO Informationsmanagement
Restriktion (Selektion) Horizontale Zerlegung Restriktion Eine Restriktion erzeugt aus einer Relation Rel 1 eine neue Relation Rel 2, die alle Tupel aus Rel 1 enthält, welche eine oder mehrere Selektionsbedingungen erfüllen. Die Restriktionsoperation wird mit σ bezeichnet: σ Folie 9 ( Rel) : = { t t Rel Bedingung( t) TRUE} Bedingung = Es wird unterschieden zwischen Konstantenselektion: Die Selektionsbedingung formuliert eine bestimmte Beziehung zwischen dem Attributwert und einer Konstanten; a(i) = c. Attributselektion: Die Selektionsbedingung formuliert eine bestimmte Beziehung zwischen den Werten zweier typkompatibler Attribute eines Tupels; a(i) = b(j) oder f[b(j)]. Die Beziehung werden durch einen Vergleichsoperator θ mit θ є {=,,<,>,, } festgelegt, nicht nur =. 2. VO Informationsmanagement
Restriktion (Selektion) Mitarbeite r Pers- Nr. Name Vorname Wohnort Geschlech t Beruf Steuer - klasse 1 1015 Müller Hans Dresden m Müller 1 2 1055 Müller Rolf Freiberg m Bäcker 3 3 1075 Klein Otto Radeberg m Maler 1 4 2015 Adler Fritz Dresden m Politiker 3 5 2020 Schmidt Anton Freiberg m Student 5 6 2090 Walther Anna Zittau w Lehrerin 1 Mitarbeite r Horizontale Zerlegung Rel neu = σ {Steuerklasse = 1} (Mitarbeiter) Pers - Nr. Name Vorname Wohnor t Geschlech t Beruf Steuer - klasse 1 1015 Müller Hans Dresden m Müller 1 3 1075 Klein Otto Radeber g m Maler 1 Folie 6 10 2090 Walther 2. Anna VO Informationsmanagement Zittau w Lehrerin 1
Differenz Differenz Aus den beiden typkompatiblen Relationen Rel m und Rel t wird eine neue Relation erzeugt, die nur die Tupel t enthält, die in Rel m, aber nicht in Rel t vorkommen: Rel m \ Rel t : = { t t Rel t Rel } m t Die Differenz ist weder assoziativ noch kommutativ. Folie 11 2. VO Informationsmanagement
Differenz Pers- Nr. Name Vorname Steuerklasse 1015 Müller Hans 1 1055 Müller Rolf 3 1075 Klein Otto 1 2015 Adler Fritz 3 2020 Schmidt Anton 5 Kunden- Nr. Name Vorname Wohnort 1 Meier Heiner Dresden 2 Müller Rolf Freiberg 3 Weber Gabi Radeberg 4 Adler Fritz Dresden 2090 Walther Anna 1 Rel neu = Mitarbeiter {Name,Vorname} \ Kunden {Name,Vorname} Name Müller Klein Schmidt Walther Vorname Hans Otto Anton Anna Folie 12 2. VO Informationsmanagement
SQL Der Befehl SELECT SELECT ist der einzige Befehl zur Suche und Abfrage von Daten einer Datenbank. Syntax für den Hauptteil des SELECT-Befehls: SELECT Spaltenauswahlliste FROM Tabellenliste [ WHERE Bedingung ] [ GROUP BY Spaltenliste [ HAVING Bedingung ] ] Der SELECT Befehl entspricht der Mengenoperation PROJEKTION, kombiniert mit einer RESTRIKTION. Folie 13
SQL Der Befehl SELECT Ein kompletter SELECT-Befehl kann aus beliebig vielen Hauptteilen, die über UNION, EXCEPT oder INTERSECT miteinander verknüpft sind, bestehen. SELECT-Hauptteil: [ { UNION EXCEPT INTERSECT } SELECT-Hauptteil: [ { UNION EXCEPT INTERSECT }... ] ] [ ORDER BY Ordnungsliste ] Die Punkte deuten an, dass die Aufzählung beliebig fortgesetzt werden kann. Bei mehr als zwei Verknüpfungen sollten jedoch Klammern gesetzt werden, um die Eindeutigkeit der Reihenfolge zu garantieren. Nach der Verknüpfung kann das Resultat mittels ORDER-BY-Klausel noch geordnet werden. Anm.: In ORACLE muss der Bezeichner EXCEPT durch MINUS ersetzt werden. Folie 14
SQL Der Befehl SELECT UNION EXCEPT Vereinigung der Ergebnismengen, wobei mehrfach vorkommende Ergebnistupel (wie bei DISTINCT) entfernt werden. VEREINIGUNG liefert die Tupel, die in Relation A jedoch nicht in Relation B vorkommen. Mehrfach vorkommende Ergebnistupel werden entfernt. DIFFERENZ INTERSECT liefert die Schnittmenge zweier Ergebnismengen. Mehrfach vorkommende Ergebnistupel werden entfernt. SCHNITT Folie 15
SQL Der Befehl SELECT: Beispiel SELECT Bauleiter.PersNr, Name, COUNT (*) FROM Bauleiter, Baustelle WHERE Bauleiter.PersNr = Baustelle.PersNr GROUP BY Bauleiter.PersNr, Name UNION SELECT PersNr, Name FROM Bauleiter WHERE PersNr NOT IN (SELECT PersNr FROM Baustelle); Folie 16
SQL SELECT: Logische Arbeitsfolge Alle in der Tabellenliste angegebenen Relationen werden (über das Kreuzprodukt oder einen Join) miteinander verknüpft. 1. Aus dieser verknüpften Relation werden die Tupel (Datensätze, Zeilen) ausgewählt, die die angegebene WHERE-Bedingung erfüllen. Es liegt eine Restriktion vor. 2. Mittels Auswahlliste am Anfang des SELECT-Befehls findet auf das bisherige Resultat eine Projektion auf die angegebenen Spalten statt. 3. Dann wird eine Gruppierung gemäß der GROUP-BY-Klausel durchgeführt. Eine Gruppierung fasst dabei mehrere Tupel zu einem Tupel zusammen, so dass die Ergebnisrelation weniger Tupel enthält. 4. Eine folgende HAVING-Klausel führt jetzt auf das Ergebnis der Gruppierung nochmals eine Restriktion auf bestimmte Tupel durch. 5. Alle so erstellten Hauptteile des SELECT-Befehls werden jetzt mittels UNION, INTERSECT oder EXCEPT miteinander verknüpft. 6. Die Ergebnisrelation wird nach den Vorgaben in der Ordnungsliste der ORDER-BY-Klausel sortiert. Folie 17
SQL SELECT: Einfache Grundform SELECT... FROM... ; Beispiele: Semikolon schließt den Befehl ab Name der Tabelle mit den Daten Schlüsselwort für Tabellenangabe anzuzeigende Spalten Schlüsselwort für Abfrage Auflisten aller Spalten einer Tabelle: mit allen Spalten einer Tabelle in der gespeicherten Reihenfolge: SELECT * FROM Mitarbeiter; Auflisten aller Datensätze mit allen Spalten der Tabelle in der abgespeicherten Reihenfolge Folie 18
SQL SELECT: Einfache Grundform Projektion Auflisten (nur) bestimmter Spalten einer Tabelle: SELECT Name, Vorname FROM Mitarbeiter ; Es werden nur die Spalten Name und Vorname von der Tabelle Mitarbeiter in der Reihenfolge: Name, Vorname aufgelistet. Auflisten (nur) bestimmter Spalten in abweichender Reihenfolge: SELECT Vorname, Name, PersNr FROM Mitarbeiter ; Es werden nur die Spalten Vorname, Name und PersNr in dieser von den gespeicherten Daten abweichenden Reihenfolge aufgelistet. Folie 19
SQL SELECT: Beispiel Es können nicht nur Spalten, sondern auch beliebige Spaltenausdrücke angegeben werden: SELECT Name, Vorname, 12 * Gehalt AS Jahresgehalt FROM Mitarbeiter ; oder: SELECT Name, Vorname, 12 * Gehalt FROM Mitarbeiter ; Es werden die 3 Spalten: Name, Vorname und Jahresgehalt ausgegeben. Folie 20
SQL SELECT: Beispiel Attribute (Spalten) können im Rahmen syntaktisch korrekter Ausdrücke beliebig miteinander in Verbindung gebracht werden. PersNr Name Vorname Gehalt Zuwdg Sonderz. 0120 0130 0135... Ahrend Berger Müller... Jens Peter Paul... 6000 6800 5800... 5000 5500 4800... 2001 1980 2200... SELECT Name, Vorname, (12 * Gehalt + Zuwdg * 6 - Sonderz) AS Jahresgehalt FROM Mitarbeiter ; Es werden die 3 Spalten: Name, Vorname und Jahresgehalt ausgegeben. Folie 21
SQL SELECT: Einfache Grundform Auflisten von Spalten mehrerer Tabellen: SELECT * FROM Bauleiter, Baustellen ; oder: SELECT Bauleiter.*, Baustellen.* FROM Bauleiter, Baustellen ; * = Es wird das Kreuzprodukt aller Spalten der beiden Tabellen ausgegeben, d. h. alle möglichen Kombinationen aller Spalten der 1. Tabelle mit allen Spalten der 2. Tabelle vgl. Kartesisches Produkt. Folie 22
SQL SELECT: WHERE-Klausel Restriktion Auflisten (nur) bestimmter Datensätze in Abhängigkeit von einer Bedingung: SELECT * FROM Mitarbeiter WHERE LOHN <= 2500; Es werden alle Datensätze aufgelistet, bei denen die Spalte Lohn <= 2500 ist. SELECT Name,Vorname,PrsNr FROM Mitarbeiter WHERE LOHN <= 2500; Es werden alle Datensätze mit den Spalten Vorname, Name und PrsNr in dieser von den gespeicherten Daten abweichenden Reihenfolge aufgelistet, bei denen die Spalte Lohn <= 2500 ist. SELECT * FROM Mitarbeiter WHERE Name = Berger ; Es werden alle Datensätze aufgelistet, bei denen der Name = Berger ist. Folie 23
SQL SELECT: WHERE-Klausel Als Relation können verwendet werden: Vergleichsoperatoren: Kleiner < Weitere Operatoren: Kleiner gleich <= Gleich > Größer geich >= ungleich <> Intervalloperator Enthaltenoperator Auswahloperatoren Ähnlichkeitsoperator Existenzoperator Eindeutigkeitsoperator Nulloperator [NOT] BETWEEN AND [NOT] IN ALL, ANY, SOME [NOT] LIKE EXISTS UNIQUE IS [NOT] NULL Folie 24
SQL SELECT: ORDER BY Sortieren der aufzulistenden Daten Die Sortierung erfolgt (automatisch) je nach Datentyp: alphabetisch bzw. chronologisch z. B. bei Spalten vom Typ CHAR, CHARACTER usw.: alphabetisch bei Spalten vom Typ INTEGER, NUMERIC usw.: chronologisch Mit ASC (ascending) bzw. DESC (descending), kann festgelegt werden, ob aufwärts oder abwärts sortiert werden soll. Wenn nichts angegeben wird, wird automatisch in aufsteigender Folge sortiert. Folie 25
SQL SELECT: ORDER BY Auflisten von Datensätzen, sortiert (in aufsteigender Folge): SELECT * FROM Mitarbeiter ORDER BY PersNr ; Es werden alle Datensätze, geordnet nach Personalnummern, (automatisch) in aufsteigender chronologischer Folge, aufgelistet, falls die Spalte PersNr mit einem numerischen Typ vereinbart wurde. SELECT * FROM Mitarbeiter ORDER BY Name, Vorname ; Es werden alle Datensätze, geordnet nach Namen, (automatisch) in aufsteigender alphabetischer Folge aufgelistet, wenn die Spalte Name z. B. mit dem Typ CHARACTER vereinbart wurde. Bei gleichen Namen wird zusätzlich nach Vornamen sortiert. Folie 26
SQL SELECT: ORDER BY Auflisten von Datensätzen, sortiert in absteigender Folge: SELECT * FROM Mitarbeiter ORDER BY Name DESC, Vorname DESC ; Es werden alle Datensätze, geordnet nach Namen in absteigender Alphabetischer Folge, bei gleichen Namen nach Vornamen, hier ebenfalls in absteigender alphabetischer Folge aufgelistet. Würde hier nach Vorname nicht nochmals DESC stehen, würden die Vornamen (automatisch) in aufsteigender Folge sortiert. Folie 27
SQL SELECT: ORDER BY Auflisten von Datensätzen, sortiert in auf- bzw. absteigender Folge: SELECT Vorname, Name, PersNr FROM Mitarbeiter WHERE Name = Berger ORDER BY Name DESC, Vorname ; Es werden die Spalten Vorname, Name, PersNr in der hier angegebenen (nicht in der abgespeicherten) Reihenfolge für alle Datensätze aufgelistet, bei denen die Spalte Name= Berger ist, geordnet nach Namen in absteigender alphabetischer Folge und Vornamen in aufsteigender alphabetischer Folge. Folie 28
SQL SELECT: WHERE, ORDER BY Anmerkung: Die gespeicherten Daten bleiben bei der Auswahl durch WHERE oder Umordnung durch ORDER BY unverändert gespeichert. Die Auswahl- und Ordnungskriterien beziehen sich lediglich auf das Auflisten der Daten. Allgemein: Ein SELECT-Befehl (Abfragebefehl) ändert nie etwas in der Datenbank. Folie 29
SQL SELECT: Statistikfunktionen AVG Average Durchschnittswert, ermittelt über alle Zeilen COUNT Count Anzahl aller Zeilen MAX Maximum Maximalwert aller Zeilen MIN Minimum Minimalwert aller Zeilen SUM Sum Summenwert, summiert über alle Zeilen Durchschnittswert aller Zeilen einer Spalte: SELECT AVG (Gehalt) FROM Bauleiter ; Anzahl aller Zeilen innerhalb einer Tabelle: SELECT COUNT ( * ) AS Bauleiteranzahl FROM Bauleiter ; Es wird die Anzahl der in der Tabelle gespeicherten Bauleiter als Bauleiteranzahl ausgegeben. Folie 30
SQL SELECT: Statistikfunktionen SELECT COUNT ( Bemerkung ) FROM Bauleiter ; Es werden nur die Eintragungen in der Spalte Bemerkung gezählt, die nicht NULL sind. Anzahl aller Zeilen innerhalb einer Tabelle: SELECT COUNT ( DISTINCT Name ) FROM Bauleiter ; Es werden nur die unterschiedlichen Einträge in der Spalte Name gezählt. Folie 31
SQL SELECT: Statistikfunktionen Minimum aller Zeilen einer Spalte: SELECT MIN (Gehalt) FROM Bauleiter WHERE Gehalt > 5000 ; Es wird das Minimum der Spalte Gehalt aus allen Werten die größer als 5000 sind in der Tabelle Bauleiter ermittelt. Aufsummieren von Zeilen innerhalb einer Tabelle: SELECT SUM (12 * Gehalt + Zuwdg * 6 - Sonderz) AS Einkommen FROM Mitarbeiter ; Es wird das Einkommen aller Mitarbeiter aufsummiert. Folie 32