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