SQL: Erstellen von Tabellen Erzeugen und Löschen von Tabellen Umgang mit Bedingungen (Constraints) Einfügen und Löschen von Daten

Die Seite wird erstellt Sebastian Stein
 
WEITER LESEN
5. SQL: Erstellen von Tabellen

• Erzeugen und Löschen von Tabellen

• Umgang mit Bedingungen (Constraints)

• Einfügen und Löschen von Daten

Datenbanksysteme     Prof. Dr. Stephan Kleuker   106
SQL
• Structured Query Language
Historie: Anfänge ca. 1974 als SEQUEL (IBM, System R)

SQL 86 und SQL 89: Schnittmenge existierender
  Implementierungen
SQL 92 (SQL 2): z.B.
- expliziter Verbund
- Integritätsbedingungen
- referenzielle Integrität
SQL 99 (SQL 3): z.B. (Standard besteht aus 5 Teilen)
- aktive Regeln
- Stored Procedures
- objektorientierte Konzepte
SQL 2003 (SQL 4): z.B.
- MERGE- Befehl
- Nummerierungsmöglichkeiten für Zeilen
- SQL/XML Zusammenhänge
Datenbanksysteme          Prof. Dr. Stephan Kleuker     107
Anmerkungen zur Syntax

• SQL (Oracle) unterscheidet bei Befehlen, Tabellennamen und
  Attributen keine Groß- und Kleinschreibung, es bezeichnen
  z.B. CITY, city, City, cItY die gleiche Tabelle
• Innerhalb von Strings (Texten) unterscheidet SQL Groß- und
  Kleinschreibung, z.B. NAME = 'Berlin' entspricht nicht
       NAME = 'berlin'
• Strings stehen in einfachen Hochkommata (neben Ä auf der
  Tastatur)
• Kommentare werden in /* ... */ eingeschlossen, oder,
  wenn nur einzeilig, mit -- eingeleitet
• Wenn man statt Oracle eine andere DB nutzt, müssen die
  genannten Standards auf ihre Gültigkeit überprüft werden
• In Oracle werden mehrere Befehle durch ein „ ; “ getrennt

Datenbanksysteme        Prof. Dr. Stephan Kleuker              108
Tabellen nach SQL (ohne Randbedingungen)
Verkaeufer                                           Kunde
VNR     Vname       Status       Gehalt              KNR     Name   Betreuer
1001      Meier     Junior       1000                1       Olm    1001
1002      Schmidt   Senior       3000                2       Mai    1002

       CREATE TABLE Verkaeufer(
         VNR NUMBER,
         Vname VARCHAR(12),
         Status VARCHAR(10),
         Gehalt NUMBER
       );

       CREATE TABLE Kunde(
         KNR NUMBER,
         Name VARCHAR(12),
         Betreuer NUMBER
       );
Datenbanksysteme             Prof. Dr. Stephan Kleuker                         109
Einfacher Aufbau und Beispiel

CREATE TABLE (
   ,
  ...
   
)

CREATE TABLE City(
  Name VARCHAR(35),
  Country VARCHAR(4), --Länderkürzel
  Province VARCHAR(32),
  Population NUMBER,
  Longitude NUMBER,
  Latitude NUMBER
)
Datenbanksysteme    Prof. Dr. Stephan Kleuker   110
Datentypen (sehr kleiner Ausschnitt)
Standard SQL          Oracle                   Bedeutung
NUMERIC               NUMBER                   bel. Zahlen
NUMERIC(x)            NUMBER(x)                x-stellige Ganzzahl
INTEGER               INTEGER
NUMERIC(x,p)          NUMBER(x,p) x-stellige Zahl, davon p
                                               Nachkommastellen
VARCHAR(x)            VARCHAR(x)               Text mit maximal x Zeichen
                      VARCHAR2(x) Text mit maximal x Zeichen
DATE                  DATE                     speichern eines Datums
Hinweis 1: „Bevorzugte“ Oracle-Datentypen unterscheiden sich im
   Namen von „Standard“-SQL-Datentypen. In Oracle-Dokumentation
   befindet sich Mapping. In der Veranstaltung wird nur VARCHAR und
   NUMBER (später DATE) genutzt. Sollen eigene Skripte auch auf anderen
   DB laufen, sollte man zu VARCHAR und NUMERIC übergehen.
