2. sql-grundlagen ag dbis university of kaiserslautern ... · pdf...
TRANSCRIPT
Datenbankadministration2. SQL-Grundlagen
AG DBISUniversity of Kaiserslautern, Germany
Karsten Schmidt [email protected]
(Vorlage TU-Dresden)
Wintersemester 2008/2009
K. Schmidt 2. SQL-Grundlagen
SQL
SQL (Structured Query Language)
deskriptive Anfragespracheangelehnt an die englische Umgangssprache
Enhalt
DQL (data query language): DatenbankanfrageDML (data manipulation language): DatenmanipulationDDL (data definition language): DatendefinitionDCL (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/FoundationPart 3: SQL/CLI (call level interface)Part 4: SQL/PSM (persistent storage modules)...
K. Schmidt 2. SQL-Grundlagen
DB2-Datenobjekte
Datentyp (TYPE)Defintionsbereich eines Attributesfest eingebaut (built-in) oder nutzerdefiniert (user-defined)
Relation (TABLE)ungeordnete Menge von Tupelnpermanent oder temporar
Sicht (VIEW)virtuelle Relationz. B. Vereinfachung von Anfragen, nutzerspezifischeDatendarstellung
Index (INDEX)primar oder sekundarDatenstruktur zum Ablegen / Auffinden von Datenauch: Sicherstellung der Eindeutigkeit, Vorsortierung
u.a. Datenbank (DATABASE), Tabellenbereiche (TABLESPACE),Schema (SCHEMA), Pufferspeicher (BUFFERPOOL)...
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 fur Selektionsbedingungen
Mustersuche in ZeichenkettenWHERE R NAME [NOT] LIKE ’A%’BereichssucheWHERE R REGIONKEY [NOT] BETWEEN 1 AND 3NULL-WerteWHERE R COMMENT IS [NOT] NULL
K. Schmidt 2. SQL-Grundlagen
SELECT-Anweisung
Beispiel: Gesamtumsatz nach LandernSELECT 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
ErgebnisNAME TURNOVERARGENTINA 129997977.11CANADA 44510722.92CHINA 20213511.86EGYPT 66482178.24ETHIOPIA 12322553.22INDIA 16368711.10JORDAN 273941626.19MOROCCO 1093739712.60PERU 20573003.30SAUDI ARABIA 26104818.42
K. Schmidt 2. SQL-Grundlagen
Verbundoperationen
Innerer Verbund (inner join)
standardmaßige Verbundartnur Tupel mit Verbundpartner werden in ErgebnisaufgenommenBeispiel
SELECT MITARBEITER.Name, ABT.Name, ABT.Chef
FROM MITARBEITER, ABT
WHERE MITARBEITER.Abteilung = ABT.Name
MITARBEITER.Name ABT.Name ABT.ChefPaul Verwaltung PaulMaik Produktion Maik
MITARBEITERName Abteilung
Paul VerwaltungFritz NULL
Maik Produktion
ABTName Chef
Verwaltung PaulProduktion MaikIT NULL
K. Schmidt 2. SQL-Grundlagen
Verbundoperationen
Außerer Verbund (outer join)
auch Tupel ohne Verbundpartner werden aufgenommenAttribute der anderen Relation werden mit NULL-Werenaufgefullt
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 ABT.Name ABT.ChefPaul Verwaltung PaulMaik Produktion MaikFritz NULL NULL
K. Schmidt 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 ABT.Name ABT.ChefPaul Verwaltung PaulMaik Produktion MaikNULL IT NULL
K. Schmidt 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 ABT.Name ABT.ChefPaul Verwaltung PaulMaik Produktion MaikFritz NULL NULL
NULL IT NULL
K. Schmidt 2. SQL-Grundlagen
Mengenoperationen
Mengenoperationen
auf Relationen mit gleichem SchemaVereinigung (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
1AFRICAAMERICAASIAEUROPEMIDDLE EASTNORTH POLE
K. Schmidt 2. SQL-Grundlagen
Fallunterscheidung
CASE-Ausdruck
Fallunterscheidungin 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 SIZEgoldenrod SMALLfrosted orange turquoise dim chocolate NORMALroyal lace plum spring coral BIG...
Achtung: Reihenfolge der Bedingungen beachten!
K. Schmidt 2. SQL-Grundlagen
Modularisieren von Anfragen
Modularisieren von AnfragenUnterabfrage (WHERE)Nested Table Expression (FROM)(Scalar Full Select (SELECT, WHERE, HAVING))
Unterabfrage (subquery)
liefert Relation als Ergebnisin WHERE-Klausel zur Existenzuberprufung verwendet
WHERE <expression> [NOT] IN|<|>|... [ALL|SOME|ANY] (<subquery>)
K. Schmidt 2. SQL-Grundlagen
Modularisieren von Anfragen
unkorrelierte UnterabfrageSELECT N_NAME FROM NATION WHERE N_REGIONKEY IN (
SELECT R_REGIONKEY FROM REGION WHERE R_NAME = ’EUROPE’)
N NAMEFRANCELGERMANYROMANIARUSSIA...
korrelierte UnterabfrageSELECT 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 NAMEASIAEUROPEMIDDLE EAST
K. Schmidt 2. SQL-Grundlagen
Modularisieren von Anfragen
Nested Table Expressionliefert Relation als Ergebnisin FROM-Klausel als Ergebnisrelation verwendetmuss 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 NAMEFRANCELGERMANYROMANIARUSSIAUNITED KINGDOM
K. Schmidt 2. SQL-Grundlagen
OLAP Funktionalitat
Online Analyitcal Processing (OLAP)Gemeinsamer Standardisierungsvorschlag von IBM und OracleUmfasst
Erweiterte GruppierungsfunktionalitatAnalytische Funktionen (analytic functions)
Ziel: Unterstutzung von Managemententscheidungen (decisionsupport)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 Auspragungen inden Gruppierungsattributen zu einem neuen TupelAggregation fur NichtgruppierungsattributeIm SELECT-Teil durfen nur Gruppierungsattribute undAggregationen bzw. Konstanten auftretenAggregationsfunktionen: SUM(), MAX(), MIN(), COUNT(), AVG(),STDDEV()
RJahr Quartal Umsatz2004 1 102004 2 202004 3 102004 4 202005 1 30
SELECT Jahr, SUM(Umsatz)FROM RGROUP BY Jahr
ErgebnisJahr Summe2004 602005 30
K. Schmidt 2. SQL-Grundlagen
GROUPING SETS
Gruppierungsmengen (GROUPING SETS)
Gruppierung nach mehreren Kriterien gleichzeitig
GROUP BY GROUPING SET ((<attribute-list>), ...)
Angabe aller gewunschten Gruppierungskombinationennicht notwendigerweise disjunkt (Multimenge)leere Menge () entspricht keiner Gruppierung (Superaggregat)
RJahr Quartal Umsatz2004 1 102004 2 202004 3 102004 4 202005 1 30
SELECT Jahr,Quartal,SUM(Umsatz)FROM RGROUP BY GROUPING SETS ((), (Jahr) , (Jahr, Quartal)
)
ErgebnisJahr Quartal Summe
- - 902004 - 60
2005 - 30
2004 1 10
2004 2 20
2004 3 10
2004 4 20
2005 1 30
K. Schmidt 2. SQL-Grundlagen
CUBE
CUBE
Berechnung aller Teilmengen fur eine Menge vonGruppierungsattributen (Potenzmenge)GROUP BY CUBE (<attribute-list>)
Bei n Gruppierungsattributen alle 2n Gruppierungskombiniationen
RJahr Quartal Umsatz2004 1 102004 2 202004 3 102004 4 202005 1 30
SELECT Jahr,Quartal,AVG(Umsatz)FROM RGROUP BY CUBE ( Jahr , Quartal )
ErgebnisJahr Quartal AVG
- - 18- 1 20
- 2 20
- 3 10
- 4 20
2004 - 15
2005 - 30
2004 1 10
2004 2 20
2004 3 10
2004 4 20
2005 1 30
K. Schmidt 2. SQL-Grundlagen
ROLLUP
ROLLUP
Hierarchische multidimensionale GruppierungGROUP BY ROLLUP (<attribute-list>)
ROLLUP (A1, A2, ..., AN)= GROUPING SET ((), (A1), (A1, A2), ..., (A1, A2, ..., AN))Anwendung bei funktionaler Abhangigkeit zwischen Attributen
z.B. Land bestimmt den Kontinent eindeutig:ROLLUP (R_REGIONKEY, N_NATIONKEY)
RJahr Quartal Umsatz2004 1 102004 2 202004 3 102004 4 202005 1 30
SELECT Jahr,Quartal,SUM(Umsatz)FROM RGROUP BY ROLLUP ( Jahr , Quartal )
ErgebnisJahr Quartal Summe
- - 902004 - 60
2005 - 30
2004 1 10
2004 2 20
2004 3 10
2004 4 20
2005 1 30
K. Schmidt 2. SQL-Grundlagen
GROUPING-Funktion
GROUPING-Funktion
Unterscheidung von systemseitig generierten und in den Datenvorhandenen NULL-WertenRuckgabewert
0 Attribut ist an aktueller Gruppierung beteiligt1 Attribut ist nicht an aktueller Gruppierung beteiligt
RJahr Quartal Umsatz2004 1 102004 2 202004 3 102004 4 202005 1 302005 - 30
SELECT Jahr,Quartal,SUM(Umsatz),GROUPING(Jahr),GROUPING(Quartal)
FROM RROLLUP ( Jahr , Quartal )
ErgebnisJahr Quartal Summe
- - 120 1 12004 - 60 0 1
2005 - 60 0 1
2004 1 10 0 0
2004 2 20 0 0
2004 3 10 0 0
2004 4 20 0 0
2005 1 30 0 0
2005 - 30 0 0
NULL-Werte in den Daten
K. Schmidt 2. SQL-Grundlagen
DQL-Zusammenfassung
SQL (Structured Query Languag)deskriptive Anfragespracheangelehnt an die englische Umgangssprache
DQL (Data Query Languag)Sprache fur Datenbankabfragenfeste StrukturJoinsMengenoperationenAggregationsfunktionenOLAP-Erweiterungen
erweiterte Gruppierungsmoglichkeiten(Analytische Funktionen)
K. Schmidt 2. SQL-Grundlagen
SQL-DML
Einfugen von TupelnINSERT INTO REGION VALUES (6,’NORTHPOLE’,’’)
INSERT INTO NATION (N_NATIONKEY, N_NAME, N_REGIONKEY)
SELECT NATIONKEY, NAME, 6 FROM NORTHPOLE_NATIONS
Verandern von TupelnUPDATE LINEITEM
SET L_DISCOUNT = L_DISCOUNT + 0.01
WHERE L_SUPPLEY = 12
Loschen von TupelnDELETE 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)
)
Loschen von Datenbankobjekten: DROP-Statement
DROP TABLE REGION
Verandern 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 Datendarstellungauch Datenschutz durch Ausblenden von Tupeln / AttributenSpezifikation 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
Integritiatsbedingungen
Integritiatsbedingungen (constraints)Primarschlussel, Fremdschlussel, 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>)
BeispielALTER TABLE REGION
ADD CONSTRAINT MAX5 CHECK (R_REGIONKEY BETWEEN 1 AND 5)
K. Schmidt 2. SQL-Grundlagen
Datumsfunktionen
Datumsfunktionenoft als Gruppierungsattribute verwendetanwendbar auf alle DATE, TIME und TIMESTAMP AttributeYEAR (<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