SQL Tutorial SQL - Tutorial SS 06 Hubert Baumgartner INSO - Industrial Software Institut für Rechnergestützte Automation | Fakultät für Informatik | Technische Universität Wien Inhalt des Tutorials 1 Grundlagen 2 Das Relationenmodell 3 Die Datenbanksprache SQL 4 Übungsbeispiel Sof tware Engineering 2005W | SQL-Tutorial 2 Gründe für die Verwendung einer Datenbank Redundanz Konsistenz Sicherheit Mehrbenutzerfähig Integritätsüberprüfung Sof tware Engineering 2005W | SQL-Tutorial 3 Inhalt des Tutorials 1 Grundlagen 2 Das Relationenmodell 3 Die Datenbanksprache SQL 4 Übungsbeispiel Sof tware Engineering 2005W | SQL-Tutorial 4 Wichtige Begriffe Entität (Entity) Attribut Relation Schlüssel Integritätsbedingungen Relationales Datenbanksystem Index Sof tware Engineering 2005W | SQL-Tutorial 5 Grundlegende EER-Konstrukte Entitäten Attribute Sof tware Engineering 2005W | SQL-Tutorial 6 Grundlegende EER-Konstrukte Relationen Weak Entity Sof tware Engineering 2005W | SQL-Tutorial 7 Komplexität einer Beziehung 1:1-Relation 1:n-Relation m:n-Relation Sof tware Engineering 2005W | SQL-Tutorial 8 Generalisierung Sof tware Engineering 2005W | SQL-Tutorial 9 Existenz einer Entity in einer Beziehung Zwingende (obligatorische) Relation Optionale Relation Sof tware Engineering 2005W | SQL-Tutorial 10 Beispiel-EER Sof tware Engineering 2005W | SQL-Tutorial 11 Inhalt des Tutorials 1 Grundlagen 2 Das Relationenmodell 3 Die Datenbanksprache SQL 4 Übungsbeispiel Sof tware Engineering 2005W | SQL-Tutorial 12 Die Datenbanksprache SQL Allgemeines Datentypen ▪ ▪ ▪ ▪ ▪ ▪ ▪ CHAR(n) VARCHAR(n) INTEGER SMALLINT FLOAT DOUBLE DATE Sof tware Engineering 2005W | SQL-Tutorial 13 Datendefinition Erzeugen von Tabellen CREATE TABLE tabellenname ( attribut1 typ {Optionen} {, attributN typ {Optionen} } { , Zusatzoptionen } ); Beispiel: CREATE TABLE Person (Vorname VARCHAR(20) NOT NULL, Nachname VARCHAR(30) NOT NULL, Adresse VARCHAR(60) NOT NULL, Geburtsdatum DATE NOT NULL, Telefonnummer VARCHAR(30), Geschlecht INTEGER NOT NULL, PRIMARY KEY (Vorname, Nachname, Adresse, Geburtsdatum), CHECK((Geschlecht >= 1) AND (Geschlecht <= 2))); Sof tware Engineering 2005W | SQL-Tutorial 14 Datendefinition Ändern von Tabellen ALTER TABLE tabellenname ADD attributname1 typ1 | DROP attributname1 | CHANGE attributname1_alt attributname1_neu typ1_neu | MODIFY attributname1 typ1_neu { , ADD attributnameN typN | DROP attributnameN | CHANGE attributnameN_alt attributnameN_neu typN_neu | MODIFY attributnameN typN_neu }; Beispiel: ALTER TABLE Person ADD Email VARCHAR(20), MODIFY Telefonnummer VARCHAR(40) NOT NULL, DROP Geschlecht; Sof tware Engineering 2005W | SQL-Tutorial 15 Datendefinition Löschen von Tabellen DROP TABLE tabellenname1 {, tabellennameN}; Beispiel: DROP TABLE Person; Sof tware Engineering 2005W | SQL-Tutorial 16 Datenmanipulation Einfügen von Daten INSERT INTO tabellenname [(attribut1, attribut2, .... attributN)] VALUES (wert1, wert2, .... wertN); Beispiel: INSERT INTO Person (Vorname, Nachname, Adresse, Geburtsdatum, Telefonnummer, Geschlecht) VALUES (“Hans“,“Meier“,“Waldweg 2“,“10.09.1970“,“01/7654321“,1); Sof tware Engineering 2005W | SQL-Tutorial 17 Datenmanipulation Ändern von Daten UPDATE tabellenname SET attributname = value {, attributname = value} [ WHERE Bedingung ]; Beispiel: UPDATE Person SET Vorname = “Hans“, Nachname = “Huber“ WHERE Adresse = “Waldweg 2“; Sof tware Engineering 2005W | SQL-Tutorial 18 Datenmanipulation Löschen von Daten DELETE FROM tabellenname [ WHERE Bedingung ]; Beispiel: DELETE FROM Person WHERE Vorname = “Hans” AND Nachname = “Huber”; Sof tware Engineering 2005W | SQL-Tutorial 19 Datenabfragen Grundkonstruktion einer Abfrage SELECT attributname {, attributname} FROM tabellenname { , tabellenname } [ WHERE Bedingung ] [ ORDER BY [ ASC | DESC ] attributname ]; Beispiele: SELECT * FROM Person; SELECT Vorname, Nachname FROM Person; SELECT * FROM Person ORDER BY Vorname; Sof tware Engineering 2005W | SQL-Tutorial 20 Datenabfragen Die Selektion ▪ Realisiert durch die WHERE-Klausel Beispiel: SELECT * FROM Person WHERE Geschlecht = 1 AND Geburtsdatum>“01.01.1960“; Sof tware Engineering 2005W | SQL-Tutorial 21 Datenabfragen Die Projektion ▪ Realisiert durch Angabe von Attributen Beispiel: SELECT Vorname, Nachname, Geburtsdatum FROM Person; Sof tware Engineering 2005W | SQL-Tutorial 22 Datenabfragen Aggregatfunktionen ▪ ▪ ▪ ▪ ▪ COUNT (attributname) SUM (attributname) AVG (attributname) MAX (attributname) MIN (attributname) Beispiel: SELECT COUNT(*) FROM Spieler WHERE Verein_Name = „Tennis 2005“; Sof tware Engineering 2005W | SQL-Tutorial 23 Datenabfragen Gruppierung SELECT [ ALL | DISTINCT ] [Alias.] attributname {, [Alias.] attributname } FROM tabellenname [Alias] {, tabellenname [Alias] } [ WHERE Bedingung ] [ GROUP BY [Alias.] attributname {, [Alias.] attributname } [ HAVING Bedingung] ] [ ORDER BY [ASC | DESC] attributname]; Beispiel: SELECT Spieler_SpielerNr, COUNT(Spieler_SpielerNr) FROM Teilnahme GROUP BY Spieler_SpielerNr; Sof tware Engineering 2005W | SQL-Tutorial 24 Datenabfragen Mengenoperationen SQL-Query [ UNION SQL-Query ]; Beispiel: (SELECT Adresse FROM Person) UNION (SELECT Adresse FROM Verein); Sof tware Engineering 2005W | SQL-Tutorial 25 Datenabfragen Teilabfragen Innerhalb der WHERE-Klausel kann an jeder Stelle, an der ein Wert erwartet wird, dieser auch durch eine SQL-Abfrage berechnet werden. Vergleichsoperatoren für Teilabfragen: EXISTS, ALL, ANY, IN, NOT IN Beispiel: SELECT * FROM Spieler WHERE Preisgeld > (SELECT Preisgeld FROM Spieler WHERE Person_Vorname = „Christian“ AND Person_Nachname = „Lang“); Sof tware Engineering 2005W | SQL-Tutorial 26 Datenabfragen Der Verbund (Join) Wenn benötigte Daten in getrennten Tabellen liegen können diese bei Bedarf über ihre Schlüssel in Zusammenhang gebracht werden. Beispiel: SELECT s.SpielerNr, t.Bezeichnung FROM Spieler s,Turnier t, Teilnahme tn WHERE s.SpielerNr = tn.Spieler_SpielerNr AND t.Bezeichnung = tn.Turnier_Bezeichnung; entspricht SELECT s.SpielerNr, t.Bezeichnung FROM (Spieler s JOIN Teilnahme tn ON s.SpielerNr = tn.Spieler_SpielerNr ) JOIN Turnier t ON tn.Turnier_Bezeichnung = t.Bezeichnung; Sof tware Engineering 2005W | SQL-Tutorial 27 Benutzersichten SQL-Views CREATE VIEW Name AS Select-Anweisung; ▪ Jede zulässige SELECT-Anweisung kann als View definiert werden. Sof tware Engineering 2005W | SQL-Tutorial 28 Inhalt des Tutorials 1 Grundlagen 2 Das Relationenmodell 3 Die Datenbanksprache SQL 4 Übungsbeispiel Sof tware Engineering 2005W | SQL-Tutorial 29 Ünungsbeispiel - Aufgabenstellung Erstellen Sie ein EER-Datenbankmodell das alle notwendigen Entitäten und Beziehungen des Systems abbildet. Redundante Informationen sollen vermieden werden. Erstellen Sie ein SQL Statement zum Erzeugen der Tabelle AUFTRAG aus der in Punkt a modellierten Datenbank. Fügen Sie einen beispielhaften Datensatz durch ein SQL Statement ein. Sof tware Engineering 2005W | SQL-Tutorial 30 Ünungsbeispiel - Angabetext Verwaltung eines Versanddienstes Für die Verwaltung des Versanddienstes SendIT soll ein System erstellt werden. Im System werden Auftraggeber erfasst. Diese erhalten eine eindeutige ID und werden zusätzlich noch mit einem Namen, Adresse und einer eMail-Adresse im System gespeichert. Ein Auftrag setzt sich aus mehreren Einzelsendungen zusammen. Weiters wird für jeden Auftrag das Erstellungsdatum, das geplante Durchführungsdatum, der Preis und eine Zahlungsfrist (in Wochen) gespeichert. Ein Auftrag erhält eine eindeutige Auftragsnummer (ID). Die maximale Zahlungsfrist ergibt sich aus der Anzahl der Einzelsendungen. Wenn diese unter 100 liegt, kann eine maximale Zahlungsfrist von 2 Wochen eingetragen werden. Sonst von 4 Wochen. Eine Einzelsendung besteht aus mehreren Komponenten. Diese sind einerseits die Ware und der Mitarbeiter der die Ware ausliefert und andererseits der Empfänger. Weiters ist die Information verfügbar, wann die Einzelsendung durchgeführt werden konnte und der Empfänger die Ware erhalten hat. Die Ware erhält eine eindeutige ID, eine Beschreibung und einen Lagerort. Vom Boten werden die überlichen Mitarbeiterdaten gespeichert. Mitarbeiter werden ausser mit Namen, Adresse und einer eMail-Adresse auch mit einer SVNR im System gespeichert. Sof tware Engineering 2005W | SQL-Tutorial 31 Ünungsbeispiel - Lösung ACHTUNG: Es gibt nie nur eine gültige Lösung! Sof tware Engineering 2005W | SQL-Tutorial 32 Ünungsbeispiel - Lösung create table AUFTRAG (ID integer not null primary key, Erstellung date not null, Durchfuehrung date, Preis integer not null, Frist integer not null, check (Frist <= 4), PersonID integer not null, foreign key(PersonID) references PERSON(ID)); insert into AUFTRAG values (0, 01-01-01, null, 100, 2, 78); Sof tware Engineering 2005W | SQL-Tutorial 33