5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR...

35
Prof. Dr. Stephan Kleuker 117 Datenbanken 5. SQL: Erstellen von Tabellen Erzeugen und Löschen von Tabellen Umgang mit Bedingungen (Constraints) Einfügen und Löschen von Daten

Transcript of 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR...

Page 1: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

117Datenbanken

5. SQL: Erstellen von Tabellen

• Erzeugen und Löschen von Tabellen

• Umgang mit Bedingungen (Constraints)

• Einfügen und Löschen von Daten

Page 2: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

118Datenbanken

SQL

• Structured Query LanguageHistorie: 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ätSQL 99 (SQL 3): z.B. (Standard besteht aus 5 Teilen)- aktive Regeln- Stored Procedures- objektorientierte KonzepteSQL 2003 (SQL 4): z.B.- MERGE- Befehl- Numerierungsmöglichkeiten für Zeilen- SQL/XML Zusammenhänge

SQL 2008SQL 2011..

Page 3: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

119Datenbanken

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

Page 4: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

120Datenbanken

Tabellen nach SQL (ohne Randbedingungen)

1002Mai23000SeniorSchmidt1002

1001Olm11000JuniorMeier1001

BetreuerNameKNRGehaltStatusVnameVNR

KundeVerkaeufer

1002Mai23000SeniorSchmidt1002

1001Olm11000JuniorMeier1001

BetreuerNameKNRGehaltStatusVnameVNR

KundeVerkaeufer

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

);

CREATE TABLE Kunde(KNR NUMBER,Name VARCHAR(12),Betreuer NUMBER

);

Page 5: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

121Datenbanken

Einfacher Aufbau und Beispiel

CREATE TABLE <tabellenname>(<attributsname> <datentyp>,...<attributsname> <datentyp>

)

CREATE TABLE City(Name VARCHAR(35),Country VARCHAR(4), --LänderkürzelProvince VARCHAR(32),Population NUMBER,Longitude NUMBER,Latitude NUMBER

)

Page 6: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

122Datenbanken

Datentypen (sehr kleiner Ausschnitt)

Standard SQL Oracle Bedeutung

NUMERIC NUMBER bel. Zahlen

NUMERIC(x)

INTEGER

NUMBER(x)

INTEGER

x-stellige Ganzzahl

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 : „Bevorzugte“ Oracle-Datentypen unterscheiden sich im Namen von „Standard“-SQL-Datentypen, in Oracle-Dokumentation befindet sich Mapping. In der Veranstaltung wird nur VARCHARund NUMBER(später DATE) genutzt.Sollen eigene Skripte auch auf anderen DB laufen, sollte man zu VARCHARund NUMERICübergehen.

Page 7: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

123Datenbanken

Ü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

Page 8: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

124Datenbanken

Syntax von Tabellen mit Constraints

CREATE TABLE <tabellenname>(<attributsname> <datentyp> [DEFAULT <wert>]

[<spaltenconstraint>... <spaltenconstraint>],

...<attributsname> <datentyp> [DEFAULT <wert>]

[<spaltenconstraint>... <spaltenconstraint>],

[<tabellenconstraint>]...[<tabellenconstraint>]

)

- Teile in eckigen Klammern können weggelassen werden

- <spaltenconstraint> bezieht sich nur auf einen Spaltenwert

- <tabellenconstraint> kann sich auf eine Zeile beziehen

Page 9: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

125Datenbanken

Bedingungen (Constraints) (1/2)

• Syntax:

[CONSTRAINT <name>] <bedingung>

• Typischer Aufbau einer <bedingung>:

CHECK (<boolesche_bedingung>)

• Besondere <bedingung> 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

Page 10: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

126Datenbanken

Beispiel

Randbedingungen:

• Verkaeufer-Nummer mindestens vier-stellig

• Name und Status immer angegeben

• ein „Junior“ verdient maximal 2500

CREATE TABLE Verkaeufer(VNR NUMBER CHECK(VNR >= 1000),Vname VARCHAR(12) NOT NULL,Status VARCHAR(10) NOT NULL,Gehalt NUMBER,CONSTRAINT MaxJunior CHECK

(NOT(Status = 'Junior') OR Gehalt <= 2500)

);

