Einführungskurs/Bibliotheksdatenbank mit SQL
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
<font color="darkgreen" size="+1">Auf dieser Seite soll die Möglichkeit des Einsatzes des ProgrammingWiki für die Thematik '''Datenbanken/SQL''' vorgestellt werden.</font><br><br>
<font color="darkgreen">Dabei wird das bekannte Standardbeispiel '''Bibliothek''' verwendet.</font><br><br>
*zunächst sind Tabellen anzulegen
*anschließend werden Abfragen formuliert
In der folgenden Code-Box wird die Tabelle '''Leser''' angelegt und mit Datensätzen gefüllt.<br>
Über die Abfrage in der Eval-Box (grün) kann man sich die Tabelle nach Betätigung des Buttons (nochmal) anzeigen lassen.
<code id="4d262a7688451">
DROP TABLE IF EXISTS leser;
CREATE TABLE leser (
L_NR varchar(255),
Name varchar(255),
Vorname varchar(255),
Geb_datum varchar(30),
PLZ varchar(255),
Ort varchar(255),
Straße varchar(255)
);
INSERT INTO leser VALUES ('001', 'Franz', 'Werner', '12.08.1969', '01259', 'Dresden', 'Ottostr.12');
INSERT INTO leser VALUES ('002', 'Bert', 'Kuni', '01.01.2010', '02625', 'Bautzen', 'Bismarkstr. 10');
INSERT INTO leser VALUES ('003', 'Hummel', 'Elfriede', '05.12.1940', '02222', 'Doosdorf', 'Nr. 5');
INSERT INTO leser VALUES ('004', 'Stramm', 'Berta', '01.02.1988', '01226', 'Dresden', 'Heideweg 7');
INSERT INTO leser VALUES ('010', 'Bunt', 'Sebastian', '11.11.1985', '02625', 'Bautzen', 'Reichenstr. 17');</code>
<run id="4d262a76887d2">
select *
from leser;
</run>
Außerdem wird für die Datenbank eine Tabelle '''Buch1''' benötigt, die die Angaben zu den Büchern enthält.<br>
Der Code ist <u>versteckt</u> - die Inhalte können Sie sich über die Abfrage (Button) anzeigen lassen.
<br>
<code id="4d262a7688576" hidden>
DROP TABLE IF EXISTS buch1;
CREATE TABLE buch1 (
T_NR varchar(255) ,
Autor varchar(255) ,
Titel varchar(255) ,
Verlag varchar(255) ,
Jahr varchar(255) ,
ISBN varchar(255)
);
INSERT INTO buch1 VALUES ('00001', 'Abelson, H. u.a.', 'Struktur und Interpretation von Computerprogrammen', 'Springer', '1991', '3-540-56934-0');
INSERT INTO buch1 VALUES ('00002', 'Appelrath, H.-J. u.a', 'Starthilfe Informatik', 'BG Teubner', '1998', '3-519-00241-8');
INSERT INTO buch1 VALUES ('00003', 'Claus, V. u.a.', 'Duden Informatik', 'Meyers Lexikonv', '1993', '3-411-05232-5');
INSERT INTO buch1 VALUES ('00004', 'Horn, Ch. u.a.', 'Lehr- und Übungsbuch Informatik, Bd. 1', 'Fachbuchverlag ', '1995', '3-343-00891-5');
INSERT INTO buch1 VALUES ('00005', 'Horn, Ch. u.a.', 'Lehr- und Übungsbuch Informatik, Bd. 3', 'Fachbuchverlag ', '1997', '3-446-18699-9');
INSERT INTO buch1 VALUES ('00006', 'Precht, M. u.a.', 'EDV-Grundwissen', 'Addison-Wesley', '1997', '3-8273-1222-1');
</code>
<run id="4d262a76888fa">
select *
from Buch1;
</run>
Im Folgenden sind noch die Tabellen '''buch2''', '''bestand''' und '''ausleihe''' angelegt und mit Datensätzen gefüllt.<br>
Lassen Sie sich ebenfalls die Inhalte anzeigen.
<code id="4d262a7688699" hidden>
DROP TABLE IF EXISTS buch2;
CREATE TABLE buch2 (
T_NR varchar(255),
Schlagwort varchar(255)
);
INSERT INTO buch2 VALUES ('00001', 'Programmierung');
INSERT INTO buch2 VALUES ('00001', 'LISP');
INSERT INTO buch2 VALUES ('00002', 'Grundlagen');
INSERT INTO buch2 VALUES ('00003', 'Nachschlagewerk');
INSERT INTO buch2 VALUES ('00004', 'Grundlagen');
INSERT INTO buch2 VALUES ('00004', 'Programmierung');
INSERT INTO buch2 VALUES ('00004', 'Algorithmierung');
INSERT INTO buch2 VALUES ('00004', 'Betriebssysteme');
INSERT INTO buch2 VALUES ('00004', 'Tabellenkalkula');
INSERT INTO buch2 VALUES ('00004', 'Datenbanken');
INSERT INTO buch2 VALUES ('00005', 'Software-Engine');
INSERT INTO buch2 VALUES ('00005', 'SQL');
INSERT INTO buch2 VALUES ('00005', 'PROLOG');
INSERT INTO buch2 VALUES ('00005', 'LISP');
INSERT INTO buch2 VALUES ('00005', 'C++');
INSERT INTO buch2 VALUES ('00005', 'Objektorientier');
INSERT INTO buch2 VALUES ('00006', 'Programmierung');
INSERT INTO buch2 VALUES ('00006', 'Tabellenkalkula');
INSERT INTO buch2 VALUES ('00006', 'Datenbanken');
INSERT INTO buch2 VALUES ('00006', 'Betriebssysteme');
DROP TABLE IF EXISTS bestand;
CREATE TABLE bestand (
T_NR varchar(255),
Reg_Nr varchar(255),
vorhanden boolean
);
INSERT INTO bestand VALUES ('00001', '00001', 0);
INSERT INTO bestand VALUES ('00001', '00002', 0);
INSERT INTO bestand VALUES ('00001', '00003', 0);
INSERT INTO bestand VALUES ('00002', '00004', 0);
INSERT INTO bestand VALUES ('00003', '00005', 0);
INSERT INTO bestand VALUES ('00003', '00006', 0);
INSERT INTO bestand VALUES ('00004', '00007', 0);
INSERT INTO bestand VALUES ('00004', '00008', 0);
INSERT INTO bestand VALUES ('00004', '00009', 0);
INSERT INTO bestand VALUES ('00004', '00010', 0);
INSERT INTO bestand VALUES ('00005', '00011', 0);
INSERT INTO bestand VALUES ('00005', '00012', 0);
INSERT INTO bestand VALUES ('00005', '00013', 0);
INSERT INTO bestand VALUES ('00006', '00014', 0);
INSERT INTO bestand VALUES ('00006', '00015', 0);
INSERT INTO bestand VALUES ('', '', 0);
DROP TABLE IF EXISTS ausleihe;
CREATE TABLE ausleihe (
L_NR varchar(255) ,
Reg_Nr varchar(255) ,
Aus_datum varchar(30)
);
INSERT INTO ausleihe VALUES ('001', '00011', '01.01.2010');
INSERT INTO ausleihe VALUES ('003', '00012', '20.03.2010');
INSERT INTO ausleihe VALUES ('010', '00002', '21.05.2009');
INSERT INTO ausleihe VALUES ('002', '00007', '11.10.2010');
INSERT INTO ausleihe VALUES ('001', '00001', '05.09.2010');
</code>
<run id="4d262a7688a21">
select *
from buch2;
select *
from ausleihe;
select *
from bestand;
</run>
Analysieren Sie die Tabellen und finden Sie die Beziehungen zwischen diesen heraus. ([[Media:Admin_Bibo.JPG|vergleiche hier]])
<br>
Nun können Abfragen formuliert werden, z.B.:
1. Welche Bücher beinhalten Ausführungen zu der Programmiersprache LISP?
2. Welche Bücher (T_Nr, Titel, Verlag) hat der Leser mit der L_Nr '001' wann ausgeliehen?
<run id="4d262a7688e1">
SELECT buch2.Schlagwort, buch1.Titel, buch1.Verlag, buch1.Jahr
FROM buch1, buch2
WHERE buch1.T_NR = buch2.T_NR and ((buch2.Schlagwort)='LISP');
select buch1.T_Nr, Titel, Verlag, Aus_datum
from leser, ausleihe, bestand, buch1
where leser.L_NR=ausleihe.L_NR and ausleihe.reg_nr=bestand.reg_nr and bestand.T_nr=buch1.T_Nr and leser.L_Nr='001';
</run>