Änderung der Tabellen

Inhaltsübersicht

 

Änderung der Tabellen. 1

9      Änderung der Tabellen. 1

9.1       Die INSERT-Anweisung. 1

9.1.1        Einfügen einer Reihe. 2

9.1.2        Einfügen mehrerer Reihen. 4

9.2       Die UPDATE-Anweisung. 7

9.3       Die DELETE-Anweisung. 9

Aufgaben. 10

  

          

 

9      Änderung der Tabellen

 

 

         In  diesem Kapitel  werden die  übrigen drei SQL-Anweisungen,

         die  zur Datenmanipulation  gehören, vorgestellt.  Mit diesen

         Anweisungen können  die Datenwerte  eingefügt,  geändert  und

         gelöscht werden. Es handelt sich um:

 

                         - INSERT,

                         - UPDATE    und

                         - DELETE.

 

Zurück zum Inhaltsverzeichnis

 

 

 

9.1        Die INSERT-Anweisung

 

 

         Mit  der   INSERT-Anweisung  können  Reihen  oder  Teile  von

         Reihen in  einer bestehenden  Tabelle eingefügt werden. Dabei

         existieren zwei unterschiedliche Formen:

 

             (1)     INSERT INTO tab [(spalte_1,...)]

                          VALUES (wert_1,...);

 

 

             (2)     INSERT INTO tab [(spalte_1,...)]

                           select_anw;

 

         Mit  der ersten Form der INSERT-Anweisung werden eine einzige

         Reihe oder  Teile einer  Reihe in  der Tabelle tab eingefügt.

         Mit  der  zweiten  Form  werden  mehrere  Reihen  oder  Teile

         mehrerer Reihen mit Hilfe einer SELECT-Anweisung gleichzeitig

         in der Tabelle tab eingefügt.

 

         Für  beide   Formen  der  INSERT-Anweisung  gilt,  daß  jeder

         eingefügte  Datenwert   denselben  Datentyp  wie  die  Spalte

         haben  muß, in  der  er  eingefügt  wird.  Dabei  sollen  die

         alphanumerischen  Werte und die Datums- und Zeitangaben immer

         in  Apostrophen eingeschlossen werden, während man numerische

         Werte ohne Apostrophe schreiben kann.

 

Zurück zum Inhaltsverzeichnis

 

 

 