1002Mai23000SeniorSchmidt1002

1001Olm11000JuniorMeier1001

BetreuerNameKNRGehaltStatusVnameVNR

KundeVerkaeufer

1002Mai23000SeniorSchmidt1002

1001Olm11000JuniorMeier1001

BetreuerNameKNRGehaltStatusVnameVNR

KundeVerkaeufer

Page 11: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

127

Erinnerung: Boolesche Logik

Datenbanken

A B NOT(A) A AND B A OR B NOT(A) OR B

T T F T T T

T F F F T F

F T T F T T

F F T F F T

Page 12: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

128Datenbanken

Auswertung von Constraints – Dreiwertige Logik• Wenn Änderungen an

Attributwerten durchgeführt oder neue Zeilen eingefügt werden, findet Überprüfung der Constraints statt

• Wird ein Constraint nach FALSE ausgewertet, wird die Änderung verworfen

• Achtung !! Datenbanken haben eine drei-wertige Logik (TRUE (T), FALSE (F), UNKNOWN (U)), findet z.B. eine Prüfung VNR>=1000statt und ist der Wert von VNRNULL, wird die Bedingung nach UNKNOWN ausgewertet

A B NOT(A)

A AND B

A OR B

NOT(A) OR B

T T F T T T

T F F F T F

T U F U T U

F T T F T T

F F T F F T

F U T F U T

U T U U T T

U F U F U U

U U U U U U

Page 13: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

129Datenbanken

Bedingungen (Tabellen-Constraints) (2/2)

• Angabe von Primärschlüsseln (ausgewählter Schlüsselkandidat):

PRIMARY KEY(<attributsname>[,...,<attributsname>])

• Fremdschlüssel:

FOREIGN KEY (<attributsname>[,...,<attributsname>]) REFERENCES <tabellenname>

(<attributsname>[,...,<attributsname>])

[ON DELETE CASCADE]

– In den Attributslisten steht, wie die Attribute in der zu erstellenden und in der referenzierten Tabelle heißen (müssen dort PRIMARY KEYsein, Tabelle muss vorher existieren)

– REFRENCES-Bedingung wird durch NULL-Eintrag nicht verletzt

• Eindeutigkeit von Attributswerten (Attributskombinationen)

UNIQUE ((<attributsname>[,...,<attributsname>])

Page 14: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

130Datenbanken

Beispiel

Randbedingungen:

• KNR ist Schlüssel

• Kunde hat Name

• Betreuer ist Schlüssel in Verkäufer-Tabelle

CREATE TABLE Kunde(KNR NUMBER,Name VARCHAR(12)

CONSTRAINT Kname NOT NULL,Betreuer NUMBER,PRIMARY KEY(KNR),CONSTRAINT FK_Kunde

FOREIGN KEY (Betreuer) REFERENCES Verkaeufer(VNR)

);

1002Mai23000SeniorSchmidt1002

1001Olm11000JuniorMeier1001

BetreuerNameKNRGehaltStatusVnameVNR

KundeVerkaeufer

1002Mai23000SeniorSchmidt1002

1001Olm11000JuniorMeier1001

BetreuerNameKNRGehaltStatusVnameVNR

KundeVerkaeufer

Page 15: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

131Datenbanken

Schlüsselkandidaten

• Primary Key ist Schlüsselkandidat, der aus der Menge der Schlüsselkandidaten durch 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 UNIQUEkann man z. B. festhalten, dass es Alternativen zum Primary Key gibt

• Beispiel:CREATE TABLE Country(

Name VARCHAR(32) NOT NULL UNIQUE,

Code VARCHAR(4) PRIMARY KEY,

...)

• Nur wenn ein Attribut Primary Key, dann als Spalten-Constraintformulierbar

Eins Zwei

a b

a NULL

NULL b

NULL NULL

Page 16: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

132Datenbanken

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)

Page 17: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

133Datenbanken

Einfügen von Daten (1/2)

• einfache Variante:

INSERT INTO <tabelle> VALUES (<werteliste>)

