CREATE TABLE Statement Rückblick

Slides:



Advertisements
Ähnliche Präsentationen
Datenintegrität Einschränkung der möglichen Datenbankzustände und -übergänge auf die in der Realität möglichen Formulierung von Integritätsbedingungen.
Advertisements

Rückblick Abbildung E/R-Modell auf Relationales Modell (Tabellenmodell) ENTITY-TYPES RELATIONSHIP-TYPES (1:N / N:M / 1:1) Generalisierungshierarchie.
Datenintegrität Integitätsbedingungen Schlüssel
Rückblick SELECT mit mehreren Relationen Inner Join CROSS JOIN
ER-Datenmodell und Abfragen in SQL
Anzahl der ausgefüllten und eingesandten Fragebögen: 211
Einführung in die Informatik: Programmierung und Software-Entwicklung
Telefonnummer.
© A. Kemper / A. Eickler1 Kapitel 5: Datenintegrität Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung.
Folienadaption HS, 4/00. Relationen sind Tabellen! Relationales Modell = Tabellarische Repräsentation der Daten + assoziative Anfragesprache Datenbank.
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Objektrelationales Mapping mit JPA Entity Mapping Jonas Bandi Simon Martinelli.
= = = = 47 = 47 = 48 = =
SQL als Abfragesprache
Mh9S170Nr6 a. x1= –9; x2 = 1 b. x1= –4; x2 = 1 c. x1= 1; x2 = 2 d. leer e. x1= –15; x2 = 4,2 f. x1= –3,53; x2 = 1,28 g. leer h. x1= 0,2; x2 = 2 i. x1=
IS: Datenbanken, © Till Hänisch 2000 Tabellen In relationalen DB werden Daten in Tabellen organisiert Jede Spalte enthält eine bestimmte Art von Information,
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
Prof. Dr. Bernhard Wasmayr
SQL 2 Order by null Aggregatfunktionen group by Join subselect.
1 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines Schlüssels 1:N - Beziehung Angabe.
1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.
Erhard Künzel für Info 9. Klasse: digitale-schule-bayern.de © Erhard Künzel.
Abfragen – Tipps und Tricks Buch S102ff (Informatik I, Oldenbourg-Verlag) Nach einer Vorlage von Dieter Bergmann.
Prof. Dr. Bernhard Wasmayr VWL 2. Semester
AWA 2007 Natur und Umwelt Natürlich Leben
Übung 1: SQL Übungen finden bei Bedarf anstelle der Vorlesungen statt
Prof. Dr. Günter Gerhardinger Soziale Arbeit mit Einzelnen und Familien Übersicht über die Lehrveranstaltung Grundlegende Bestimmungsfaktoren der Praxis.
20:00.
Eine Einführung in die CD-ROM
WS 2004/2005 Datenbanken II - 5W Mi 17:00 – 18:30 G 3.18 Vorlesung #4 Anfragebearbeitung (Teil 2)
ADAT©2004 Dipl. - Ing. Walter SabinSeite: 37 Version 1.0a Datenmodellierung Modell –Abbild eines Wirklichkeitsausschnittes –Abstraktion – Reduktion auf.
FH-Hof Standard Query Language Richard Göbel. FH-Hof Geschichte der Sprache SQL System/R-Projekts von IBM zu Beginn der 70er Jahre: Entwicklung der Sprache.
Datenintegrität Integitätsbedingungen Schlüssel
Entity Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Überlagerungsgesetz - Uq – Uq –– uq ~m Uq –+ uq ~m V-105.
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #4 SQL (Teil 1)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #7 SQL (Teil 2)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)
WS 2013/14 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #5 SQL (Teil 2)
Der Ablauf eines Clear Rex Klärzyklus
Erläuterung der wichtigsten Befehle
Befehle in SQL Erläuterungen.
Datenbanksysteme für hörer anderer Fachrichtungen
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Eine lllustration der Herausforderungen des Stromsystems der Zukunft
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
Symmetrische Blockchiffren DES – der Data Encryption Standard
1 Gruppierung, Aggregierung und Sortierung (2) Abarbeitungsmodell bei Gruppierung: Werte from- und where-Klauseln aus wie bisher (Bildung von Kreuzprodukt.
Folienadaption HS, 4/99.
MINDREADER Ein magisch - interaktives Erlebnis mit ENZO PAOLO
SQL - Structured Query Language AIFB SS (1/9) Join-Operationen in SQL-92(1/9) Syntax einer Join-Operation: join-op := CROSS JOIN | [NATURAL]
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Folie Beispiel für eine Einzelauswertung der Gemeindedaten (fiktive Daten)
Datenbanksysteme II Vorlesung WS 2006 / 2007 Paul Manthey
Technische Frage Technische Frage Bitte löse die folgende Gleichung:
Structured Query Language
Forschungsprojekt Statistik 2013 „Jugend zählt“ – Folie 1 Statistik 2013 „Jugend zählt“: Daten zur Arbeit mit Kindern und Jugendlichen.
3 8 ! 3 8 Zähler Bruchstrich Nenner.
Folie Einzelauswertung der Gemeindedaten
Vorlesung #5 SQL (Teil 2).
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
Datenbanken erstellen mit PostgreSQL
SQL Lutz KleinostendarpJOBELMANN-SCHULE Datendefinition Die Organisation einer Datenbank basiert auf einer Anzahl verschiedener Objekte. Diese können physikalischer.
Vorlesung #5 SQL (Teil 2).
Vorlesung #6 SQL (Teil 3).
2.3 Gruppierte Datensätze
(Structured Query Language)
 Präsentation transkript:

CREATE TABLE Statement Rückblick Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

CREATE TABLE Allgemein: CREATE TABLE table_name (spaltendefinitionsliste [,tabellenintegritätsregelliste]); spaltendefinition ::= spaltenname typangabe [default-Klausel] [spaltenintegritätsregelliste] tabellenintegritätsregel ::= check-klausel | primary_key-klausel | unique-klausel | foreign-key-klausel Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

CREATE TABLE Beispiel CREATE TABLE bestellung ( bestellnr INTEGER NOT NULL, kundennr INTEGER NOT NULL, bestelldatum DATE NOT NULL, lieferdatum DATE, rechnungsbetrag DECIMAL(8,2), CHECK(bestelldatum < lieferdatum), PRIMARY KEY (bestellnr), FOREIGN KEY (kundennr) REFERENCES Kunde ON UPDATE CASCADE ON DELETE CASCADE ); Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SQL-Datentypen INTEGER (4 Byte) 123456, -653437, +12 SMALLINT (2 Byte) 1234. –6354 NUMERIC(p,q) (Dezimalzahl genau p Stellen, q hinter „.“) DECIMAL(p,q) (Dezimalzahl mind. p Stellen, q hinter „.“) FLOAT(p) (Gleitpunktzahlen mindestens p Stellen) 2.96E+8 CHARACTER(n) Zeichenketten mit genau n Zeichen CHARACTER VARYING(n) (Zeichenketten mit höchstens n) DATE DATE'1995-06-22' TIME(p) TIME'09:18:05.23, (p: Nachkommastellen für Sekunden) TIMESTAMP(p) Datum + Uhrzeit TIMESTAMP'1995-06-06 10:00' BOOLEAN TRUE, FALSE, UNKNOWN BIT(n) Bitketten mit genau n Bits Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Übungsaufgabe Schemadefinition Vertriebsdatenbank (Web-Shop) in SQL Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Preis Anzahl PNr BNr KuNr n m n 1 Produkt Bestellung Kunde m n n n 1 n BDatum PNr BNr KuNr n m n 1 Posten bestellt Produkt Bestellung Kunde m n n n 1 n Anzahl LDATUM Preis offeriert LPreis liefert aus bearbeitet liefert OPosten beschreibt 1 n 1 Spediteur Mitarbeiter n Offerte 1 n 1 1 SNr MNr ONr bearbeitet Offerte Lieferant Kategorie KaNr LNr

Tabellen Vertriebsdatenbank Kunde(KuNr, Name, Adresse, Rabatt) Produkt(PNr, P-Name, KaNr, LNr, Preis, LPreis) Bestellung(BNr,KuNr,MNr,SNr,Bestelldatum, Lieferdatum) Lieferant(LNr,Name, Adresse) Kategorie(KaNr,Name) Spediteur(SNr, Name, Adresse) Mitarbeiter(MNr,Name, Adresse) Offerte(Onr, KuNr, MNr) Posten(PNr,BNr,Anzahl) Oposten(PNr,ONr,Anzahl,Preis) Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Lösungsbeispiel 1 CREATE TABLE Kunde ( KuNr integer PRIMARY KEY, Name char(20) NOT NULL, Adresse char(50), Rabatt Decimal(3,1) ); Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Lösungsbeispiel 2 CREATE TABLE Bestellung ( BNr integer PRIMARY KEY, KuNr integer NOT NULL, MNr integer, SNr integer, Bestelldatum Date DEFAULT CURRENT_DATE, Lieferdatum Date, FOREIGN KEY (KuNr) REFERENCES Kunde ON DELETE NO ACTION ON UPDATE CASCADE, FOREIGN KEY (MNr) REFERENCES Mitarbeiter ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (SNr) REFERENCES Spediteur ON DELETE SET NULL ON UPDATE CASCADE ); Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Lösungsbeispiel 3 ); CREATE TABLE Posten ( BNr integer, PNr integer, Anzahl integer NOT NULL, PRIMARY KEY (BNr, PNr), FOREIGN KEY (BNr) REFERENCES Bestellung ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (PNr) REFERENCES Produkt ON DELETE NO ACTION ON UPDATE CASCADE ); Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Aufgabe Bibliothek Modellieren Sie eine Bibliothek (Bücher/ Ausleihe / Autoren / Benutzer (Ausleihende) / Vormerkungen) im E/R-Modell (möglichst redundanzfrei). Folgendes sollte dabei berücksichtigt werden: Ein Buch kann mehrere Autoren haben. Ein Buch kann in verschiedenen Auflagen vorliegen. Jede Auflage eines Buches kann in mehreren Exemplaren in der Bibliothek vorhanden sein. Bücher sollten nach explizit zugeordneten Schlagworten gesucht werden können. Übersetzen Sie das E/R-Modell möglichst redundanzfrei ins relationale Modell (Datenbankschema in Tabellenform) Geben Sie alle SQL-Kommandos an, die zur Anlage der Tabellen notwendig sind (inklusive aller sinnvollen Integritätsregeln). Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Bibliotheks-anwendung

