LPI-Zertifizierung 105.3 SQL-Datenverwaltung Copyright ( ) 2009 by Dr. W. Kicherer. This work is licensed under the Creative Commons Attribution-Noncommercial-Share Alike 2.0 Germany License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.0/de/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
Arten Arten von Datenbanken: Relationale Datenbank (z.b. MySQL) Hirarchische Datenbank (z.b. LDAP) Objektorietierte/Objektrelationale Datenbank
Aufbau Eine relationale Datenbank besteht aus mehreren Tabellen Eine Tabelle besteht aus mehreren Attributen Jede Tabelle muss einen Primärschlüssel und kann mehrere Fremdschlüssel enthalten: Primärschlüssel: Ein Attribut, welches innerhalb der Tabelle eindeutig ist (es ist auch möglich, dass der Primärschlüssel aus mehrern Attributen besteht). Fremdschlüssel: Ein Fremdschlüssel verweist auf einen Primärschlüssel einer anderen Tabelle.
Beispiel Tabelle: artikel ANR bezeichnung artikelgruppe preis 1001 Core Duo CP 345.70 1010 RAM 1024 MB SP 101.6 Spalte/Attribut Tabelle: kunde KID name vorname strasse ort plz 1001 Grupp Andreas Oberhoferstr. 25 Tettnang 88069 1005 Kicherer Walter Breitwisenstr. 20 Stuttgart 70565 Zeile/Datensatz Tabelle: bestellung BNR KNR Datum 234 1001 2009-09-08 236 1001 2009-10-01 445 1005 2009-07-31 Tabelle: bestellpositionen BNR BPos ANR menge 234 1 1001 2 234 2 1010 3 445 1 1010 4... Primärschlüssel Fremdschlüssel Zusammengesetzter Primärschl.
Darstellung Entity Relation Diagram (ERD) kunde 1 N 1 N bestellung bestellpositionen Realtionenschreibweise kunde(kid, name, vorname, strasse, ort, plz) bestellung(bnr, KNR, datum) bestellpositionen(bnr, BPos, ANR, menge) artikel(anr, bezeichnung, artikelgruppe, preis) N 1 artikel FETT: Primärschlüssel Kursiv: Fremdschlüssel
MySQL MySQL ist ein Datenbanksystem, keine Datenbank! Installation: Debian: apt-get install mysql-server mysql-client Red Hat: yum install mysql-server mysql-client Server starten: /etc/init.d/mysql start Administrationspasswort vergeben (user: root, Passwort: GEHEIM) mysqladmin -u root password GEHEIM Beispieldatenbank erzeugen: mysql -u root -p < bestellungen.sql CLI (Command Line Interface): mysql -u root -p
MySQL Bedienung des CLI: Anzeigen der vorhandenen Datenbanken: SHOW DATABASES; Datenbank auswählen: USE <Name der Datenbank>; Anzeigen der Tabellen (nachdem Datenbank ausgewählt): SHOW TABLES; CLI verlassen: QUIT; Hilfe: \h oder?
Aufgaben Installieren Sie MySQL auf Ihrem System. Vergeben Sie einen Administrationsaccount mit einem Passwort. Erzeugen Sie die Datenbank bestellungen auf Ihrem Datenbanksystem.
Select Abfragen innerhalb einer Datenbank erledigt man mit SELECT: Aufbau: SELECT <Spalte1>, <Spalte2>,... FROM <Tabelle> WHERE <Bedingung>; Beispiel (alle Kunden aus Orten mit PLZ = 7...): SELECT name, vorname FROM kunde WHERE PLZ LIKE 7% ;
Select Weitere Beispiel: Alle Artikel teurer 100 Eur aus der Artikelgruppe CP (Ausgabe: bezeichnung, preis): SELECT bezeichnung, preis FROM artikel WHERE preis > 100 AND artikelgruppe = CP ; Alle Artikel teurer 100 Eur aus der Artikelgruppe CP, sortiert nach der Bezeichnung (Ausgabe: alle Spalten): SELECT * FROM artikel WHERE preis > 100 AND artikelgruppe = CP ORDER BY bezeichnung;
Funktionen Einfache Funktionen: Welchen Wert hat das Lager: SELECT SUM(preis*lager) FROM artikel; Welchen Wert hat das Lager aufgeteilt auf die Artikelgruppen: SELECT artikelgruppe, SUM(preis*lager) FROM artikel GROUP BY artikelgruppe; Weitere Funktionen: COUNT, MAX, MIN, AVG,...
Verbinden von Tabellen Über Primär und Fremdschlüssel werden Tabellen verbunden: JOIN: Primärschlüssel SELECT name,vorname Fremdschlüssel FROM kunde INNER JOIN bestellung ON kunde.kid=bestellung.knr WHERE kunde.name LIKE "Ki%"; oder (für Faule): SELECT name,vorname FROM kunde k INNER JOIN bestellung b ON k.kid=b.knr WHERE k.name LIKE "Ki%";
Aufgaben Erstellen Sie die entsprechenden Abfragen. Gehen Sie dazu in das CLI von MySQL und wählen die Datenbank bestellungen aus: Welcher Kunde kommt aus Stuttgart? Welche Artikel gibt es in der Artikelgruppe CP sortiert nach der Bezeichnung? Wie viele Artikel gibt es in der Artikelgruppe Mo? Wie viele Artikel der Artikelgruppe Mo liegen im Lager? Wie viele Artikel mit der Artikelnummer 1001 wurden bestellt? Wie hoch ist die Rechnung für die Bestellung mit der Bestellnummer 1001?
Insert Eintragen neuer Datensätze: Aufbau: optional INSERT INTO <TABELLE> (Spalte1, Spalte2, ) VALUES wert1, wert2,...; Beispiel: INSERT INTO kunde (KID, name, vorname, strasse, ort, plz) VALUES ('1010','Maier','Willi','Hauptstrasse 6', 'Hinterdingharding', '12345');
DELETE Löschen von Datensätzen: Aufbau: DELETE FROM <TABELLE> WHERE... Beispiel: DELETE FROM kunde WHERE nachname LIKE 'Ki%' AND vorname LIKE 'Wa%';
UPDATE Ändern von Datensätzen: Aufbau: UPDATE <Tabelle> SET <Attribut>=<wert>, <Attribut>=<Wert>,... WHERE...; Beispiel: UPDATE artikel SET preis=123.45 WHERE ANR=1001;
Aufgaben Erstellen Sie die entsprechenden Abfragen: Fügen Sie den neuen Artikel IBM Notebook in der Artikelgruppe No und dem Preis 500 Eur hinzu. Löschen Sie alle Artikel aus der Artikelgruppe Mo. Erhöhen Sie den Preis des ASUS Boards auf 55.55 Eur.