Die <werteliste> muss für jedes Attribut einen Wert enthalten, für undefinierte Werte wird NULLgeschrieben

• mit ausgewählten Attributen:

INSERT INTO <tabelle>

(<attributsname>[,...,<attributsname>])

VALUES (<wert>[,...,<wert>])

Werte werden in die ausgewählten Spalten geschrieben, Rest mit NULL-Werten oder DEFAULT-Werten (s. später) gefüllt

Page 18: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

134Datenbanken

Einfügen von Daten (2/2)

• Ergebnisse einer Anfrage:

INSERT INTO <tabelle>[(attributsliste)] <anfrage>

(wird später deutlich)

• Beispiel:

INSERT INTO Country (Name, Code, Population)

VALUES('Lummerland','LU',4)

Page 19: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

135Datenbanken

Beispiel

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

1002Mai23000SeniorSchmidt1002

1001Olm11000JuniorMeier1001

BetreuerNameKNRGehaltStatusVnameVNR

KundeVerkaeufer

1002Mai23000SeniorSchmidt1002

1001Olm11000JuniorMeier1001

BetreuerNameKNRGehaltStatusVnameVNR

KundeVerkaeufer

Page 20: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

136Datenbanken

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

Page 21: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

137Datenbanken

Löschen von Daten

• Mit DELETEkönnen eine oder mehrere Zeilen aus jeweils einer Tabelle entfernt werden

DELETE FROM <tabelle> WHERE <bedingung>

• Ob Zeile 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 <bedingung> nach TRUE ausgewertet wird, wird (wenn erlaubt) gelöscht

• Löschen aller Städte in Deutschland

DELETE FROM City WHERE Country='D';

• Wird <bedingung> weggelassen, wird sie als TRUE interpretiert -> alle Zeilen werden (wenn erlaubt) gelöscht

DELETE FROM City;

Page 22: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

138Datenbanken

Einfügen ohne übergeordneten Schlüssel (1/2)

CREATE TABLE Kunde(KNR NUMBER,Name VARCHAR(12),Betreuer NUMBER,PRIMARY KEY(KNR),CONSTRAINT FK_Kunde

FOREIGN KEY (Betreuer) REFERENCES Verkaeufer(VNR)

);

INSERT INTO Kunde VALUES(3,'Hai',1003);

INSERT INTO Kunde INSERT INTO Kunde INSERT INTO Kunde INSERT INTO Kunde VALUES(3,'Hai',1003)VALUES(3,'Hai',1003)VALUES(3,'Hai',1003)VALUES(3,'Hai',1003)****FEHLER in Zeile 1:FEHLER in Zeile 1:FEHLER in Zeile 1:FEHLER in Zeile 1:ORAORAORAORA----02291: Verstoß gegen 02291: Verstoß gegen 02291: Verstoß gegen 02291: Verstoß gegen Constraint Constraint Constraint Constraint (KLEUKER.FK_Kunde). (KLEUKER.FK_Kunde). (KLEUKER.FK_Kunde). (KLEUKER.FK_Kunde). Übergeordn. Schlüssel nicht Übergeordn. Schlüssel nicht Übergeordn. Schlüssel nicht Übergeordn. Schlüssel nicht gefundengefundengefundengefunden

1002Mai23000SeniorSchmidt1002

1001Olm11000JuniorMeier1001

BetreuerNameKNRGehaltStatusVnameVNR

KundeVerkaeufer

1002Mai23000SeniorSchmidt1002

1001Olm11000JuniorMeier1001

BetreuerNameKNRGehaltStatusVnameVNR

KundeVerkaeufer

Page 23: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

139Datenbanken

Einfügen ohne übergeordneten Schlüssel (2/2)

CREATE TABLE Kunde(KNR NUMBER,Name VARCHAR(12),Betreuer NUMBER,PRIMARY KEY(KNR),CONSTRAINT FK_Kunde

FOREIGN KEY (Betreuer) REFERENCES Verkaeufer(VNR)

);

INSERT INTO Kunde(KNR,Name) VALUES(3,'Hai');

SELECT * FROM Kunde;

