1.4 SQL Einführung 1.4 SQL Einführung 1.4 SQL Einführung 1.4

Werbung
1.4 SQL Einführung
1.4 SQL Einführung
Relationale Datenbanksprachen:
SQL est omnis divisa in partes tres:
• SQL - Structured Query Language
I Als SEQUEL 1974-77 bei IBM für System R entwickelt
I ANSI/ISO Standards: SQL (1986), SQL2 (1992), SQL3 (1999)
I die meisten heutigen DBS unterstützen eine Obermenge einer
Untermenge von SQL2
• QUEL - Query Language
I zeitgleich zu SQL für Ingres an Berkeley University entwickelt
I trotz Überlegenheit zu SQL in vielen Bereichen“ (Date) keine
”
Marktdurchdringung
Hochschule Niederrhein
University of Applied Sciences
Abfrage und Manipulation der Daten
Kommandos: select, insert, update, delete
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -3-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4 SQL Einführung
SQL rein sequentielle Sprache
SQL Syntax
• Kommandos werden sequentiell abgearbeitet
• Kommandos durch Semikolon (;) getrennt
• keine Programmiersprache. Insbesondere fehlen
(nicht immer: in SQL-Interpreter ja, in ESQL nicht)
Variablen, Kontrollflusssteuerung, Prozeduren
• Key words und Identifier nicht case sensitive
• SQL muss in im allgemeinen in Host-Language“
”
Ausnahme: quoted Identifier (z.B. "Bla" 6= bla)
Zulässige Identifier: [ a-z][ a-z0-9]*
Es gibt prozedurale Erweiterungen
• String Konstanten in single quotes (’bla bla’)
• PL/SQL (Oracle) und PL/PgSQL (PostgreSQL)
Single quotes in Strings escaped durch verdoppeln
(’Peter’’s house’)
• Persistend Stored Modules (PSM) in ANSI SQL3
PL/SQL werden wir im Zusammenhang mit
Stored Procedures und Triggern behandeln
• einzeilige Kommentare durch Doppelminus (-- Kommentar)
mehrzeilige Kommentare wie in C (/*Kommentar*/) SQL3
erlaubt geschachtelte Kommentare (/*/*bla*/*/)
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -2-
• DML - Data Manipulation Language
Steuerung Datenzugriff und Datensicherheit
Kommandos: grant, revoke, begin, commit, rollback
1.4 SQL Einführung
eingebettet werden
Definieren und Ändern von Strukturen
Kommandos: create, alter, drop
• DCL - Data Control Language
• QBE - Query by Example
I intuitiver grafischer Zugriff
I in Frontends für Joe User“ realisiert (z.B. MS Access)
”
Dalitz: Datenbanksysteme Kap1.4. -1-
• DDL - Data Definition Language
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -4-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4 SQL Einführung
1.4.1 SQL-DDL
Laufendes Beispiel:
Hersteller
hnr#
name
stadt
H1
H2
H3
Henkel
Pelikan
Brause
Düsseldorf
Hannover
Iserlohn
pnr#
name
preis
hnr
P1
P2
P3
P4
Pritt
Uhu
Tinte
Füller
2.50
2.70
3.20
12.98
H1
H1
H2
H2
Produkt
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -5-
University of Applied Sciences
Datentyp
Beschreibung
character(n)
char(n)
String der Länge n, am Ende ggf.
mit Blanks aufgefüllt
char varying(n)
varchar(n)
String variabler Länge (maximal n)
im allg. gegenüber char vorzuziehen
integer
int
Ganzzahl mit Vorzeichen
Postgres unterscheidet int2, int4, int8
numeric(n,m)
numeric(n)
Dezimalzahl mit n Stellen, davon m nach
dem Komma; numeric(n) = numeric(n,0)
bool
true, false oder unknown (NULL)
date
Datum (4 Bytes, tagesgenau)
time
Uhrzeit (8 Bytes, mikrosekundengenau)
timestamp
Datum und Uhrzeit
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.1 SQL-DDL
Hochschule Niederrhein
University of Applied Sciences
Dalitz: Datenbanksysteme Kap1.4. -7-
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.1 SQL-DDL
Anlegen einer Tabelle
Constraints
• Constraints werden nach den Felddefinitionen angegeben
CREATE TABLE tabellenname (
• Constraints, die sich nur auf ein Feld beziehen,
können direkt bei der Felddefinition angegeben werden
feld1 datentyp1,
feld2 datentyp2,
...
...,
• optional können Constraints mit Namen versehen werden
CREATE TABLE example1 (
a integer,
b integer,
c varchar(2) REFERENCES example2(a),
PRIMARY KEY (feldn, ...),
weitere_constraints
);
PRIMARY KEY (a,b),
CONSTRAINT check_b CHECK (b > 0)
Mögliche Datentypen hängen vom konkreten DBS ab
);
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -6-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -8-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.1 SQL-DDL
1.4.1 SQL-DDL
Mögliche Constraints (1):
Anlegen des Beispiels hersteller, produkt:
• NOT NULL
I Feld darf nicht leer (NULL) sein
I Angabe nur möglich in Spaltendefinition
• UNIQUE
I Feldwert muss eindeutig sein
I mehrfache Nullwerte sind aber zulässig
• CHECK (bedingung)
I Bedingungen für Feldwerte
I alle Felder in Bedingung müssen aus der Tabelle stammen
Hochschule Niederrhein
University of Applied Sciences
Dalitz: Datenbanksysteme Kap1.4. -9-
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.1 SQL-DDL
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -11-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.1 SQL-DDL
Mögliche Constraints (2):
Auch andere Datenbankobjekte (z.B. index)
werden mit create angelegt
• PRIMARY KEY (felder)
I formal identisch zu Unique + Not Null
I pro Tabelle nur maximal ein Primary Key möglich
Beispiel:
CREATE INDEX produkt_i1
ON produkt (hnr);
• FOREIGN KEY (felder) REFERENCES tabelle (felder)
I referenziert Primary Key anderer Tabelle
I Wert darf aber NULL sein
I Verhalten bei Änderung in Referenztabelle spezifizierbar
(z.B. on update cascade, on delete set null)
Eindeutiger Index:
CREATE UNIQUE INDEX ...
Ausführliche Dokumentation siehe
ddl-constraints.ps.gz (Homepage zur Vorlesung)
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -10-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -12-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.1 SQL-DDL
1.4.2 SQL-DML
Ändern von Strukturen
Einfügen von Datensätzen
• Löschen mit drop
INSERT INTO hersteller (
DROP INDEX produkt_i1;
DROP TABLE produkt;
hnr, name, stadt
) VALUES (
• Ändern mit alter table
’H1’, ’Henkel’, ’Düsseldorf’
ALTER TABLE produkt
ADD FOREIGN KEY (hnr)
REFERENCES hersteller(hnr);
);
Die Attributliste kann weggelassen werden.
Nicht zu empfehlen! (Warum?)
ALTER TABLE hersteller
ADD COLUMN strasse VARCHAR(30);
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -13-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
Es müssen nicht alle Spalten angegeben werden:
Kommandos zur Datenmanipulation
INSERT INTO produkt (pnr, name)
VALUES (’P5’, ’Papier’);
• insert
Einfügen eines neuen Datensatzes
Ergebnis:
• update
Änderung von Feldwerten
• delete
Löschen von Datensätzen
komplette Tabelle auch mit truncate
• select
Auswahl von Daten. Ausgabe ist wieder Tabelle
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -14-
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -15-
University of Applied Sciences
pnr#
name
preis
hnr
P1
P2
P3
P4
P5
Pritt
Uhu
Tinte
Füller
Papier
2.50
2.70
3.20
12.98
NULL
H1
H1
H2
H2
NULL
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -16-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
1.4.2 SQL-DML
Anstelle der values-Klausel kann auch select stehen:
Where-Klausel
INSERT INTO produkt (pnr, name)
SELECT a, b FROM other_table;
• Weglassen where-Klausel
⇒ alle Sätze betroffen
UPDATE produkt
SET preis = preis * 2;
Bemerkungen:
• Beschreibung von select siehe unten
• Datentypen von a,b und pnr,name müssen zusammenpassen
• Zulässige Vergleichsoperatoren und Behandlung
von NULL-Werten später bei select
• Ermöglicht Einlesen von Daten aus anderer Tabelle,
nicht jedoch aus einer Datei.
• Zugewiesener Wert kann auch Ergebnis eines
Dafür gibt es Datenbankspezifische Tools, z.B. sqlldr (Oracle)
oder den Befehl \copy in psql (PostgreSQL)
Hochschule Niederrhein
University of Applied Sciences
Dalitz: Datenbanksysteme Kap1.4. -17-
select sein (”Subselect”)
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
Hochschule Niederrhein
University of Applied Sciences
Dalitz: Datenbanksysteme Kap1.4. -19-
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
Ändern von Datensätzen
Löschen von Datensätzen
DELETE FROM produkt WHERE preis > 3;
UPDATE hersteller SET
name = ’Soennecken’,
stadt = NULL
WHERE hnr = ’H3’;
Ergebnis:
pnr#
name
P1
P2
Pritt
Uhu
preis
2.50
2.70
hnr
H1
H1
Ergebnis:
Löschen aller Datensätze
hnr#
name
stadt
H1
H2
H3
Henkel
Pelikan
Soennecken
Düsseldorf
Hannover
NULL
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -18-
University of Applied Sciences
DELETE FROM produkt;
TRUNCATE TABLE produkt;
Unterschied: truncate nicht in Transaktion
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -20-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
1.4.2 SQL-DML
Demonstrationsbeispiele
Selektion von Daten
SELECT name, preis FROM produkt
where preis > 3;
• SELECT * FROM produkt;
• SELECT name AS "Name",
Project
Restrict
preis AS Brutto FROM produkt;
pnr#
name
preis
hnr
P1
P2
P3
P4
Pritt
Uhu
Tinte
Füller
2.50
2.70
3.20
12.98
H1
H1
H2
H2
• SELECT ’bla’, name FROM produkt
WHERE name >’S’;
• SELECT ’bla’ FROM produkt;
Hochschule Niederrhein
University of Applied Sciences
Dalitz: Datenbanksysteme Kap1.4. -21-
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
Hochschule Niederrhein
University of Applied Sciences
Dalitz: Datenbanksysteme Kap1.4. -23-
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
Die Spaltenauswahl
Operatoren in where-Klausel
• Stern (*) ist Abkürzung für alle Spalten
SELECT * FROM produkt;
• Umbenennung Spalten des Ergebnisses möglich
SELECT
name AS "Name",
preis AS "Brutto"
FROM produkt;
• Auch Konstanten können selektiert werden
Operator
Beschreibung
=,>,<,>=,<=
gleich, größer, kleiner
<>
ungleich, Postgres: auch !=
BETWEEN x AND y
Bereichsprüfung
LIKE
Pattern matching mit Wildcards
_ (ein Zeichen), % (beliebig viele)
SIMILAR TO
Pattern matching mit Posix 1003.2
regulären Ausdrücken (SQL3)
IS (NOT) NULL
Prüfung, ob Feld (nicht) leer ist
SELECT ’bla’, name FROM produkt;
Verknüpfung von Bedingungen mit AND und OR
Negation mit NOT
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -22-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -24-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
1.4.2 SQL-DML
Behandlung von NULL-Werten
normale SQL-Funktionen
• NULL-Werte werden weder durch =“
”
noch durch <>“ oder !=“ erwischt
”
”
Typumwandlung kompatibler Datentypen mit cast:
CAST (preis AS FLOAT)
• explizites Prüfen mit IS NULL“ nötig
”
Bemerkungen:
• dreiwertige Logik: true, false, unknown
• bitte absurde Syntax beachten: AS“ statt ,“
”
”
Beispiel für Unstrukturiertheit von S“QL
”
Insbesondere ist z.B. das Gegenteil von
• die meisten DBS führen auch implizite Casts durch
feld1 > 2
z.B. castet Postgres ’...’ - Konstanten nach Bedarf
Empfehlung: keine optimistischen Annahmen machen!
nicht feld1 <= 2“, sondern
”
(feld1 <= 2) OR (feld1 IS NULL)
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -25-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
Faculty of Electrical Engineering
and Computer Science
CAST (’01.02.02’ AS DATE)
Ergebnis abhängig vom eingestellten Datumsformat
(Parameter des Servers oder der Client-Session):
normale“ Funktionen
”
I
Elektrotechnik
und Informatik
Cast kann mehrdeutig sein:
SQL kennt zwei Klassen von Funktionen:
I
University of Applied Sciences
1.4.2 SQL-DML
SQL-Funktionen
•
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -27-
werden auf einzelne Argumente angewandt
Typumwandlung, binäre Operatoren, Stringfunktionen,
Datumsfunktionen, ...
01. Februar 2002
02. Januar 2002
02. Februar 2001
• Aggregatfunktionen
I
I
Lösung:
werden auf komplette Spalte einer Query angewandt
Maximum, Summe, Mittelwert, Anzahl,
Auswahl verschiedener Werte (distinct), ...
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -26-
University of Applied Sciences
• Formatierte Umwandlung mit to date
• Analog: to char, to number, to time(stamp)
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -28-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
1.4.2 SQL-DML
Datumsformatierung
Zahlenformatierung
to_date (’01.02.02’, ’DD.MM.YY’)
to_char (einfuehrung, ’DD.MM.YYYY’)
to_number (’11-’, ’99S’)
to_char (preis, ’099.99’)
Formatkennzeichen
Beschreibung
Formatkennzeichen
Beschreibung
YYYY, YY
MM
Month, Mon
DD, DDD
D
HH24, HH am
MI, SS
Jahr vierstellig, zweistellig
Monat (01-12)
Monat als Text (”Januar”, ”Jan”)
Tag des Monats (01-31), Jahres (001-366)
Tag der Woche (1-7, Sonntag=1)
Stunde (00-23), (01-12) mit am/pm
Minute (00-59), Sekunde (00-59)
9
0
S
PL
. ,
D G
Ziffer ohne führende Nullen
Ziffer mit führender Null
Minus-Zeichen bei negativen Zahlen
Minus- oder Plus-Zeichen
Dezimalpunkt und Tausendergruppe
Dezimalpunkt und Tausendergruppe
unter Berücksichtigung von locale
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -29-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -31-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
Beispielabfrage:
Überblick aller seit 1982 eingeführten Produkte
Stringfunktionen
Funktion
Beschreibung
str1 || str2
lower(str), upper(str)
substr(str, pos, len)
substring(str FROM pos FOR len)
trim(str [, chars])
trim([chars] FROM str)
translate(str, from, to)
String Concatenation
Conversion to lower, upper case
Extraktion Teilstring (pos0=1)
abstruse SQL2 Syntax
vorn und hinten abschneiden
SQL2 Syntax
Character Translation
Beispiel:
SELECT upper(name) || ’ kostet ’ ||
trim(to_char(preis,’99D99’)) || ’ EUR.’
AS "Preisliste" FROM produkt;
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -30-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -32-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
1.4.2 SQL-DML
Mathematische Funktionen
Überblick Aggregatfunktionen
Funktion
Beschreibung
Aggregatfunktion
Beschreibung
+ - * /
abs(x)
trunc(x [, n])
round(x [, n])
arithmetische Operatoren
Absolutwert
abschneiden auf n Nachkommastellen
runden auf n Nachkommastellen
count()
min(), max()
sum(), avg()
Anzahl
Minimum, Maximum
Summe, Mittelwert
Bemerkungen:
Datumsfunktionen
• Bei Stern“ Aufrufmodus wird keine Spalte angegeben
”
⇒ nur bei count sinnvoll
Funktion
Beschreibung
current_date
current_timestamp
age([ts1,] ts2)
extract(feld FROM ts)
Aktuelles Datum oder Uhrzeit
SQL3: keine Klammern!
Intervall ts1 - ts2
Feldextraktion (z.B. year)
Hochschule Niederrhein
University of Applied Sciences
Dalitz: Datenbanksysteme Kap1.4. -33-
• Außer bei count wird NULL zurückgegeben, wenn
nichts selektiert wurde
Insbesondere gibt sum dann nicht 0 zurück, sondern NULL
(kann bei Bedarf mit case umgangen werden)
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
Hochschule Niederrhein
University of Applied Sciences
Dalitz: Datenbanksysteme Kap1.4. -35-
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
Aggregatfunktionen
Sortieren und Gruppieren
• Berechenen einen Wert aus kompletter Spalte
Sortierung mittels order by:
eines Abfrageergebnisses (z.B. Maximum)
SELECT name, preis FROM produkt
ORDER BY name ASC;
• Aufrufmodi
I
I
I
Berücksichtigung aller not null Werte
aggregate_func (expression)
aggregate_func (ALL expression)
Bemerkungen:
• Modifier asc (default) oder desc für Sortierreihenfolge
• Sortierspalte muss in Spaltenliste vorkommen
Berücksichtigung verschiedener not null Werte
aggregate_func (DISTINCT expression)
• mehrere Spalten in order by durch Komma trennen
• statt Spaltenname kann auch Index in vorheriger
Berücksichtigung sämtlicher (incl. NULL) Werte
aggregate_func ( * )
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -34-
University of Applied Sciences
Spaltenliste verwendet werden (order by 1)
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -36-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
1.4.2 SQL-DML
Gruppierung mittels group by
Demonstration where versus having:
Frage:
• SELECT hnr, count(*), max(preis)
Welcher Hersteller stellt wieviele Produkte her?
FROM produkt
WHERE preis > 5
GROUP BY hnr;
Antwort:
SELECT hnr, count(pnr) FROM produkt
GROUP BY hnr;
• SELECT hnr, count(*), max(preis)
Bemerkungen:
FROM produkt
GROUP BY hnr
HAVING max(preis) > 5;
• ohne group by ist Abfrage fehlerhaft (Warum?)
• pnr muss aggregiert werden, da verschiedene Werte
innerhalb einer Gruppe auftreten können
• Gruppierspalte sollte in Spaltenliste auftauchen
Hochschule Niederrhein
University of Applied Sciences
Dalitz: Datenbanksysteme Kap1.4. -37-
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Joins
Frage:
Wunsch:
Welche Hersteller haben höchstens zwei Produkte?
Produktliste mit Herstellername statt hnr
Antwort:
Naiver Ansatz
SELECT hnr, count(*) FROM produkt
GROUP BY hnr HAVING count(*)<=2;
SELECT hersteller.name, produkt.name
FROM produkt, hersteller ORDER BY 1,2;
Bemerkung:
Bedingung in where-Klausel nicht möglich
I
University of Applied Sciences
1.4.2 SQL-DML
Ergebniseinschränkung mittels having:
I
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -39-
liefert nicht gewünschtes Ergebnis (Warum?)
where-Bedingung wird vor Gruppenbildung angewandt
Aggregatfunktionen in where-Klausel sinnlos
Lösung:
Join über gemeinsame Spalte hnr
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -38-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -40-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
1.4.2 SQL-DML
Outer Join
SELECT hersteller.name, produkt.name
FROM produkt, hersteller
WHERE produkt.hnr = hersteller.hnr
ORDER BY 1,2;
SELECT hersteller.name, produkt.name
FROM hersteller LEFT OUTER JOIN produkt
ON hersteller.hnr = produkt.hnr;
Bemerkungen:
• Verbundspalte muss selben Typ haben (ggf. casten)
Bemerkungen:
• Tabellen können über Aliasnamen referenziert werden
• Schlüsselwort OUTER ist optional
SELECT a.name, b.name
FROM hersteller a, produkt b ...
• Modifier LEFT, RIGHT oder FULL bestimmt, welche Tabelle
vollständig ausgewertet werden soll
• keine Doubletten im Ergebnis mittels select distinct ...
• Mehrere Join-Spalten durch AND in ON-Klausel kombinieren
• Hierbei handelt es sich um einen Inner Join:
Ergebnis enthält nur Sätze, die in beiden Tabellen vorkommen.
Im Beispiel fehlt also Brause“.
”
Hochschule Niederrhein
University of Applied Sciences
Dalitz: Datenbanksysteme Kap1.4. -41-
• Zusätzliche WHERE-Klausel kann nach ON-Klausel folgen
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
Hochschule Niederrhein
University of Applied Sciences
Dalitz: Datenbanksysteme Kap1.4. -43-
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
Äquivalente Abfragen mit Inner Join:
Union, Intersect, Except
Kombination von Abfragen mit selben Ergebnisspalten
durch Mengenoperationen
• SELECT hersteller.name, produkt.name
FROM produkt, hersteller
WHERE produkt.hnr = hersteller.hnr;
• Union - Vereinigungsmenge
• Intersect - Schnittmenge
• SELECT hersteller.name, produkt.name
FROM produkt JOIN hersteller
on produkt.hnr = hersteller.hnr;
• Except - Differenzmenge
Achtung:
Bemerkung:
statt nur JOIN kann es auch ausführlicher INNER JOIN heißen
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -42-
University of Applied Sciences
Tatsächlich Mengenoperationen, dh.
Doubletten werden entfernt!
Wenn unerwünscht, Modifier ALL verwenden
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -44-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
1.4.2 SQL-DML
Beispiel
SELECT ’Max’ AS
max(preis) AS
FROM produkt
UNION
SELECT ’Min’ AS
min(preis) AS
FROM produkt;
Wenn die Subquery nur eine Spalte selektiert,
kann das Ergebnis einer Abfrage auch innerhalb
einer where-Bedingung verwendet werden:
" ",
"Wert"
SELECT * FROM produkt
WHERE preis =
(SELECT max(preis) FROM produkt);
" ",
"Wert"
Bemerkungen:
• Abfrage select *, max(preis) from produkt;
Bemerkungen:
nicht möglich (Warum?)
• Selektierte Spalten müssen selben Typ haben
• hier kein Tabellenkonstruktor, weil Ergebnis nicht als
• Spaltenalias ist nicht zwingend erforderlich, aber für
Tabelle verwendet wird
Überschrift sinnvoll
• Verwendung in where-Klausel von update, delete genauso
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -45-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML (34)
Verwendung Subquery in where-Klausel:
Subqueries
Ergebnis einer Abfrage kann als Unterabfrage (engl.
subquery) anstelle einer Tabelle verwendet werden
• Vergleich mit =“, wenn Subquery genau
”
einen Wert zurückliefert
SELECT x.nr FROM
( SELECT nr, name FROM produkt
WHERE preis > 5.0 ) x;
• Vergleich mit IN“, wenn Subquery
”
mehrere Werte zurückliefern kann
• Alternative zu IN“ ist Formulierung über
Bemerkungen:
• x ist Bezeichner für die von Subquery zurückgegebene Tabelle
• die Klammern (...) und der Name x um die select-Anweisung
wirken als Tabellenkonstruktor einer neuen Tabelle x
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -46-
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -47-
University of Applied Sciences
”
EXISTS“ als correlated Subquery
”
Bemerkung:
Die exists Variante ist oft schneller
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -48-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
1.4.2 SQL-DML
IN versus EXISTS
ALL und ANY
• Vergleichsoperationen wenn Subquery
SELECT * FROM hersteller
WHERE hnr IN (
SELECT hnr FROM produkt
WHERE preis > ’3.0’
);
mehrere Tupel zurückgibt
SELECT * FROM hersteller
WHERE EXISTS (
SELECT hnr FROM produkt
WHERE preis > ’3.0’
AND produkt.hnr = hersteller.hnr
);
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -49-
University of Applied Sciences
I
Bedingung muss auf alle Treffer passen:
SELECT * FROM produkt
WHERE preis >= ALL (
SELECT preis FROM produkt
);
I
Bedingung muss auf mindestens einen Treffer passen:
SELECT * FROM produkt
WHERE preis > ANY (
SELECT preis FROM produkt
);
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.2 SQL-DML
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -51-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.3 SQL-DCL
Data Control Language für Datenschutz/-sicherheit:
SELECT * FROM hersteller WHERE EXISTS
( SELECT hnr FROM produkt
WHERE preis > ’3.0’
AND produkt.hnr = hersteller.hnr );
• Sicherheit vor fehlerhaften Zugriffen
I
I
Stichwort Transaktionen“
”
SQL-Kommandos: begin, commit, rollback
Bemerkungen:
• Schutz vor unberechtigten Zugriffen
• exists-Bedingung ist wahr, wenn Subquery irgendein
I
Ergebnis liefert. Was die Subquery selektiert, ist egal.
Insbesondere könnte innere Abfrage auch lauten:
(select ’ ’ from produkt ...)
I
Vor allem wichtig im Mehrbenutzerbetrieb
dh. bei Client-Server Datenbanken
• Correlated Subquery:
Innerhalb der Subquery wird eine Tabelle der äußeren
Abfrage referenziert (im Beispiel: hersteller)
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -50-
University of Applied Sciences
Stichwort Benutzerrechte“
”
SQL-Kommandos: grant, revoke
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -52-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.3 SQL-DCL
1.4.3 SQL-DCL
SQL-Kommandos für Transaktionen
Transaktionen
Stand Konto A
Stand Konto B
x
y
BEGIN [WORK]
BEGIN [TRANSACTION]
COMMIT
UPDATE konto SET stand=stand−500 WHERE nr=’A’
x − 500
Inkonsistenter
Zustand
ROLLBACK
Start einer Transaktion
Achtung: ggf. implizit (Oracle)
Abschluss Transaktion
mit Übernahme der Änderungen
Abschluss Transaktion
ohne Übernahme der Änderungen
y
Bemerkung:
UPDATE konto SET stand=stand+500 WHERE nr=’B’
• In Oracle und SQL2 beginnt Transaktion implizit mit
jedem transaction-initiating“ Kommando
”
x − 500
• Die meisten anderen DBS (auch PostgreSQL) machen dagegen
y + 500
ein auto-commit nach jedem Statement, wenn nicht explizit
eine längere Transaktion mit BEGIN gestartet wird
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -53-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.3 SQL-DCL
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.3 SQL-DCL
Transaktionen erfüllen ACID-Prinzip
Benutzerrechte
• Atomicity
DBS hat eigene Benutzerverwaltung
Transaktion ist Einheit: Alles oder Nichts.
• Anlage mit CREATE USER ...
• Consistency
• Ändern mit ALTER USER ...
Transaktion überführt kosistenten Zustand in konsistenten
Zustand. Innerhalb Transaktion Inkonsistenz möglich.
Kommandos sind nicht standardisiert.
Beispiel Passwortänderung:
• Isolation
Änderungen in einer Transaktion sind bis zum Abschluss
unsichtbar für andere Transaktionen.
• Oracle: ALTER USER usr IDENTIFIED BY ’pwd’;
• PostgreSQL: ALTER USER usr WITH PASSWORD ’pwd’;
• Durability
Nach Abschluss Transaktion bleiben Änderungen bestehen,
auch im Fall eines folgenden Systemabsturzes
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -54-
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -55-
University of Applied Sciences
Auch Zuweisung Admin-Recht (DBA) systemspezifisch
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -56-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.3 SQL-DCL
1.4.3 SQL-DCL
Einfachere Rechteverwaltung mitGroups
Der Anleger einer Tabelle ist ihr Owner.
Sonst kann keiner auf die Tabelle zugreifen.
• Anlegen Gruppe mit
CREATE GROUP grp;
Wenn auch andere User die Tabelle nutzen sollen,
muss der Owner ihnen Privileges erteilen:
• Privilegien dieser Gruppe zuweisen mit
GRANT ... TO GROUP grp;
GRANT SELECT ON produkt TO PUBLIC;
GRANT UPDATE ON produkt TO peter;
• User in die Gruppe aufnehmen mit
ALTER GROUP grp ADD USER usr;
Privileges werden erteilt mit GRANT ... TO ...
und entzogen mit REVOKE ... FROM ...
• User können aus Gruppe entfernt werden mit
ALTER GROUP grp DROP USER usr;
Hochschule Niederrhein
University of Applied Sciences
Dalitz: Datenbanksysteme Kap1.4. -57-
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
1.4.3 SQL-DCL (7)
Hochschule Niederrhein
University of Applied Sciences
Dalitz: Datenbanksysteme Kap1.4. -59-
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Ausblick
Überblick Privilegien:
SQL-Befehle können interaktiv über SQL-Interpreter
eingegeben werden (Oracle: sqlplus, Postgres: psql)
Privileg
Berechtigung
SELECT
INSERT
UPDATE
DELETE
...
Lesen
Einfügen neuer Sätze
Ändern bestehender Sätze
Löschen
weitere Rechte je nach DBS
z.B. rule, references, trigger
• Metakommandos
I
Befehle an den Interpreter
I
In psql durch Backslash gekennzeichnet, z.B
\d (describe), \i (import script), \set (set psql option)
I
Liste aller Metakommandos: man psql
• SQL-Kommandos
Vereinfachungen:
I
• ALL kann für alle Privilegien verwendet werden
Wie greift man aus einem Programm auf DB zu?
⇒ nächstes Kapitel
• PUBLIC kann für alle User verwendet werden
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -58-
University of Applied Sciences
werden an den Datenbankserver weitergereicht
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Hochschule Niederrhein
Dalitz: Datenbanksysteme Kap1.4. -60-
University of Applied Sciences
Elektrotechnik
und Informatik
Faculty of Electrical Engineering
and Computer Science
Herunterladen