Datenbanken
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
==Datenbanksprache SQL==
===Datenbank anlegen===
Zuerst legen wir eine sehr einfache Datenbank an. Sie besteht aus nur einer Tabelle <tt>Student</tt>. Die allgemeine Form zur Erstellung einer Tabelle lautet:<br />
'''CREATE TABLE''' ''Tabellenname'' (''Attributname'' ''Datentyp'',...);
'''Beispiel:'''
CREATE TABLE KUNDE (ID INTERGER, Nachname VARCHAR(50), Ort varchar(50));
Außerdem sollte man bedenken, dass die anzulegende Tabelle (oder eine gleichnamige andere) bereits existieren könnte. In diesem Fall soll die alte DB gelöscht werden.<br />
'''DROP TABLE''' ''Tabellenname'' '''IF EXISTS;'''
<run id="4b3e44514e418">
DROP TABLE Student IF EXISTS;
CREATE TABLE Student
(ID INTEGER,
Nachname varchar(50),
Vorname varchar(50),
PLZ varchar(6),
Ort varchar(50),
Strasse varchar(50),
PRIMARY KEY(ID));
</run>
===Datensätze einfügen===
Der nächste Schritt besteht darin, Datensätze in die Datenbank einzufügen:<br />
'''INSERT INTO''' ''Tabellenname'' (''Spaltenliste'') '''VALUES''' (''Werte'');
'''Beispiel:'''
INSERT INTO KUNDE (ID, Nachname, Ort)) VALUES (10,'Meyer','Görlitz');
<run id="4b3e44514ebe7">
INSERT INTO Student VALUES (0,'Müller','Franz','02826','Görlitz','Blumenstraße 5');
INSERT INTO Student VALUES (1,'Schmidt','Susi','02827','Görlitz','Bäckergaße 3');
INSERT INTO Student VALUES (2,'Adler','Anton','02763','Zittau','Berliner Straße 50');
INSERT INTO Student VALUES (3,'Bär','Bertha','02829','Markersdorf','Bahnhofstraße 3');
INSERT INTO Student VALUES (4,'Meyer','Ben','30001','Hannover','Sonnenblumenweg 4');
INSERT INTO Student VALUES (5,'Schulze','Sebastian','09001','Chemnitz','Kirchstrasse 43');
INSERT INTO Student VALUES (6,'Richter','Rudolf','02763','Zittau','Deckelweg 6');
INSERT INTO Student VALUES (7,'Wasser','Wilhelm','01067','Dresden','Bahnhofstraße 76');
</run>
===Datensätze abfragen===
Um einzelne Datensätze gezielt zu selektieren, gibt es <br />
'''SELECT''' * | ''Spaltenliste'' '''FROM''' ''Tabellenliste'' '''WHERE''' ''Ausdruck''
'''Beispiele:'''
SELECT * FROM Kunde WHERE Ort = 'Musterstadt';
SELECT Nachname, Vorname FROM Kunde,Student WHERE Ort = 'Musterstadt' AND Nachname='Schmidt';
<run id="4b3e44514f3be">
SELECT * FROM Student;
</run>
Wir erweitern nun die Datenbank um eine weitere Tabelle, so dass die im Folgenden angegebene Struktur entsteht.<br />
[[Bild:Erd.jpg]]
Als erstes legen wir die neue Tabelle <tt>Matrikel</tt> an. Falls eine Tabelle dieses Namens bereits existiert, wird sie gelöscht.
<run id="4b3f52bae154f">
DROP TABLE Matrikel IF EXISTS;
CREATE TABLE Matrikel(ID INTEGER, Bezeichnung VARCHAR(50), PRIMARY KEY(ID));
INSERT INTO Matrikel VALUES (0,'Heilpädagogik');
INSERT INTO Matrikel VALUES (1,'Kommunikationspsychologie');
INSERT INTO Matrikel VALUES (2,'Informatik');
INSERT INTO Matrikel VALUES (3,'Kultur und Management');
INSERT INTO Matrikel VALUES (4,'Soziale Arbeit');
SELECT * FROM Matrikel;
</run>
In Tabelle Student muss eine Spalte <tt>MNr</tt> für die Matrikel-Nummer ergänzt werden. Dabei handelt es sich um einen ''Fremdschlüssel'', d.h. eine Art "Zeiger" auf den ''Primärschlüssel'' der Tabelle <tt>Matrikel</tt>.
<run id="4b3f58d292cbb">
ALTER TABLE Student ADD COLUMN MNr INTEGER;
ALTER TABLE Student ADD FOREIGN KEY(MNr) REFERENCES Matrikel(ID);
</run>
Nun werden folgende Datensätze eingepflegt.
<run id="4b3e44514ebe7">
DELETE FROM Student;
INSERT INTO Student VALUES (0,'Müller','Franz','02826','Görlitz','Blumenstraße 5',2);
INSERT INTO Student VALUES (1,'Schmidt','Susi','02827','Görlitz','Bäckergaße 3',4);
INSERT INTO Student VALUES (2,'Adler','Anton','02763','Zittau','Berliner Straße 50',3);
INSERT INTO Student VALUES (3,'Bär','Bertha','02829','Markersdorf','Bahnhofstraße 3',2);
INSERT INTO Student VALUES (4,'Meyer','Ben','30001','Hannover','Sonnenblumenweg 4',0);
INSERT INTO Student VALUES (5,'Schulze','Sebastian','09001','Chemnitz','Kirchstrasse 43',1);
INSERT INTO Student VALUES (6,'Richter','Rudolf','02763','Zittau','Deckelweg 6',2);
INSERT INTO Student VALUES (7,'Wasser','Wilhelm','01067','Dresden','Bahnhofstraße 76',3);
SELECT * FROM Student;
</run>
==Übungen==
*Formulieren Sie eine SQL-Abfrage, die alle Studenten aus der Stadt Görlitz anzeigt.
<run id="4aba316215f14">Geben Sie hier Ihre Abfrage ein.</run>
<popup name="Lösung">
select Nachname, Vorname from student where ort='Görlitz';
</popup>
*Überlegen Sie sich nun eine Abfrage, welche die beiden Tabellen <tt>Matrikel</tt> und <tt>Student</tt> miteinander verknüpft: Fragen Sie nach den Namen aller Informatik-Studis.
<run id="4b3f52bae2105">Geben Sie hier Ihre Abfrage ein.</run>
<popup name="Lösung">
SELECT Nachname, Vorname FROM Student,Matrikel WHERE Student.MNr = Matrikel.ID AND Matrikel.Bezeichnung='Informatik';
</popup>
*Erstellen Sie nun eine Tabelle <tt>Fahrzeug</tt>, welche eine <tt>ID</tt>, eine <tt>Nummernschild</tt> und eine <tt>Bezeichnung</tt> sowie einen Fremdschlüssel zu der <tt>Studenten-ID</tt> besitzt. Fügen Sie danach einige Datensätze ein und sehen Sie sich die Resultate selbst gestellter Anfragen an.
<run id="4aba316218244">...</run>