SQL-Einführung Teil 1

Werbung
SQL-Einführung
Teil 1
Prof. Dr. Waldemar Rohde
Dipl.-Ing. Jörg Höppner
19.10.2006
1
Historie
1974
SEQUEL als Abfragesprache des Systems R von IBM wird als nicht kommerzielles System
erstmals erstellt.
1976
System R , der erste Prototyp einer relationalen Datenbank, entstand
1979
SEQUEL SQL wird als Sprache für DB2 von IBM erstmalig für kommerzielle Zwecke
angeboten.
1980
ORACLE, INFORMIX und andere Hersteller bieten erstmals relationale Datenbanken mit
SQL an.
1981
SQL/DS von IBM unter DOS/VSE .
1982
ANSI gründet ein Komitee, um SQL zu standardisieren.
1983
SQL/DS wird von IBM mit DB2 unter MVS angeboten.
1986
Der erste SQL-Standard wird von der ANSI verabschiedet.
ab 1987
SQL entwickelt sich zum Industriestandard.
ab 1987
viele neue Datenbankanbieter: INGRES, SYBASE, etc.
1989
Verabschiedung des SQL1-Standards von der ISO-Behörde.
1992
SQL 2 Standard wird von der ISO-Behörde verabschiedet.
1999
Verabschiedung von SQL 1999 als Vorläufer von SQL 2003
2003
SQL 2003 wurde verabschiedet
(19.10.2006) 2
SQL - Structured Query Language

Standard SQL 1



Datendefinitionssprache ( Data Definition Language, DDL) mit den
Anweisungen CREATE TABLE, CREATE VIEW etc.
Sprache zur Definition von Speicherstrukturen, Benutzerrechten und
anderen Verwaltungsaufgaben
(Data Storage Definition Language (DSDL) und Data Administration
Language, (DAL))
Datenmanipulationssprache (Data Manipulation Language, DML), zu
der auch die Anfragen zählen.
(19.10.2006) 3
SQL - Structured Query Language

Standard SQL 2




Einführung von Domänen, einigen neue Datentypen, die
Veränderungen von Tabellen mit ALTER TABLE und Transaktionen
zum Inhalt hat.
Möglichkeit, Integritätsprüfungen vorzunehmen mit Hilfe der
Vereinbarung von CHECK-Klauseln um Gültigkeitsprüfungen für
einzufügende Werte vorzunehmen.
Festlegen von Primärschlüsseln, Fremdschlüsseln und
Zweitschlüsseln.
Die meisten Datenbanksysteme unterstützen heute diesen Standard
nicht vollständig, andererseits gehen sie in vielen Punkten weit über
den Standard hinaus.
(19.10.2006) 4
SQL - Structured Query Language

Standard SQL 3

Inhalt sind SQLJ, objektrelationale Erweiterungen, die Definition von
Stored Procedures und Datenbanktriggern. (Stored Procedures sind
Prozeduren und Funktionen, die in der Datenbank selber abgespeichert werden und unter
SQLJ versteht man die Einbettung von SQL–Anweisungen in JAVA–Programme.)


Einführung von weiteren Standarddatentypen wie BOOLEAN und
Multimediatypen, die im SQL 2 - Standard noch fehlten.
Einführung von benutzerdefinierten Datentypen, objekt-relationalen
Erweiterungen, Subtypen und Supertypen.
(19.10.2006) 5
Einsatz von SQL
SQL
DatenDefinition
DatenOrganisation
DatenManipulation
DatenSchutz
Create table
Create index
Alter table
Drop table
Drop index
…
Create tablespace
Alter tablespace
Drop tablespace
Create user
Create profile
...
Select
Insert
Update
Delete
Commit
Rollback
…
Create role
Grant priv/role
to ...
Revoke priv/role
from ...
(19.10.2006) 6
Datentypen Übersicht

Alpanumerische Objekte



Numerischer Objekte



Ziffern
Oracle: Number
Datumsobjekte