Hinweis 2: Datentyp DATE haben fast alle DB, aber meist unterschiedlich
   implementiert (auch NUMBER nicht identisch mit NUMERIC)
Datenbanksysteme             Prof. Dr. Stephan Kleuker                      111
Überblick Bedingungen (Constraints)

Mit Tabellendefinitionen können Bedingungen für
  konkrete Attributwerte formuliert werden, die bei
  Eintragungen überprüft werden

-   Wertebereichseinschränkungen
-   Wert muss angegeben werden
-   (Angabe eines Default-Wertes)
-   Angaben von Schlüsseln und Fremdschlüsseln
-   Forderungen an einzelne Tabelleneinträge
    (Datensätze) in Form von Prädikaten

Datenbanksysteme     Prof. Dr. Stephan Kleuker        112
Syntax von Tabellen mit Constraints
CREATE TABLE (
    [DEFAULT ]
      [...
              ],
  ...
    [DEFAULT ]
      [...
              ],
  []
  ...
  []
)
- Teile in eckigen Klammern können weggelassen werden
-  bezieht sich nur auf einen Spaltenwert
-  kann sich auf eine Zeile beziehen

Datenbanksysteme       Prof. Dr. Stephan Kleuker          113
Bedingungen (Constraints) (1/2)
• Syntax:
   [CONSTRAINT ] 

• Typischer Aufbau einer :
   CHECK ()

• Besondere  mit anderen Formen:
     – Primärschlüssel, Fremdschlüssel, eindeutige Attributwerte
     – Spalten-Constraints zur Angabe ob Null-Werte erlaubt sind
        • Name VARCHAR(10) NOT NULL
           • äquivalent als Tabellen-Constraint
               CHECK( Name IS NOT NULL)

Hinweis: Man kann es sich einfach machen und alle Constraints
   als Tabellen-Constraints aufschreiben

Datenbanksysteme             Prof. Dr. Stephan Kleuker          114
Beispiel

Verkaeufer                                           Kunde
VNR     Vname       Status       Gehalt              KNR     Name   Betreuer
1001      Meier     Junior       1000                1       Olm    1001
1002      Schmidt   Senior       3000                2       Mai    1002

