Top Banner
SQL Structured Query Language Wintersemester 2010
26

SQL Structured Query Language

Jan 06, 2016

Download

Documents

SQL Structured Query Language. Wintersemester 2010. RDBS Relationale Datenbanksysteme. Sind Datenbanksysteme auf Basis des Relationenmodells . Enthalten zumeist die Sprache SQL. Stellen dem Anwender verschiede Systemkomponenten zur Verfügung. ZB in Access: Tabellen - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: SQL  Structured  Query  Language

SQL Structured Query Language

Wintersemester 2010

Page 2: SQL  Structured  Query  Language

Sind Datenbanksysteme auf Basis des Relationenmodells.

Enthalten zumeist die Sprache SQL. Stellen dem Anwender verschiede

Systemkomponenten zur Verfügung. ZB in Access:

Tabellen Abfragen (Erstellung einer externen Sicht) Formular (Masken etc.) Berichte Makros (für automatisierte Arbeitsvorgänge) Modul (Visual Basic zur Erstellung von Applikationen)

RDBSRelationale Datenbanksysteme

Page 3: SQL  Structured  Query  Language

Ist die sprachliche Fassung des Relationenmodells.

Zentrales Element ist die Abfrage. Ist deskriptiv, nicht prozedural und enthält:

◦ DDL (Data Description Language) – Elemente: zB CREATE TABLE,… (Anlage eine Tabelle)

◦ DML (Data Manipulation Language) – Elemente: zB SELECT, UPDATE, DELETE, INSERT INTO, …

◦ DCL (Data Control Language) – Elemente: zB GRANT, … (Vergabe von Zugriffsrechten)

Standardsprache SQL

Page 4: SQL  Structured  Query  Language

Erzeugt Ergebnis-Relationen◦ Auswahl (von bestimmten Zeilen)◦ Projektion (Auswahl bestimmter Attribute)◦ Verbund (Verknüpfung von Relationen)◦ Vereinigung (Vereinigung von Tupeln gleicher

Struktur aus verschiedenen Relationen)◦ Durchschnitt (mengentheoretischer

Durchschnitt mehrerer Relationen)◦ Differenz (mengentheoretische Differenz

mehrerer Relationen)

Das Select-Kommando

Page 5: SQL  Structured  Query  Language

SELECT …FROM …

WHERE …GROUP BY …HAVING …

UNION …ORDER BY … ;

Das Kommando endet mit einem Semikolon, die SQL-Schlüsselwörter werden groß geschrieben.

Grundstruktur des Select-Befehls

Page 6: SQL  Structured  Query  Language

MITARBEITER = (MNR, Name, Vorname, Gehalt, AbtNr)

QUALI = (MNR, LNR, Qualifikation) PRARBEIT = (MNR, PNR, LNR, Std) PROJ = (PRNR, PrBez) ABT = (AbtNr, AbtName, AbtLeiter)

Das Beispielrelationenschema

Page 7: SQL  Structured  Query  Language

Die angegebenen Attribute gelangen in die Zielrelation

SELECT * FROM MITARBEITER;

SELECT MNR, Name, Vorname FROM MITARBEITER;

SELECT DISTINCT Vorname -> keine doppelten Tupel FROM MITARBEITER

Die Projektion

Page 8: SQL  Structured  Query  Language

Auf Basis eines logischen Ausdrucks gelangt ein Tupel in die Zielrelation.

Vergleichsoperatoren (<,>,=,<>, …) logische Operatoren (AND, OR, NOT) IN-Operator BETWEEN-Operator LIKE-Operator NULL-Operator

Zur Prioritätssteuerung sind Klammern notwendig

Die Selektion

Page 9: SQL  Structured  Query  Language

SELECT *FROM MITARBEITER

WHERE Gehalt > 5000;

SELECT *FROM MITARBEITER

WHERE (ABTNR = 1) AND (Gehalt < 4000);

SELECT *FROM MITARBEITER

WHERE ABTNR in (1, 3, 7); -> alle Mitarbeiter der Abteilung 1, 3 und 7.

Beispiele zur Selection

Page 10: SQL  Structured  Query  Language

SELECT *FROM MITARBEITER