ISBN Titel ANr Name ? n m Buch Autor Verlag Ort 1 n SNr Schlagwort m von Buch Autor Verlag Vorname Ort 1 n SNr hatAufl von Schlagwort m Wort n Auflage Buch- auflage Preis Datum 1 Jahr hatExemp leiht aus BNr Name n m 1 Datum Benutzer Buch- exemplar Vorname BibNr n hat vorgemerkt m Standort Adresse

Bibliothek - Tabellenmodell Autor(Anr, Name, Vorname) Buch(ISBN, Titel, Verlag, Ort) Autor-von(Anr,ISBN) Schlagwort(SNr, Wort) Schlagwort-von(SNr,ISBN) Buchauflage(Auflage, Preis, Jahr, ISBN) Buchexemplar(BibNr, Standort, ISBN, Auflage) Benutzer(BNr, Name, Vorname, Adresse) Leiht-aus(BibNr,BNr,Datum) Hat-vorgemerkt(BNr,BibNr, Datum)

Datenbankschema CREATE TABLE Statements Bibliothek Datenbankschema CREATE TABLE Statements

Autor CREATE TABLE Autor ( ANr INTEGER PRIMARY KEY, Name CHAR(30) NOT NULL, Vorname CHAR(30) );

Buch CREATE TABLE Buch ( ISBN INTEGER PRIMARY KEY, Verlag CHAR(30) NOT NULL, Titel CHAR(30) NOT NULL, Ort CHAR(30) );

