Garten - Daten Bankprg2/SS2019/folien/teil2/1_db_2019.pdf · Dr. Karsten Tolle –PRG2 –SS 2019 3...

43
Garten - Daten – Bank - survival pack - Dr. Karsten Tolle – PRG2 – SS 2019

Transcript of Garten - Daten Bankprg2/SS2019/folien/teil2/1_db_2019.pdf · Dr. Karsten Tolle –PRG2 –SS 2019 3...

Garten - Daten – Bank

- survival pack -

Dr. Karsten Tolle – PRG2 – SS 2019

Dr. Karsten Tolle – PRG2 – SS 2019 2

Inhalt heute …

• Kurz: Motivation und Begriffe

• SQL (survival pack)

– create table (Tabelle erzeugen)

– insert into (Einfügen)

– select (Anfragen)

• Struktur

• Aggregatfunktionen

• where-Bedingungen

• Anfrage über mehrere Tabellen

Dr. Karsten Tolle – PRG2 – SS 2019 3

Datenbank

Definition (Duden):Elektronisches System, in dem große Mengen an Daten zentral gespeichert werden können.

Datenbank

Was ist der Unterschied einer Datenbank zu einer Festplatte?

Dr. Karsten Tolle – PRG2 – SS 2019 4

• Datenbank-management-system (DBMS)

• Datenbank (DB)

• Datenbanksystem (DBS)

Dr. Karsten Tolle – PRG2 – SS 2019 5

Vorteile DBS

• Redundanz und InkonsistenzKönnen durch die zentrale Datenverwaltung und Datenhaltung vermieden werden.

• Sicherheit gegen DatenmissbrauchDurch die zentrale Benutzerverwaltung können Zugriffsrechte gut kontrolliert werden.

• Datenkonsistenz auch bei AusfallDurch Recovery-Strategien kann sicher gestellt, dass auch nach einem unerwartetem Ausfall die Daten konsistent bleiben (Transaktionen).

• … und weitere!

Dr. Karsten Tolle – PRG2 – SS 2019 6

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 2019 7

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 2019 8

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. MariaDB/MySQL

– Zugriff über die Anfragesprache SQL

Dr. Karsten Tolle – PRG2 – SS 2019 9

Relationales Datenbankmodell E.F. Codd, 1970 (Grundbegriffe)

• Tabellen mit Zeilen und Spalten um die Datendarzustellen.

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

Tupel

AttributeEmployee

Schema bzw. Relationenschema:Employee (EMPNO, FIRSTNME, LASTNME, PHONENO, SALARY)

Dr. Karsten Tolle – PRG2 – SS 2019 10

Downloads• MariaDB: https://mariadb.org/

(enthält: HeidiSQL)

• MySQL: https://dev.mysql.com/downloads/mysql/Community Server

Workbench extra (oder als Packet)

Dr. Karsten Tolle – PRG2 – SS 2019 11

… beim RBIhttps://www.rbi.informatik.uni-frankfurt.de/RBI/de/nachrichten/datenbank-server-fuer-datenbank-vorlesungen-und-praktika

Dr. Karsten Tolle – PRG2 – SS 2019 12

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– show variables; -- zeigt die aktuellen Einstellungen an

Dr. Karsten Tolle – PRG2 – SS 2019 13

HeidiSQL (geht auch mit MySQL)

Dr. Karsten Tolle – PRG2 – SS 2019 14

MySQL Workbench (geht auch mit MariaDB)

Dr. Karsten Tolle – PRG2 – SS 2019 15

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)

• SQL 2003 - ISO/IEC 9075:2003

• SQL:2006 - ISO/IEC 9075-14:2006 (SQL/XML)

• …

Dr. Karsten Tolle – PRG2 – SS 2019 16

Heute …

• Erstellen - create

• Einfügen - insert

• Anfragen - select

… später

• update, delete, alter, drop …

Dr. Karsten Tolle – PRG2 – SS 2019 17

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 2019 18

create table kunde (Name varchar(30),Vorname varchar(20),Strasse varchar(50),Stadt varchar(25),

Kinder int,GebDatum date

) ;

Dr. Karsten Tolle – PRG2 – SS 2019 19

die wichtigsten-SQL-Datentypen(Domänen)

• integer/int• double(m,d)• float(m,d)• decimal(m,d)

• char(n)• varchar(n)• text

• date• time• datetime• timestamp

• clob(n) • blob(n)• …

Siehe auch: https://dev.mysql.com/doc/refman/5.8/en/data-types.html

Dr. Karsten Tolle – PRG2 – SS 2019 20

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 kundevalues('Otto', 'Hans', 'Bäckerweg 12', 'Frankfurt', 3, '1970-12-01') ;

Der Kunde "Hans Otto" wird eingefügt.

Dr. Karsten Tolle – PRG2 – SS 2019 21

Einfügen von Tupeln II

... unbekannte Werte können mit NULL-Valuesbefüllt werden:

insert into kundevalues('Otto', 'Hans', null, 'Frankfurt', 3, '1970-12-01') ;

Der Kunde "Hans Otto" wird eingefügt.

Dr. Karsten Tolle – PRG2 – SS 2019 22

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 2019 23

… welche Version ist besser?

1. insert into kundevalues ('Otto', 'Hans', null, null, null, '1970-12-01') ;

2. insert into kunde (Vorname, Name, GebDatum)values ('Hans', 'Otto', '1970-12-01') ;

Dr. Karsten Tolle – PRG2 – SS 2019 24

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 2019 25

CSV (Comma Separated Values)

CSV-Dateien dienen zum Speichern/Austausch einer Tabelle

id,vorname,nachname,telefon1,Max,Mustermann,938479283472,Peter,Mustermann,92378409238473,Miss,Mustermann,9832488

