fh-hof standard query language richard göbel. fh-hof geschichte der sprache sql system/r-projekts...

36
FH-Hof Standard Query Language Richard Göbel

Upload: amalrich-wolgast

Post on 05-Apr-2015

109 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 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

FH-Hof

Standard Query Language

Richard Göbel

Page 2: 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

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

Page 3: 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

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

Page 4: 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

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

Page 5: 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

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 ]

Page 6: 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

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> )* ´)´]

Page 7: 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

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;

Page 8: 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

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>

Page 9: 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

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

Page 10: 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

FH-Hof

Tabellen: Beispiel I

CREATE TABLE Vorlesung

(

Nummer DEC(6),

Name CHAR(40),

Dozent DEC(6),

Stunden DEC(2) DEFAULT 4

)

Page 11: 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

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> ]

Page 12: 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

FH-Hof

Tabellen: Syntax für Constraints II

<fkSpec> := REFERENCES <tabName>

'(' <colName> (, <colName>)* ')'

Page 13: 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

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´

)

Page 14: 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

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

)

Page 15: 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

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)

)

Page 16: 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

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)

Page 17: 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

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>

Page 18: 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

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´

Page 19: 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

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'.

Page 20: 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

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

Page 21: 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

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

Page 22: 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

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, . . . ] .

. .

Page 23: 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

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

Page 24: 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

FH-Hof

Anfragen mit Unteranfragen

SELECT . . .

FROM . . .

WHERE . . . X IN (SELECT . . .) . . .

SELECT . . .

FROM . . .

WHERE . . . EXISTS (SELECT . . .) . . .

SELECT . . .

FROM . . .

WHERE . . . UNIQUE (SELECT . . .) . . .

Page 25: 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

FH-Hof

Anfragen: Beispiel 3

SELECT name

FROM Vorlesung

WHERE Nummer IN

(SELECT Vorlesung

FROM Termine

WHERE Wochentag = 'Mittwoch');

Page 26: 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

FH-Hof

Anfragen: Mengenoperationen

SELECT . . .

FROM . . .

WHERE . . .

UNION | INTERSECT | EXCEPT

SELECT . . .

FROM . . .

WHERE . . .

Page 27: 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

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

Page 28: 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

FH-Hof

Anfragen: Aggregatfunktionen

COUNT

AVG

MAX

MIN

SUM

Page 29: 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

FH-Hof

Anfragen: Beispiele 4

SELECT COUNT(*)

FROM Vorlesung

SELECT MIN(Personalnummer)

FROM Dozent

Page 30: 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

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

Page 31: 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

FH-Hof

Anfragen: Schlüsselwort DISTINCT

SELECT Dozent

FROM Vorlesung

SELECT ALL Dozent

FROM Vorlesung

SELECT DISTINCT Dozent

FROM Vorlesung

Page 32: 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

FH-Hof

Anfragen: Sortieren von Ergebnissen

SELECT Personalnummer, Name, Geburtstag

FROM Dozent

ORDER BY Geburtstag DESC, Name ASC

Page 33: 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

FH-Hof

VIEWS: Syntax

CREATE VIEW <viewName>

[ '(' <colName> (, <colName>)* ')' ]

AS <select-expression>

DROP VIEW <viewName>

Page 34: 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

FH-Hof

VIEWS: Beispiel

CREATE VIEW Vorlesung2(Nummer, Vorlesungsname)

AS SELECT Nummer, Name

FROM Vorlesung

WHERE Dozent = 2

Page 35: 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

FH-Hof

Kopieren: Syntax

INSERT INTO <tabName>

['(' <colName> (, <colName>)* ')']

<select-expression>

Page 36: 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

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