CREATE TABLE
4. Datenbanksprache SQL
SELECT
FROM
WHERE
‣ Standard-Sprache für das Arbeiten mit relationalen Datenbanken:
Structured Query Language
• Datendefinition:
Anlegen, Ändern und Löschen von Datenbankstrukturen
• Datenmanipulation: Einfügen, Ändern und Löschen von Datensätzen
• Datenabfrage:
Abfragen von Datensätzen
4.1. Datendefinition
Bevor man Daten in einer DB ablegen kann, muss diese zunächst angelegt, ein Schema sowie und
Tabellenstrukturen definiert werden.
4.1.1. Schema und Tabellen
‣ alle Definitionen für relationale Datenbank werden im relationalen Schema gesammelt
➡ zunächst leeres Schema definieren:
CREATE SCHEMA
<Schema-Name>
➡ Datenbankschema löschen:
DROP SCHEMA
<Schema-Name>
CASCADE | RESTRICT
© Duale Hochschule Baden-Württemberg Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Datenbanksysteme – Kap. 4 Datenbanksprache SQL
1
CREATE TABLE
SELECT
FROM
WHERE
4.1. Datendefinition
Sobald ein Schema definiert ist, können die normalisierten Tabellen angelegt werden:
➡ Tabelle (Relation) definieren:
CREATE TABLE <Tabellen-Name>
( <Attribut-Definitionen>, [<Tabellen-Integritätsbedingungen>] )
➡ Attribut definieren (<Attribut-Definition>):
<Attribut-Name>
<Datentyp>
[<Attribut-Integritätsbedingungen>]
4.1.2. Datentypen und weitere Integritätsbedingungen
➡ Basis-Datentypen für Attribute (<Datentyp>):
• INT | INTEGER: ganze Zahl zwischen -231 und 231-1
• SMALLINT: ganze Zahl zwischen -215 und 215-1
• DEC | DECIMAL | DECIMAL(p, [q]): Dezimalzahl (mit insgesamt p Stellen, davon q
Dezimalstellen)
• NUM | NUMERIC | NUMERIC(p, [q]): (wie DECIMAL)
• FLOAT | FLOAT(p): Zahl in (4 Byte-) Fließkomma-Darstellung mit Vorzeichen
• REAL | DOUBLE PRECISION: reelle Zahl (double precision ist genauer)
© Duale Hochschule Baden-Württemberg Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Datenbanksysteme – Kap. 4 Datenbanksprache SQL
2
CREATE TABLE
SELECT
FROM
WHERE
4.1. Datendefinition
•
•
•
•
•
•
•
CHAR(n): alphanumerische Zeichenkette mit fester Länge n
VARCHAR(n): alphanumerische Zeichenkette mit variabler Länge (maximal n)
CLOB(m [K|M|G]): Text mit max. m Zeichen (angebbar in Kilo-, Mega- oder Giga-Byte)
BOOLEAN: Wahrheitswerte true, false, unknown
DATE: Datum - als Zeichenkette in der Form JJJJ-MM-TT
TIME: (Uhr-)Zeit - als Zeichenkette in der Form HH:MM:SS
TIMESTAMP: Zeitstempel - als Zeichenkette in der Form JJJJ-MM-TT HH:MM:SS
➡ Integritätsbedingungen für Attribute (<Attribut-Integritätsbedingungen>):
•
•
•
•
UNIQUE
NOT NULL
DEFAULT <Default-Wert>
CHECK (<<Attribut-Name> | VALUE> <Prüfbedingung 1>
[AND|OR … AND|OR <<Attribut-Name> | VALUE> <Prüfbedingung n>])
• PRIMARY KEY
• FOREIGN KEY REFERENCES <Tabellen-Name> (<Attribut-Name>)
[ON DELETE CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION]
[ON UPDATE CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION]
© Duale Hochschule Baden-Württemberg Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Datenbanksysteme – Kap. 4 Datenbanksprache SQL
3
CREATE TABLE
SELECT
FROM
WHERE
4.1. Datendefinition
➡ Prüfbedingungen für CHECK-Klausel:
• <Vergleichsoperator> <Wert-Ausdruck>
mit:
<Vergleichsoperator>: = | < | <= | > | >= | <>
<Wert-Ausdruck>: <konkreter Wert> | <arithm. Ausdruck> | <skalare SELECT-Anweisung>
• [NOT] IN (<Werte-Aufzählung> | <SELECT-Anweisung>)
• [NOT] BETWEEN <Untergrenze> AND <Obergrenze>
• [NOT] LIKE <Textmuster> [ESCAPE <Sonderzeichen>]
➡ Integritätsbedingungen für Tabelle (= Attribut-übergreifend):
•
•
•
•
•
<Attribut-Name> WITH OPTIONS <Attribut-Integritätsbedingungen>
UNIQUE (<Liste Attribut-Namen>)
CHECK (<Selektionsbedingung 1> [AND|OR … AND|OR <Selektionsbedingung n>])
PRIMARY KEY (<Liste Attribut-Namen>)
FOREIGN KEY (<Liste Attribut-Namen>) REFERENCES <Tabellen-Name> (<Liste Attribut-Namen>)
[ON DELETE CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION]
[ON UPDATE CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION]
© Duale Hochschule Baden-Württemberg Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Datenbanksysteme – Kap. 4 Datenbanksprache SQL
4
CREATE TABLE
SELECT
FROM
WHERE
4.1. Datendefinition
Beispiel 4-1:
Eine Kaufhaus-Kette möchte seine in den Filialen verkauften Waren in einer relationalen Datenbank
verwalten, die aus den folgenden Relationen bestehen soll:
→ Kunde mit den Attributen
-
KNr (Kundennummer, alphanumerisch) als Primärschlüssel,
Name (alphanumerisch), der immer mit einem Wert belegt sein soll,
Wohnort (alphanumerisch) und
Bonität, die zwischen 0 (für schlechter Kunde) und 100 (für guter Kunde) liegt und beim Einfügen eines
Kunden mit dem Wert 50 belegt werden soll,
→ Artikel mit den Attributen
- ANr (Artikelnummer, alphanumerisch) als Primärschlüssel,
- Bezeichner, der ebenfalls immer mit einem Wert belegt sein soll,
- Preis, der immer mit einem Wert belegt und größer 0 sein soll,
→ Filiale mit den Attributen
- FNr (Filialnummer, alphanumerisch) als Primärschlüssel und
- Ort, der immer mit einem Wert belegt und eindeutig sein soll (d.h. es gibt pro Ort max. eine Filiale),
→ Kauf mit den Attributen
- KNr (Kundennummer) als Teil des Primärschlüssels und Fremdschlüssel zum Attribut KNr der Relation
Kunde,
- ANr (Artikelnummer) als Teil des Primärschlüssels und Fremdschlüssel zum Attribut ANr der Relation
Artikel,
- FNr (Filialnummer) als Teil des Primärschlüssels und Fremdschlüssel zum Attribut FNr der Relation Filiale,
- Menge, die immer mit einem Wert belegt und größer 0 sein soll, und
- Datum.
© Duale Hochschule Baden-Württemberg Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Datenbanksysteme – Kap. 4 Datenbanksprache SQL
5
CREATE TABLE
4.1. Datendefinition
CREATE SCHEMA
SELECT
FROM
WHERE
→ Beispiel
Verkauf;
CREATE TABLE Kunde
(
KNr
VARCHAR (7) PRIMARY KEY,
Name
VARCHAR (30) NOT NULL,
Wohnort
VARCHAR (60),
Bonität
SMALLINT
DEFAULT 50
CHECK (VALUE BETWEEN 0 AND 100)
CREATE TABLE Artikel
(
ANr
VARCHAR (5) PRIMARY KEY,
Bezeichner
VARCHAR (20) NOT NULL,
Preis
DECIMAL (7,2)
NOT NULL
CREATE TABLE
(
FNr
Ort
Filiale
VARCHAR (3) PRIMARY KEY,
VARCHAR (60) NOT NULL
UNIQUE
CREATE TABLE Kauf
(
KNr
VARCHAR (7) FOREIGN KEY
ANr
VARCHAR (5) FOREIGN KEY
FNr
VARCHAR (3) FOREIGN KEY
Menge
SMALLINT
NOT NULL,
Datum
DATE ,
PRIMARY KEY (KNr, ANr, FNr),
Menge WITH OPTIONS CHECK (VALUE >
CHECK (VALUE > 0)
);
);
„Kauf“ muss zuletzt
);
definiert werden, da
sonst die FS nicht
definiert werden
REFERENCES Kunde (KNr), können
REFERENCES Artikel (ANr),
REFERENCES Filiale (FNr),
0)
© Duale Hochschule Baden-Württemberg Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
);
Datenbanksysteme – Kap. 4 Datenbanksprache SQL
6
CREATE TABLE
SELECT
FROM
WHERE
4.1. Datendefinition
4.1.3. Änderung einer Tabelle
ALTER TABLE <Tabellen-Name>
ADD [COLUMN] <Attribut-Name> <Datentyp> [<Attribut-Integritätsbedingungen>]|
DROP [COLUMN] <Attribut-Name> CASCADE | RESTRICT
Die ALTER TABLE Anweisung ist zwingend erforderlich, wenn zwei Relationen definiert werden
sollen, die sich über FS-Attribute gegenseitig referenzieren.
Beispiel 4-2:
In einem Unternehmen sollen die Angestellten in einer eigenen Relation und die Abteilungen in einer
eigenen Relation verwaltet werden.
Für die Angestellten soll die eindeutige Personalnummer (PersNr, 10-stellige Zeichenkette) als
Primärschlüssel, der Name (max. 30-stellige Zeichenkette, muss immer Wert aufweisen) und die
Abteilungsnummer (AbtNr, Zahl) als Fremdschlüssel mit Referenz auf das gleichnamige Attribut in der
Relation Abteilung geführt werden.
Für die Abteilungen soll die eindeutige Abteilungsnummer (AbtNr, Zahl) als Primärschlüssel, der Name
(max. 25-stellige Zeichenkette, muss immer Wert aufweisen) und die Personalnummer des
Abteilungsleiters (Leiter) als Fremdschlüssel mit Referenz auf das Attribut PersNr in der Relation
Angestellter geführt werden.
© Duale Hochschule Baden-Württemberg Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Datenbanksysteme – Kap. 4 Datenbanksprache SQL
7
CREATE TABLE
SELECT
FROM
WHERE
4.1. Datendefinition
CREATE SCHEMA
Ang_Abt_Datenbank;
CREATE TABLE Angestellter
(
PersNr CHAR (10)
PRIMARY KEY,
Name
VARCHAR (30) NOT NULL
);
CREATE TABLE Abteilung
(
AbtNr
SMALLINT
PRIMARY KEY,
Name
VARCHAR (25) NOT NULL,
Leiter CHAR (10)
FOREIGN KEY REFERENCES Angestellter (PersNr)
ALTER TABLE Angestellter
ADD
AbtNr
);
SMALLINT FOREIGN KEY REFERENCES Abteilung (AbtNr);
➡ Tabelle löschen:
DROP TABLE
<Tabellen-Name>
CASCADE | RESTRICT
Löscht nicht nur den Inhalt einer Tabelle, sondern auch deren Definition.
© Duale Hochschule Baden-Württemberg Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Datenbanksysteme – Kap. 4 Datenbanksprache SQL
8
CREATE TABLE
SELECT
FROM
WHERE
4.1. Datendefinition
Bisher: SQL-Anweisungen für die Definition eines relationalen Datenbankschemas auf der
logischen Ebene.
Zusätzlich: SQL-Anweisungen auf der externen Ebene (View) und internen Ebene (Index).
4.1.4. Views und Indexe
‣ View = Sicht eines Benutzers auf die Datenbank
• Daten aus Basisrelationen und anderen Views extrahieren
• Inhalt einer View nicht permanent in Datenbank gespeichert (= virtuelle Relation)
➡ View definieren:
CREATE VIEW <View-Name> [( <Liste Attribut-Namen> )]
AS <SELECT-Anweisung>
Extraktion der
gewünschten Daten
mittels SELECT
© Duale Hochschule Baden-Württemberg Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Datenbanksysteme – Kap. 4 Datenbanksprache SQL
9
CREATE TABLE
SELECT
FROM
WHERE
4.1. Datendefinition → Views
Beispiel 4-3:
Die Personalabteilung benötigt eine bestimmte Sicht auf die beiden Tabellen Angestellter und
Abteilung aus Beispiel 4-2. Es wird eine Aufstellung benötigt, welche Abteilung von welchem
Mitarbeiter geleitet wird. Dies soll in einer View Abteilungsleiter mit den Attributen Abteilung (Name
der Abteilung) und Leiter (Name des Abteilungsleiters) ausgegeben werden.
a. Basistabellen
Angestellter
Abteilung
PersNr
Name
AbtNr
AbtNr
Name
Leiter
007
Bond
A-1
A-1
Außendienst
007
0815
Smith
A-1
P-0
Personal
4711
4711
Walker
P-0
4712
Miller
P-0
b. View
Abteilungsleiter
Abteilung
Leiter
Außendienst
Bond
Personal
Walker
Abb. 4-1: Relationale Datenbank mit Basistabellen und View
➡ View löschen:
DROP VIEW
<View-Name>
© Duale Hochschule Baden-Württemberg Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
CASCADE | RESTRICT
Datenbanksysteme – Kap. 4 Datenbanksprache SQL
10
CREATE TABLE
SELECT
FROM
WHERE
4.1. Datendefinition
‣ Index = Attributwertverzeichnis (Inhalts- oder Stichwortverzeichnis)
• dient zum schnellen Zugriff auf einen bestimmten Datensatz
• liefert zu einem bestimmten Attributwert die Speicheradresse des zugehörigen Datensatzes
• Index kann über einzelnes Attribut oder über eine Attributkombination definiert werden
(Hinweis: Index nur auf der logischen Ebene definierbar, also nicht für Views!)
• Index im SQL-Standard nicht vorgesehen, aber in Datenbanksystemen unentbehrlich
➡ Index definieren:
CREATE [UNIQUE] INDEX <Index-Name>
ON <Tabellen-Name> (<Attribut-Name 1> [ASC | DESC], …,
<Attribut-Name n> [ASC | DESC] )
Bsp.: CREATE INDEX PersNrIndex ON Angestellter (PersNr);
➡ Index löschen:
DROP INDEX
<Index-Name>
© Duale Hochschule Baden-Württemberg Stuttgart, Prof. Dr. Nikolai Preiß, Holger Seubert
Datenbanksysteme – Kap. 4 Datenbanksprache SQL
11