9.1.1     Einfügen einer Reihe

 

 

         Bei der  ersten Form  der INSERT-Anweisung  ist die explizite

         Angabe  der Spaltenliste  optional. Falls  alle Spalten einer

         Tabelle  eingefügt werden  sollen, kann  auf die  Angabe  der

         Liste verzichtet werden.

 

         In den  folgenden vier  Beispielen werden  die  Reihen  aller

         Tabellen   der  Beispieldatenbank   eingefügt.   Damit   wird

         gleichzeitig  die Möglichkeit  aufgezeigt, die  Reihen  einer

         Datenbank zu laden.

 

         Beispiel 9.1

 

         Laden Sie alle Reihen der Tabelle arbeiten.

 

          INSERT INTO arbeiten VALUES

            (10102,'p1','Projektleiter','01-oct-1988');

          INSERT INTO arbeiten VALUES

            (10102,'p3','Gruppenleiter','01-jan-1989');

          INSERT INTO arbeiten VALUES

            (25348,'p2','Sachbearbeiter','15-feb-1988');

          INSERT INTO arbeiten VALUES

            (18316,'p2',NULL,'01-jun-1989');

          INSERT INTO arbeiten VALUES

            (29346,'p2',NULL,'15-dec-1987');

          INSERT INTO arbeiten VALUES

            (2581,'p3','Projektleiter','15-oct-1989');

          INSERT INTO arbeiten VALUES

            (9031,'p1','Gruppenleiter','15-apr-1989');

          INSERT INTO arbeiten VALUES

            (28559,'p1',NULL,'01-aug-1988');

          INSERT INTO arbeiten VALUES

            (28559,'p2','Sachbearbeiter','01-feb-1988');

          INSERT INTO arbeiten VALUES

            (9031,'p3','Sachbearbeiter','15-nov-1988');

          INSERT INTO arbeiten VALUES

            (29346,'p1','Sachbearbeiter','01-apr-1989');

 

 

         Beispiel 9.2

 

         Laden Sie alle Reihen der Tabelle projekt.

 

          INSERT INTO projekt VALUES('p1','Apollo',120000.0);

          INSERT INTO projekt VALUES('p2','Gemini',95000.0);

          INSERT INTO projekt VALUES('p3','Merkur',186500.0);

 

         Beispiel 9.3

 

         Laden Sie alle Reihen der Tabelle abteilung.

 

          INSERT INTO abteilung VALUES('a1','Beratung','Muenchen');

          INSERT INTO abteilung VALUES('a2','Diagnose','Muenchen');

          INSERT INTO abteilung VALUES('a3','Freigabe','Stuttgart');

 

         Beispiel 9.4

 

         Laden Sie alle Reihen der Tabelle mitarbeiter.

 

         INSERT INTO mitarbeiter VALUES(25348,'Keller','Hans','a3');

         INSERT INTO mitarbeiter VALUES(10102,'Huber','Petra','a3');

         INSERT INTO mitarbeiter VALUES(18316,'Mueller','Gabriele','a1');

         INSERT INTO mitarbeiter VALUES(29346,'Probst','Andreas','a2');

         INSERT INTO mitarbeiter VALUES(9031,'Meier','Rainer','a2');

         INSERT INTO mitarbeiter VALUES(2581,'Kaufmann','Brigitte','a2');

         INSERT INTO mitarbeiter VALUES(28559,'Mozer','Sibille','a1');

 

         Falls  wir  die Datenwerte eines neuen Mitarbeiters der Firma

         einfügen wollen, kann dies auf verschiedene Weise geschehen.

 

         Beispiel 9.5

 

                 INSERT INTO mitarbeiter

                    VALUES(15201,'Lang','Viktor',NULL);

 

         Diese  INSERT-Anweisung   entspricht  in   ihrer   Form   den

         INSERT-Anweisungen  in den  Beispielen 9.1  -  9.4.  Wie  aus

         den Beispielen  9.1 und  9.5 ersichtlich,  können  NULL-Werte

         durch die explizite Angabe des Schlüsselwortes NULL eingefügt

         werden.

 

         Falls  nur ein  Teil der  Datenwerte  einer  Reihe  eingefügt

         werden soll,  muß die  Liste der  Spalten explizit  angegeben

         werden.   Dabei  dürfen  in  der  Liste  nur  solche  Spalten

         ausgelassen  werden,   die  die  NULL-Werte  erlauben.  Jeder

         fehlenden  Spalte in  der Liste  wird implizit  der NULL-Wert

         zugewiesen.

 

         Beispiel 9.6

 

                 INSERT INTO mitarbeiter (m_nr, m_name, m_vorname)

                    VALUES (15201,'Lang','Viktor');

 

         Beispiel 9.6  entspricht dem  Beispiel 9.5. Die Spalte abt_nr

         ist  die  einzige  Spalte  der  Tabelle  mitarbeiter,  welche

         NULL-Werte erlaubt. (Alle drei anderen Spalten dieser Tabelle

         sind  in der  CREATE TABLE-Anweisung  mit der Angabe NOT NULL

         erstellt  worden.)  Falls  eine Spalte,  die keine NULL-Werte

         erlaubt,  in der Liste der Spalten ausgelassen wird, wird vom

         System ein Fehler gemeldet.

 

         Die Reihenfolge  der  Spalten  in  der  INSERT-Anweisung  muß

         nicht unbedingt  der Reihenfolge  der Spalten  in der  CREATE

         TABLE-Anweisung  entsprechen. In diesem Fall ist es unbedingt

         notwendig,   die  Liste   der  Spalten   explizit  anzugeben,

         ungeachtet dessen  ob eine  ganze Reihe  oder ein  Teil einer

         Reihe eingefügt werden soll.

 

         Beispiel 9.7

 

             INSERT INTO mitarbeiter (m_name, m_vorname, abt_nr, m_nr)

                    VALUES ('Lotter', 'Wolfgang', 'a1', 8413);

 

Zurück zum Inhaltsverzeichnis

 

 

 

