Garten - Daten – Bank Was ist das? Dr. Karsten Tolle – PRG2 – SS 2013 Inhalt heute … • Kurz: Motivation und Begriffe • SQL (am Beispiel MySQL und Workbench) – create table (Tabelle erzeugen) – insert into (Einfügen) – select (Anfragen) • • • • Struktur Aggregatfunktionen where-Bedingungen (inklusive like-Operator) Anfrage über mehrere Tabellen Dr. Karsten Tolle – PRG2 – SS 2013 4 Daten Definition (Duden): 1. Plural von Datum 2. [Zahlen]werte, Angaben, formulierbare Befunde 3. (EDV) elektronisch gespeicherte Zeichen, Angaben, Informationen Dr. Karsten Tolle – PRG2 – SS 2013 Bank • • • • Bank zum sitzen Bank als Geldinstitut Sandbank … 5 Datenbank Definition (Duden): Elektronisches System, in dem große Mengen an Daten zentral gespeichert werden können. Datenbank Was ist der Unterschied zu einem USB-Stick oder einer Festplatte? Dr. Karsten Tolle – PRG2 – SS 2013 6 • Datenbankmanagementsystem (DBMS) • Datenbank (DB) • Datenbanksystem (DBS) Dr. Karsten Tolle – PRG2 – SS 2013 7 Vorteile DBS • Redundanz und Inkonsistenz Werden durch die zentrale Datenverwaltung und Datenhaltung vermieden. • Sicherheit gegen Datenmissbrauch Durch die zentrale Benutzerverwaltung können Zugriffsrechte gut kontrolliert werden. • Datenkonsistenz auch bei Ausfall Durch Recovery-Strategien wird sicher gestellt, dass auch nach einem unerwartetem Ausfall die Daten konsistent bleiben (Transaktionen). • … und weitere! Dr. Karsten Tolle – PRG2 – SS 2013 8 Fragen um herauszufinden, ob man ein DBMS benötigt: 1. Liegt eine große Datenmenge vor, die schwer zu managen ist? – – Braucht es lange das Dokument zu öffnen? Ist das Betrachten der Daten schwierig, muss man viel scrollen und ist es schwer die gesuchten Daten zu finden? 2. Arbeiten verschiedene Personen/Anwendungen mit den Daten? 3. Gibt es weitere Daten, die mit den gegebenen Daten in Relation stehen und ebenfalls gespeichert werden? – Ziehen Änderungen an einer Stellen Änderungen an anderen Stellen nach sich? 4. Werden die gleichen Daten an unterschiedlichen Orten verwendet? Dr. Karsten Tolle – PRG2 – SS 2013 9 Erstellung einer Datenbank: Erster Schritt … • Was sind die Anforderungen? • Was sind die Ziele? • Ist bekannt was gespeichert werden soll? Design des Datenmodels Dr. Karsten Tolle – PRG2 – SS 2013 10 Geschäftswissen Kunde Bank Geld SoftwareIngenieur Konto Anforderungen 1. .... 2. .... 3. .... BankExperte Datenbank Dr. Karsten Tolle – PRG2 – SS 2013 Schema 11 Entity-Relationship-Modell (ER-Modell) • Siehe auch: C. Maria Keet: A formal comparison of conceptual datamodeling languages (http://ftp.informatik.rwth-aachen.de/Publications/CEUR-WS/Vol337/paper3.pdf) Picture by: Frank Roeing Dr. Karsten Tolle – PRG2 – SS 2013 12 Erstellung einer Datenbank: Zweiter Schritt … • Welches DBMS wird genutzt? • Wer soll wie auf die Daten zugreifen? Umsetzung des Datenmodels im DBMS • Wir verwenden in PRG2: – relationales DBMS – insb. MySQL – Zugriff über die Anfragesprache SQL Dr. Karsten Tolle – PRG2 – SS 2013 13 Relationales Datenbankmodell E.F. Codd, 1970 (Grundbegriffe) • Tabellen mit Zeilen und Spalten um die Daten darzustellen. Attribute Employee Tupel EMPNO FIRSTNME LASTNME PHONENO SALARY 001 Jon Lucas 2983 2000 003 Jon Smith 2980 3588 103 Lucas Jon 4444 3980 999 Jon Smith 3987 1500 Schema bzw. Relationenschema: Employee (EMPNO, FIRSTNME, LASTNME, PHONENO, SALARY) Dr. Karsten Tolle – PRG2 – SS 2013 14 MySQL • http://dev.mysql.com/downloads/mysql/ Dr. Karsten Tolle – PRG2 – SS 2013 15 http://dev.mysql.com/doc/refman/5.6/en/ … für Version 5.1 gibt es das Ref. Manual auch in Deutsch! Dr. Karsten Tolle – PRG2 – SS 2013 16 MySQL - Command Line Client • Wichtige Befehle: – – – – – – show databases; -- zeigt die Datenbanken an create database <database_name>; -- erzeugt eine leere DB drop database <database_name>; -- löscht eine DB use <database_name>; -- erzeugt eine Verbindung zur Datenbank show tables; -- zeigt die Tabellen der Datenbank an explain <table_name>; -- gibt Informationen über die Tabelle Dr. Karsten Tolle – PRG2 – SS 2013 17 Dr. Karsten Tolle – PRG2 – SS 2013 18 Dr. Karsten Tolle – PRG2 – SS 2013 19 DBS – Sprachen Das DBS stellt als Schnittstelle eine Datenbanksprache(n) für die folgenden Zwecke zur Verfügung: – Datenabfrage und -manipulation – Data Manipulation Language (DML) – Verwaltung der Datenbank – Data Definition Language (DDL) – Berechtigungssteuerung – Data Control Language (DCL) z.B. SQL Dr. Karsten Tolle – PRG2 – SS 2013 20 SQL (ein erster Einblick) Structured Query Language Structured Query Language • SQL ist für Relationale Datenbanksysteme! Standards: • SQL-1 von 1986 bzw. 1989 (ca. 120 Seiten) • SQL-2 (SQL92) von 1992 (ca. 580 Seiten) http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt • SQL-3 (SQL99) von 2000 (ca. 1200 Seiten) http://www.cse.iitb.ac.in/dbms/Data/Papers-Other/SQL1999/ansi-iso-9075-2-1999.pdf • SQL 2003 - ISO/IEC 9075:2003 • SQL:2006 - ISO/IEC 9075-14:2006 (SQL/XML) • … Dr. Karsten Tolle – PRG2 – SS 2013 22 Heute … • Erstellen • Einfügen • Anfragen - create insert select … später • update, delete, alter und drop Dr. Karsten Tolle – PRG2 – SS 2013 23 Tabellen erstellen Eine Tabelle wird im Minimalfall mit ihrem eindeutigen Namen sowie der Liste der zugehörigen Attribute samt Domänen nach folgendem Schema definiert: create table Relations-Name ( Attribut-Name Domäne { , Attribut-Name Domäne}∗ ); z.B.: create table test (id int); Dr. Karsten Tolle – PRG2 – SS 2013 24 die wichtigsten-SQL-Datentypen • • • • • • • • integer/int char(n) varchar(n) double date time datetime timestamp • clob(n) • blob(n) • … Siehe: http://dev.mysql.com/doc/refman/5.6/en/data-types.html Dr. Karsten Tolle – PRG2 – SS 2013 25 create table Konto ( KtoNr integer, KundenName varchar(25), FilialName varchar(25), Saldo real Aus real macht MySQL intern double! ); create table Kunde ( Name varchar(25), Vorname varchar(25), Strasse varchar(25), Stadt varchar(25), GebDatum date ); Dr. Karsten Tolle – PRG2 – SS 2013 26 Einfügen von Tupeln I Um Daten einzufügen, spezifiziert man das Tupel, welches eingefügt werden soll … Die Werte für die Attribute der Tupel müssen aus der Domäne (Definitionsbereich) der Attribute sein. insert into Kunde values ('Otto', 'Hans', 'Bäckerweg 12', 'Frankfurt', '1970-1201') ; Der Kunde "Hans Otto" wird eingefügt. Dr. Karsten Tolle – PRG2 – SS 2013 27 Einfügen von Tupeln II ... unbekannte Werte können mit NULL-Values befüllt werden: insert into Kunde values ('Otto', 'Hans', null, 'Frankfurt', '1970-12-01') ; Der Kunde "Hans Otto" wird eingefügt. Dr. Karsten Tolle – PRG2 – SS 2013 28 Einfügen von Tupeln III ... alternativ kann man die Attribute angeben, die gesetzt werden sollen: insert into Kunde (Vorname, Name, GebDatum) values ('Hans', 'Otto', '1970-12-01') ; Der Kunde "Hans Otto" wird eingefügt. Dr. Karsten Tolle – PRG2 – SS 2013 29 Einfügen von Tupeln IV ... es können auch mehrere Datensätze mit einem SQL-Statement eingefügt werden: insert into Kunde (Vorname, Name, GebDatum) values ('Hans', 'Otto', '1970-12-01'), ('Hans', 'Otto', '1925-11-24'), ('Hans', 'Otto', ‚2012-12-24') ; Der Kunde "Hans Otto" wird 3-mal eingefügt. Dr. Karsten Tolle – PRG2 – SS 2013 30 Primärschlüssel Mittels der Klausel primary key kann eine Attributfolgen einer Relation als Primärschlüssel ausgezeichnet werden. Hierdurch wird verhindert, dass ein Wert mehr als einmal eingetragen wird. create table Konto ( KtoNr integer primary key not null, KundenName varchar(25), FilialName varchar(25) not null, Saldo double ) ; abhängig vom DBMS, ob „not null“ nötig ist – MySQL nicht nötig. Dr. Karsten Tolle – PRG2 – SS 2013 31 Primärschlüssel Wenn mehr als ein Attribut als Primärschlüssel definiert werden sollen, wird die Klausel in der Form primary key (Attributnamen-Liste) verwendet. create table Transaktion ( vonKtoNr integer not null, anKtoNr integer not null, Datum date not null, Betrag double, primary key (vonKtoNr, anKtoNr, Datum) ) ; Dr. Karsten Tolle – PRG2 – SS 2013 32 Zeitangaben Datentyp „Nullwert“ DATETIME '0000-00-00 00:00:00' DATE '0000-00-00' TIMESTAMP '0000-00-00 00:00:00' TIME '00:00:00' YEAR 0000 Unterschied DATETIME und TIMESTAMP? Was ist das mit dem Jahr ‘23‘ gemeint? Dr. Karsten Tolle – PRG2 – SS 2013 33 Unterschiede der DBMS Datenbanksystem Datentyp Geltungsbereich Genauigkeit MS-SQL Server 2005 datetime 01.01.1753 bis 31.12.9999 3,33 Millisekunden smalldatetime 01.01.1900 bis 06.06.2079 1 Minute date 01.01.0001 bis 31.12.9999 1 Tag time 00:00:00.0000000 bis 23:59:59.9999999 100 Nanosekunden datetime 01.01.0001 bis 31.12.9999 3,33 Millisekunden smalldatetime 01.01.1900 bis 06.06.2079 1 Minute DATE 01.01.0100 bis 29.02.32768 1 Tag TIME 00:00 bis 23:59.9999 6,67 Millisekunden DATETIME 01.01.1000 00:00:00 bis 31.12.9999 23:59:59 1 Sekunde DATE 01.01.1000 bis 31.12.9999 1 Tag TIME –838:59:59 bis 838:59:59 1 Sekunde YEAR 1901 bis 2055 MS-SQL Server 2008 Firebird MySQL 5.x Dr. Karsten Tolle – PRG2 – SS 2013 1 Jahr Quelle: http://de.wikibooks.org/wiki/Einf%C3%BChrung_in_SQL:_Datentypen 34 Syntaktische Grundform der SQL-Anfrage select A1,A2, ... ,An from R1, R2, ... ,Rm [where conditions] [group by clause] [having clause] [order by clause]; Dr. Karsten Tolle – PRG2 – SS 2013 35 Anfragen ohne Bedingungen Filiale ( Name Leiter Stadt Einlagen ) select Name, Leiter from Filiale; select Leiter, Name from Filiale; select Stadt from Filiale; select * from Filiale; Dr. Karsten Tolle – PRG2 – SS 2013 36 SQL verwirklicht das Prinzip der „Vielfachmenge“ (engl. multiset). In den Ergebnismengen können demnach Duplikate auftreten. Sind keine Duplikate erwünscht, müssen sie explizit durch den Zusatz distinct entfernt werden. select distinct Stadt from Filiale; Dr. Karsten Tolle – PRG2 – SS 2013 37 Aggregatfunktionen Die sog. Aggregatfunktionen können in der select-Klausel anstelle von einzelnen Attributen angegeben werden. Ergebnis einer Aggregatfunktion ist ein Wert, kein Tupel. select count(∗) as AnzahlKonten from Konto; Dr. Karsten Tolle – PRG2 – SS 2013 38 Aggregatfunktionen • min( A ) zur Berechnung des Minimalwerts aller Tupel unter dem Attribut A. • max( A ) zur Berechnung des Maximalwerts aller Tupel unter dem Attribut A. • avg( [ distinct ] A ) zur Berechnung des Durchschnittswerts aller Tupel unter dem Attribut A, wobei unter Angabe von distinct mehrfach gleiche Werte nur einmal in die Berechnung eingehen. • sum( [ distinct ] A ) zur Berechnung der Summe aller Tupel unter dem Attribut A, wobei unter Angabe von distinct mehrfach gleiche Werte nur einmal in die Berechnung eingehen. • count( ∗ ) zum Zählen der Tupel der betrachteten Relation. • count( [ distinct ] A) zum Zählen der Tupel der betrachteten Relation, wobei zunächst eine Duplikateneliminierung bezogen auf Werte unter dem Attribut A stattfindet. Dr. Karsten Tolle – PRG2 – SS 2013 39 where-Klausel Bezüglich der Bedingung sind Vergleiche mit den üblichen Operatoren, den logischen Verknüpfungen and und or sowie beliebige Klammerungen gestattet. Konto ( KontoNr KundenNr FilialName Saldo ) select * from Konto where Saldo > 5000 or KundenNr <= 100; Dr. Karsten Tolle – PRG2 – SS 2013 40 Textvergleiche - LIKE Kunde ( KundenNr Name Vorname Straße Stadt ) select KundenNr from Kunde where Name like 'To%' and Vorname not like '_arste%'; Bem.: % für beliebige Zeichenfolgen _ für genau ein Zeichen Dr. Karsten Tolle – PRG2 – SS 2013 41 Anfrage über mehrere Relationen Werden in der from-Klausel mehrere Relationen spezifiziert, so erfolgt die Berechnung des kartesischen Produktes. Konto ( KontoNr KundenNr FilialName Saldo ) Filiale ( Name Leiter Stadt Einlagen ) select * from Filiale, Konto; Dr. Karsten Tolle – PRG2 – SS 2013 … im Ergebnis wird jeder DS auf Filiale mit jedem DS aus Konto verbunden! 42 SQL-Online-Tutorial • http://sqlzoo.net/ (evt.: http://old.sqlzoo.net) Dr. Karsten Tolle – PRG2 – SS 2013 43 SQL Online Tutorial • Anfragen können interaktiv ausgeführt werden. Dr. Karsten Tolle – PRG2 – SS 2013 44 SQL – Web Links • SQL Tutorial (deutsch): http://www.sqltutorial.de/ • SQL Tutorial (englisch): http://www.intermedia.net/support/sql/sqltut.asp • SQL Online ausprobieren: http://sqlzoo.net/ Dr. Karsten Tolle – PRG2 – SS 2013 45 Literatur – eBooks allgemein • http://www.ub.unifrankfurt.de/datenbanken/ebooks_gesamt.html Dr. Karsten Tolle – PRG2 – SS 2013 46