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 : 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 | ( [ AS ] [ USER ] )) DISCONNECT ( DEFAULT | CURRENT | ALL | ) SET CONNECTION ( DEFAULT | ) Bedeutung der Nichtterminalsymbole server-id:Bezeichnung des Datenbankservers con-id: Bezeichnung der Verbindung auth-id: Account des Anwenders
FH-Hof Zugriffsrechte: Syntax GRANT (, )* | ALL PRIVILEGES ON TO (, )* [ WITH GRANT OPTION ] REVOKE [ GRANT OPTION FOR ] (, )* | ALL PRIVILEGES ON FROM (, )* [ 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) [´(´ (, )* ´)´]
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 '(' (, )* ') ::= | ::= [ ] [ (, )*] ::= DEFAULT DROP TABLE
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 ( NummerDEC(6), NameCHAR(40), DozentDEC(6), StundenDEC(2) DEFAULT 4 )
FH-Hof Tabellen: Syntax für Constraints I ::= ( NOT NULL | UNIQUE | PRIMARY KEY | | CHECK ) [ CONSTRAINT ] ::= ( ( PRIMARY KEY | UNIQUE ) '(' (, )* ') | FOREIGN KEY '(' (, )* ')' | CHECK ) [ CONSTRAINT ]
FH-Hof Tabellen: Syntax für Constraints II := REFERENCES '(' (, )* ')'
FH-Hof Tabellen: Beispiel 2 CREATE TABLE Person ( IdDEC(6) NOT NULL PRIMARY KEY, NameVARCHAR(40), GeschlechtCHAR(1), CHECK Geschlecht = ´m´ OR Geschlecht = ´f´ )
FH-Hof Tabellen: Beispiel 3 CREATE TABLE Vorlesung ( NummerDEC(6) NOT NULL PRIMARY KEY, NameCHAR(40), DozentDEC(6) REFERENCES Person(Id), StundenDEC(2) DEFAULT 4 )
FH-Hof Tabellen: Beispiel 4 CREATE TABLE Vorlesung ( StudiengangVARCHAR(20) NOT NULL, BezeichnungVARCHAR(20) NOT NULL, DozentDEC(6) REFERENCES Person(Id), StundenDEC(2) DEFAULT 4 PRIMARY KEY (Studiengang, Bezeichnung) )
FH-Hof Tabellen: Änderung ALTER TABLE (ADD [COLUMN] ( | ) |MODIFY [ COLUMN ] |DROP [ COLUMN ] |DROP CONSTRAINT ) Beispiel: ALTER TABLE Vorlesung ADD COLUMN AnzahlStunden DEC(2)
FH-Hof Einträge: Erzeugen, Ändern und Löschen INSERT INTO ['(' (, )* ')' ] VALUES '(' (, )* ')' DELETE FROM [ WHERE ] UPDATE SET = (, = )* WHERE
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 * | ( (, )* ) FROM (, )* [ WHERE ] Ausdrücke statt Spaltennamen möglich Eine Suchanfrage kann weitere Komponenten enthalten
FH-Hof Anfragen: Beispiele 1 SELECTName FROMVorlesung WHERELfd_Nummer >= 4 AND Dozent = 2 SELECTVorlesung.name, Dozent.name FROMVorlesung, Dozent WHEREDozent = Personalnummer SELECT v.name, d.name FROMVorlesung v, Dozent d WHEREDozent = Personalnummer SELECTa.Vorlesung, b.Vorlesung FROMTermine a, Termine b WHEREa.Wochentag = b.Wochentag ANDa.Anfang = b.Anfang ANDa.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 SELECTv.name, d.name FROMVorlesung v JOIN Dozent d ONDozent = Personalnummer SELECTName, Wochentag, Anfang, Ende, Raum FROMVorlesung NATURAL JOIN Termine SELECT v.name, d.name FROMVorlesung 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 SELECTname FROMVorlesung WHERENummer 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 SELECTa.Vorlesung, a.Wochentag, a.Ende, b.Vorlesung FROMTermine a, Termine b WHERETO_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 [ '(' (, )* ')' ] AS DROP VIEW
FH-Hof VIEWS: Beispiel CREATE VIEW Vorlesung2(Nummer, Vorlesungsname) AS SELECT Nummer, Name FROM Vorlesung WHERE Dozent = 2
FH-Hof Kopieren: Syntax INSERT INTO ['(' (, )* ')']
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