9.1.2     Einfügen mehrerer Reihen

 

 

         Mit  der  zweiten Form der INSERT-Anweisung werden die Reihen

         einer  existierenden Tabelle ausgewählt und in einer  anderen

         Tabelle eingefügt.

 

         Beispiel 9.8

 

         Erstellen   Sie  die   Tabelle  aller   Abteilungen,  die  in

         München  ihren Standort  haben, und  laden Sie  sie  mit  den

         entsprechenden Reihen aus der Tabelle abteilung.

 

                   CREATE TABLE muench_abt

                       (abt_nr CHAR(4) NOT NULL,

                        abt_name CHAR(20) NOT NULL);

 

                   INSERT INTO muench_abt(abt_nr, abt_name)

                          SELECT abt_nr, abt_name

                             FROM abteilung

                             WHERE stadt = 'Muenchen';

 

         Die neue  Tabelle muench_abt  hat dieselben  Spalten wie  die

         Tabelle abteilung, abgesehen  von der  Spalte stadt. Mit der

         SELECT-Anweisung werden  alle Reihen  der  Tabelle  abteilung

         ausgewählt,  deren Spalte stadt den  Datenwert Muenchen hat.

         Diese  Reihen werden  anschließend in  der Tabelle muench_abt

         eingefügt.

 

         Die Reihen der Tabelle muench_abt können mit der Anweisung:

 

                        SELECT * FROM muench_abt;

 

         ausgewählt werden. Das Ergebnis dieser Anweisung ist:

 

        

abt_nr

abt_name

a1    

Beratung            

a2    

Diagnose            

                                    

         (2 rows)

 

         Beispiel 9.9

 

         Erstellen  Sie eine  Tabelle  aller  Sachbearbeiter,  die  im

         Projekt p2 arbeiten, und laden Sie sie mit den entsprechenden

         Reihen aus der Tabelle arbeiten.

 

                   CREATE TABLE sach_arb

                        (m_nr  INTEGER NOT NULL,

                         pr_nr CHAR(4) NOT NULL,

                         einst_dat DATE);

 

                   INSERT INTO sach_arb(m_nr, pr_nr, einst_dat)

                       SELECT m_nr, pr_nr, einst_dat

                          FROM arbeiten

                          WHERE aufgabe = 'Sachbearbeiter'

                          AND pr_nr = 'p2';

 

         Die Tabelle sach_arb enthält nun folgende Reihen

 

        

m_nr     

pr_nr

einst_dat     

25348

p2   

15-feb 1989   

28559

p2   

01-feb-1989   

                                          

           (2 rows)

 

         In  den Beispielen  9.8 und  9.9 waren  die  beiden  Tabellen

         muench_abt   und  sach_arb   leer,  bevor   die  Reihen   mit

         der  INSERT-Anweisung  eingefügt   wurden.  Dies   muß  nicht

         grundsätzlich der  Fall sein.  Ist eine  Tabelle nicht  leer,

         werden die Reihen mit der INSERT-Anweisung immer angefügt.

 

         Mit  Hilfe der INSERT-Anweisung ist es möglich, die Spalte(n)

         einer Tabelle  zu löschen.  Das folgende Beispiel zeigt diese

         Anwendung  der INSERT-Anweisung,  die für INGRES wichtig ist,

         weil  INGRES-SQL die  -nderung des  Tabellenschemas mit Hilfe

         der ALTER TABLE-Anweisung nicht unterstützt.

 

         Beispiel 9.10

 

         Löschen Sie die Spalte einst_dat in der Tabelle arbeiten.

 

 

           CREATE TABLE arb_hilf

             (m_nr INTEGER NOT NULL,

              pr_nr CHAR(4) NOT NULL,

              aufgabe CHAR(15));

 

           INSERT INTO arb_hilf(m_nr, pr_nr, aufgabe)

              SELECT m_nr, pr_nr, aufgabe

                 FROM arbeiten;

 

           DROP TABLE arbeiten;

 

           CREATE TABLE arbeiten

             (m_nr INTEGER NOT NULL,

              pr_nr CHAR(4) NOT NULL,

              aufgabe CHAR(15));

 

           INSERT INTO arbeiten

              SELECT *

              FROM arb_hilf;

 

           DROP TABLE arb_hilf;

 

         In Beispiel  9.10 wurde  zunächst eine  Hilfstabelle arb_hilf

         erstellt,  die,   abgesehen  von  der  zu  löschenden  Spalte

         einst_dat mit  der Tabelle  arbeiten identisch  ist. Mit  der

         ersten INSERT-Anweisung werden die Datenwerte aus der Tabelle

         arbeiten  in der  Tabelle  arb_hilf  eingefügt.  Die  Tabelle

         arbeiten  wird danach  gelöscht  und  noch  einmal  erstellt,

         nun  jedoch ohne  die Spalte  einst_dat. Am  Ende werden  die

         Datenwerte  aus der Hilfstabelle in der neuerstellten Tabelle

         arbeiten eingefügt, und die Hilfstabelle wird gelöscht.

 

         Das    Einfügen   der   Reihen   eines   Views   kann   nicht

         uneingeschränkt  durchgeführt werden.  Diesem Thema  ist  ein

         Abschnitt des Kapitels 10 gewidmet.

 

