EGE/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)
  );

=== Tabellenstruktur verändern ===
Neue Spalte einfügen:
  ALTER TABLE tbl_name
    ADD spalte_neu datentyp [NOT NULL | AUTO_INCREMENT | ...];

Vorhandene Spalte löschen:
  ALTER TABLE tbl_name
    DROP spalte_xy;

Primärschlüssel anfügen (nicht zum Ändern des alten Schlüssels geeignet):
  ALTER TABLE tbl_name
    ADD PRIMARY KEY (spalte1, spalte2, ...);

Primärschlüssel löschen:
  ALTER TABLE tbl_name
    DROP PRIMARY KEY;

=== 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="5bc9d8c588753">
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="5bc9d8c5887ea" 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]

[[Bild:Mschubert_Personaldb.png]]

'''DDL-Übungen'''

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). [Geht nicht mehr - DROP Spalte ist auf dieser Webseite leider verboten]

4. Da bei ''mitarbeiter'' die Spalten ''MGehalt'' und ''ANr'' fehlen, 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.

'''DML-Übungen'''

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.

arbeitet_an_P
{| align="center" border=1
|-
|'''PNr'''
|'''MNr'''
|-
|1010
|17
|-
|1010
|18
|-
|2010
|19
|}

Abteilung
{| align="center" border=1
|-
|'''ANr'''
|'''AName'''
|'''ABudget'''
|-
|12
|Produktion
|25 000 000
|-
|15
|Forschung
|2 000 000
|-
|20
|Personal
|250 000
|}

Projekt
{| align="center" border=1
|-
|'''PNr'''
|'''PName'''
|'''PBudget'''
|-
|1010
|Messeauftritt
|5 150,50
|-
|2010
|Rationalisierung
|15 500
|}

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';

[Quelle: Jens Schuster]

10. Geben Sie einen DELETE-Befehl an, welcher den Datensatz des Projekts ''Messeauftritt'' löscht. Welche Auswirkungen hat dieser Befehl auf die bestehende Datenbank?

<run id="5bc9d8c58887e">CREATE TABLE abteilung (
    Name VARCHAR(25),
  );
SELECT * FROM abteilung;</run>