FH-Hof Standard Query Language Richard Göbel. FH-Hof Geschichte der Sprache SQL System/R-Projekts...
-
Upload
amalrich-wolgast -
Category
Documents
-
view
110 -
download
1
Transcript of FH-Hof Standard Query Language Richard Göbel. FH-Hof Geschichte der Sprache SQL System/R-Projekts...
FH-Hof
Standard Query Language
Richard Göbel
FH-Hof
Geschichte der Sprache SQL
System/R-Projekts von IBM zu Beginn der 70er
Jahre: Entwicklung der Sprache SEQUEL
Anfang der 80er Jahre erste Standardisierung
durch das American National Standards
Institute (ANSI)
Internationale Standards der ISO:
1986: SQL 1 (SQL-86)
1989: SQL-89
1992: SQL 2 (SQL-92)
1999: SQL 3
FH-Hof
Sprachumfang in dieser Veranstaltung
Aufbau einer Datenbankverbindung zu einer
von mehreren Datenbanken
Vergabe von Zugriffsrechten für Anwender
Definition von Tabellen
Einfügen, Ändern und Löschen von Einträgen
Definition von 'Views' als 'virtuelle Tabellen'
Kopieren von Daten zwischen unterschiedlichen
Tabellen
Definition von Indexstrukturen (nicht SQL-2!)
FH-Hof
Datenbankverbindungen
Syntax der Anweisungen
CONNECT TO ( DEFAULT | ( <server-id>
[ AS <con-id> ] [ USER <auth-id> ] ))
DISCONNECT ( DEFAULT | CURRENT | ALL |
<con-id> )
SET CONNECTION ( DEFAULT | <con-id> )
Bedeutung der Nichtterminalsymbole
server-id: Bezeichnung des
Datenbankservers
con-id: Bezeichnung der Verbindung
auth-id: Account des Anwenders
FH-Hof
Zugriffsrechte: Syntax
GRANT
<privilege> (, <privilege> )* | ALL PRIVILEGES
ON <object>
TO <user-id> (, <user-id>)*
[ WITH GRANT OPTION ]
REVOKE
[ GRANT OPTION FOR ]
<privilege> (, <privilege> )* | ALL PRIVILEGES
ON <object>
FROM <user-id> (, <user-id>)*
[ CASCADE ]
FH-Hof
Zugriffsrechte: Objekte und Privilegien
Objekte Tabellen
Views
weitere Objekte (z.B. Prozeduren)
Privilegien SELECT
INSERT
UPDATE
‚DELETE
Vergabe von Rechten für einzelne Spalten
(INSERT | UPDATE) [´(´ <column-name> ( , <column-name> )* ´)´]
FH-Hof
Zugriffsrechte: Beispiele
GRANT UPDATE, SELECT ON Person TO Meier;
GRANT UPDATE (PLZ, Ort, Strasse, HausNr),
SELECT ON Person TO Meier;
GRANT UPDATE (PLZ, Ort, Strasse, HausNr),
SELECT ON Person TO Meier WITH GRANT OPTION;
REVOKE UPDATE (PLZ, Ort) ON Person FROM Meier;
REVOKE GRANT OPTION FOR UPDATE (PLZ, Ort,
Strasse, HausNr), SELECT ON Person FROM
Meier;
REVOKE UPDATE (PLZ, Ort, Strasse, HausNr),
SELECT ON Person FROM Meier CASCADE;
FH-Hof
Tabellen: Syntax für Spaltendefinitionen
CREATE TABLE <tabName>
'(' <elemDef> ( , <elemDef> )* ')‘
<elemDef> ::= <colDef> | <tabConst>
<colDef> ::= <colName> <datatype>
[<defaultDef>]
[<colConst> (,
<colConst> )*]
<defaultDef> ::= DEFAULT <value>
DROP TABLE <tabName>
FH-Hof
Tabellen: Datentypen
CHAR(n), CHARACTER(n)
CHARACTER VARYING(n), VARCHAR(n)
INT, INTEGER, SMALLINT
DEC(n,m), DECIMAL(n,m) (minimal n Ziffern)
NUMERIC(n,m) (genau n
Ziffern)
FLOAT, REAL, DOUBLE PRECISION
DATE
FH-Hof
Tabellen: Beispiel I
CREATE TABLE Vorlesung
(
Nummer DEC(6),
Name CHAR(40),
Dozent DEC(6),
Stunden DEC(2) DEFAULT 4
)
FH-Hof
Tabellen: Syntax für Constraints I
<colConst> ::= ( NOT NULL
| UNIQUE
| PRIMARY KEY
| <foreign-key-spec>
| CHECK <condition> )
[ CONSTRAINT <constName> ]
<tabConst> ::=
( ( PRIMARY KEY | UNIQUE )
'(' <colName> (, <colName>)* ')‘
| FOREIGN KEY
'(' <colName> (, <colName>)* ')'
<fkSpec>
| CHECK <condition> )
[ CONSTRAINT <constName> ]
FH-Hof
Tabellen: Syntax für Constraints II
<fkSpec> := REFERENCES <tabName>
'(' <colName> (, <colName>)* ')'
FH-Hof
Tabellen: Beispiel 2
CREATE TABLE Person
(
Id DEC(6) NOT NULL PRIMARY KEY,
Name VARCHAR(40),
Geschlecht CHAR(1),
CHECK Geschlecht = ´m´ OR Geschlecht = ´f´
)
FH-Hof
Tabellen: Beispiel 3
CREATE TABLE Vorlesung
(
Nummer DEC(6) NOT NULL PRIMARY KEY,
Name CHAR(40),
Dozent DEC(6) REFERENCES Person(Id),
Stunden DEC(2) DEFAULT 4
)
FH-Hof
Tabellen: Beispiel 4
CREATE TABLE Vorlesung
(
Studiengang VARCHAR(20) NOT NULL,
Bezeichnung VARCHAR(20) NOT NULL,
Dozent DEC(6) REFERENCES Person(Id),
Stunden DEC(2) DEFAULT 4
PRIMARY KEY (Studiengang, Bezeichnung)
)
FH-Hof
Tabellen: Änderung
ALTER TABLE <table-name>
( ADD [COLUMN] ( <colDef> | <tabConst> )
| MODIFY [ COLUMN ] <colDef>
| DROP [ COLUMN ] <colName>
| DROP CONSTRAINT <constName> )
Beispiel:
ALTER TABLE Vorlesung
ADD COLUMN AnzahlStunden DEC(2)
FH-Hof
Einträge: Erzeugen, Ändern und Löschen
INSERT INTO <tabName>
['(' <colName> (, <colName>)* ')' ]
VALUES '(' <dataItem> (, <dataItem>)* ')'
DELETE FROM <tabName>
[ WHERE <condition> ]
UPDATE <tabName>
SET <colName> = <expression>
(, <colName> = <expression> )*
WHERE <condition>
FH-Hof
Einträge: Beispiele
INSERT INTO Vorlesung
VALUES (1, 'Englisch', 4, 4)
INSERT INTO Vorlesung (Dozent, Nummer, Name)
VALUES (4, 4, 'Englisch')
DELETE FROM Vorlesung WHERE Lfd_Nummer = 7
UPDATE Vorlesung
SET Name = ´Datenbanksysteme I´
WHERE Name = ´Datenbanksysteme´
FH-Hof
Anfragen: Konzept
Operationen auf Tupeln wie Projektionen und
Kreuzprodukte
Unterstützung aller Mengenoperationen wie
Vereinigung, Durchschnitt und Restmenge.
Selektionsoperationen auf Spaltenwerte mit
Prädikaten '<', ‘<=', '=', ‘>=', '>' und '<>'
Logische Verknüpfungen von Suchbedingungen
mit 'AND', 'OR' und 'NOT'.
FH-Hof
Anfragen: Einfache Anfrage
Komponenten einer einfachen Anfrage
SELECT * | ( <colName> (, <colName>)* )
FROM <tabName> (, <tabName>)*
[ WHERE <condition> ]
Ausdrücke statt Spaltennamen möglich
Eine Suchanfrage kann weitere Komponenten
enthalten
FH-Hof
Anfragen: Beispiele 1
SELECT Name
FROM Vorlesung
WHERE Lfd_Nummer >= 4 AND Dozent = 2
SELECT Vorlesung.name, Dozent.name
FROM Vorlesung, Dozent
WHERE Dozent = Personalnummer
SELECT v.name, d.name
FROM Vorlesung v, Dozent d
WHERE Dozent = Personalnummer
SELECT a.Vorlesung, b.Vorlesung
FROM Termine a, Termine b
WHERE a.Wochentag = b.Wochentag
AND a.Anfang = b.Anfang
AND a.Vorlesung < b.Vorlesung
FH-Hof
Anfragen: Join-Syntax für FROM-Klausel
. . . A JOIN B [ ON x = y, . . . ] . . .
. . . A NATURAL JOIN B [ USING (x, . . .) ] . . .
. . . A FULL OUTER JOIN B [ ON x =
y, . . . ] . . .
. . . A LEFT OUTER JOIN B [ ON x =
y, . . . ] . . .
. . . A RIGHT OUTER JOIN B [ ON x = y, . . . ] .
. .
FH-Hof
Anfragen: Beispiele 2
SELECT v.name, d.name
FROM Vorlesung v JOIN Dozent d
ON Dozent = Personalnummer
SELECT Name, Wochentag, Anfang, Ende, Raum
FROM Vorlesung NATURAL JOIN Termine
SELECT v.name, d.name
FROM Vorlesung v LEFT OUTER JOIN Dozent d
ON Dozent = Personalnummer
FH-Hof
Anfragen mit Unteranfragen
SELECT . . .
FROM . . .
WHERE . . . X IN (SELECT . . .) . . .
SELECT . . .
FROM . . .
WHERE . . . EXISTS (SELECT . . .) . . .
SELECT . . .
FROM . . .
WHERE . . . UNIQUE (SELECT . . .) . . .
FH-Hof
Anfragen: Beispiel 3
SELECT name
FROM Vorlesung
WHERE Nummer IN
(SELECT Vorlesung
FROM Termine
WHERE Wochentag = 'Mittwoch');
FH-Hof
Anfragen: Mengenoperationen
SELECT . . .
FROM . . .
WHERE . . .
UNION | INTERSECT | EXCEPT
SELECT . . .
FROM . . .
WHERE . . .
FH-Hof
Anfragen: Ausdrücke in Suchbedingungen
SELECT a.Vorlesung, a.Wochentag,
a.Ende, b.Vorlesung
FROM Termine a, Termine b
WHERE TO_NUMBER(a.Ende) + 15 =
TO_NUMBER(b.Anfang)
AND a.Wochentag = b.Wochentag
FH-Hof
Anfragen: Aggregatfunktionen
COUNT
AVG
MAX
MIN
SUM
FH-Hof
Anfragen: Beispiele 4
SELECT COUNT(*)
FROM Vorlesung
SELECT MIN(Personalnummer)
FROM Dozent
FH-Hof
Anfragen: Gruppieren von Einträgen
SELECT Wochentag, count(*)
FROM Termine
GROUP BY Wochentag
SELECT Wochentag, count(*)
FROM Termine
GROUP BY Wochentag
HAVING count(*) > 1
FH-Hof
Anfragen: Schlüsselwort DISTINCT
SELECT Dozent
FROM Vorlesung
SELECT ALL Dozent
FROM Vorlesung
SELECT DISTINCT Dozent
FROM Vorlesung
FH-Hof
Anfragen: Sortieren von Ergebnissen
SELECT Personalnummer, Name, Geburtstag
FROM Dozent
ORDER BY Geburtstag DESC, Name ASC
FH-Hof
VIEWS: Syntax
CREATE VIEW <viewName>
[ '(' <colName> (, <colName>)* ')' ]
AS <select-expression>
DROP VIEW <viewName>
FH-Hof
VIEWS: Beispiel
CREATE VIEW Vorlesung2(Nummer, Vorlesungsname)
AS SELECT Nummer, Name
FROM Vorlesung
WHERE Dozent = 2
FH-Hof
Kopieren: Syntax
INSERT INTO <tabName>
['(' <colName> (, <colName>)* ')']
<select-expression>
FH-Hof
Kopieren: Beispiel
CREATE TABLE VorlesungNeu
(
Nummer DEC(6) NOT NULL,
Name CHAR(40),
Dozent CHAR(40),
PRIMARY KEY (Nummer)
)
INSERT INTO VorlesungNeu
SELECT Nummer, Vorlesung.Name, Dozent.Name
FROM Vorlesung v, Dozent d
WHERE v.Dozent = d.Personalnummer