Datenbanken

=Datenbanken=

Was ist eigentlich eine Datenbank?
In der Umgangssprache werden größere Sammlungen von Daten gerne als "die Datenbank" bezeichnet. Dabei gibt es verschiedenartige Arten und Weisen, wie man solche Datenbanken realisiert, z.B. relationale Systeme und Volltextdatenbanken und spezielle Datenbanken wie z.B. die bekannte Suchmaschine von Google. Wir realisieren in unserem Unterricht eine relationale Datenbank mit ... ... und einem schnellen Zugriff auf alle gespeicherten Daten.
 * 1) mindestens einer **Tabelle**
 * 2) mit **Zeilen**
 * 3) und **Spalten**

Die größte Datenbank der Welt finden Sie wohl hier ...
(Achten Sie bitte mal auf die pro Person gespeicherte Datenmenge!)
 * @https://de.wikipedia.org/wiki/Utah_Data_Center

Vorteile der Datenbanknutzung gegenüber einer Sicherung von Daten in Dateien

 * 1) Datenbankserver sind häufig nicht direkt erreichbar aus dem Internet und somit __sicherer__ als Dateien, auf welche vielleicht direkt aus dem Internet zugegriffen werden kann.
 * 2) Datenbanken können viele verschiedene Tabellen mit tausenden von Daten-Einträgen enthalten. Auf solche Weise gespeicherte Daten haben eine bessere Ordnung/Struktur und sind daher übersichtlicher und __leichter zu verwalten__.
 * 3) Abhängig von der Rolle eines Nutzers (z.B. Chef, Angestellter, Praktikant) besteht die Möglichkeit der Erteilung __unterschiedlicher Zugriffsberechtigungen__ auf verschiedene Tabellen (user/passwd).
 * 4) Der Zugriff auf die Datenbank kann über __unterschiedliche Softwaresysteme__ (via SQL) erfolgen (z.B. App für Mobiltelefon, HTML-Seite, usw.).
 * 5) Es kann 'gleichzeitig' auf die Daten zugegriffen werden von mehreren Nutzern (lesend __und schreibend__).
 * 6) Die Daten werden getrennt von der installierten Software und dem Design der Nutzersoftware gespeichert. Dieses ermöglicht ein __separates Backup__ Ihrer Daten.

Zugriff auf den DB-Server / Sicherheit, Identifikation
Was wird benötigt, um auf einen DB-Server zugreifen zu können?
 * 1) Kennung: user/password
 * 2) Name des Servers
 * 3) Name der Datenbank
 * 4) Zugriffsrechte der Kennung auf die Datenbank
 * 5) Eine Sprache, mit der wir die Datenbank abfragen können => z.B. SQL

Programmierumgebung z.B.

 * 1) Nordwind Datenbank / Microsoft Access
 * @https://msdn.microsoft.com/de-de/library/ms227484%28v=vs.90%29.aspx
 * @https://msdn.microsoft.com/de-de/library/bb399411%28v=vs.110%29.aspx

Was ist SQL?
Die so genannte Structured Query Language dient dem Arbeiten mit der Datenbank. Mit den Befehlen select, delete,
 * @http://de.wikipedia.org/wiki/SQL Übersicht
 * @http://de.wikibooks.org/wiki/Einf%C3%BChrung_in_SQL:_Unterabfragen Wie funktionieren SQL-Abfragen?
 * @http://www.php-kurs.info/tutorial-mysql_befehle.html SQL in PHP-Programmen verwenden
 * @http://de.wikipedia.org/wiki/SQL_Server
 * @http://klickdichschlau.at/ecdl_uebungen_access.php // Kurs

Aufgabe 1:

 * Bearbeiten Sie selbstständig die Lektionen 1,2 & 6 des folgenden Tutorials:**
 * @http://www.imoodle.de/sqltutorial/index.html

Sie werden in __Lektion 1__ viele neue Befehle kennen lernen und ausprobieren in denen Schlüsselwörter vorkommen wie z.B. > **order by** Spaltenbezeichnung **asc** > (wird verwendet für die aufsteigende oder absteigende alphabetische Sortierung der Ergebniszeilen. Anstelle der Spaltenbezeichner können auch die Spaltennumemrn angegeben werden > z.B.: order by 2 desc, 1 asc)
 * Hinweise zu den Lektionen:**
 * **select** (hinter dem select-Befehl stehen die Namen der anzuzeigenden Spalten oder * für alle)
 * **from** (hinter from steht der Name der Datenbanktabelle)
 * **where** (optional / hinter where befindet sich die Suchabfrage bzw. die Auswahl der anzuzeigenden Datensätze)
 * **and**, **or**, **not** (können verwendet werden um mehrere Bedingungen miteinander zu verknüpfen)
 * **between** ... and ... (wird verwendet für Bereichsabfragen)
 * **like** '%irgendwas%' (wird verwendet um Teile von Zeichenketten in einer Datenbankspalte zu identifizieren - auch Ausschluß mit not like ist eine mögliche Variante - % steht als Platzhalter für beliebige Zeichen)
 * **in** ('dies', 'das', 'jenes') (wird verwendet, wenn Sie einen Menge von Suchkriterien haben)
 * **is** NULL (wird z.B. genutzt, um leere Datenbankfelder ausfindig zu machen - funktioniert auch mit not is - eine leere Zeichenkette ist übrigens nicht identisch mit NULL)
 * select **distinct** (verwendet man zum Aussortieren doppelter Ergebnisse)
 * **as** (dient der Beschriftung von Tabellenspalten im Ergebnis - welche z.B. durch eigene Berechnungen basierend auf Tabellenwerten hinzukommen - z.B. select Produktbezeichnung, Preiscent/100 as Euro from Produkte)
 * **order by** Spaltenbezeichnung **desc**
 * **limit** 10 (begrenzt die Anzahl der auszugebenden Datensätze z.B. auf 10 - limit 4,6 gibt ab dem 5ten Datensatz 6 Einträge aus)