WHERE Gehalt BETWEEN 3000 AND 5000; SELECT *

FROM MITARBEITERWHERE (Gehalt >= 3000) AND (Gehalt <=

5000);

SELECT *FROM ABT

WHERE Abt-Leiter IS NULL; -> alle Abteilungen ohne Abteilungsleiter.

Beispiele zur Selection

Page 11: SQL  Structured  Query  Language

Nach LIKE stehen Maskierungsmöglichkeiten zur Verfügung.◦ ? für ein einzelnes Zeichen◦ * für beliebig viele Zeichen

Beispiel:◦ SELECT * FROM MITARBEITER

WHERE Name LIKE ‘M*‘;

◦ SELECT * FROM MITARBEITERWHERE Name LIKE ‘?e*‘;

Maskierungsmöglichkeiten

Page 12: SQL  Structured  Query  Language

Bei Selektion und Projektion können neu berechnete Attribute hinzugefügt werden.

Zum Beispiel:

SELECT MNR, Name, Vorname, 14*Gehalt AS Jahresgehalt

FROM MITARBEITER;

Der SELECT-Befehl mit Operatoren

Page 13: SQL  Structured  Query  Language

Mit ASC (Default) und DESC können Tupel nach Attributen sortiert werden.

Beispiel:◦ SELECT * FROM MITARBEITER

ORDER BY Name DESC;

◦ SELECT * FROM MITARBEITERORDER BY ABTNR, Name DESC;

Sortierung nach Tupeln

Page 14: SQL  Structured  Query  Language

SELECT …SELECT …

SELECT … Wesentliche Operatoren in Unterabfragen sind:

◦ ein Vergleichsoperator◦ ein IN-Operator◦ ein ANY- bzw. ALL-Operator◦ der EXISTS-Operator

Geschachtelte Unterabfragenim WHERE-Teil

Page 15: SQL  Structured  Query  Language

Vergleichsoperator kann nur angewandt werden, wenn die Unterabfrage einen einzigen Wert ausgibt.

SELECT * FROM MITARBEITER WHERE Gehalt >

(SELECT Gehalt FROM MITARBEITERWHERE MNR = 10);

SELECT * FROM MITARBEITER WHERE Gehalt >

(SELECT Gehalt FROM MITARBEITERWHERE NAME = ‘Meyer‘);

Gibt es mehrere Meyer mit verschiedenen Gehältern kann der Vergleich nicht mehr sinnvoll bearbeitet werden.

Geschachtelte Unterabfragenim WHERE-Teil

Page 16: SQL  Structured  Query  Language

Beispiel: Gesucht sind alle Mitarbeiter die Abteilungsleiter sind.

SELECT * FROM MITARBEITER WHERE MNR IS

(SELECT AbtLeiter FROM ABT);

Geschachtelte Unterabfragenim WHERE-Teil

Page 17: SQL  Structured  Query  Language

Bilden prädikatenlogische Quantoren ab ANY entspricht „es existiert“ ALL entspricht „für alle“

SELECT * FROM MITARBEITER WHERE Gehalt < ANY

(SELECT Gehalt FROM MITARBEITER);

Anm.: Gehalt muss kleiner sein als irgendein Gehalt der Mitarbeiter-Relation. „> ALL“ würde

hingegen eine leere Tabelle wiedergeben.

ANY- und ALL-Operatoren

Page 18: SQL  Structured  Query  Language

Gesucht sind alle Mitarbeiter der Abteilung 1, die mehr verdienen als die Mitarbeiter der Abteilung 2.

SELECT * FROM MITARBEITER WHERE (ABTNR = 1) AND

(Gehalt > ALL (SELECT Gehalt FROM MITARBEITER

WHERE ABTNR = 2));

ANY- und ALL-Operatoren

Page 19: SQL  Structured  Query  Language

Tupel werden nach bestimmten Kriterien gruppiert um für jede Gruppe verrechnete

Daten zu bestimmen. Beispiel: Pro Abteilungsnummer soll Anzahl der

Mitarbeiter und das Durchschnittsgehalt ausgegeben werden.

SELECT ABTNR; Name, COUNT (*) As Mitarbeiteranzahl FROM Mitarbeiter

