Daten – Bank 4. Vorlesung Dr. Karsten Tolle – PRG2 – SS 2012 SQL - Anfragen • join • group by … • group by … having … select A1,A2, ... ,An from R1, R2, ... ,Rm [where conditions] [group by clause] [having clause] [order by clause]; Dr. Karsten Tolle – PRG2 – SS 2012 7 Group by … • zum Gruppieren nach Spalten Adresse PLZ ORT STRASSE_NR 30419 Hannover Schaumburgstr. 2 30419 Hannover Quetlinburger Weg 12 37308 Schirmberg Bergstraße 1 37308 Bodenrode Hauptstraße 12 37308 Geismar Bergstraße 1 PLZ count(*) 35279 Neustadt Gartenstraße 7 30419 2 53577 Neustadt Gartenstraße 7 37308 3 35279 1 53577 1 Wie viele Eintragungen gibt es pro PLZ? select PLZ, count(*) from Adresse group by PLZ; Dr. Karsten Tolle – PRG2 – SS 2012 8 Group by … • zum Gruppieren nach Spalten PLZ ORT STRASSE_NR 30419 Hannover Schaumburgstr. 2 PLZ ORT count(*) 30419 Hannover Quetlinburger Weg 12 30419 Hannover 2 37308 Schirmberg Bergstraße 1 37308 Schirmberg 1 37308 Bodenrode Hauptstraße 12 37308 Bodenrode 1 37308 Geismar Bergstraße 1 37308 Geismar 1 35279 Neustadt Gartenstraße 7 35279 Neustadt 1 53577 Neustadt Gartenstraße 7 53577 Neustadt 1 Wie viele Eintragungen gibt es pro Kombination aus PLZ und ORT? select PLZ, Ort, count(*) from Adresse group by PLZ, Ort; Dr. Karsten Tolle – PRG2 – SS 2012 9 Group by … having … • zum Gruppieren nach Spalten mit Bedingung an die Gruppe! PLZ ORT STRASSE_NR 30419 Hannover Schaumburgstr. 2 30419 Hannover Quetlinburger Weg 12 37308 Schirmberg Bergstraße 1 37308 Bodenrode Hauptstraße 12 37308 Geismar Bergstraße 1 PLZ ORT count(*) 35279 Neustadt Gartenstraße 7 30419 Hannover 2 53577 Neustadt Gartenstraße 7 Wie viele Eintragungen gibt es pro Kombination aus PLZ und ORT, beschränkt auf die Gruppen mit mindestens 2 Einträgen? select PLZ, Ort, count(*) from Adresse group by PLZ, Ort having count(*) >= 2; Dr. Karsten Tolle – PRG2 – SS 2012 10 • Datenbankmanagementsystem (DBMS) • Datenbank (DB) • Datenbanksystem (DBS) Dr. Karsten Tolle – PRG2 – SS 2012 11 Embedded SQL und C - Beispiel … EXEC SQL BEGIN DECLARE SECTION; char dieBar[21], dasBier[21]; float preis; EXEC SQL END DECLARE SECTION; /* holen der Werte für dieBar und dasBier */ EXEC SQL SELECT price INTO :preis FROM Verkauft WHERE bar = :dieBar AND bier = :dasBier; /* die Variable preis kann nun verwendet werden*/ … Dr. Karsten Tolle – PRG2 – SS 2012 12 Embedded SQL definiert in SQL92 Für C, COBOL, Fortran und andere SQL LIB STD LIB Quelltext mit SQL-Befehlen Präcompiler Quelltext in reiner host language Compiler Objektdatei Linker Ausführbares Programm Dr. Karsten Tolle – PRG2 – SS 2012 13 Anwendung 1 Elementare Zugriffsoperationen Anwendung 2 Elementare Zugriffsoperationen DatenbankManagementsystem (DBMS) Datenbank (DB) Anwendung 3 Elementare Zugriffsoperationen DBS Anwendung 1 Anwendung 2 Anwendung 3 Zugriffsoperation en in Progr.Sprache enthalten Zugriffsoperation en in Progr.Sprache enthalten Zugriffsoperation en in Progr.Sprache enthalten Call Level Interface DatenbankManagementsystem (DBMS) Datenbank (DB) DBS Zum Selberlesen … • Die CLI-Implementierung bildet die Befehlssätze verschiedener DBMS auf eine immer gleiche Funktionsbibliotek ab. für das Programm an sich ist es unwichtig, mit welcher Datenbank es arbeitet. • Das CLI hat also die Funktion eines Übersetzers, der Programmaufrufe in eine „Sprache“ übersetzt, die die Datenbank versteht und umgekehrt Daten, die von der Datenbank zurückgeliefert werden, so formatiert, dass sie vom Programm verarbeitet werden können. Dr. Karsten Tolle – PRG2 – SS 2012 15 Vorteile CLI zu ESQL Anwendung 2 Anwendung 1 • Kein Präcompiler nötig. • Vorteil für Client/Server Architektur, da unabhägig(er) von der Zieldatenbank Anwendung 3 Call Level Interface Oracle IBM DB2 Datenbank (DB) Datenbank (DB) • Programmierschnittstellen, die das CLIKonzept umsetzen (CLI-Implementierungen), sind z.B.: – Open Database Connectivity (ODBC), – Java Database Connectivity (JDBC). Dr. Karsten Tolle – PRG2 – SS 2012 17 Zugriff aus einem Programm heraus … • Warum sind SQL-Statements wie: SELECT * FROM … INSERT INTO <table> VALUES … zu vermeiden? Besser: SELECT a1, a2, a3, … FROM … INSERT INTO <table> (a1, a2, a3, …) VALUES … Dr. Karsten Tolle – PRG2 – SS 2012 18 FIRSTNME LASTNME BIRTH STREET NUMBER TOWN ZIP Jon Lucas 12.03.1969 {Zeil, Lange Str.} {12, 114} {Frankfurt, Frankfurt} {60313, 60313} Lucas Jon 24.12.1980 Gräfstr. 27 Frankfurt 60325 … … … … … … … Dr. Karsten Tolle – PRG2 – SS 2012 19 1. Normalform Definition: Ein Relationenschema R ist in 1. Normalform (1NF), wenn die Wertebereiche aller Attribute von R atomar sind. 1.NF ⇔ Wertebereiche atomar Dr. Karsten Tolle – PRG2 – SS 2012 20 1. Normalform FIRSTNME LASTNME BIRTH STREET NUMBER TOWN ZIP Jon Lucas 12.03.1969 {Zeil, Lange Str.} {12, 114} {Frankfurt, Frankfurt} {60313, 60313} Lucas Jon 24.12.1980 Gräfstr. 27 Frankfurt 60325 … … … … … … … FIRSTNME LASTNME BIRTH STREET NUMBER TOWN ZIP Jon Lucas 12.03.1969 Zeil 12 Frankfurt 60313 Jon Lucas 12.03.1969 Lange Str. 114 Frankfurt 60313 Lucas Jon 24.12.1980 Gräfstr. 27 Frankfurt 60325 … … … … … … … Dr. Karsten Tolle – PRG2 – SS 2012 21 Diskutieren NF1 Dr. Karsten Tolle – PRG2 – SS 2012 22 Diskutieren NF1 PLZ ORT STRASSE_NR Telefon 30419 Hannover Schaumburgstr. 2 0511 271635 30419 Hannover Quetlinburger Weg 12 0049 (0)511 279230 37308 Bodenrode Hauptstraße 12 934790 35279 Neustadt Gartenstraße 7 kukuk Dr. Karsten Tolle – PRG2 – SS 2012 23 Nachteile nicht 1. NF Dr. Karsten Tolle – PRG2 – SS 2012 24 Schlüssel ? PLZ ORT STRASSE_NR 30419 Hannover Schaumburgstr. 2 30419 Hannover Quetlinburger Weg 12 37308 Bodenrode Hauptstraße 12 35279 Neustadt Gartenstraße 7 Dr. Karsten Tolle – PRG2 – SS 2012 26 Fahrzeuge der Firma AB HERSTELLER KENNZEICHEN ZUGEL_GES_GEW FÜHRERSCHEIN VW F-AB 123 bis 3.5t B MB F-AB 234 bis 7.5t C1 MB F-AB 235 bis 7.5t C1 MAN F-AB 236 bis 12t C MB F-AB 239 bis 12t C … … … Abhängigkeiten? Dr. Karsten Tolle – PRG2 – SS 2012 29 Fahrzeuge der Firma AB HERSTELLER KENNZEICHEN ZUGEL_GES_GEW FÜHRERSCHEIN VW F-AB 123 bis 3.5t B MB F-AB 234 bis 7.5t C1 MB F-AB 235 bis 7.5t C1 MAN F-AB 236 bis 12t C MB F-AB 239 bis 12t C MB F-AB 230 bis 17t C … … … … … aus ZUGEL_GES_GEW folgt hier FÜHRERSCHEIN: ZUGEL_GES_GEW FÜHRERSCHEIN … umgekehrt nicht! Dr. Karsten Tolle – PRG2 – SS 2012 30 Funktionale Abhängigkeit (FD) Seien X und Y Teilmengen von R. Eine Relation r(R) erfüllt (satisfies) die funktionale Abhängigkeit (functional dependency) FD X → Y, wenn für je zwei (beliebige) Tupel u, v ∈ r(R) gilt: u(X) = v(X) ⇒ u(Y) = v(Y). X → Y ⇔ u(X) = v(X) ⇒ u(Y) = v(Y) Dr. Karsten Tolle – PRG2 – SS 2012 31 Beispiel Gegeben ist die Relation r(R): A B C D E a1 b1 c1 d1 e1 a1 b2 c2 d2 e1 a2 b1 c3 d2 e1 a2 b1 c4 d3 e1 a3 b2 c5 d1 e1 Geben Sie an, welche der folgenden Abhängigkeiten r nicht widerspricht: A→D AB → D C → BDE E→A A→E A → BC Dr. Karsten Tolle – PRG2 – SS 2012 32 Axiome von Armstrong 1. β ⊆ α ⇛ → (Reflexivität - trivial) 2. → ⇛ 3. → ∧ (Erweiterungsregel) → → Dr. Karsten Tolle – PRG2 – SS 2012 ⇛ → (Transitivität) 33 FDs? Stadt Kreis Bundesland Rüsselsheim Groß-Gerau Hessen Mörfelden-Walldorf Groß-Gerau Hessen Dietzenbach Offenbach Hessen Dreieich Offenbach Hessen Walldorf (Baden) Rhein-Neckar-Kreis Baden-Württemberg Stadt Stadt Kreis, Stadt Kreis … Stadt Kreis Kreis Bundesland Stadt Bundesland Dr. Karsten Tolle – PRG2 – SS 2012 34 Schlüssel Ein Schlüssel identifiziert eine Entität. Er besteht aus einer Menge von Attributen, deren Werte alle Instanzen einer Entität eindeutig bestimmen. Ein Schlüssel (key) einer Relation r(R) ist eine minimale Teilmenge K von R, so dass für je zwei verschiedene Tupel t1, t2 ∈ r gilt: t1(K) ≠ t2(K) und keine echte Teilmenge K' von K hat diese Eigenschaft. Ein Schlüssel kann als Integritätsbedingung angesehen werden. Falls K Schlüssel von r(R), t1 ∈ r, t1(K) = t2(K), t1 ≠ t2 dann dürfte t2 nicht in r(R) eingefügt werden. Dr. Karsten Tolle – PRG2 – SS 2012 35 Schlüssel Gegeben seien ein Relationenschema R und eine Menge F von FDs. X ⊆ R ist ein Oberschlüssel für R ⇔ X→R X ist ein Schlüssel für R ⇔ X → R und X minimal (¬(∀A∈X: X\A → R)) Dr. Karsten Tolle – PRG2 – SS 2012 36 Wie finde ich alle Schlüssel wenn FDs gegeben? Gegeben Relationschema R und eine Menge F von FDs z.B. R = (A, B, C, D, E) und FD = {A B, CD AC} Dr. Karsten Tolle – PRG2 – SS 2012 37