KNR KNR KNR KNR NAME BETREUERNAME BETREUERNAME BETREUERNAME BETREUER------------ ------------------------ ----------------------------------------1 1 1 1 Olm Olm Olm Olm 10011001100110012 2 2 2 Mai Mai Mai Mai 10021002100210023 Hai3 Hai3 Hai3 Hai

3 Zeilen ausgewählt.3 Zeilen ausgewählt.3 Zeilen ausgewählt.3 Zeilen ausgewählt.

1002Mai23000SeniorSchmidt1002

1001Olm11000JuniorMeier1001

BetreuerNameKNRGehaltStatusVnameVNR

KundeVerkaeufer

1002Mai23000SeniorSchmidt1002

1001Olm11000JuniorMeier1001

BetreuerNameKNRGehaltStatusVnameVNR

KundeVerkaeufer

Page 24: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

140Datenbanken

Foreign Key ohne Delete Cascade

CREATE TABLE Kunde(KNR NUMBER,Name VARCHAR(12),Betreuer NUMBER,PRIMARY KEY(KNR),CONSTRAINT FK_Kunde

FOREIGN KEY (Betreuer) REFERENCES Verkaeufer(VNR)

);

SELECT * FROM Kunde;DELETE FROM Verkaeufer

WHERE VNR=1001;

KNR KNR KNR KNR NAME BETREUERNAME BETREUERNAME BETREUERNAME BETREUER------------ ------------------------ ----------------------------------------1 1 1 1 Olm Olm Olm Olm 10011001100110012 2 2 2 Mai Mai Mai Mai 1002100210021002

DELETE FROM DELETE FROM DELETE FROM DELETE FROM VerkaeuferVerkaeuferVerkaeuferVerkaeufer WHERE WHERE WHERE WHERE VNR=1001VNR=1001VNR=1001VNR=1001****FEHLER in Zeile 1:FEHLER in Zeile 1:FEHLER in Zeile 1:FEHLER in Zeile 1:ORAORAORAORA----02292: Verstoß gegen 02292: Verstoß gegen 02292: Verstoß gegen 02292: Verstoß gegen ConstraintConstraintConstraintConstraint ((((KLEUKER.FK_KundeKLEUKER.FK_KundeKLEUKER.FK_KundeKLEUKER.FK_Kunde). ). ). ). Untergeordneter Datensatz Untergeordneter Datensatz Untergeordneter Datensatz Untergeordneter Datensatz gefunden.gefunden.gefunden.gefunden.

1002Mai23000SeniorSchmidt1002

1001Olm11000JuniorMeier1001

BetreuerNameKNRGehaltStatusVnameVNR

KundeVerkaeufer

1002Mai23000SeniorSchmidt1002

1001Olm11000JuniorMeier1001

BetreuerNameKNRGehaltStatusVnameVNR

KundeVerkaeufer

Page 25: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

141

CREATE TABLE Kunde(KNR NUMBER,Name VARCHAR(12),Betreuer Number,PRIMARY KEY(KNR),CONSTRAINT FK_Kunde

FOREIGN KEY (Betreuer) REFERENCES Verkaeufer(VNR) ON DELETE CASCADE

);SELECT * FROM Kunde;DELETE FROM Verkaeufer

WHERE VNR=1001;SELECT * FROM Kunde;

Datenbanken

Foreign Key mit Delete Cascade

KNR KNR KNR KNR NAME BETREUERNAME BETREUERNAME BETREUERNAME BETREUER------------ ------------------------ ----------------------------------------1 1 1 1 Olm Olm Olm Olm 10011001100110012 Mai 10022 Mai 10022 Mai 10022 Mai 1002

2 Zeilen ausgewählt.2 Zeilen ausgewählt.2 Zeilen ausgewählt.2 Zeilen ausgewählt.1 Zeile wurde gelöscht.1 Zeile wurde gelöscht.1 Zeile wurde gelöscht.1 Zeile wurde gelöscht.

KNR KNR KNR KNR NAME BETREUERNAME BETREUERNAME BETREUERNAME BETREUER------------ ------------------------ ----------------------------------------2 2 2 2 Mai Mai Mai Mai 1002100210021002

