26
SQL Structured Query Language Wintersemester 2010

SQL Structured Query Language

  • Upload
    collin

  • View
    127

  • Download
    0

Embed Size (px)

DESCRIPTION

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

Citation preview

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