Dr. Karsten Tolle – PRG2 – SS 2019 26

Einfügen von Tupeln V

... es können auch mehrere Datensätze aus einer Datei eingelesen werden:

LOAD DATA …

Aufgabe 2 Blatt 8 … selbst herausfinden!Tipps:1) Codierung beachten (empfehlenswert: Notepad++)2) Was ist das Trennzeichen?3) Wie ist der Zeilenumbruch '\r\n' oder '\n'4) MySQL Doku: https://dev.mysql.com/doc/refman/8.0/en/load-data.html

5) Foren sind hilfreich: z.B. https://stackoverflow.com/questions/2675323/mysql-load-null-values-from-csv-data

6) Einstellungen am System: select @@secure_file_priv;

Dr. Karsten Tolle – PRG2 – SS 2019 27

Primärschlüssel

Mittels der Klausel primary key kann ein Attribut einer Relation als Schlüssel ausgezeichnet werden. Hierdurch kann ein Datensatz identifiziert werden und das DBS sorgt dafür, dass keine Duplikate eingetragen werden.

create table kunde (Name varchar(30) primary key not null,Vorname varchar(20),Strasse varchar(50),Stadt varchar(25),Kinder int not null default 0,GebDatum date

) ;abhängig vom DBMS, ob „not null“ nötig ist – MySQL nicht nötig.

Dr. Karsten Tolle – PRG2 – SS 2019 28

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 kunde (Name varchar(30) not null,Vorname varchar(20) not null,Strasse varchar(50),Stadt varchar(25),Kinder int not null default 0,GebDatum dateprimary key (Name, Vorname) ) ;

Dr. Karsten Tolle – PRG2 – SS 2019 29

Primärschlüssel

• Es kann für eine Tabelle nur maximal einen Primärschlüssel (PK) geben.

• Eine Tabelle kann neben dem PK weitere Schlüssel (Schlüsselkandidaten) besitzen. Diese können über „Unique Index“ im DBS modelliert werden.

Dr. Karsten Tolle – PRG2 – SS 2019 30

SQL-Syntax von Workbench:

Dr. Karsten Tolle – PRG2 – SS 2019 31

Anfragen ohne Bedingungen

kunde ( Name Vorname Strasse Stadt)

select Name, Vorname from kunde;

select Vorname, Name from kunde;

select Stadt from kunde;

select * from kunde; Nicht in Programmen!

Dr. Karsten Tolle – PRG2 – SS 2019 32

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 kunde;

Dr. Karsten Tolle – PRG2 – SS 2019 33

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 AnzahlKundenfrom kunden;

Dr. Karsten Tolle – PRG2 – SS 2019 34

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 distinctmehrfach 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.

Behandlung von NULL-Values beachten!

Dr. Karsten Tolle – PRG2 – SS 2019 35

where-Klausel

Bezüglich der Bedingung sind Vergleiche mit den üblichen Operatoren, den logischen Verknüpfungen and und or sowie Klammerungen gestattet.

kunde ( Name Vorname Strasse Stadt Kinder)

select * from kundewhere Kinder > 0 or Stadt = 'Frankfurt' andName = 'Otto' ;

Dr. Karsten Tolle – PRG2 – SS 2019 36

where-Klausel

kunde ( Name Vorname Strasse Stadt Kinder)

select * from kundewhere Kinder > 0 or Stadt = 'Frankfurt' andName = 'Otto' ;

select * from kundewhere Stadt = 'Frankfurt' and Name = 'Otto' or Kinder > 0;

Ausführungsreihenfolge: erst AND dann OR … aber besser lesbar mit Klammern!

Dr. Karsten Tolle – PRG2 – SS 2019 37

kunde ( Name Vorname Strasse Stadt Kinder)

select * from kundewhere Kinder > 0 or Stadt = 'Frankfurt' andName = 'Otto' ;

kunde ( Name Vorname Strasse Stadt Kinder)

select * from kundewhere Kinder > 0 or (Stadt = 'Frankfurt' andName = 'Otto');

Dr. Karsten Tolle – PRG2 – SS 2019 38

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;… im Ergebnis wird jeder DS auf Filialemit jedem DS aus Konto verbunden!

Dr. Karsten Tolle – PRG2 – SS 2019 39

Anfrage über mehrere Relationen

konto ( KontoNr KundenNr Name Saldo )

filiale ( Name Leiter Stadt Einlagen )

select * from filiale, konto;

select * from filiale, kontowhere Name = ' test';

select * from filiale f, konto k where f.Name = ' test';

Fehlermeldung: Name nicht eindeutig!

Dr. Karsten Tolle – PRG2 – SS 2019 40

Anfrage über mehrere Relationen

konto ( KontoNr KundenNr Saldo )kunde ( KundenNr Name Vorname Strasse Stadt )

select * from kunde, konto;vs

select * from kunde k, konto t where k. KundenNr = t.KundenNr;

Dr. Karsten Tolle – PRG2 – SS 2019 41

SQL-Online-Tutorial

• http://sqlzoo.net/

Dr. Karsten Tolle – PRG2 – SS 2019 42

SQL Online Tutorial

• Anfragen können interaktiv ausgeführt werden.

Dr. Karsten Tolle – PRG2 – SS 2019 43

SQL – Web Links

• SQL Online ausprobieren:

http://www.w3schools.com/sql/ und http://sqlzoo.net/

• Literatur – eBooks allgemein: http://www.ub.uni-

frankfurt.de/datenbanken/ebooks_gesamt.html

• Apps, z.B. Learn SQL https://play.google.com/store/apps/details?id=com.sololearn.sql&hl=de

https://itunes.apple.com/de/app/learn-sql/id953775305?mt=8