Ziffern, Zeichen
Oracle: Char, Varchar, Varchar2, Long
Ziffern, Zeichen
Oracle: Date
Großobjekte


Binäre Datenströme oder Zeichendatenströme
Oracle: BLOB, BFILE (binär), CLOB (Zeichen)
(19.10.2006) 7
Datentypen für Zeichenfolgen
CHAR
Speichert Zeichenketten mit fester Speicherreservierung
1 bis 2000 Byte
Voreinstellung ist 1 Byte
zu kurze Ketten werden mit Blanks aufgefüllt
zu lange Zeichenfolgen werden um führen Blanks gekürzt
bis der Wert passt
zu große Strings werden mit Fehlermeldung abgewiesen
impliziete Konvertierung nach VARCHAR2
zugrundeliegender Zeichensatz ist in der Datenbank definiert
(19.10.2006) 8
Datentypen für Zeichenfolgen (Forts.)
VARCHAR2
speichert Zeichenketten mit variabler Speicherreservierung
1 bis 4000 Byte
zu kurze Ketten werden mit Banks aufgefüllt
zu große Strings werden mit Fehlermeldung abgewiesen
impliziete Konvertierung nach CHAR
zugrundeliegender Zeichensatz ist in der Datenbank definiert
(19.10.2006) 9
Datentypen für Zeichenfolgen (Forts.)
CHAR / VARCHAR2
Beispiel:
Es ist ein Attribut mit dem Namen Bezeichner einmal als CHAR(8) und einmal als VARCHAR(8)
deklariert. Die Unterschiede oder auch die Vor- und Nachteile werden aus der Grafik ersichtlich.
Varchar(8) A
Neueingabe:
Char(8)
Speicher
frei
eingesetzt
anders genutzt
u t o
A u t o .. .. .. ..
neuer Speicher
wird ermittelt
Wertänderung:
Varchar(8)
Au t o x y za
Char(8)
Au t ohau s
…
Au t ohaus
(19.10.2006) 10
Datentyp für Datumsdaten
DATE
Datumsinformationen (SQL 2: nur Datum, Oracle: Datum und Uhrzeit)
Oracle speichert das Datum in 7 Bytes
Jahrhundert (20. Jahrhundert voreingestellt)
Jahr
Monat
Tag
Stunden
Minuten
Sekunden
Oracle Standarteingabeformat: DD-MON-YY (15-Dec-92)
Eingabeformat durch Umgebungsvariable NLS_DATE_FORMAT
und durch die Funktion TO_DATE() veränderbar
Beispiel:
Datenbankspeicher
31-DEC-92 15:31:32
(Benutzereingabe)
20 92 12 31 15 31 32
Datumsaufbau
Datum
Uhrzeit
(19.10.2006) 11
Datentyp für Zahlen
NUMBER
natürliche und reele Zahlen
Genauigkeit 38 Stellen
Speicherung 1.Byte Exponent 2. – 21. Byte Mantisse
pos. Wertebereich 1 * 10-130 bis 9.99…9 * 10125
neg. Wertebereich -1 * 10-130 bis 9.99…9 * 10125
Dimensionierung über 2 Parameter Number(p,s)
p Anzahl der Stellen
s Anzahl der Stellen nach dem Dezimalpunkt
führende und hängende Nullen werden nicht gespeichert
Beispiel:
Möchte man nun die 567 als Nummer speichern, so findet die Speicherung der Zahl als 5.67 * 102
statt.
byte 1
Number
567 ist nach 5670 zu ändern: Number
3
4
5
6
7
8
2 567
Speicher
Mantisse
Exponent
567 ist zu speichern:
2
frei
eingesetzt
3 567
byte 1
2
3
4
5
6
7
8
(19.10.2006) 12
Datentyp
für Zahlen (Forts.)
NUMBER
Dimensionierungsbeispiele:
Number(8,2)
8 Stellen insgesamt, wovon 2 Stellen nach dem Dezimalpunkt reserviert sind
Number(*,2 )
max. 38 Stellen insgesamt mit 2 Nachkommastellen
Number(8)
8 Stellen insgesamt ohne Nachkommstellen
Number(8,-1) 8 Stellen, wobei bis auf eine Stelle vor dem Dezimaltrennzeichen gerundet wird
Dimensionierungsauswirkungen auf die Speicherung:
Wert
7456123.89
Datentyp
Auswirkung
NUMBER
7456123.89
NUMBER(9)
7456124
NUMBER(9,2)
7456123.89
NUMBER(9,1)
7456123.9
NUMBER(6)
nicht speicherbar
NUMBER(7,-2)
7456100
(19.10.2006) 13
Datentyp für binäre Daten
RAW, LONG RAW (ORACLE Vers.7 und DB2)
Mit dem Datentyp RAW können Binärdaten bis zu einer Länge von 255 Bytes, bei LONG RAW
bis zu 2 GB Daten gespeichert werden. Diese Datentypen werden genutzt, um z.B. Grafiken,
Tondokumente oder lange Texte zu speichern.
Hinweis: Leider sind diese Multimediadatentypen nicht einheitlich definiert. In SYBASE oder MSSQL-Server beispielsweise wird IMAGE an Stelle von LONG RAW verwendet.
BLOB, BFILE (ORACLE und DB2)
Mit diesen Datentypen können binäre Objekte (ORACLE 9 bis zu 4 GB, DB2 bis zu 2 GB) für
Grafiken oder Tonaufzeichnungen in der Datenbank gespeichert werden. Außerdem stehen
einige Methoden zur Verfügung, mit denen diese Objekte auf dem Server manipuliert werden
können. Bei BLOB erfolgt die Speicherung in der Datenbank, während Datenströme vom Typ
BFILE in Dateien des Dateisystems abgelegt werden
CLOB (ORACLE und DB2)
Dieser Datentyp ist eine Modifikation des Typs BLOB, er wird für große Textobjekte mit den
entsprechenden Methoden zur Verfügung gestellt.
(19.10.2006) 14
Datendefinitionssprache (DDL)
Create
Man kann nahezu jedes
Objekt (z.B. eine Tabelle)
mithilfe von
Drop
DDL
Alter




