LKG/Inf 11 2011/SQL-Befehle
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
== Datenbank erstellen (DDL = Data Definition Language) ==
Befehle zur Definition von Datenbanken und Tabellen.
=== DATABASE/TABLE erstellen ===
Zunächst muss man eine Datenbank mit Namen erstellen, in welche später die einzelnen Entitäten gespeichert werden:
CREATE DATABASE [IF NOT EXISTS] db_name;
(im Programmingwiki ist dies nicht nötig)
Erzeugen einer neuen Entität in einer vorhandenen Datenbank:
CREATE TABLE [IF NOT EXISTS] tbl_name (
spalte_xdatentyp [NOT NULL | AUTO_INCREMENT | ...],
spalte_y datentyp [NOT NULL | AUTO_INCREMENT | ...],
...,
PRIMARY KEY (spalte_x, spalte_y, ...)
);
* NULL-Werte sind leere Werte
* NOT NULL (keine NULL-Werte in dieser Spalte)
* DEFAULT (Standardwert, wenn kein Wert angegeben wird)
* AUTO_INCREMENT (automatische Erhöhung der Integerzahl bei neuen Datensätzen)
Beispiel:
CREATE TABLE schueler (
SNr INTEGER NOT NULL AUTO_INCREMENT,
Name VARCHAR(25),
Vorname VARCHAR(25),
Geb_Dat DATE,
PRIMARY KEY (SNr)
);
=== DATABASE / TABLE löschen ===
Löschen einer Datenbank oder Tabelle.
DROP DATABASE [IF EXISTS] db_name;
DROP TABLE [IF EXISTS] tbl_name;
[Quelle: Jens Schuster]
Beispiel:
<code id="50c8f7a1c17a2">DROP TABLE mitarbeiter IF EXISTS;
CREATE TABLE mitarbeiter (
MNr integer NOT NULL,
Mpersnr integer DEFAULT NULL,
Manrede varchar(255) DEFAULT NULL,
MVorname varchar(255) DEFAULT NULL,
MName varchar(255) DEFAULT NULL,
Makad_grad varchar(255) DEFAULT NULL,
Mstrnr varchar(255) DEFAULT NULL,
Mplz varchar(5) DEFAULT NULL,
Mort varchar(255) DEFAULT NULL,
MGebDat date DEFAULT NULL,
Meinstdat date DEFAULT NULL,
MfirmaID varchar(255) DEFAULT NULL,
Mbemerkungen varchar(255),
Mptelefon varchar(255) DEFAULT NULL,
PRIMARY KEY (MNr)
);</code>
== Datenbank verändern (DML = Data Manipulation Language) ==
'''INSERT - Einfügen von Datensätzen'''
INSERT INTO tbl_name
(spalte1, spalte2, ...)
VALUES
(wert1, wert2, ...);
Wird eine Spalte nicht angegeben, dann erhält diese einen NULL-Wert.
Beispiel:
INSERT INTO schueler
(SNr, Name, Geb_Dat)
VALUES
(201, 'Müller', '1962-10-25');
'''UPDATE - Datensätze ändern'''
UPDATE tbl_name
SET
spalte1 = neuer_wert
[WHERE
spalte_x = wert_y];
Der WHERE-Teil ist optional, wenn er aber fehlt, wird jedem Datensatz der Spalte der gleiche Wert zugeordnet.
Beispiel:
UPDATE schueler
SET
Name = 'Mustermann',
Vorname = 'Manfred'
WHERE
SNr = 102;
'''DELETE - Datensätze löschen'''
DELETE FROM tbl_name
[WHERE
spalte_x = wert_y];
Der WHERE-Teil ist optional, wenn er aber fehlt, wird der Inhalt der gesamten Tabelle gelöscht.
Beispiel:
DELETE FROM schueler
WHERE
SNr = 102;
=== Abfragen mit SELECT ===
SELECT [DISTINCT | ALL]
<spaltenliste> | *
FROM <tabellenliste>
[WHERE <bedingungen>]
[GROUP BY <spaltenliste>]
[HAVING <bedingungen>]
[UNION <select-ausdruck>]
[ORDER BY <spaltenliste>];
<code id="50c8f7a1c1827" hidden>INSERT INTO mitarbeiter (MNr, Mpersnr, Manrede, MVorname, MName, Makad_grad, Mstrnr, Mplz, Mort, MGebDat, Meinstdat, MfirmaID, Mbemerkungen, Mptelefon) VALUES
(67, 112, 'Frau', 'Carmen', 'Schroeder', NULL, NULL, '2708', 'Loebau', '1972-07-03', '1997-12-01', NULL, 'Arbeitsamt Ast. Loebau', '03588-604524'),
(66, 111, 'Frau', 'Christa', 'Schmiegelt', NULL, 'Wilthener Str. 24', '2625', 'Bautzen', '1949-07-13', '1997-11-03', NULL, '', '03591-83645'),
(64, 109, 'Frau', 'Karin', 'Miertschin', NULL, 'Welkaer-Str.8', '2627', 'Purschwitz', '1960-04-07', '1997-10-01', NULL, '', '03591-307014'),
(62, 107, 'Frau', 'Anita', 'Weiland', NULL, 'W.-Ostwald-Str. 29', '2625', 'Kleinwelka', '1938-10-20', NULL, NULL, '', '03591-41274'),
(61, 106, 'Frau', 'Romy', 'Krauss', NULL, 'Vorsteher der ABX NY', '2625', 'Bautzen', '1942-10-03', NULL, NULL, '', '03591-5143'),
(59, 104, 'Frau', 'Margitta', 'Rienecker', NULL, 'Th.-Muentzer-Str. 15c', '2625', 'Kleinwelka', '1952-09-25', NULL, NULL, '', '035894-300004'),
(56, 101, 'Frau', 'Ines', 'Klatte', NULL, 'Steigerstrasse 32', '2923', 'Horka', '1951-03-01', NULL, NULL, '', '035876-41842'),
(52, 95, 'Frau', 'Renate', 'Stipic', NULL, 'Paul-Neck-Str. 32', '2827', 'Goerlitz', '1974-08-16', '1997-07-11', NULL, '', NULL),
(51, 91, 'Frau', 'Christa', 'Garve', NULL, 'Parkweg 20', '2923', 'Horka', '1953-06-18', NULL, NULL, 'Vorsteher der ABX Niesky', '03591-210396'),
(47, 84, 'Frau', 'Christine', 'Badermann', 'Dipl.-Ing.', 'Nr. 5', '2906', 'Niesky', '1949-10-27', '1997-04-21', '1', '', NULL),
(46, 82, 'Frau', 'Barbara', 'Rohloff', NULL, 'Nr. 29', '1917', 'Kamenz', '1964-08-05', '1997-04-10', NULL, 'Handy: 0177 - 2 50 76 67', '03591 609562'),
(43, 75, 'Frau', 'Yvonne', 'Flakowski', NULL, 'Nieskyer Str. 31', '2625', 'Bautzen', '1944-02-12', NULL, NULL, '', '03591-24680'),
(31, 61, 'Frau', 'Jutta', 'Wolfram', NULL, 'K.-Kollwitz-Str. 18', '2923', 'Horka', '1953-10-30', '1997-01-01', NULL, '', '03591-47375'),
(30, 59, 'Frau', 'Heike', 'Bauschke', NULL, 'Jauernicker Str. 37', '2923', 'Zedlig', '1950-04-19', '1996-11-01', NULL, '', '03581-4045729'),
(29, 56, 'Herr', 'Herbert', 'Kluge', NULL, 'J.-Gagarin-Strasse 24', '2627', 'Kotitz', '1971-08-28', '1996-09-01', NULL, '', '035891-72255'),
(27, 51, 'Herr', 'Bernd', 'Kleinau', NULL, 'Goerlitzer Str. 103', '2625', 'Bautzen', '1940-05-09', '1996-09-01', NULL, '', '03591-32222'),
(25, 46, 'Herr', 'Peter', 'Leichsenring', NULL, 'Fr.-Ebert-Str. 28', '2625', 'Bautzen', '1952-09-29', NULL, NULL, '', '03591-3181'),
(23, 31, 'Herr', 'Detlef', 'Loeser', NULL, 'F.-J.-Curie-Str.9', '2625', 'Bautzen', '1954-08-03', '1996-02-06', NULL, '', '03591-362582'),
(21, 29, 'Herr', 'Manfred', 'Kaehlig', NULL, 'Erich-Pfaff-Str. 27', '2929', 'Lodenau', '2000-05-09', '1995-12-07', '1', '', '03591-335491'),
(20, 27, 'Herr', 'Thomas', 'Herzog', NULL, 'Erich-Pfaff-Str. 19', '2923', 'Haehnichen', '1940-09-06', '1995-11-15', NULL, '', '03591-6727064'),
(19, 25, 'Herr', 'Roland', 'Noack', 'Dr.Ing.', 'Erich-Pfaff-Str. 19', '2923', 'Biehain', '1975-01-31', '1995-11-15', '2', 'ABX Niesky', '035893-6459'),
(18, 23, 'Herr', 'Burkhard', 'Mai', NULL, 'E.-Weinert-Str. 3', '2625', 'Bautzen', '1952-10-06', '1994-07-11', '2', '', '03591-698008'),
(17, 21, 'Herr', 'Juergen', 'Grund', NULL, 'Dresdener Str. 15 A', '2625', 'Bautzen', '1964-06-19', '1995-06-14', '2', '', '03591-656743'),
(16, 20, 'Herr', 'Peter', 'Mieth', NULL, 'Dr.-Salv. Allende-Str. 53', '2625', 'Bautzen', '1960-08-15', '1995-04-10', '2', '', '03591-48756'),
(15, 19, 'Herr', 'Ehrhard', 'Kurz', NULL, 'Dorfstrasse 9', '2906', 'Quitzdorf am See OT Horscha', '1947-02-16', '1994-07-18', '1', '', '035935-26435'),
(14, 18, 'Herr', 'Peter', 'Dazkewitz', NULL, 'Dorfstrasse 6', '2625', 'Bautzen', '1950-09-06', '1994-07-18', '2', '', '03591-334997'),
(13, 17, 'Herr', 'Steffen', 'Wild', NULL, 'ABX Niesky', '2625', 'Bautzen', '1959-11-06', '1994-04-05', '2', '', '03591-556523'),
(12, 16, 'Herr', 'Wolfgang', 'Gimmler', NULL, 'ABX Niesky', '2625', 'Bautzen', '1952-04-06', '1994-04-27', '2', '', '03591-6085'),
(11, 15, 'Herr', 'Holger', 'Hartmann', NULL, 'ABX Niesky', '2627', 'Kleinwelka', '1956-11-01', '1994-04-01', '1', '', '03591-256908'),
(10, 14, 'Herr', 'Horst', 'Hogau', NULL, 'Briesnitzer Str. 19', '2625', 'Bautzen', '1957-10-23', '1994-06-01', '2', '', '03591-28976'),
(9, 13, 'Herr', 'Joachim', 'Schwaer', NULL, 'Boehmische Str. 40', '2625', 'Bautzen', '1966-01-12', '1995-05-02', '2', '', '03591-41432'),
(8, 12, 'Herr', 'Matthias', 'Kunte', NULL, 'Bierweg 8a', '2906', 'Petershain (bei Mitschke)', '1974-09-11', '1996-04-01', '1', '', '03591-306887'),
(6, 10, 'Herr', 'Harald', 'Weiland', NULL, 'Bachweg 2', '2625', 'Bautzen', '1940-02-13', '1996-05-01', '2', '', '03591-453482'),
(5, 9, 'Herr', 'Bernd', 'Hering', NULL, 'August-Bebel-Str. 15', '2627', 'Weissenberg', '2000-03-02', '1995-04-01', '1', '', '03592-34899'),
(2, 5, 'Herr', 'Hartmut', 'Jausch', NULL, 'Am Gleisdreieck 4', '2681', 'Wilthen', '1961-04-25', '1996-06-19', '2', 'Unterhaltsreiniger/Glasreiniger/Umweltarbeiter', '03592-306677'),
(68, 113, 'Frau', 'Simone', 'Zetzmann', NULL, NULL, '2923', 'Horka', '1944-02-02', '1998-01-01', NULL, '', '03591 - 605045'),
(69, 114, 'Frau', 'Monika', 'Reimer', NULL, NULL, '2923', 'Horka', '1960-03-24', '1998-01-01', NULL, 'Gemeindeverwaltung Horka', '0371-4904140'),
(70, 115, 'Frau', 'Manuela', 'Kopke', NULL, NULL, '2823', 'Mueckenhain', '1953-12-04', '1998-01-01', NULL, 'GV Horka, GS Mueckenhain', '03588-264104'),
(71, 116, 'Frau', 'Renate', 'Scheer', NULL, NULL, '2708', 'Loebau', '1946-05-26', '1998-01-15', NULL, '', '03588-264109'),
(72, 117, 'Frau', 'Regina', 'Synde', NULL, NULL, '2826', 'Goerlitz', '1948-07-20', NULL, NULL, '', NULL),
(73, 118, 'Frau', 'Christine', 'Wilde', NULL, NULL, '2727', 'Neugersdorf', '1961-10-05', '1998-01-12', NULL, '', '0371-4904100'),
(74, 119, 'Frau', 'Helga', 'Kretschmar', NULL, NULL, '2763', 'Zittau', '1942-01-03', '1998-02-02', NULL, 'AA-Ast. Zittau', '03521-451434'),
(75, 120, 'Frau', 'Ramona', 'Heinrich', NULL, NULL, '2923', 'Horka', '1952-12-25', '1998-02-01', NULL, 'GV Horka', '');</code>
[Quelle: http://www.mirko-hans.de/info/gk_12/sql.htm]
1. Erstellen Sie zuerst die Tabelle ''abteilung'' mit allen Spalten (sinnvolle Datentypen). Legen Sie den Primärschlüssel im gleichen CREATE-Befehl fest.
2. Testen Sie Ihre Eingaben, indem Sie den Inhalt (leer) anzeigen lassen mit "SELECT * FROM abteilung". (Achtung: Vorheriges nicht löschen)
3. Löschen Sie die Spalte ''MfirmaID'' aus der Tabelle ''mitarbeiter''. Testen Sie Ihr Ergebnis mit einer Abfrage (SELECT).
4. Da bei ''mitarbeiter'' die Spalte ANr fehlt, müssen Sie diese über einen ALTER-Befehl hinzufügen.
5. Erstellen Sie die Tabelle ''projekt'' mit allen Spalten. (Achtung: Vorheriges nicht löschen)
6. Erstellen Sie die Tabelle ''arbeitet_an_P'' mit allen Spalten. Der Primärschlüssel ist die '''Kombination''' der beiden Fremdschlüssel.
7. Verwenden Sie den INSERT-Befehl um die Datensätze in den jeweiligen Tabellen zu speichern. Beachten Sie, dass die Reihenfolge beim Erstellen eine Rolle spielt. Die Spalte ''ALeiterNr'' sollte erst einmal weggelassen werden und am Ende per UPDATE-Befehl ergänzt werden.
8. Das Gehalt aller Mitarbeiter der Gehaltsgruppe 3500€ soll auf 4000€ erhöht werden. Geben Sie einen entsprechenden UPDATE-Befehl an.
9. Beschreibe die Auswirkungen des folgenden UPDATE-Befehls. In welchen Fällen kann dieser Befehl Probleme verursachen? Wie kann man diese Probleme vermeiden?
UPDATE Mitarbeiter
SET
ANr = 15
WHERE
MName = 'Müller' AND
MVorname = 'Moritz';
<run id="50c8f7a1c18b5">(1. Aufgabe)
SELECT * FROM abteilung</run>