Zurück zum Inhaltsverzeichnis

 

 

 

9.2        Die UPDATE-Anweisung

 

 

         Die  UPDATE-Anweisung  ändert die Datenwerte der Reihen einer

         Tabelle. Diese Anweisung hat folgende Form:

 

              UPDATE tab

                 SET spalte_1=ausdr_1 [,spalte_2=ausdr_2,...]

                 [WHERE bedingung];

 

         Bei  der  UPDATE-Anweisung  werden  die  Reihen  der  Tabelle

         tab  auf Grund  der Bedingung  in der  WHERE-Klausel zunächst

         ausgewählt.  Danach   wird  der   Spalte  spalte_1  der  Wert

         ausdr_1 zugewiesen.  Falls mehrere Spalten in der SET-Klausel

         angegeben sind,  wird jeder  von ihnen der entsprechende Wert

         zugewiesen.  ausdr_1 kann  eine Konstante  oder ein  Ausdruck

         sein.  Die Angabe  der WHERE-Klausel  ist optional. Falls sie

         ausgelassen wird, werden alle Reihen der Tabelle geändert.

 

         Mit  einer  UPDATE-Anweisung  kann  nur eine Tabelle geändert

         werden.

 

         Das  -ndern der  Reihen eines Views entspricht dem -ndern der

         Reihen  einer Basistabelle.  Im Unterschied  zu Basistabellen

         ist  das  -ndern  der  Reihen  bei  Views  nur  eingeschränkt

         möglich. In Kapitel 11 wird dies ausführlich behandelt.

 

         Beispiel 9.11

 

         -ndern   Sie   die   Aufgabe   des   Mitarbeiters   mit   der

         Personalnummer 18316  im Projekt  p2. Er  soll  Gruppenleiter

         dieses Projektes werden.

 

                   UPDATE arbeiten

                      SET aufgabe = 'Gruppenleiter'

                      WHERE m_nr = 18316

                      AND   pr_nr = 'p2';

 

         Mit dieser  UPDATE-Anweisung wird  nur eine Reihe der Tabelle

         arbeiten  geändert, weil  die Kombination  beider Bedingungen

         mit den  Spalten m_nr  und pr_nr  immer nur  eine  Reihe  als

         Ergebnis  liefert.  Im  obigen  Beispiel  wurde  die  Aufgabe

         des  Mitarbeiters, die  bis dahin  unbekannt war (NULL-Wert),

         definiert.

 

         Im  nächsten  Beispiel  wird den Datenwerten einer Spalte ein

         Ausdruck zugewiesen.

 

         Beispiel 9.12

 

         Die  Finanzmittel  aller  Projekte  sollen  geändert  und  in

         Schweizer Franken dargestellt  werden.  (Der  augenblickliche

         Währungskurs soll bei 0,89 SFR für 1 DM sein.)

 

                   UPDATE projekt

                      SET mittel = mittel * 0.89;

 

         In  Beispiel 9.12  werden alle  Reihen  der  Tabelle  projekt

         geändert, weil die WHERE-Klausel fehlt. Die geänderten Reihen

         der Tabelle projekt können mit der folgenden Anweisung

 

                        SELECT *

                           FROM projekt

 

         ausgewählt werden. Das Ergebnis dieser Anweisung ist

 

        

pr_nr

pr_name                 

mittel        

p1   

Apollo                    

106800.000 

p2   

Gemini                     

84550.000 

p3   

Merkur                    

165985.000 

                                                      

         (3 rows)

 

         Beispiel 9.13

 

         Die Aufgaben von Frau Huber sollen, wegen längerer Krankheit,

         in allen Projekten auf NULL gesetzt werden.

 

                   UPDATE arbeiten

                      SET aufgabe = NULL

                      WHERE m_nr =

                      (SELECT m_nr

                          FROM mitarbeiter

                          WHERE m_name = 'Huber');

 

         Im  obigen  Beispiel beinhaltet die WHERE-Klausel der

         UPDATEAnweisung

                   eine Unterabfrage. Das Ergebnis dieser Unterabfrage

         darf in diesem Fall nur einen Datenwert liefern.

 