GROUP BY ABTNR;

Gruppierungen

Page 20: SQL  Structured  Query  Language

Folgende Aggregatfunktionen stehen zur Verfügung:◦ COUNT (*) Anzahl der Tupel in einer Gruppe◦ COUNT (<Attr>) Attributwert nicht Null◦ MIN (<Attr>) Minimum des Attributs in der

Gruppe◦ Max (<Attr>) Maximum des Attributs in der

Gruppe◦ SUM (<Attr>) Summe des Attributs◦ AVG (<Attr>) Mittelwert des Attributs ◦ …◦

Gruppierungen

Page 21: SQL  Structured  Query  Language

Wieviele Std. wurden pro PRNR in PRARBEIT abgerechnet?SELECT PRNR, SUM (Std) AS Stundensumme

FROM PRARBEITGROUP BY ABTNR;

Welche Abteilungen haben mehr als 5 Mitarbeiter, Ergebnis nach ABTNR:

SELECT ABTNR, COUNT (MNR) AS MitarbeiteranzahlFROM Mitarbeiter

GROUP BY ABTNRHAVING COUNT (MNR) > 5

ORDER BY ABTNR; Wieviele Mitarbeiter gibt es und wie hoch ist ihr

Durchschnittsgehalt: SELECT COUNT (*) AS Anzahl,

AVG (Gehalt) AS DurchschnittsgehaltFROM Mitarbeiter;

Beispiele zu Gruppierungen

Page 22: SQL  Structured  Query  Language

Auswahl von Tupelteilen aus mehreren Relationen.

Beispiel: Mitarbeiterliste mit Namen des Mitarbeiters (MITARBEITER) und Namen der Abteilung (ABT).

SELECT MNR; Name, Vorname, AbtNameFROM MITARBEITER, ABT

WHERE MITARBEITER.ABTNR = ABT.ABTNR;

Joins

Relationenname wird vorangestellt um Verwechslungen zu vermeiden.

Page 23: SQL  Structured  Query  Language

MITARBEITER = (MNR, Name, Vorname, Gehalt, AbtNr) QUALI = (MNR, LNR, Qualifikation) PRARBEIT = (MNR, PNR, LNR, Std) PROJ = (PRNR, PrBez) ABT = (AbtNr, AbtName, AbtLeiter)

SELECT M.MNR, M.Name, M.Vorname, A.AbtNameFROM MITARBEITER AS M, ABT AS A

WHERE M.ABTNR = A.ABTNR;

SELECT M.*, A.AbtNameFROM MITARBEITER AS M, ABT AS A

WHERE M.ABTNR = A.ABTNR;

Korrelationsnamen (Aliase)

Ein Aliasname wird bestimmt.

Page 24: SQL  Structured  Query  Language

Unterabfrage hat einen Bezug (Korrelation) zum übergeordneten SQL-Ausdruck.

SELECT * FROM MITARBEITER M1WHERE EXISTS

(SELECT Name FROM MITARBEITER M2WHERE (M1.Name = M2.Name)

AND (M2.MNR <> M1.MNR));

Korrelierte Unterabfragen

Page 25: SQL  Structured  Query  Language

Sind strukturvergleichbare Vereinigungen von SQL-Abfragen.

MITARBEITER = (MNR, Name, Vorname, Gehalt, AbtNr) QUALI = (MNR, LNR, Qualifikation) PRARBEIT = (MNR, PNR, LNR, Std) PROJ = (PRNR, PrBez) ABT = (AbtNr, AbtName, AbtLeiter) Beispiel: Alle Abteilungsnamen Projektbezeichnungen sollen in

einem Attribut ausgegeben werden:

SELECT Abtname AS Name FROM ABTUNION

SELECT PrBez FROM PROJ;

Unions

Page 26: SQL  Structured  Query  Language

Alle MNR und PRNR sollen mit entsprechender Bezeichnung sortiert nach Nummern ausgegeben werden:

SELECT MNR AS Nummer, ‘MNR‘ AS ArtderNummer FROM MITARBEITER UNIONSELECT PRNR, ‘Projektnummer‘

FROM PROJORDER BY Nummer;

UNIONS