Datenbankadministration - 2. SQL

Transcription

Datenbankadministration - 2. SQL
Datenbankadministration
2. SQL-Grundlagen
AG DBIS
University of Kaiserslautern, Germany
Karsten Schmidt [email protected]
(Vorlage TU-Dresden)
Wintersemester 2008/2009
K. Schmidt
2. SQL-Grundlagen
SQL
SQL (Structured Query Language)
deskriptive Anfragesprache
angelehnt an die englische Umgangssprache
Enhält
DQL (data query language): Datenbankanfrage
DML (data manipulation language): Datenmanipulation
DDL (data definition language): Datendefinition
DCL (data control language): Rechteverwaltung
SQL-Standard
SQL/86, SQL/89, SQL/92 (=SQL2), SQL/99, SQL:2003
(=SQL3)
Part 1: SQL/Framework (Aufbau des Standards)
Part 2: SQL/Foundation
Part 3: SQL/CLI (call level interface)
Part 4: SQL/PSM (persistent storage modules)
...
K. Schmidt
2. SQL-Grundlagen
DB2-Datenobjekte
Datentyp (TYPE)
Defintionsbereich eines Attributes
fest eingebaut (built-in) oder nutzerdefiniert (user-defined)
Relation (TABLE)
ungeordnete Menge von Tupeln
permanent oder temporär
Sicht (VIEW)
virtuelle Relation
z. B. Vereinfachung von Anfragen, nutzerspezifische
Datendarstellung
Index (INDEX)
primär oder sekundär
Datenstruktur zum Ablegen / Auffinden von Daten
auch: Sicherstellung der Eindeutigkeit, Vorsortierung
u.a. Datenbank (DATABASE), Tabellenbereiche (TABLESPACE),
Schema (SCHEMA), Pufferspeicher (BUFFERPOOL)...
K. Schmidt
2. SQL-Grundlagen
K. Schmidt
2. SQL-Grundlagen
SQL
SQL - Datenbankabfragen (DQL)
K. Schmidt
2. SQL-Grundlagen
SELECT-Anweisung
SELECT-Anweisung
SELECT [DISTINCT] <attribute-list>
→ Projektion
FROM <table-name> [AS <alias>], ...
→ Kartesisches Produkt
WHERE <predicate-list>
→ Selektion auf Tupelebene
GROUP BY <attribute-list>
→ Gruppierung
HAVING <predicate-list>
→ Selektion a. Gruppenebene
ORDER BY <attribute> [ASC|DESC], ...
→ Sortierung
FETCH FIRST <k> ROWS ONLY
→ Top-k (Limit-Anweisung)
Beispiele für Selektionsbedingungen
Mustersuche in Zeichenketten
WHERE R NAME [NOT] LIKE ’A%’
Bereichssuche
WHERE R REGIONKEY [NOT] BETWEEN 1 AND 3
NULL-Werte
WHERE R COMMENT IS [NOT] NULL
K. Schmidt
2. SQL-Grundlagen
SELECT-Anweisung
Beispiel: Gesamtumsatz nach Ländern
SELECT N_NAME AS NAME, SUM(O_TOTALPRICE) AS TURNOVER
FROM ORDERS, CUSTOMER, NATION
WHERE O_CUSTKEY = C_CUSTKEY
AND C_NATIONKEY = N_NATIONKEY
GROUP BY N_NAME
HAVING SUM(O_TOTALPRICE) > 10000000
ORDER BY NAME
Ergebnis
NAME
TURNOVER
ARGENTINA
129997977.11
CANADA
44510722.92
CHINA
20213511.86
EGYPT
66482178.24
ETHIOPIA
12322553.22
INDIA
16368711.10
JORDAN
273941626.19
MOROCCO
1093739712.60
PERU
20573003.30
SAUDI ARABIA 26104818.42
K. Schmidt
2. SQL-Grundlagen
Verbundoperationen
Innerer Verbund (inner join)
standardmäßige Verbundart
nur Tupel mit Verbundpartner werden in Ergebnis
aufgenommen
Beispiel
SELECT MITARBEITER.Name, ABT.Name, ABT.Chef
FROM MITARBEITER, ABT
WHERE MITARBEITER.Abteilung = ABT.Name
MITARBEITER.Name ABT.Name ABT.Chef
Paul
Verwaltung
Paul
Maik
Produktion
Maik
MITARBEITER
Name Abteilung
Paul
Verwaltung
Fritz
NULL
Maik Produktion
ABT
Name
Verwaltung
Produktion
IT
K. Schmidt
2. SQL-Grundlagen
Chef
Paul
Maik
NULL
Verbundoperationen
Äußerer Verbund (outer join)
auch Tupel ohne Verbundpartner werden aufgenommen
Attribute der anderen Relation werden mit NULL-Weren
aufgefüllt
LEFT OUTER JOIN
alle Tupel der linken Relation erscheinen im Verbundergebnis
SELECT MITARBEITER.Name, ABT.Name, ABT.Chef
FROM MITARBEITER LEFT OUTER JOIN ABT
ON MITARBEITER.Abteilung = ABT.Name
MITARBEITER.Name
Paul
Maik
Fritz
K. Schmidt
ABT.Name
Verwaltung
Produktion
NULL
ABT.Chef
Paul
Maik
NULL
2. SQL-Grundlagen
Verbundoperationen
RIGHT OUTER JOIN
alle Tupel der rechten Relation erscheinen im Verbundergebnis
SELECT MITARBEITER.Name, ABT.Name, ABT.Chef
FROM MITARBEITER RIGHT OUTER JOIN ABT
ON MITARBEITER.Abteilung = ABT.Name
MITARBEITER.Name
Paul
Maik
NULL
K. Schmidt
ABT.Name
Verwaltung
Produktion
IT
ABT.Chef
Paul
Maik
NULL
2. SQL-Grundlagen
Verbundoperationen
FULL OUTER JOIN
alle Tupel erscheinen im Verbundergebnis
SELECT MITARBEITER.Name, ABT.Name, ABT.Chef
FROM MITARBEITER FULL OUTER JOIN ABT
ON MITARBEITER.Abteilung = ABT.Name
MITARBEITER.Name
Paul
Maik
Fritz
NULL
K. Schmidt
ABT.Name
Verwaltung
Produktion
NULL
IT
ABT.Chef
Paul
Maik
NULL
NULL
2. SQL-Grundlagen
Mengenoperationen
Mengenoperationen
auf Relationen mit gleichem Schema
Vereinigung (UNION), Subtraktion (EXCEPT), Schnittmenge
(INTERSECT)
Mengensemantik (z.B. UNION vs. Multimenge (UNION ALL)
Beispiel
SELECT R_NAME FROM REGION
UNION
SELECT ’NORTH POLE’ FROM TABLE.TABLEDUMMY
1
AFRICA
AMERICA
ASIA
EUROPE
MIDDLE EAST
NORTH POLE
K. Schmidt
2. SQL-Grundlagen
Fallunterscheidung
CASE-Ausdruck
Fallunterscheidung
in SELECT-, WHERE- oder GROUP BY-Klausel verwendet
SELECT P_NAME,
CASE WHEN P_SIZE < 10 THEN ’SMALL’
WHEN P_SIZE < 20 THEN ’NORMAL’
ELSE ’BIG’
END AS SIZE
FROM PART
P NAME
SIZE
goldenrod
SMALL
frosted orange turquoise dim chocolate NORMAL
royal lace plum spring coral
BIG
...
Achtung: Reihenfolge der Bedingungen beachten!
K. Schmidt
2. SQL-Grundlagen
Modularisieren von Anfragen
Modularisieren von Anfragen
Unterabfrage (WHERE)
Nested Table Expression (FROM)
(Scalar Full Select (SELECT, WHERE, HAVING))
Unterabfrage (subquery)
liefert Relation als Ergebnis
in WHERE-Klausel zur Existenzüberprüfung verwendet
WHERE <expression> [NOT] IN|<|>|... [ALL|SOME|ANY] (<subquery>)
K. Schmidt
2. SQL-Grundlagen
Modularisieren von Anfragen
unkorrelierte Unterabfrage
SELECT N_NAME FROM NATION WHERE N_REGIONKEY IN (
SELECT R_REGIONKEY FROM REGION WHERE R_NAME = ’EUROPE’)
N NAME
FRANCEL
GERMANY
ROMANIA
RUSSIA
...
korrelierte Unterabfrage
SELECT R_NAME FROM REGION WHERE R_REGIONKEY NOT IN (
SELECT N_REGIONKEY FROM NATION
WHERE N_REGIONKEY = R_REGIONKEY AND N_NAME LIKE ’A%’)
R NAME
ASIA
EUROPE
MIDDLE EAST
K. Schmidt
2. SQL-Grundlagen
Modularisieren von Anfragen
Nested Table Expression
liefert Relation als Ergebnis
in FROM-Klausel als Ergebnisrelation verwendet
muss benannt werden (AS)
SELECT N_NAME FROM NATION AS T1,
(SELECT R_REGIONKEY FROM REGION
WHERE R_NAME = ’EUROPE’) AS T2
WHERE T1.N_REGIONKEY = T2.R_REGIONKEY
N NAME
FRANCEL
GERMANY
ROMANIA
RUSSIA
UNITED KINGDOM
K. Schmidt
2. SQL-Grundlagen
SQL - Erweiterung für OLAP
Online Analytical Processing
K. Schmidt
2. SQL-Grundlagen
OLAP Funktionalität
Online Analyitcal Processing (OLAP)
Gemeinsamer Standardisierungsvorschlag von IBM und Oracle
Umfasst
Erweiterte Gruppierungsfunktionalität
Analytische Funktionen (analytic functions)
Ziel: Unterstützung von Managemententscheidungen (decision
support)
u.a. integriert in IBM DB2 und Oracle DBMS
K. Schmidt
2. SQL-Grundlagen
Einfache Gruppierung nach SQL-Standard
Gruppierung (GROUP BY)
Zusammenfassung von Tupeln mit gleichen Ausprägungen in
den Gruppierungsattributen zu einem neuen Tupel
Aggregation für Nichtgruppierungsattribute
Im SELECT-Teil dürfen nur Gruppierungsattribute und
Aggregationen bzw. Konstanten auftreten
Aggregationsfunktionen: SUM(), MAX(), MIN(), COUNT(), AVG(),
STDDEV()
Jahr
2004
2004
2004
2004
2005
R
Quartal
1
2
3
4
1
Umsatz
10
20
10
20
30
SELECT Jahr, SUM(Umsatz)
FROM R
GROUP BY Jahr
K. Schmidt
2. SQL-Grundlagen
Ergebnis
Jahr
Summe
2004
60
2005
30
GROUPING SETS
Gruppierungsmengen (GROUPING SETS)
Gruppierung nach mehreren Kriterien gleichzeitig
GROUP BY GROUPING SET ((<attribute-list>), ...)
Angabe aller gewünschten Gruppierungskombinationen
nicht notwendigerweise disjunkt (Multimenge)
leere Menge () entspricht keiner Gruppierung (Superaggregat)
Jahr
2004
2004
2004
2004
2005
R
Quartal
1
2
3
4
1
Umsatz
10
20
10
20
30
SELECT Jahr,Quartal,SUM(Umsatz)
FROM R
GROUP BY GROUPING SETS (
(), (Jahr) , (Jahr, Quartal)
)
K. Schmidt
2. SQL-Grundlagen
Jahr
2004
2005
2004
2004
2004
2004
2005
Ergebnis
Quartal
1
2
3
4
1
Summe
90
60
30
10
20
10
20
30
CUBE
CUBE
Berechnung aller Teilmengen für eine Menge von
Gruppierungsattributen (Potenzmenge)
GROUP BY CUBE (<attribute-list>)
Bei n Gruppierungsattributen alle 2n Gruppierungskombiniationen
Jahr
2004
2004
2004
2004
2005
R
Quartal
1
2
3
4
1
Umsatz
10
20
10
20
30
SELECT Jahr,Quartal,AVG(Umsatz)
FROM R
GROUP BY CUBE ( Jahr , Quartal )
K. Schmidt
2. SQL-Grundlagen
Jahr
2004
2005
2004
2004
2004
2004
2005
Ergebnis
Quartal
1
2
3
4
1
2
3
4
1
AVG
18
20
20
10
20
15
30
10
20
10
20
30
ROLLUP
ROLLUP
Hierarchische multidimensionale Gruppierung
GROUP BY ROLLUP (<attribute-list>)
ROLLUP (A1 , A2 , ..., AN )
= GROUPING SET ((), (A1 ), (A1 , A2 ), ..., (A1 , A2 , ..., AN ))
Anwendung bei funktionaler Abhängigkeit zwischen Attributen
z.B. Land bestimmt den Kontinent eindeutig:
ROLLUP (R_REGIONKEY, N_NATIONKEY)
Jahr
2004
2004
2004
2004
2005
R
Quartal
1
2
3
4
1
Umsatz
10
20
10
20
30
SELECT Jahr,Quartal,SUM(Umsatz)
FROM R
GROUP BY ROLLUP ( Jahr , Quartal )
K. Schmidt
2. SQL-Grundlagen
Jahr
2004
2005
2004
2004
2004
2004
2005
Ergebnis
Quartal
1
2
3
4
1
Summe
90
60
30
10
20
10
20
30
GROUPING-Funktion
GROUPING-Funktion
Unterscheidung von systemseitig generierten und in den Daten
vorhandenen NULL-Werten
Rückgabewert
0 Attribut ist an aktueller Gruppierung beteiligt
1 Attribut ist nicht an aktueller Gruppierung beteiligt
Jahr
2004
2004
2004
2004
2005
2005
R
Quartal
1
2
3
4
1
-
Umsatz
10
20
10
20
30
30
SELECT Jahr,Quartal,
SUM(Umsatz),
GROUPING(Jahr),
GROUPING(Quartal)
FROM R
ROLLUP ( Jahr , Quartal )
Jahr
2004
2005
2004
2004
2004
2004
2005
Quartal
1
2
3
4
1
2005
-
Ergebnis
Summe
120
60
60
10
20
10
20
30
30
NULL-Werte in den Daten
K. Schmidt
2. SQL-Grundlagen
1
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
DQL-Zusammenfassung
SQL (Structured Query Languag)
deskriptive Anfragesprache
angelehnt an die englische Umgangssprache
DQL (Data Query Languag)
Sprache für Datenbankabfragen
feste Struktur
Joins
Mengenoperationen
Aggregationsfunktionen
OLAP-Erweiterungen
erweiterte Gruppierungsmöglichkeiten
(Analytische Funktionen)
K. Schmidt
2. SQL-Grundlagen
SQL - Datenmanipulation (DML)
SQL - Datendefinition (DDL)
K. Schmidt
2. SQL-Grundlagen
SQL-DML
Einfügen von Tupeln
INSERT INTO REGION VALUES (6,’NORTHPOLE’,’’)
INSERT INTO NATION (N_NATIONKEY, N_NAME, N_REGIONKEY)
SELECT NATIONKEY, NAME, 6 FROM NORTHPOLE_NATIONS
Verändern von Tupeln
UPDATE LINEITEM
SET L_DISCOUNT = L_DISCOUNT + 0.01
WHERE L_SUPPLEY = 12
Löschen von Tupeln
DELETE FROM REGION WHERE R_REGIONKEY > 5
K. Schmidt
2. SQL-Grundlagen
Definition von Datenbankobjekten
Definition von Datenbankobjekten (s. Folie 3)
Erzeugen von Datenbankobjekten: CREATE-Statement
CREATE TABLE REGION (
R_REGIONKEY INTEGER NOT NULL PRIMARY KEY,
R_NAME CHAR(25) NOT NULL,
R_COMMENT VARCHAR(152)
)
Löschen von Datenbankobjekten: DROP-Statement
DROP TABLE REGION
Verändern von Datenbankobjekten: ALTER-Statement
ALTER TABLE REGION ADD COLUMN R_SIZE INT
K. Schmidt
2. SQL-Grundlagen
Sichten
Sicht (View)
virtuelle Relation zur Vereinfachung von Anfragen bzw.
nutzerspezifischen Datendarstellung
auch Datenschutz durch Ausblenden von Tupeln / Attributen
Spezifikation des Inhaltes durch SQL-Anfrage
CREATE VIEW CUST_AMERICA AS
SELECT CUSTOMER.*
FROM CUSTOMER, NATION, REGION
WHERE C_NATIONKEY = N_NATIONKEY
AND N_REGIONKEY = R_REGIONKEY
AND R_NAME = ’AMERICA’
SELECT * FROM CUST_AMERICA
K. Schmidt
2. SQL-Grundlagen
Integritiätsbedingungen
Integritiätsbedingungen (constraints)
Primärschlüssel, Fremdschlüssel, Disjunktheit (UNIQUE),
wertebasiert (CHECK)
ALTER TABLE <table-name> ADD CONSTRAINT
<constraint-name>
PRIMARY KEY (<attribute-list>)
FOREIGN KEY (<attribute-list>) REFERENCES
<table-nm>(<attr-list>)
UNIQUE (<attribute-list>)
CHECK (<predicate>)
Beispiel
ALTER TABLE REGION
ADD CONSTRAINT MAX5 CHECK (R_REGIONKEY BETWEEN 1 AND 5)
K. Schmidt
2. SQL-Grundlagen
Datumsfunktionen
K. Schmidt
2. SQL-Grundlagen
Datumsfunktionen
Datumsfunktionen
oft als Gruppierungsattribute verwendet
anwendbar auf alle DATE, TIME und TIMESTAMP Attribute
YEAR (<attribute>)
MONTH (<attribute>)
DAY (<attribute>)
HOUR (<attribute>)
MINUTE (<attribute>)
SECONS (<attribute>)
...
Beispiel:
SELECT YEAR(o_orderdate), SUM(o_totalprice)
FROM ORDERS
GROUP BY YEAR(o_orderdate)
K. Schmidt
2. SQL-Grundlagen
Zusammenfassung
SQL
Standardabfragesprache für relationale Datenbanksysteme
DDL, DQL, DML, DCL
OLAP-Erweiterungen
Datumsfunktionen
Datenbankobjekte
verschiedene Komponenten einer Datenbank
Sichten
virtuelle Relationen
Integritätsbedingungen
sichern die Integrität der Daten
K. Schmidt
2. SQL-Grundlagen