Autor-von CREATE TABLE Autor-von ( ISBN INTEGER, ANr INTEGER, PRIMARY KEY ( ISBN, ANr), FOREIGN KEY ISBN REFERENCES Buch ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY ANr REFERENCES Autor ON DELETE CASCADE ON UPDATE CASCADE );

Schlagwort CREATE TABLE Schlagwort ( SNr INTEGER PRIMARY KEY, Wort CHAR(30) NOT NULL );

Schlagwort von CREATE TABLE Schlagwort-von ( ISBN INTEGER FOREIGN KEY REFERENCES Buch, SNr INTEGER FOREIGN KEY REFERENCES Schlagwort, PRIMARY KEY ( ISBN, SNr) );

Buchauflage CREATE TABLE Buchauflage ( ISBN INTEGER, Auflage INTEGER, Preis NUMERIC(8,2), Jahr CHAR(4), PRIMARY KEY(ISBN, Auflage), FOREIGN KEY ISBN REFERENCES Buch ON DELETE CASCADE ON UPDATE CASCADE);

Buchexemplar CREATE TABLE Buchexemplar ( BibNR INTEGER PRIMARY KEY, Standort CHAR(10), ISBN INTEGER NOT NULL, Auflage INTEGER NOT NULL, FOREIGN KEY ISBN REFERENCES Buchauflage ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY Auflage REFERENCES Buchauflage ON DELETE CASCADE ON UPDATE CASCADE );

Benutzer CREATE TABLE Benutzer ( BNr INTEGER PRIMARY KEY, Name CHAR(30) NOT NULL, Vorname CHAR(30) NOT NULL, Adresse CHAR(60) NOT NULL );

Leiht-aus CREATE TABLE leiht-aus ( BibNr INTEGER FOREIGN KEY REFERENCES Buchexemplar, BNr INTEGER FOREIGN KEY REFERENCES Benutzer, PRIMARY KEY (BNr, BibNr) );

Hat-vorgemerkt CREATE TABLE hat-vorgemerkt ( BibNr INTEGER FOREIGN KEY REFERENCES Buchexemplar, BNr INTEGER FOREIGN KEY REFERENCES Benutzer, Datum DATE, PRIMARY KEY (BNr, BibNr) );

SELECT Anweisung

SELECT mit einer Tabelle

