sql tutorial - inso - home · software engineering 2005w | sql-tutorial 2 inhalt des tutorials 2...
TRANSCRIPT
SQL - Tutorial
Hubert Baumgartner
SS 06
INSO - Industrial SoftwareInstitut für Rechnergestützte Automation | Fakultät für Informatik | Technische Universität Wien
SQL Tutorial
2Sof tware Engineering 2005W | SQL-Tutorial
Inhalt des Tutorials
Das Relationenmodell2
Die Datenbanksprache SQL3
Grundlagen1
Übungsbeispiel4
3Sof tware Engineering 2005W | SQL-Tutorial
Gründe für die Verwendung einer Datenbank
Redundanz
Konsistenz
Sicherheit
Mehrbenutzerfähig
Integritätsüberprüfung
4Sof tware Engineering 2005W | SQL-Tutorial
Inhalt des Tutorials
Das Relationenmodell2
Die Datenbanksprache SQL3
Grundlagen1
Übungsbeispiel4
5Sof tware Engineering 2005W | SQL-Tutorial
Wichtige Begriffe
Entität (Entity)
Attribut
Relation
Schlüssel
Integritätsbedingungen
Relationales Datenbanksystem
Index
8Sof tware Engineering 2005W | SQL-Tutorial
Komplexität einer Beziehung
1:1-Relation
1:n-Relation
m:n-Relation
10Sof tware Engineering 2005W | SQL-Tutorial
Existenz einer Entity in einer Beziehung
Zwingende (obligatorische) Relation
Optionale Relation
12Sof tware Engineering 2005W | SQL-Tutorial
Inhalt des Tutorials
Das Relationenmodell2
Die Datenbanksprache SQL3
Grundlagen1
Übungsbeispiel4
13Sof tware Engineering 2005W | SQL-Tutorial
Die Datenbanksprache SQL
Allgemeines
Datentypen
▪ CHAR(n)▪ VARCHAR(n)▪ INTEGER▪ SMALLINT▪ FLOAT▪ DOUBLE▪ DATE
14Sof tware Engineering 2005W | SQL-Tutorial
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)));
15Sof tware Engineering 2005W | SQL-Tutorial
Datendefinition
Ändern von TabellenALTER 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;
16Sof tware Engineering 2005W | SQL-Tutorial
Datendefinition
Löschen von Tabellen
DROP TABLE tabellenname1 {, tabellennameN};
Beispiel: DROP TABLE Person;
17Sof tware Engineering 2005W | SQL-Tutorial
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);
18Sof tware Engineering 2005W | SQL-Tutorial
Datenmanipulation
Ändern von Daten
UPDATE tabellennameSET attributname = value {, attributname = value}[ WHERE Bedingung ];
Beispiel: UPDATE Person SET Vorname = “Hans“, Nachname = “Huber“ WHERE Adresse = “Waldweg 2“;
19Sof tware Engineering 2005W | SQL-Tutorial
Datenmanipulation
Löschen von Daten
DELETE FROM tabellenname[ WHERE Bedingung ];
Beispiel: DELETE FROM Person WHERE Vorname = “Hans” AND Nachname = “Huber”;
20Sof tware Engineering 2005W | SQL-Tutorial
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;
21Sof tware Engineering 2005W | SQL-Tutorial
Datenabfragen
Die Selektion
▪ Realisiert durch die WHERE-Klausel
Beispiel:
SELECT * FROM Person WHERE Geschlecht = 1 AND Geburtsdatum>“01.01.1960“;
22Sof tware Engineering 2005W | SQL-Tutorial
Datenabfragen
Die Projektion
▪ Realisiert durch Angabe von Attributen
Beispiel:
SELECT Vorname, Nachname, Geburtsdatum FROM Person;
23Sof tware Engineering 2005W | SQL-Tutorial
Datenabfragen
Aggregatfunktionen
▪ COUNT (attributname)▪ SUM (attributname)▪ AVG (attributname)▪ MAX (attributname)▪ MIN (attributname)
Beispiel: SELECT COUNT(*) FROM Spieler WHERE Verein_Name = „Tennis 2005“;
24Sof tware Engineering 2005W | SQL-Tutorial
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;
25Sof tware Engineering 2005W | SQL-Tutorial
Datenabfragen
Mengenoperationen
SQL-Query [ UNION SQL-Query ];
Beispiel: (SELECT Adresse FROM Person) UNION (SELECT Adresse FROM Verein);
26Sof tware Engineering 2005W | SQL-Tutorial
Datenabfragen
Teilabfragen
Innerhalb der WHERE-Klausel kann an jeder Stelle, an der ein Wert erwartet wird, dieser auch durch eine SQL-Abfrageberechnet 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“);
27Sof tware Engineering 2005W | SQL-Tutorial
Datenabfragen
Der Verbund (Join)
Wenn benötigte Daten in getrennten Tabellen liegen können diesebei 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;
28Sof tware Engineering 2005W | SQL-Tutorial
Benutzersichten
SQL-Views
CREATE VIEW Name AS Select-Anweisung;
▪ Jede zulässige SELECT-Anweisung kann als View definiert werden.
29Sof tware Engineering 2005W | SQL-Tutorial
Inhalt des Tutorials
Das Relationenmodell2
Die Datenbanksprache SQL3
Grundlagen1
Übungsbeispiel4
30Sof tware Engineering 2005W | SQL-Tutorial
Ünungsbeispiel - Aufgabenstellung
Erstellen Sie ein EER-Datenbankmodell das allenotwendigen Entitäten und Beziehungen des Systemsabbildet. Redundante Informationen sollen vermiedenwerden.
Erstellen Sie ein SQL Statement zum Erzeugen derTabelle AUFTRAG aus der in Punkt a modelliertenDatenbank.
Fügen Sie einen beispielhaften Datensatz durch ein SQLStatement ein.
31Sof tware Engineering 2005W | SQL-Tutorial
Ünungsbeispiel - Angabetext
Verwaltung eines VersanddienstesVerwaltung eines Versanddienstes
Für die Verwaltung des Versanddienstes SendIT soll ein System erstelltwerden. Im System werden Auftraggeber erfasst. Diese erhalten eineeindeutige ID und werden zusätzlich noch mit einem Namen, Adresse und einereMail-Adresse im System gespeichert. Ein Auftrag setzt sich aus mehrerenEinzelsendungen zusammen. Weiters wird für jeden Auftrag dasErstellungsdatum, das geplante Durchführungsdatum, der Preis und eineZahlungsfrist (in Wochen) gespeichert. Ein Auftrag erhält eine eindeutigeAuftragsnummer (ID). Die maximale Zahlungsfrist ergibt sich aus der Anzahl derEinzelsendungen. Wenn diese unter 100 liegt, kann eine maximaleZahlungsfrist von 2 Wochen eingetragen werden. Sonst von 4 Wochen. EineEinzelsendung besteht aus mehreren Komponenten. Diese sind einerseits dieWare und der Mitarbeiter der die Ware ausliefert und andererseits derEmpfänger. Weiters ist die Information verfügbar, wann die Einzelsendungdurchgeführt werden konnte und der Empfänger die Ware erhalten hat. DieWare erhält eine eindeutige ID, eine Beschreibung und einen Lagerort. VomBoten werden die überlichen Mitarbeiterdaten gespeichert. Mitarbeiter werdenausser mit Namen, Adresse und einer eMail-Adresse auch mit einer SVNR imSystem gespeichert.
32Sof tware Engineering 2005W | SQL-Tutorial
Ünungsbeispiel - Lösung
ACHTUNG: Es gibt nie nur eine gültige Lösung!
33Sof tware Engineering 2005W | SQL-Tutorial
Ü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);