Zurück zum Inhaltsverzeichnis

 

 

 

9.3        Die DELETE-Anweisung

 

 

         Mit der  DELETE-Anweisung werden  Reihen  aus  einer  Tabelle

         gelöscht. Die allgemeine Form dieser Anweisung ist:

 

                        DELETE FROM tab

                            [WHERE bedingung];

 

         Die  WHERE-Klausel  liefert die Reihen, die aus einer Tabelle

         gelöscht  werden.  Die explizite Angabe von Spalten in  einer

         DELETE-Anweisung  ist  nicht  notwendig, weil alle Datenwerte

         einer oder mehrerer Reihen gelöscht werden.

 

         Beispiel 9.14

 

         Löschen Sie die Datenwerte der Gruppenleiter aller Projekte.

 

                   DELETE FROM arbeiten

                        WHERE aufgabe = 'Gruppenleiter';

 

         Die  WHERE-Klausel  in der DELETE-Anweisung kann, wie bei der

         UPDATE-Anweisung auch, eine Unterabfrage enthalten.

 

         Beispiel 9.15

 

         Die Mitarbeiterin  namens Mozer  scheidet aus  der Firma aus.

         Löschen  Sie zunächst  alle Reihen  in der  Tabelle arbeiten,

         die  diese  Mitarbeiterin  betreffen,  und  danach  auch  die

         entsprechende Reihe der Tabelle mitarbeiter.

 

                       DELETE FROM arbeiten

                          WHERE m_nr =

                          (SELECT m_nr

                              FROM mitarbeiter

                              WHERE m_name = 'Mozer');

 

                       DELETE FROM mitarbeiter

                          WHERE m_name = 'Mozer';

 

 

         Die Angabe  der WHERE-Klausel  in  der  DELETE-Anweisung  ist

         optional. Ist  diese Klausel  nicht  angegeben,  werden  alle

         Reihen einer Tabelle gelöscht.

 

         Beispiel 9.16

 

         Löschen Sie alle Reihen der Tabelle arbeiten.

 

                       DELETE FROM arbeiten;

 

         Das  Löschen   der  Reihen   eines   Views   kann   nur   mit

         Einschränkungen  ausgeführt werden.  In Kapitel  11 wird  das

         Löschen der Reihen eines Views beschrieben.

 

         Hinweis.

         Die  DELETE-Anweisung  unterscheidet sich von der DROP

         TABLEAnweisung

                   dadurch,  daß sie alle Reihen einer Tabelle löscht,

         während die DROP TABLE-Anweisung  sowohl alle Reihen als auch

         die Tabellen- und Spaltenspezifikation einer Tabelle löscht.

 

Zurück zum Inhaltsverzeichnis

 

 

 

Aufgaben

 

A.9.1   Erstellen Sie eine neue Tabelle aller Mitarbeiter, die in

             den Projekten a1 und a2 arbeiten, und laden Sie sie mit

             den entsprechenden Reihen der Tabelle mitarbeiter.

 

A.9.2   Erstellen Sie eine neue Tabelle aller Mitarbeiter, die im

             Jahr 1989 eingestellt worden sind, und laden Sie sie mit

             den entsprechenden Reihen aus der Tabelle mitarbeiter.

 

A.9.3   Ändern  Sie  die  Aufgabe  aller Gruppenleiter in Projekt

             p1. Sie sollen ab sofort als Sachbearbeiter tätig sein.

 

A.9.4   Die Mittel aller Projekte  sind  bis  auf weiteres nicht

             festgelegt. Weisen Sie den Mitteln den NULL-Wert zu.

 

A.9.5   Ändern  Sie die Aufgabe der Mitarbeiterin  mit  der

             Personalnummer  28559. Sie soll ab sofort  in allen

             Projekten Gruppenleiterin werden.

 

A.9.6   Löschen Sie alle Reihen der Tabelle abteilung, deren

             Standort München ist.

 

A.9.7   Das Projekt p3 ist  beendet worden. Löschen Sie  zunächst

             alle  Daten  der  Mitarbeiter in der Tabelle mitarbeiter,

             die in diesem  Projekt  gearbeitet haben, und danach auch

             die entsprechende Reihe der Tabelle projekt.

 

Zurück zum Inhaltsverzeichnis