Create erzeugen
Alter verändern
Rename umbenennen
Drop löschen
Rename
(19.10.2006) 15
DDL
CREATE TABLE Anweisung:
Syntax:
CREATE TABLE Tabellenname
(<Spaltendefinition> [, <Spaltendefinition> ...]
[, <Constraint>] );
Spaltendefinition:
<Spaltendefinition> := Spaltenname <Datentyp>
[DEFAULT <Ausdruck> ]
[NOT NULL ][NULL]
[, <Constraint>]
Beispiel:
CREATE TABLE mydemo
(
Feld1
CHAR,
Feld2
VARCHAR2(1)
);
(19.10.2006) 16
DDL
CREATE TABLE Anweisung:
Hinweis:
Bezeichnungsempfehlungen:
keine Umlaute
keine Sonderzeichen
Unterstriche anstelle von Bindestriche
(19.10.2006) 17
DDL
CONSTRAINT definiert eine Integritätsbedingung für ein Tabellenattribut
NULL / NOT NULL
legt fest, dass eine Spalte NULL-Werte haben kann oder nicht haben darf.
UNIQUE
bestimmt eine oder mehrere Spalten als eindeutige Schlüssel.
PRIMARY KEY
bestimmt eine oder mehrere Spalten als Primärschlüssel
FOREIGN KEY
bestimmt eine oder mehrere Spalten als Fremdschlüssel, die der
referentiellen Integrität genügen müssen.
REFERENCES
identifiziert den Primärschlüssel, der als FOREIGN-KEY festgelegt wurde.
ON DELETE CASCADE
referentielle Integrität wird gesichert, indem automatisch Zeilen,
die diese Integrität verletzen, entfernt werden.
CHECK
legt eine Bedingung fest, die jede Zeile der Tabelle erfüllen muß.
(19.10.2006) 18
DDL
CONSTRAINT
Syntax:
<Constraint> := { [CONSTRAINT Constraintname ]
| [NULL | NOT NULL]
| [UNIQUE | PRIMARY KEY]
| [FOREIGN KEY (Spaltenname [, Spaltenname .]... ) ]
| [REFERENCES Tabellenname. ( Spaltenname
[, Spaltenname ...] ) [ON DELETE CASCADE]]
| [CHECK (<Checkbedingung>)] }
Beispiel:
CREATE TABLE mydemo
(
Feld1
CHAR CONSTRAINT PK PRIMARY KEY,
Feld2
VARCHAR2(1) NOT NULL
);
(19.10.2006) 19
DDL
COLUMN CONSTRAINT
Beispiel:
CREATE TABLE Teile
(
TNr
NUMBER(38) NOT NULL CONSTRAINT const2 PRIMARY KEY,
Me
VARCHAR2(10),
Bezeichnung
VARCHAR2(50),
Typ
VARCHAR2(50),
Herstellkosten NUMBER,
Einkaufspreis
NUMBER,
Mindestbestand NUMBER,
Bestand
NUMBER
CONSTRAINT Check_Bestand
CHECK (Bestand > 0 ),
Lieferzeit
NUMBER,
Herstelldauer
NUMBER,
Gewicht
NUMBER,
Reserviert
NUMBER,
Verfuegbar
NUMBER,
Zeitstempel
DATE
);
(19.10.2006) 20
DDL
TABLE CONSTRAINT
Beispiel:
CREATE TABLE Struktur
(
OTeil
NUMBER(38) NOT NULL,
UTeil
NUMBER(38) NOT NULL,
Position
NUMBER(38) NOT NULL,
Menge
NUMBER NOT NULL,
Ausschuss
NUMBER,
Arbeitsgang
NUMBER(38),
Zeitstempel
DATE,
CONSTRAINT const1 PRIMARY KEY (UTeil, OTeil)
);
(19.10.2006) 21
DDL
Checkbedingung
Syntax:
<Checkbedingung> := { <Ausdruck> <Vergleichsoperator> <Ausdruck>
| <Ausdruck> [NOT] BETWEEN <Ausdruck> AND Ausdruck>
| <Ausdruck> [NOT] IN ( Konstante [, Konstante ...] )
| <alphanumerischer Ausdruck> [NOT] LIKE <Schablone>
| <Ausdruck> IS [NOT] NULL }
Beispiel:
CREATE TABLE mydemo
(
Feld1
CHAR CONSTRAINT PK PRIMARY KEY,
Feld2
VARCHAR2(1),
Feld3
NUMBER(2) CONSTRAINT CW CHECK (Feld3 > 10)
)
(19.10.2006) 22
DDL
Ausdruck
Syntax:
<Ausdruck> := {<numerischer Ausdruck>
| <alphanumerischer Ausdruck>}
<numerischer Ausdruck> :=
{ numerische Konstante
| Spaltenname
| <numerischer Ausdruck> <Operator>
<numerischer Ausdruck>
| (<numerischer Ausdruck>)
| <Funktion> (<Ausdruck>) }
<alphanumerischer Ausdruck> :=
{ alphanumerische Konstante
| Spaltenname
| <Systemvariable>
| <alphanumerischer Ausdruck> ||
<alphanumerischer Ausdruck>
| (<alphanumerischer Ausdruck> )
| <Funktion> (<Ausdruck>) }
<Operator>
:= { + | - | * | / }
<Systemvariable>
:= { USER | SYSDATE | TIME | USERID }
<Schablone>
:= Ein Wort bestehend aus Wildcards und alphanumerischen Konstanten in ‘ ‘
<Funktion>
:= nur Single-Row-Funktionen
<Vergleichsoperator>:= { < | <= | > | >= | = |<> | != }
(19.10.2006) 23
DDL
CREATE TABLE Anweisung
Beispiel:
CREATE TABLE Angestellte (
Ang_Nr
NUMBER(38) NOT NULL
CONSTRAINT t_pk PRIMARY KEY,
Abt_Nr
NUMBER(38) NULL
CONSTRAINT t_fk REFERENCES
Abteilungen(Abt_Nr),
Aufgabenbeschreibung VARCHAR2(50) NOT NULL,
Beruf
VARCHAR2(50) NOT NULL,
Nachname
VARCHAR2(50) NOT NULL,
Vorname
VARCHAR2(50) NOT NULL,
Geschlecht
CHAR(1) NOT NULL,
Eintrittsdatum
DATE,
Gehalt
NUMBER(9,2) DEFAULT 0,
Abzuege
NUMBER(9,2) DEFAULT 0,
Ort
VARCHAR2(50),
Strasse
VARCHAR2(50),
Zeitstempel
DATE DEFAULT SYSDATE
);
(19.10.2006) 24
DDL
ALTER TABLE Anweisung
Mit der ALTER TABLE Anweisung können nachträglich Tabellendefinitionen verändert werden. Am
häufigsten werden mit dieser Anweisung Spalten geändert, gelöscht oder hinzugefügt. Insbesondere
können auch CONSTRAINTS hinzugefügt, nachträglich bearbeitet oder zeitweise außer Kraft
gesetzt werden.
Syntax:
ALTER TABLE Tabellenname { ADD { (<Spaltendefinition> [, <Spaltendefinition> ... ] )
|CONSTRAINT Constraintname }
| DROP { (<Spaltendefinition> [, <Spaltendefinition> ... ] )
| CONSTRAINT Constraintname }
| MODIFY (<Spaltendefinition> [, <Spaltendefinition> ... ] )}
[ENABLE { ALL TRIGGERS
| UNIQUE (Spaltenname, [, Spaltenname ...])
| PRIMARY KEY
| CONSTRAINT Constraintname } ]
[DISABLE {
ALL TRIGGERS
| UNIQUE (Spaltenname, [, Spaltenname ...])
| PRIMARY KEY
| CONSTRAINT Constraintname } ]
(19.10.2006) 25
DDL
ALTER TABLE Anweisung
Beispiele:
ALTER TABLE Teile
ADD ( Preis NUMBER);
Diese Anweisung fügt eine neue Spalte zur Teile-Tabelle hinzu.
ALTER TABLE Teile
MODIFY (Bezeichnung VARCHAR(70));
Die maximale Länge des Attributs Bezeichnung wird auf 70 Zeichen eingestellt.
ACHTUNG!!! Mit der MODIFY-Klausel können keine Datentypumwandlungen vorgenommen werden.
ALTER TABLE teile
DROP Column Art;
Die Spalte „Art“ aus der Tabellendefinition der Teile-Tabelle wird entfernt.
(19.10.2006) 26
DDL
ALTER TABLE Anweisung
Beispiele (Forts.):
ALTER TABLE Auftraege
ADD CONSTRAINT Auf_Pk PRIMARY KEY (AuftragsNr);
Primärschlüssel für die Auftrags-Tabelle fest.
ALTER TABLE Artikel
ADD CONSTRAINT Art_T_Fk FOREIGN KEY (TNr)
REFERENCES Teile (TNr);
Legt einen Fremdschlüssel für die Artikel-Tabelle fest,
der auf die Spalte TNr in der Teile-Tabelle verweist.
ALTER TABLE EMP
ADD CONTRAINT geld CHECK(SAL > 0);
Diese Anweisung legt einen Check-Constraint fest, der Veränderung
oder Neueingaben hinsichtlich SAL > 0 überprüft.
(19.10.2006) 27
DDL
DROP TABLE Anweisung
Drop entfernt eine Tabelle mit allen gespeicherten Daten von der Datenbank.
Syntax:
DROP TABLE Tabellenname [CASCADE CONSTRAINTS];
Beispiel:
DROP TABLE Angestellte CASCADE CONSTRAINTS;
Löscht die Tabelle Angestellte und alle Datensätze aus Tabellen, die durch einen
Fremdschlüssel auf Angestellte verweisen.
(19.10.2006) 28
Herunterladen