SELECT - Anweisung Die SELECT-Anweisung dient der Definition und Ausgabe einer virtuellen Tabelle auf der Basis vorhandener Tabellen und Abfragen Die SELECT-Klausel realisiert die Projektion Die Selektion erfolgt in den WHERE- und HAVING-Klauseln Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - Anweisung Unterscheidung: SELECT-Anweisung Abfrage-Anweisung ist eine SELECT-Anweisung ohne ORDER BY-Klausel Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - Anweisung allgemeinste Form: SELECT [DISTINCT | ALL] A1, ..., Ak, <AGG>(Ak+1), ..., <AGG>(Ak+n) FROM R1, ..., Rm [WHERE <condition1>] [GROUP BY Ai1, ..., Ail] [HAVING <condition2>] [ORDER BY Ap1, ..., Apm ] Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT -Reihenfolge Syntaktische Reihenfolge der Klauseln SELECT [DISTINCT | ALL] A1, ..., Ak, <AGG>(Ak+1), ..., <AGG>(Ak+n) FROM R1, ..., Rm [WHERE <condition1>] [GROUP BY Ai1, ..., Ail] [HAVING <condition2>] [ORDER BY Ap1, ... Apm ] Die angegebene Reihenfolge der Klauseln ist zwingend! Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT -Reihenfolge „Zeitliche“ Abarbeitung der Klauseln 1. FROM-Klausel 2. [WHERE-Klausel] 3. [GROUP BY - Klausel] 4. [HAVING -Klausel] 5. SELECT -Klausel 6. [ORDER BY ... ] Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - [DISTINCT | ALL] SELECT-Kommando ([DISTINCT | ALL]): SELECT [DISTINCT | ALL] A1, ..., Ak, FROM R1, ..., Rm DISTINCT : alle identische Zeilen in der Ergebnistabelle werden zusammengefasst. ALL : alle auftretenden Tupel werden angezeigt (Voreinstellung) Die Angabe ist optional. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - Klauseln SELECT-Klausel leistet die Projektion auf die gewünschten Attribute. Es werden die Attribute aufgelistet, die die Ergebnisliste enthalten soll. „*“ listet alle Attribute der Tabelle auf. Integriert auch arithmetische Operationen und Aggregatfunktionen Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - Klauseln FROM-Klausel hier werden die Tabellen aufgelistet, aus denen die Daten entnommen werden sollen. ermöglicht Umbenennungen durch „Tupelvariablen“ bzw. ALIAS-Namen die verwendeten Relationen werden mittels des kartesischen Produktes verknüpft Verbünde (JOINS) können direkt definiert werden. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - Klauseln WHERE-Klausel leistet die Selektion der gewünschten Tupel aus den betrachteten Tabellen, durch Angabe einer Bedingung. Geschachtelte Unterabfragen sind in der WHERE-Klausel möglich. Erlaubt die Formulierung von Verbundbedingungen um z.B. aus einem kartesischen Produkt einen Gleichverbund (EQUI-JOIN) zu machen. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - Klauseln GROUP BY-Klausel fasst alle Tupel gemäss Gleichheit bezüglich der Werte der angegebenen Attribute jeweils in einer Gruppe zusammen und erzeugt eine Tabelle, in der Attribute auftreten, die für jede Gruppe einen Wert haben. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - Klauseln HAVING-Klausel leistet die Selektion der gewünschten Tupel aus der Ergebnistabelle, die durch die GROUP BY Klausel erzeugt wurde. ORDER BY-Klausel sorgt für eine sortierte Ausgabe der Ergebnistabelle gehört nicht zur Abfrage-Anweisung Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - WHERE-Klausel [WHERE <condition1>] condition 1 ist dabei logischer Ausdruck logischer Ausdruck atomarer logischer Ausdruck (a AND b), (a OR b), NOT b wobei a und b logische Ausdrücke sind. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - WHERE-Klausel Alle Tupel, für die der Vergleich das Resultat FALSE oder UNKNOWN (NULL) ergibt, erscheinen nicht im Ergebnis. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - WHERE-Klausel [WHERE <condition1>] atomarer logischer Ausdruck Term1 Vergleichsoperator Term 2 Vergleichsoperatoren: {=, <, >, <>,<=, >=} Beispiel: kundennr*24 = 19+7 Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - WHERE-Klausel [WHERE <condition1>] Term Spaltenname (z.B.: „name“, „kundennr“) Vergleichswert ( 24, NULL, Peter) Funktion auf Termen (kundennr*24 / 19+7) Numerische Operatoren: {+. -, *, /} viele zusätzliche Funktionen Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - WHERE-Klausel Zusätzliche Funktionen Aggregatfunktionen (COUNT, SUM, AVG, MAX, MIN etc.) Datums- und Zeitfunktionen (LAST_DAY, NEXT_DAY, etc.) Arithmetische Funktionen (ABS, LN, LOG, COS SIN etc) Zeichenfunktionen (LENGTH, CONCAT, etc.) Umwandlungsfunktionen (TO-CHAR, TO-NUMBER) Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - WHERE-Klausel Atomarer logischer Ausdruck (Beispiel): kundennr = 103 ort <> ‘Basel‘ lieferdatum IS NULL lieferdatum IS NOT NULL mindestbestand = 400 mindestbestand / 2 = 12*24 Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - WHERE-Klausel logischer Ausdruck (Beispiel): kundennr = 103 AND ort <> ‘Basel‘ lieferdatum IS NULL OR mindestbestand = 400 lieferdatum IS NOT NULL AND kundennr > 100 NOT mindestbestand / 2 = 12*24 Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - NULL-Werte NULL-Werte in Vergleichen liefermenge = NULL hat als Ergebnis „unknown“ (NULL) Deshalb muss die Abfrage anders aussehen: liefermenge IS NULL bzw. liefermenge IS NOT NULL Diese Abfragen sind wahr oder falsch! Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT Beispiel Null-Werte: SELECT bestellnr, artikelnr, bestellmenge, liefermenge FROM position WHERE liefermenge IS NULL; Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - Projektion und Selektion Beispiel 1: SELECT kundennr, name, status FROM kunde WHERE status = ‘S‘; Gibt alle Kundeneinträge mit status =„S“ aus, projiziert auf die Attribute „kundennr, name, status“, der Tabelle kunde. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - Projektion und Selektion Beispiel 2: SELECT * FROM kunde WHERE status = ‘S‘; Gibt alle Kundeneinträge mit status =„S“ aus, projiziert auf alle Attribute der Tabelle kunde. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT Beispiel 3: SELECT bestellnr, artikelnr, bestellmenge, liefermenge FROM position WHERE liefermenge <= bestellmenge * 0.9; Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT WHERE-Klausel BETWEEN (allgemein) BETWEEN Wert1 AND Wert2 Es muss gelten: Wert 1 <= Wert 2 Beispiel: SELECT bestellnr, kundennr, bestelldatum, FROM bestellung WHERE bestelldatum BETWEEN DATE‘2000-04-01‘ AND DATE‘2000-04-30‘; Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT WHERE-Klausel SELECT bestellnr, kundennr, bestelldatum, FROM bestellung WHERE bestelldatum BETWEEN DATE'2000-04-01' AND DATE'2000-04-30'; ist gleichbedeutend mit: WHERE bestelldatum >= DATE'2000-04-01' AND bestelldatum <= DATE'2000-04-30'; Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT WHERE-Klausel IN / IN VALUES (allgemein): Attribut IN (werteliste) Attributliste IN VALUES (tupel-werteliste) Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT WHERE-Klausel Beispiel (IN) : SELECT bestellnr, kundennr, bestelldatum, FROM bestellung WHERE kundennr IN ( 2, 5, 38, 44, 76, 109); Beispiel (IN VALUES) : ... WHERE (plz, ort) IN VALUES ('78462', 'Konstanz'),('12345', 'Xydorf'); Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT WHERE-Klausel SELECT bestellnr, kundennr, bestelldatum, FROM bestellung WHERE kundennr IN (44, 76, 109); ist abkürzende Schreibweise für: WHERE kundennr = 44 OR kundennr = 76 OR kundennr = 109; Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT WHERE-Klausel LIKE (allgemein): LIKE muster Pattern Matching-Operation / Suchen nach einem Textmuster, statt einem eindeutig vorgegebenen Attributwert Platzhaltersymbole: % (Prozentzeichen) (vertritt kein, ein, oder beliebig viele Zeichen _ (Unterstrich) (vertritt genau ein beliebiges Zeichen) Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT WHERE-Klausel LIKE (Beispiel): SELECT artikelnr, bezeichnung, bestand FROM artikel WHERE bezeichnung LIKE ‘%Tee%‘; liefert als Ergebnisse z.B. Ceylon-Tee China Tee grüner Tee „Eistee“ würde nicht gefunden, weil Gross/Kleinschreibung strikt beachtet wird. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT WHERE-Klausel Negationen der Operationen sind auch möglich: spalte NOT BETWEEN Wert1 AND WERT2 Spalte NOT IN (werteliste) spalte NOT LIKE Wert Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT mit virtuellen Spalten Beispiel: SELECT bestellnr, artikelnr, bestellmenge, liefermenge, bestellmenge - liefermenge AS fehlmenge FROM position Ergebnis (z.B.): bestellnr artikelnr bestellmenge liefermenge fehlmenge 151 G002 4 4 0 152 K004 10 5 5 152 K006 16 3 13 Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - ORDER BY Die Reihenfolge der Anzeige der Datentupel kann auch gemäss mehreren Attributen erfolgen: Beispiel: SELECT zahlungsart, plz, name FROM kunde ORDER BY zahlungsart, plz; Im Beispiel nach „zahlungsart“ und „plz“ Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY GROUP BY ermöglicht Gruppierungen innerhalb der Relationen. Es werden jeweils spezielle Tupel zu einer Gruppe zusammen gefasst. Die Aggregatfunktionen werden dann pro Gruppe und nicht global auf die gesamte Relation angewendet. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY GROUP BY wird verwendet wenn man Teilmengen von Tupeln einer Relation zusammen fassen will, z.B. um die Aggregatfunktionen auf die so gebildeten Teilmengen anwenden zu können. Entscheidend für die Gruppenbildung sind gleiche Werte in einer bestimmten Spalte bzw. in einer Spaltenliste. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY Mögliche sinnvolle Gruppenbildungen mit anschliessender Aggregation: Alle Bestellungen eines Kunden alle Positionen einer Bestellung alle Positionen, in denen ein bestimmter Artikel auftaucht alle Kunden einer Stadt alle Mitarbeiter einer Abteilung Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY GROUP BY (allgemein): SELECT gruppenausdrucksliste FROM tabelle GROUP BY spaltenliste Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY GROUP BY (allgemein): gruppenausdruck ::= MIN (ausdruck1) | MAX (ausdruck1) | AVG (ausdruck1) | SUM (ausdruck1) | COUNT (ausdruck1) | COUNT ( DISTINCT ausdruck1) | COUNT (*) | gruppenspalte | ausdruck2 Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY GROUP BY (allgemein) / Erläuterung: Ausdruck1: beliebiger Ausdruck Gruppenspalte: Spalte, die in der GROUP BY- Klausel auftritt Ausdruck2: Ausdruck, der nur Aggregatfunktionen oder Gruppenspalten verwenden darf. D.h.: in der Gruppenausdrucksliste dürfen nur Aggregatfunktionen oder Attribute vorkommen, die auch in der GROUP BY-Klausel vorkommen. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY Beispiel für Ausdrucksliste: SELECT KaNr AS Kategorienummer COUNT(artikelnr) AS Bestellmenge, SUM(Listenpreis) AS PREISSUMME, AVG(Listenpreis) AS DURSCHSCHNITTSPREIS MIN(Listenpreis) AS KLEINSTER_PREIS MAX(Listenpreis) AS GRÖSSTER-PREIS FROM Artikel GROUP BY KaNr; Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY Beispiel 1 für GROUP BY: Wie oft hat jeder Kunde bestellt? SELECT Kundennr, COUNT(*) AS BESTELL-Anzahl FROM bestellung GROUP BY Kundennr; Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY Beispiel 1 für GROUP BY: Wie oft hat jeder Kunde bestellt? Ergebnis: Kundennr BESTELL-ANZAHL 103 4 110 7 181 9 201 6 400 5 471 5 Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY Beispiel 2 für GROUP BY: Für jeden Artikel (jedes Produkt) ist die Summe der Bestellmengen (Anzahl) gesucht: SELECT artikelnr, SUM(Bestellmenge) FROM position GROUP BY artikelnr; Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY Beispiel 2 für GROUP BY: Anzahl der Bestellungen pro Artikel Ergebnis: artikelnr sum(Bestellmenge) G003 49 K110 78 G281 95 K501 62 S300 51 K331 52 Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY Beispiel 3 für GROUP BY: Durchschnittliche Differenz zwischen Lagerbestand und Mindestbestand aller Artikel für alle Lagerplätze gesucht: SELECT lagerplatz, AVG(bestand - mindestbestand) FROM artikel GROUP BY lagerplatz; Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY Gruppierungsfunktionen können auch auf virtuelle Spalten angewendet werden. Die Ergebnistabellen sind echte Relationen, die nur verschiedene Tupel enthalten, keine Tupel treten mehrfach auf. Die Gruppierungsattribute sollten in der SELECT- Klausel angegeben werden. Ansonsten ist keine vernünftige Zuordnung möglich. Es gibt pro Gruppe und pro Attribut nur noch einen Wert, der durch die Aggregatfunktion berechnet wird. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY/ HAVING Will man den Output bezüglich der zugehörigen Summenfunktion (oder bezüglich einer anderen Aggregatsfunktion) limitieren, (z.B. wenn man nur die Läden mit aggregierten Verkaufswerten über 1,500 DM erhalten will), muss man statt der WHERE Klausel, die HAVING Klausel verwenden, die speziell für Aggregatfunktionen vorgesehen ist. Die HAVING Klausel steht immer unmittelbar hinter der GROUP BY Klausel. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY HAVING-Klausel: Allgemein: GROUP BY spaltenliste Mit der HAVING-Klausel kann eine Selektion nach der Gruppenbildung erfolgen. Sie enthält selbst meist eine Aggregatfunktion: Allgemein: GROUP BY spaltenliste HAVING bedingung Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY HAVING-Klausel: Beispiel 1: Mit der HAVING-Klausel kann eine Selektion nach der Gruppenbildung erfolgen: Beispiel 1: SELECT artikelnr, SUM(Bestellmenge) FROM position GROUP BY artikelnr HAVING SUM(Bestellmenge) > 60 ; Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY Beispiel 1 für GROUP BY / HAVING: Anzahl der Bestellungen pro Artikel grösser als 60 Ergebnis: artikelnr sum(bestellmenge) K110 78 G281 95 K501 62 Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY Beispiel 2: Alle Artikel, für die noch offene Bestellposten existieren. SELECT artikelnr, SUM(liefermenge), SUM(bestellmenge) FROM position GROUP BY artikelnr HAVING SUM(liefermenge) < SUM(bestellmenge); Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Aggregat-Funktionen NULL-Marken Nullmarken werden durch Aggregatfunktionen nicht berücksichtigt!!! Bei SUM gilt: (NULL = 0) MIN, MAX, AVG, COUNT: keine Berücksichtigung von NULL-Werten! COUNT(*) zählt alle Datensätze. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Beispieltabelle Ladeninfo

SELECT – GROUP BY Beispiel: SELECT Ladenname, SUM(Verkauf) FROM Ladeninfo GROUP BY Ladenname Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY Resultat: Ladenname SUM(Verkauf) Lörrach 1800 Konstanz 250 Freiburg 700 Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY/ HAVING Beispiel: SELECT Ladenname, SUM(Verkauf) FROM Ladeninfo GROUP BY Ladenname HAVING SUM(Verkauf) > 1500 Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – GROUP BY/ HAVING Resultat: Ladenname SUM(Verkauf) Lörrach 1800 Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – WHERE + GROUP BY Treten WHERE-Klausel und GROUP BY-Klausel und HAVING-Klausel gemeinsam in einem SELECT-Statement auf, werden sie in folgender Reihenfolge bearbeitet: 1. WHERE-Klausel selektiert auf der Ausgangstabelle 2. Die verbleibenden Tupel werden gemäss GROUP BY gruppiert 3. Zuletzt werden die Gruppen wieder selektiert (gemäss der HAVING-Bedingung) Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

ALIASEs

SELECT – ALIAS Zwei Typen von ALIASEs werden häufig verwendet: Spalten Alias Tabellen Alias Falls kein Tabellen-ALIAS definiert ist, kann der Tabellenname zur Unterscheidung gleicher Attributnamen verschiedener Tabellen verwendet werden. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – ALIAS Spalten Aliases werden verwendet, um den Output besser lesbar zu machen. Sie dienen u.a. der Verbesserung der Lesbarkeit von Spaltenüberschriften wie z.B. bei SUM(Verkauf) AS Verkaufssumme. Dies ist besonders sinnvoll, wenn komplexe arithmetische Operationen als Spaltenüberschriften auftauchen. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – ALIAS Tabellen Aliases werden direkt hinter dem Tabellen-Namen in der FROM Klausel definiert (FROM KUNDE AS K). Sind unverzichtbar, wenn in den verwendeten Tabellen Attribute mit gleichen Namen vorkommen Sie sind sinnvoll, wenn in einer Abfrage mehrere Tabellen auftreten und unverzichtbar, wenn eine Tabelle mehrfach in der Anfrage verwendet wird. insbesondere wenn man Informationen aus zwei Tabellen miteinander verknüpfen will, d.h. Vorteile ergeben sich vor allem im Zusammenhang mit joins. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – ALIAS Tabellen ALIAS tabellenreferenz ::= tabellenname [ [AS] aliasname] Der Zugriff auf ein Attribut „spaltenname“ der Tabelle erfolgt dann durch [aliasname.]spaltenname Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – ALIAS Tabellen ALIAS tabellenreferenz ::= tabellenname [ [AS] aliasname] Beispiele: kunde kunde AS k kunde k Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – ALIAS Beispiel: SELECT A1.Ladenname Laden , SUM(A1.Verkauf) Total-Verkauf FROM Ladeninfo A1 GROUP BY A1.Ladenname ; Beide Alias-Typen werden direkt hinter den Bezeichner, den sie als Alias vertreten sollen, geschrieben (getrennt durch ein Leerzeichen). Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – ALIAS Resultat: Laden Total-Verkauf Lörrach 1800 Konstanz 250 Freiburg 700 Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – ALIAS Tabellen-Aliases sind unverzichtbar bei Self-Joins. Der Nutzen von Tabellen-Aliases ergibt sich im Zusammenhang mit Verbünden (Joins). Tabellen-Aliases sind unverzichtbar bei Self-Joins. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - Reihenfolge Sequentielle Auswertungsreihenfolge: 1. <condition 1> der WHERE-Klausel auswerten. 2. Gruppierung gemäß GROUP BY auswerten. 3. <condition 2> der HAVING-Klausel auswerten. 4. Ergebnis in ORDER BY-Sortierfolge ausgeben. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Rückblick SELECT mit einer Tabelle Allgemeine SELECT-Anweisung SELECT-Klausel FROM-Klausel WHERE-Klausel GROUP BY-Klausel HAVING-Klausel ORDER-By-Klausel Zeitliche Abarbeitung der Klauseln Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Rückblick WHERE-Klausel Abfragen auf Nullwerte (IS NULL) BETWEEN Term1 AND term2 Attribut IN Werteliste Attributliste IN VALUES Tupelwerteliste Bezeichnung LIKE %Tee% SELECT ausdrucksliste FROM tabelle GROUP BY spaltenliste HAVING bedingung ALIAS (Spalten- / Tabellen-Alias) Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT Mehrere Relationen

SELECT – Verbund (Join) Daten werden u.a. zur Vermeidung von Redundanzen in mehreren Tabellen abgelegt (normalisiert). Um Daten aus mehreren Tabellen zusammen zu führen, verwendet man Verbund-Operatoren (Joins) innerhalb des SELECT-Statements. Verbünde können zwischen beliebig vielen Tabellen gleichzeitig definiert werden. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Verbund (Join) Es gibt folgende Möglichkeiten, Tabellen zu verknüpfen: Innerere Verbünde (Inner Joins) Verbindung einer Tabelle mit sich selbst (Self Join) Äusserere Verbünde (Outer Joins) Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Innerer Verbund Der innere Verbund hat folgende Varianten: Cross Join Natural Join Condition Join Column name Join Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Verbund (Join) Allgemein (für alle Joins): from-Klausel ::= tabellenreferenz {jointabelle} Jointabelle ::= join_op1 tabelle | join_op2 tabelle verknüpfung Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Verbund (Join) Syntax allgemein (für alle Joins): join_op1 ::= NATURAL JOIN | CROSS JOIN | Für diese Joins können gemäss Syntaxdefinition keine zusätzlichen Verknüpfungs- Bedingungen spezifiziert werden!!! Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Verbund (Join) Syntax allgemein (für alle Joins): join_op2 ::= [INNER] JOIN | LEFT OUTER JOIN | RIGHT OUTER JOIN | FULL OUTER JOIN verknüpfung ::= ON bedingung | USING (spaltenliste) Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Verbund Der Verbund wird in der Regel zwischen zwei Tabellen definiert, kann aber zwischen beliebig vielen Tabellen definiert werden. Dies ist durch „jointabelle“ dargestellt. Die Reihenfolge der Tabellen spielt nur bei den OUTER-JOINS eine Rolle. Falls mehrere JOINS in einer Anweisung auftreten, sind Klammern zu setzen. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Verbund (Join) Durch Angabe einer entsprechenden Spaltenliste in der SELECT-Klausel wird die Verbundoperation mit der Projektion kombiniert. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Cross Join Cross Join = Kreuzprodukt / Kartesisches Produkt Es werden alle Tupel der involvierten Tabellen miteinander verbunden. Beispiel: SELECT * FROM buch CROSS JOIN ausleih; Die nachfolgenden Klauseln des SELECT-Statements beziehen sich auf die so generierte Ergebnistabelle (Kreuzprodukt). Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Cross Join Beide SELECT-Statements liefern das gleiche Ergebnis: SELECT * FROM buch CROSS JOIN ausleih; FROM buch, ausleih; Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Natural Join Beim Natural Join werden die Zeilen beider Tabellen miteinander verbunden, für die die gemeinsamen Attribute beider Tabellen den gleichen Wert haben. Die Namen der Attribute müssen dazu übereinstimmen. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Natural Join Beispiel: SELECT k.kundennr, k.name, b.bestelldatum FROM bestellung AS b NATURAL JOIN kunde AS k Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – (Natural Join) Voraussetzungen damit der natürliche Verbund zwischen zwei Tabellen R und S definiert werden kann: R und S haben gemeinsame Attributbezeichner A1 bis An Die Domänen der R.Ai und S.Ai (i = 1, .., n) sind jeweils kompatibel, zumindest können die Werte auf Gleichheit geprüft werden. Die übrigen Attributbezeichner von R und S sind verschieden. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Condition Join Condition Join Es wird eine Bedingung angegeben, die in einem Wertevergleich der Attribute der einen Tabelle mit Werten der anderen Tabelle besteht. Beispiel: SELECT k.kundennr, k.name, b.bestelldatum FROM bestellung AS b JOIN kunde AS k ON k.kundennr = b.kundennr; Ist die flexibelste Variante Tabellen zu verbinden. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Column Name Join Column Name Join Kurzform für den Fall, dass die Verbundattribute in beiden Relationen dieselben Namen haben und die Attributwerte auf Gleichheit geprüft werden Beispiel: SELECT kundennr, k.name, b.bestelldatum FROM bestellung AS b JOIN kunde AS k USING (kundennr); Keine ALIAS-Angabe bei Attributen nach USING!!! Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Old Style Join Äquivalente Formulierung im OLD STYLE JOIN (Beispiel): SELECT k.kundennr, k.name, b.bestelldatum FROM bestellung b, kunde k WHERE k.kundennr = b.kundennr ; Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Old Style Join SELECT * FROM buch b, ausleih a Beispiel 2: SELECT * FROM buch b, ausleih a WHERE b.inventarnr = a.inventarnr; Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Inner Join Äquivalente Formulierungen (falls „inventarnr“ das einzige gemeinsame Attribut ist) SELECT * FROM buch JOIN ausleih ON buch.inventarnr = ausleih.inventarnr; USING (inventarnr); FROM buch NATURAL JOIN ausleih; Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Verbund von mehr als zwei Tabellen Beispiel: 3 Tabellen: kunde, position, bestellung SELECT k.kundennr, k.name, b.bestelldatum, p.artikelnr FROM kunde AS k JOIN bestellung AS b ON b.kundennr = k.kundennr JOIN position AS p ON p.bestellnr = b.bestellnr ORDER BY k.kundennr, b.bestelldatum; Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Verbund von mehr als zwei Tabellen Beispiel: Where-Klausel ist weiterhin anwendbar!!! SELECT k.kundennr, k.name, b.bestelldatum, p.artikelnr FROM kunde AS k JOIN bestellung AS b ON b.kundennr = k.kundennr JOIN position AS p ON p.bestellnr = b.bestellnr WHERE k.kundennr > 100 ORDER BY k.kundennr, bestelldatum; Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Selbst-Verbund Selbst-Verbund = Self Join Verbindung einer Tabelle mit sich selbst! Beispiel zur Motivation: Suche nach Büchern, die die Autoren Vossen und Witt zusammen geschrieben haben? Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Selbst-Verbund Ausgangstabelle: Buch-Autor ISBN Autor Vossen Witt Elmasri Navathe Hull Vianu 3-89319-175-5 0-8053-1753-8 0-3729-1285-8 0-3399-2345-9 0-4657-1234-9 Folgende Anfrage scheitert!

SELECT – Selbst-Verbund SELECT ISBN FROM Buch_Autor WHERE Autor = 'Vossen' AND Autor = 'Witt' ; Sie liefert immer die leere Ergebnisrelation, weil der Attributwert eines Tupels im Autorattribut niemals gleichzeitig 'Vossen' und 'Witt' sein kann. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Selbst-Verbund Lösung: SELECT Autor1.ISBN FROM Buch_Autor Autor1, Buch_Autor Autor2 WHERE Autor1.ISBN = Autor2.ISBN AND Autor1.Autor= 'Vossen' AND Autor2.Autor = 'Witt' ; funktioniert, weil im Kreuzprodukt der Tabelle mit sich selbst die Autoren-Spalte doppelt auftritt und man nun jene Tupel selektieren kann, in denen die ISBN übereinstimmt und die Autoren wie gewünscht vorkommen. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Selbst-Verbund Kreuzprodukt mit Selektion Autor2.ISBN Autor2.Autor Vossen Witt Elmasri Navathe Hull Vianu 3-89319-175-5 0-8053-1753-8 0-3729-1285-8 0-3399-2345-9 0-4657-1234-9 Autor1.ISBN Autor1.Autor

SELECT – Selbst-Verbund Beim Selbstverbund sind Tabellen-Aliases unverzichtbar!!! Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Äussere Verbunde Varianten (OUTER JOIN): LEFT OUTER JOIN RIGHT OUTER JOIN FULL OUTER JOIN Die Reihenfolge der Tabellen ist dabei wichtig!!! Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Äusserer Verbund - Varianten 1 2 3 C B 3 4 5 B A C 2 3 4 links rechts NATURAL JOIN B A C 1 2 * 3 4 5 FULL OUTER JOIN B A C 1 2 3 * 4 B A C 2 * 3 4 5 LEFT OUTER JOIN RIGHT OUTER JOIN

SELECT – Äussere Verbunde Beispiel: LEFT OUTER JOIN SELECT k.name, b.bestellnr, b.bestelldatum FROM kunde k LEFT OUTER JOIN bestellung AS b ON k.kundennr = b.kundennr ; Liefert eine Liste aller Kunden mit zugehörigen Bestellungen inklusive der Kunden, von denen noch keine Bestellungen vorliegen. ( NULL-Werte) Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Äussere Verbunde Beispiel: RIGHT OUTER JOIN SELECT k.name, b.bestellnr, b.bestelldatum FROM kunde k RIGHT OUTER JOIN bestellung AS b ON k.kundennr = b.kundennr ; liefert die vorhandenen Bestellungen mit den zugehörigen Kunden. ( „zufällig“ keine NULL-Werte bei referentieller Integrität: FOREIGN KEY „b.kundennr“ REFERENCES kunde ). Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT – Äussere Verbunde Beispiel: FULL OUTER JOIN SELECT k.name, b.bestellnr, b.bestelldatum FROM kunde k FULL OUTER JOIN bestellung AS b ON k.kundennr = b.kundennr ; wird sehr selten benötigt! Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

ORDER BY

SELECT - ORDER BY Die ORDER-BYE-Klausel generiert aus der ungeordneten Menge der Ergebnistupel eine sortierte/geordnete Liste nach bestimmten Sortier-Kriterien. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - ORDER BY Syntax: ORDER BY attributliste [asc | desc] asc: aufsteigend (Voreinstellung) desc: absteigend Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - ORDER BY Die Reihenfolge der Anzeige der Datentupel kann auch gemäss mehreren Attributen erfolgen: Beispiel: SELECT plz, name FROM kunde ORDER BY plz, name; Im Beispiel zuerst nach „plz“ und bei Gleichheit zusätzlich nach „name“ Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

SELECT - ORDER BY Nicht erlaubt ist die Sortierung nach Attributen, die nicht in der SELECT-Klausel vorkommen also z.B. folgendes: Beispiel: SELECT plz, name FROM kunde ORDER BY zahlungsart, name; Im Beispiel erscheint „zahlungsart“ nicht in der SELECT-Klausel!! Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Geschachtelte Anfragen Beispiel: SELECT Matrikelnummer FROM prüft WHERE Note < (SELECT AVG (Note) FROM prüft); Liefert die Matrikelnummern der Studenten, die zumindest eine Prüfung besser als der gesamte Notendurchschnitt abgelegt haben. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Geschachtelte Anfragen Beispiel: SELECT Titel FROM Bücher WHERE isbn IN (SELECT isbn FROM Empfiehlt); Zunächst wird inneres SELECT-Statement ausgeführt. Es liefert Liste aller ISBNs zurück. Dann erfolgt der Vergleich (IN) Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Null-Werte und 3wertige Logik

NULL-Werte und 3wertige Logik Wenn ein Attribut den Wert NULL hat, bedeutet dies, dass der Wert fehlt, bzw. dass der Wert unbekannt ist. NULL ist somit verschieden von dem numerischen Wert 0 und verschieden von dem Leerzeichen. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

NULL-Werte und 3wertige Logik Um NULL-Werte bei Anfragen an die Datenbank angemessen zu berücksichtigen, reicht die 2wertige Logik nicht aus. Hierzu benötigt man die 3wertige Logik. Der NULL-Wert wird dabei mit „unknown“ interpretiert. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

NULL-Werte und 3wertige Logik In der 3wertigen Logik W(F) {true, false, ?} wird der dritte Wahrheitswert „?“ = „unknown“ als unbekannter Wahrheitswert interpretiert. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

NULL-Werte in Funktions- und Vergleichsausdrücken Skalare Ausdrücke (Terme) haben den Wert NULL, sobald ein Nullwert in die Berechnung eingeht. In allen Aggregatfunktionen bis auf count(*) werden Nullwerte vor Anwendung der Funktion entfernt. Alle Vergleiche bis (auf zwei Ausnahmen) mit dem Nullwert ergeben den Wahrheitswert „unknown“. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

NULL-Werte in Funktions- und Vergleichsausdrücken Ausnahmen: Das Prädikat „IS NULL“ ergibt bei Anwendung auf den Nullwert „true“ Das Prädikat „IS NOT NULL“ ergibt bei Anwendung auf den Nullwert „false“. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Wahrheitstabellen für 3wertige Logik

Wahrheitstabellen für 3wertige Logik

Wahrheitstabellen für 3wertige Logik

NULL-Werte und 3wertige Logik Beispiel: A = 10, B = 20, C = NULL Ausdruck Wahrheitswert A < B OR B < C true A > B AND B > C false A > B OR B > C unknown NOT B = C unknown Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

NULL-Werte - verschiedene Arten Es gibt mindestens zwei Arten: A-Marken: Attribute haben einen Wert, der nur nicht bekannt ist I-Marken: Attribute für die in der Realität kein Wert existiert. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

NULL-Werte - verschiedene Arten Beispiel: Telefonnummer A-Marke: Eine Person hat einen Telefonanschluss aber die Telefonnummer ist nicht bekannt. I-Marken: Eine Person hat kein Telefon und somit auch keine Telefonnummer. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

NULL-Werte - verschiedene Arten Beispiel: Telefonnummer 3. Fall Es ist nicht bekannt, ob eine Person einen Telefonanschluss hat. Genaugenommen bräuchte man 3 verschiedene NULL-Marken. Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

NULL-Werte - verschiedene Arten Spezielle NULL-Marken können auch Informationen repräsentieren: Beispiele: fehlendes Todesdatum: die Person lebt noch fehlendes Lieferdatum: der Auftrag ist noch nicht erfüllt. fehlende Telefonnummer: ??? Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

NULL-Werte - verschiedene Arten Die Unterscheidung in I- und A-Marken wird von existierenden Datenbank-systemen gegenwärtig nicht unterstützt!!! Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002