1 Zeile wurde ausgewählt.1 Zeile wurde ausgewählt.1 Zeile wurde ausgewählt.1 Zeile wurde ausgewählt.

1002Mai23000SeniorSchmidt1002

1001Olm11000JuniorMeier1001

BetreuerNameKNRGehaltStatusVnameVNR

KundeVerkaeufer

1002Mai23000SeniorSchmidt1002

1001Olm11000JuniorMeier1001

BetreuerNameKNRGehaltStatusVnameVNR

KundeVerkaeufer

Page 26: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

142Datenbanken

Formatvorlage

• SQL bietet viele Alternativen, wo Constraints stehen können=> in Projekten Coding-Guideline benötigt

CREATE TABLE Kunde(

KNR NUMBER,

Name VARCHAR(12) NOT NULL,

Betreuer Number,

PRIMARY KEY(KNR),

CONSTRAINT FK_Kunde1

FOREIGN KEY (Betreuer)

REFERENCES Verkaeufer(VNR),

CONSTRAINT Kunde_GrosseKNR

CHECK(KNR>1000),

);

Attribute, nur elementare Constraints und Default-Werte

dann Primärschlüsseldann Fremdschlüssel (am Constraintnamen erkennbar)

dann weitere Constraints

Page 27: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

143Datenbanken

Tabellen löschen

DROP TABLE <tabelle> [CASCADE CONSTRAINTS]

• Tabellen müssen nicht leer sein, wenn sie gelöscht werden sollen

• Eine Tabelle, auf die noch eine andere Tabelle mit REFERENCESzeigt, kann mit dem einfachen DROP TABLE <tabelle> nicht gelöscht werden

• Mit DROP TABLE <tabelle> CASCADE CONSTRAINTS wird eine Tabelle immer gelöscht, bei anderen Tabellen, die mit REFERENCESauf diese Tabelle zeigen, wird diese Integritätsbedingung (dieses Constraint) gelöscht

• Achtung! SQL-Standard nur DROP TABLE <t> , entspricht dann CASCADE CONSTRAINTS

Page 28: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

144Datenbanken

Ändern von Tupeln

UPDATE <tabelle>

SET <attributsname> = <wert> | (<Unteranfrage>),

...

<attributsname> = <wert> | (<Unteranfrage>)

WHERE <Boolesche_Bedingung>

• Für jede Tabellenzeile, die die <Boolesche_Bedingung>

erfüllt, werden die Werte der Attribute wie beschrieben geändert

UPDATE City

SET Name = 'Leningrad',

Population = Population + 1000

WHERE Name = 'Sankt-Petersburg'

Page 29: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

145Datenbanken

Überblick über Tabellen in Oracle

• In Oracle kann man sich mit dem Befehl DESCRIBE <tabelle>

oder DESC <tabelle> über die Tabellenstruktur informieren (so keine Angaben zu PRIMARY KEY oder Constraints)

• DESC City

• Hinweise: In Oracle jeden Befehl vor der Ausführung mit einem Semikolon beenden, alle Eingaben sollten getrennt in einem Text-File gespeichert werden

Name Null? TypNAME NOT NULL VARCHAR(35)COUNTRY NOT NULL VARCHAR(4)PROVINCE NOT NULL VARCHAR(32)POPULATION NUMBERLONGITUDE NUMBERLATITUDE NUMBER

Page 30: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

146Datenbanken

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 VLSELECT * 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

Page 31: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

147Datenbanken

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

Page 32: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

148Datenbanken

Ausschnitt ER-Mondial [Mon]

Page 33: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

149

In Praktika wird Tabellenübersicht genutzt

Datenbanken

Page 34: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

150Datenbanken

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

Page 35: 5. SQL: Erstellen von Tabellenhome.edvsz.fh-osnabrueck.de/skleuker/WS13_DB/DB_WS13_Teil3.pdf · VNR NUMBER CHECK(VNR >= 1000), Vname VARCHAR(12) NOT NULL, Status VARCHAR(10) NOT

Prof. Dr. Stephan Kleuker

151Datenbanken

Oberfläche des Worksheets Oracle SQL-Developer

Detailbeschreibung auf Web-Seite