__Lektion 2__ enthält die so genannten Aggregatfunktionen, d.h. Funktionen zum Zählen bzw. Zusammenzählen, Bestimmung von Minimum und Maximum usw.
 * Bsp: //select **sum**(einwohner) as Personen from cia// summiert die Einträge der Spalte einwohner und gibt nur die Gesamtanzahl mit der Überschrift Personen aus.
 * Bsp: //select **count**(einwohner) from cia where name like '%land%'// zählt die Anzahl der Einträge in denen der Landesname die Zeichenkette 'land' enthält
 * Bsp: //select **avg**(einwohner) from cia// ermittelt die durchschnittliche Einwohnerzahl.
 * Bsp: //select **min**(einwohner) from cia// ermittelt die kleinste Einwohnerzahl eines Landes.
 * Bsp: //select **max**(einwohner) from cia// ermittelt die größte Einwohnerzahl eines Landes.

__Lektion 5__ enthält geschachtelte SQL-Anweisungen, d.h. SQL-Anweisungen in SQL-Anweisungen.
 * Mit SQL-Anweisung Nr.1 könnten Sie z.B. die Einwohnerzahl von Spanien ermitteln. Diese Anweisung kann jetzt in einer anderen SQL-Anweisung verwendet werden, um z.B. zu überprüfen, welche Länder in Europa eine höhere Einwohnerzahl haben.
 * Anweisung 1: //select Einwohner from cia where Name = 'Spanien'//
 * Anweisung 2: //select Name from cia where region='Europa' and Einwohner > ( Anweisung 1 )//

(Es folgen weitere Lektionen, die anschließend bearbeitet werden)

Aufgabe 2:
Funktionieren die folgenden Befehle? Was wird ausgegeben? 1. to do

2.

3.

Lektion 1
1. code format="sql" select * from cia code 2. code format="sql" SELECT name FROM cia code 3. code format="sql" SELECT name FROM cia where Einwohner>1E08

code ggf. mit Zusatz 'order by name'

4. code format="sql" select name, bip from cia where bip between 1E09 and 1E11 and region="Asien" code 5. code format="sql" select name, einwohner from cia where name in ('Deutschland','Polen','Frankreich') code 6. code format="sql" select name, einwohner/1E06 from cia where region='Südamerika' code 7. code format="sql" select name, bip/einwohner as 'Jahreseinkommen pro Einwohner' from cia where einwohner > 2E08 code 8. code format="sql" select name, bip/einwohner as Jahreseinkommen from cia where einwohner > 2E08 order by Jahreseinkommen asc code 9. code format="sql" select name from cia where name like '%Vereinigte%' code 10. code format="sql" select region from cia order by region code 11. code format="sql" select name, bip from cia where bip is NULL code

... ein paar ergänzende Beispiele ...
Suche nach allen Ländern welche mit 'Ar' anfangen, wie z.B. Armenien: code format="sql" select * from cia where name like 'Ar%' code Ausgabebegrenzung auf 3 Einträge: code format="sql" select name as Länder, Einwohner from cia where Einwohner>1E08 order by 2 desc limit 3 code

Lektion 2
1. code format="sql" select count(name) from cia code 2. code format="sql" select sum(einwohner) from cia code 3. code format="sql" select name,bip from cia order by bip desc code 4. code format="sql" select sum(einwohner),sum(bip) from cia where region='Europa' code 5. code format="sql" select min(fläche), max(fläche) from cia code 6. code format="sql" select count(distinct region) from cia code

Lektion 4
...

Beispiellösung mit 'and'-Auswertung Region code format="sql" select name, Einwohner from cia where Einwohner>1E07 and Region='Europa' code Beispiellösung mit 'having'-Auswahl Region code format="sql" select name, Einwohner, Region from cia where Einwohner>1E07 having Region='Europa' code ... code format="sql" select name, SUM(Einwohner) as Gesamtbevölkerung from cia group by Region having name like 'A%' and SUM(Einwohner)>500E6 order by 2 desc code ... code format="sql" select name, Einwohner from cia where Einwohner>80000000 order by Einwohner desc code ...

Ermitteln Sie die Bevölkerungszahl des einwohnerreichsten Landes Europas! code format="sql" select max(Einwohner) from cia where region="europa" code

Verschachtelte SQL-Anweisungen:

Zeigen Sie alle Länder an die eine höhere Einwohnerdichte als das bevölkerungsreichste Land Europas haben! code format="sql" select name, einwohner/fläche from cia where einwohner/fläche > ( select einwohner/fläche          from cia          where Einwohner =                ( select max(einwohner) from cia where region='Europa' )      )

code

Lektion 5
...

z.B. code format="sql" select name, region from cia where name='Angola' or name ='Deutschland' or name = 'Algerien' order by 1 asc code

oder

...

Lektion 6
1. code format="sql" delete from Schüler; code 2. code format="sql" insert into Schüler values (3456, 'Mustermann', 'Max', '1963-03-15', 'Musterstraße 55', '12345', 'Berlin'); code 3.

Weitere Verständnisfragen im Zusammenhang mit Datenbanken

 * 1) Was sind Transaktionen?
 * 2) Wofür steht im Zusammenhang mit Transaktionen die Abkürzung ACID?
 * 3) Was bedeuten die Fachbegriffe atomicity, consistency, isolation, durability?
 * 4) Was sind //commit// und //rollback//?
 * 5) Was ist eine "permanente" Transaktion?
 * 6) Was ist notwendig, um ein "rollback" durchführen zu können?
 * 7) Was ist ein Logfile?