Randbedingungen:             CREATE TABLE Verkaeufer(
• Verkaeufer-Nummer            VNR NUMBER CHECK(VNR >= 1000),
  mindestens vier-             Vname VARCHAR(12) NOT NULL,
  stellig                      Status VARCHAR(10) NOT NULL,
• Name und Status              Gehalt NUMBER,
  immer angegeben              CONSTRAINT MaxJunior CHECK
• ein „Junior“ verdient            (NOT(Status = 'Junior')
  maximal 2500                      OR Gehalt
Auswertung von Constraints
• Wenn Änderungen an
  Attributwerten durchgeführt      A B NOT A   A            NOT(A)
  oder neue Zeilen eingefügt           (A) AND OR           OR B
  werden, findet Überprüfung               B   B
  der Constraints statt            T      T     F   T   T   T
• Wird ein Constraint nach         T      F     F   F   T   F
  FALSE ausgewertet, wird die
  Änderung verworfen               T      U F       U   T   U
• Achtung !! Datenbanken           F      T     T   F   T   T
  haben eine drei-wertige          F      F     T   F   F   T
  Logik (TRUE (T), FALSE (F),      F      U T       F   U   T
  UNKNOWN (U)), findet z.B.
  eine Prüfung VNR>=1000           U T          U   U   T   T
  statt und ist der Wert von       U F          U   F   U   U
  VNR NULL, wird die               U U U            U   U   U
  Bedingung nach UNKNOWN
  ausgewertet
Datenbanksysteme        Prof. Dr. Stephan Kleuker               116
Bedingungen (Tabellen-Constraints) (2/2)
• Angabe von Primärschlüsseln (ausgewählter Schlüsselkandidat):
  PRIMARY KEY([,...,])

• Fremdschlüssel:
  FOREIGN KEY ([,...,])
  REFERENCES 
       ([,...,])
  [ON DELETE CASCADE]
   – In den Attributslisten steht, wie die Attribute in der zu
     erstellenden und in der referenzierten Tabelle heißen (diese
     müssen dort der PRIMARY KEY sein, Tabelle muss vorher
     definiert sein)
   – REFRENCES-Bedingung wird durch einen NULL-Eintrag nicht
     verletzt

• Eindeutigkeit von Attributswerten (Attributskombinationen)
  UNIQUE (([,...,])
 Datenbanksysteme         Prof. Dr. Stephan Kleuker            117
Beispiel
 Verkaeufer                                           Kunde
 VNR     Vname       Status       Gehalt              KNR     Name   Betreuer
 1001      Meier     Junior       1000                1       Olm    1001
 1002      Schmidt   Senior       3000                2       Mai    1002

Randbedingungen:          CREATE TABLE Kunde(
                            KNR NUMBER,
• KNR ist Schlüssel
                            Name VARCHAR(12)
• Kunde hat Name                CONSTRAINT Kname NOT NULL,
• Betreuer ist              Betreuer NUMBER,
  Schlüssel in              PRIMARY KEY(KNR),
  Verkäufer-Tabelle         CONSTRAINT FK_Kunde
                                FOREIGN KEY (Betreuer)
                                REFERENCES Verkaeufer(VNR)
                          );

 Datenbanksysteme             Prof. Dr. Stephan Kleuker                         118
Schlüsselkandidaten

• Ein Primary Key ist ein Schlüsselkandidat, der aus der Menge
  der Schlüsselkandidaten durch den Tabellenersteller
  ausgewählt wird
• Primary Keys sind eindeutig, dürfen keine NULL-Werte
  enthalten
• Das Beispiel erfüllt UNIQUE(Eins, Zwei), aber nicht
  UNIQUE(Eins) und nicht UNIQUE(Zwei)
• Mit UNIQUE kann man z.B. festhalten, dass          Eins   Zwei
       es Alternativen zum Primary Key gibt
                                                     a      b
• Beispiel:
   CREATE TABLE Country(                             a      NULL
       Name VARCHAR(32) NOT NULL UNIQUE,             NULL b
       Code VARCHAR(4) PRIMARY KEY,                  NULL NULL
       ...)
• Nur wenn ein Attribut Primary Key, dann als Spalten-
  Constraint formulierbar

Datenbanksysteme        Prof. Dr. Stephan Kleuker            119
Beispiel
CREATE TABLE is_member(
  Country VARCHAR(4) REFERENCES Country(Code),
  Organization VARCHAR(12)
            REFRENCES Organization(Abbreviation),
  Type VARCHAR(30),
  CONSTRAINT MemberKey
            PRIMARY KEY(Country,Organization)
)

• Anmerkungen: Hier sind die FOREIGN KEY-Constraints direkt
  den Attributen zugeordnet worden, könnten auch getrennt
  aufgeführt werden
• Aus einer Design-Entscheidung für Mondial folgt, dass es
  Attribute gibt, die wie Tabellen heißen, die sie referenzieren
  (eher ungewöhnlich, aber machbar)

Datenbanksysteme         Prof. Dr. Stephan Kleuker             120
Einfügen von Daten
• einfache Variante:
  INSERT INTO  VALUES ()
  Die  muss für jedes Attribut einen Wert
  enthalten, für undefinierte Werte wird NULL geschrieben
• mit ausgewählten Attributen:
  INSERT INTO 
       ([,...,])
       VALUES ([,...,])
  Werte werden in die ausgewählten Spalten geschrieben, Rest
  mit NULL-Werten oder DEFAULT-Werten (s. später) gefüllt
• Ergebnisse einer Anfrage:
  INSERT INTO [(attributsliste)] 
  (wird später deutlich)
• Beispiel:
  INSERT INTO Country (Name, Code, Population)
                      VALUES('Lummerland','LU',4)
Datenbanksysteme        Prof. Dr. Stephan Kleuker          121
Beispiel
Verkaeufer                                           Kunde
VNR     Vname       Status       Gehalt              KNR     Name   Betreuer
1001      Meier     Junior       1000                1       Olm    1001
1002      Schmidt   Senior       3000                2       Mai    1002

CREATE TABLE Verkaeufer( ...);
CREATE TABLE Kunde(...);

INSERT INTO Verkaeufer VALUES
(1001,'Meier','Junior',1000);
INSERT INTO Verkaeufer VALUES
(1002,'Schmidt','Senior',3000);

INSERT INTO Kunde VALUES (1,'Olm',1001);
INSERT INTO Kunde VALUES (2,'Mai',1002);

Datenbanksysteme             Prof. Dr. Stephan Kleuker                         122
Default-Werte

• Durch Default-Werte kann man darauf verzichten, einen Wert
  für ein Attribut anzugeben
• Beispiel:
   CREATE TABLE is_member(
      Country VARCHAR(4),
      Organization VARCHAR(12),
      Type VARCHAR(30) DEFAULT 'member',
      CONSTRAINT MemberKey PRIMARY KEY
       (Country,Organization)
   );
• folgende Einfügemöglichkeiten existieren:
   INSERT INTO is_member
       VALUES ('CZ','EU','membership applicant');
   INSERT INTO is_member (Country, Organization)
       VALUES('D','EU');

Datenbanksysteme        Prof. Dr. Stephan Kleuker              123
Löschen von Daten

• Mit Hilfe von DELETE können eine oder mehrere Zeilen aus
  jeweils einer Tabelle entfernt werden
  DELETE FROM  WHERE 
• Ob eine Zeile überhaupt gelöscht werden darf, hängt davon ab,
  ob eine andere Zeile einer anderen Tabelle eine Referenz auf
  diese Zeile hat und welche Form die Referenz hat (siehe
  Beispiele)
• Jede Zeile, für die die  nach TRUE ausgewertet
  wird, wird (wenn erlaubt) gelöscht
• Löschen aller Städte in Deutschland
       DELETE FROM City WHERE Country='D';
• Wird  weggelassen, wird sie als TRUE
  interpretiert -> alle Zeilen werden (wenn erlaubt) gelöscht
       DELETE FROM City;

Datenbanksysteme        Prof. Dr. Stephan Kleuker            124
Einfügen ohne übergeordneten Schlüssel (1/2)
  Verkaeufer                                           Kunde
  VNR     Vname       Status       Gehalt              KNR       Name      Betreuer
  1001      Meier     Junior       1000                1         Olm       1001
  1002      Schmidt   Senior       3000                2         Mai       1002

CREATE TABLE Kunde(
   KNR NUMBER,                                             INSERT INTO Kunde
   Name VARCHAR(12),                                       VALUES(3,'Hai',1003)
   Betreuer NUMBER,                                        *
   PRIMARY KEY(KNR),                                       FEHLER in Zeile 1:
   CONSTRAINT FK_Kunde                                     ORA-02291: Verstoß gegen
        FOREIGN KEY (Betreuer)                             Constraint
        REFERENCES Verkaeufer(VNR)                         (KLEUKER.FK_Kunde).
);                                                         Übergeordn. Schlüssel nicht
                                                           gefunden
INSERT INTO Kunde VALUES(3,'Hai',1003);

  Datenbanksysteme             Prof. Dr. Stephan Kleuker                              125
Einfügen ohne übergeordneten Schlüssel (2/2)

 Verkaeufer                                           Kunde
 VNR     Vname       Status       Gehalt              KNR         Name        Betreuer
 1001      Meier     Junior       1000                1           Olm         1001
 1002      Schmidt   Senior       3000                2           Mai         1002

CREATE TABLE Kunde(
   KNR NUMBER,
                                                          KNR NAME BETREUER
   Name VARCHAR(12),
                                                          ---------- ------------ ----------
   Betreuer NUMBER,
                                                                  1 Olm               1001
   PRIMARY KEY(KNR),
                                                                  2 Mai                1002
   CONSTRAINT FK_Kunde
                                                                  3 Hai
        FOREIGN KEY (Betreuer)
        REFERENCES Verkaeufer(VNR)
                                                          3 Zeilen ausgewählt.
);

INSERT INTO Kunde(KNR,Name)
       VALUES(3,'Hai');
SELECT * FROM Kunde;
 Datenbanksysteme             Prof. Dr. Stephan Kleuker                                  126
Foreign Key ohne Delete Cascade
  Verkaeufer                                           Kunde
  VNR     Vname       Status       Gehalt              KNR      Name        Betreuer
  1001      Meier     Junior       1000                1        Olm         1001
  1002      Schmidt   Senior       3000                2        Mai         1002

CREATE TABLE Kunde(                                    KNR NAME BETREUER
   KNR NUMBER,                                         ---------- ------------ ----------
   Name VARCHAR(12),                                           1 Olm               1001
   Betreuer NUMBER,                                            2 Mai                1002
   PRIMARY KEY(KNR),
   CONSTRAINT FK_Kunde                DELETE FROM Verkaeufer
        FOREIGN KEY (Betreuer)        WHERE VNR=1001
        REFERENCES Verkaeufer(VNR)    *
);                                    FEHLER in Zeile 1:
                                      ORA-02292: Verstoß gegen
SELECT * FROM Kunde;                  Constraint (KLEUKER.FK_Kunde).
DELETE FROM Verkaeufer WHERE VNR=1001;Untergeordneter Datensatz
                                      gefunden.
  Datenbanksysteme             Prof. Dr. Stephan Kleuker                                127
Foreign Key mit Delete Cascade
 Verkaeufer                                           Kunde
 VNR     Vname       Status       Gehalt              KNR       Name        Betreuer
 1001      Meier     Junior       1000                1         Olm         1001
 1002      Schmidt   Senior       3000                2         Mai         1002

CREATE TABLE Kunde(
   KNR NUMBER,                                            KNR NAME BETREUER
   Name VARCHAR(12),                                      ---------- ------------ ----------
   Betreuer Number,                                               1 Olm               1001
   PRIMARY KEY(KNR),                                              2 Mai                1002
   CONSTRAINT FK_Kunde
        FOREIGN KEY (Betreuer)                            2 Zeilen ausgewählt.
        REFERENCES Verkaeufer(VNR)                        1 Zeile wurde gelöscht.
        ON DELETE CASCADE
);                                                        KNR NAME BETREUER
SELECT * FROM Kunde;                                      ---------- ------------ ----------
DELETE FROM Verkaeufer WHERE VNR=1001;                            2 Mai                1002
SELECT * FROM Kunde;                                      1 Zeile wurde ausgewählt.

 Datenbanksysteme             Prof. Dr. Stephan Kleuker                                128
Formatvorlage
• SQL bietet viele Alternativen, wo Constraints stehen können
      => in Projekten Coding-Guideline benötigt

CREATE TABLE Kunde(
                               Attribute, nur elementare
  KNR NUMBER,
                               Constraints und Default-
  Name VARCHAR(12) NOT NULL,   Werte
  Betreuer Number,
  PRIMARY KEY(KNR),            dann Primärschlüssel
  CONSTRAINT FK_Kunde1         dann Fremdschlüssel (am
     FOREIGN KEY (Betreuer)    Constraintnamen erkennbar)
     REFERENCES Verkaeufer(VNR),
  CONSTRAINT GrosseKNR         dann weitere Constraints
     CHECK(KNR>1000),
);

Datenbanksysteme         Prof. Dr. Stephan Kleuker              129
Tabellen löschen

  DROP TABLE  [CASCADE CONSTRAINTS]

• Tabellen müssen nicht leer sein, wenn sie gelöscht
  werden sollen
• Eine Tabelle, auf die noch eine andere Tabelle mit
  REFERENCES zeigt, kann mit dem einfachen DROP
  TABLE  nicht gelöscht werden
• Mit DROP TABLE  CASCADE CONSTRAINTS
  wird eine Tabelle immer gelöscht, bei anderen Tabellen,
  die mit REFERENCES auf diese Tabelle zeigen, wird
  diese Integritätsbedingung (dieses Constraint) gelöscht
• Achtung! SQL-Standard nur DROP TABLE  ,
  entspricht dann CASCADE CONSTRAINTS

 Datenbanksysteme     Prof. Dr. Stephan Kleuker       130
Ändern von Tupeln

UPDATE 
   SET  =  | (),
         ...
          =  | ()
   WHERE 

• Für jede Tabellenzeile, die die  erfüllt,
  werden die Werte der Attribute wie beschrieben geändert

UPDATE City
  SET Name = 'Leningrad',
      Population = Population + 1000
  WHERE Name = 'Sankt-Petersburg'

Datenbanksysteme         Prof. Dr. Stephan Kleuker           131
Überblick über Tabellen in Oracle
• In Oracle kann man sich mit dem Befehl DESCRIBE 
  oder DESC  über die Tabellenstruktur informieren
  (so keine Angaben zu PRIMARY KEY oder Constraints)

• DESC City
         Name         Null?         Typ
         NAME         NOT NULL      VARCHAR(35)
         COUNTRY      NOT NULL      VARCHAR(4)
         PROVINCE     NOT NULL      VARCHAR(32)
         POPULATION                 NUMBER
         LONGITUDE                  NUMBER
         LATITUDE                   NUMBER

• Hinweise: In Oracle jeden Befehl vor der Ausführung mit einem
  Semikolon beenden, alle Eingaben sollten getrennt in einem
  Text-File gespeichert werden
Datenbanksysteme          Prof. Dr. Stephan Kleuker          132
Vorgehensweise bei Übungen
• Will man Definitionen von Tabellen testen, empfiehlt es sich ein
  SQL-Skript der folgenden Form für ORACLE zu schreiben:
       DROP TABLE A CASCADE CONSTRAINTS;
       DROP TABLE B CASCADE CONSTRAINTS;
       CREATE TABLE A(
       ...);
       CREATE TABLE B(
       ...);
       INSERT INTO A VALUES(...); ...
       INSERT INTO B VALUES(...); ...
       SELECT * FROM A;        // genauer nächste VL
       SELECT * FROM B;        // genauer nächste VL
• Dieses Skript wird in der DB ausgeführt. Ergebnisse werden
  von der DB ausgegeben
• Achtung: Scheitert ein SQL-Befehl wird der Fehler ausgegeben
  und trotzdem der nächste Befehl ausgeführt (deshalb läuft
  unser Skript)
• Speichern Sie ihre Skripten in *.sql-Dateien
Datenbanksysteme          Prof. Dr. Stephan Kleuker             133
Mondial

• Übungsbeispiel zusammengestellt von der Uni Freiburg
  („wohnt“ jetzt in Göttingen, Prof. May, [Mon]
  http://www.dbis.informatik.uni-goettingen.de/Mondial/)
• Zusammenstellung verschiedener geographischer Daten (keine
  Garantie der Richtigkeit, etwas veraltet)
• Simuliert echte DB mit unvollständigen Daten
• Steht auch lokal auf der Veranstaltungsseite zur Verfügung
  (Datenbankschema und Inhalt)
• Soll jeder zum Ausprobieren in seine „lokale“ DB-Version auf
  dem Oracle-Server einspielen.
• SQL-Aufrufe über das Web:
  http://www.semwebtech.org/sqlfrontend/
• Oracle 11g SQL-Referenz beachten

Datenbanksysteme        Prof. Dr. Stephan Kleuker           134
Ausschnitt ER-Mondial [Mon]

Datenbanksysteme   Prof. Dr. Stephan Kleuker   135
Ihr Arbeitsbereich

• Nach dem Anmelden befinden Sie sich in ihrem
  lokalen Datenbankbereich, in dem Sie ihre
  persönlichen Tabellen anlegen können
• Angelegte Tabellen und eingetragene Werte bleiben
  nach dem Verlassen der Datenbank erhalten, es ist
  kein vorheriges Abspeichern notwendig

• Für Experten: Bei der Anmeldung wurde bereits eine
  konkrete Datenbank ausgewählt, ein USES DBx ist
  nicht notwendig, Sie können aber auch keine
  zusätzlichen Datenbanken einrichten

Datenbanksysteme     Prof. Dr. Stephan Kleuker    136
Oberfläche des Worksheets Oracle SQL-Developer

                                  Detailbeschreibung auf Web-Seite

Datenbanksysteme   Prof. Dr. Stephan Kleuker                     137
Sie können auch lesen