mitarbeiter

Werbung
Wintersemester 2010




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)



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)

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)
◦
◦
◦
◦
SELECT …
FROM …
WHERE …
GROUP BY …
HAVING …
UNION …
ORDER BY … ;
Das Kommando endet mit einem Semikolon, die SQLSchlüsselwörter werden groß geschrieben.





MITARBEITER = (MNR, Name, Vorname,
QUALI
PRARBEIT
PROJ
ABT
Gehalt, AbtNr)
= (MNR, LNR, Qualifikation)
= (MNR, PNR, LNR, Std)
= (PRNR, PrBez)
= (AbtNr, AbtName, AbtLeiter)




Die angegebenen Attribute gelangen in die
Zielrelation
SELECT *
FROM MITARBEITER;
SELECT MNR, Name, Vorname
FROM MITARBEITER;
SELECT DISTINCT Vorname -> keine doppelten Tupel
FROM MITARBEITER
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








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.



SELECT *
FROM MITARBEITER
WHERE Gehalt BETWEEN 3000 AND 5000;
SELECT *
FROM MITARBEITER
WHERE (Gehalt >= 3000) AND (Gehalt <= 5000);
SELECT *
FROM ABT
WHERE Abt-Leiter IS NULL; -> alle Abteilungen
ohne Abteilungsleiter.

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 MITARBEITER
WHERE Name LIKE ‘?e*‘;



Bei Selektion und Projektion können neu
berechnete Attribute hinzugefügt werden.
Zum Beispiel:
SELECT MNR, Name, Vorname, 14*Gehalt AS
Jahresgehalt
FROM MITARBEITER;
Mit ASC (Default) und DESC können Tupel
nach Attributen sortiert werden.
Beispiel:


◦ SELECT * FROM MITARBEITER
ORDER BY Name DESC;
◦ SELECT * FROM MITARBEITER
ORDER BY ABTNR, Name DESC;


SELECT …
SELECT …
SELECT …
Wesentliche Operatoren in Unterabfragen sind:
◦
◦
◦
◦
ein Vergleichsoperator
ein IN-Operator
ein ANY- bzw. ALL-Operator
der EXISTS-Operator



Vergleichsoperator kann nur angewandt werden, wenn die
Unterabfrage einen einzigen Wert ausgibt.
SELECT * FROM MITARBEITER
WHERE Gehalt >
(SELECT Gehalt FROM MITARBEITER
WHERE MNR = 10);
SELECT * FROM MITARBEITER
WHERE Gehalt >
(SELECT Gehalt FROM MITARBEITER
WHERE NAME = ‘Meyer‘);
Gibt es mehrere Meyer mit verschiedenen Gehältern kann der Vergleich nicht
mehr sinnvoll bearbeitet werden.


Beispiel: Gesucht sind alle Mitarbeiter die Abteilungsleiter
sind.
SELECT * FROM MITARBEITER
WHERE MNR IS
(SELECT AbtLeiter FROM ABT);




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.


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));
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;

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
…

Wieviele Std. wurden pro PRNR in PRARBEIT abgerechnet?

Welche Abteilungen haben mehr als 5 Mitarbeiter, Ergebnis
nach ABTNR:


SELECT PRNR, SUM (Std) AS Stundensumme
FROM PRARBEIT
GROUP BY ABTNR;
SELECT ABTNR, COUNT (MNR) AS Mitarbeiteranzahl
FROM Mitarbeiter
GROUP BY ABTNR
HAVING COUNT (MNR) > 5
ORDER BY ABTNR;
Wieviele Mitarbeiter gibt es und wie hoch ist ihr
Durchschnittsgehalt:
SELECT COUNT (*) AS Anzahl,
AVG (Gehalt) AS Durchschnittsgehalt
FROM Mitarbeiter;


Auswahl von Tupelteilen aus mehreren
Relationen.
Beispiel: Mitarbeiterliste mit Namen des
Mitarbeiters (MITARBEITER) und Namen der
Abteilung (ABT).
SELECT MNR; Name, Vorname, AbtName
FROM MITARBEITER, ABT
WHERE MITARBEITER.ABTNR = ABT.ABTNR;
Relationenname wird
vorangestellt um
Verwechslungen zu
vermeiden.





MITARBEITER
QUALI
PRARBEIT
PROJ
ABT
= (MNR, Name, Vorname, Gehalt, AbtNr)
= (MNR, LNR, Qualifikation)
= (MNR, PNR, LNR, Std)
= (PRNR, PrBez)
= (AbtNr, AbtName, AbtLeiter)
SELECT M.MNR, M.Name, M.Vorname, A.AbtName
FROM MITARBEITER AS M, ABT AS A
WHERE M.ABTNR = A.ABTNR;
Ein Aliasname wird
bestimmt.
SELECT M.*, A.AbtName
FROM MITARBEITER AS M, ABT AS A
WHERE M.ABTNR = A.ABTNR;


Unterabfrage hat einen Bezug (Korrelation) zum
übergeordneten SQL-Ausdruck.
SELECT * FROM MITARBEITER M1
WHERE EXISTS
(SELECT Name FROM MITARBEITER M2
WHERE (M1.Name = M2.Name) AND
(M2.MNR <> M1.MNR));







Sind strukturvergleichbare Vereinigungen von
SQL-Abfragen.
MITARBEITER
QUALI
PRARBEIT
PROJ
ABT
=
=
=
=
=
(MNR, Name, Vorname, Gehalt, AbtNr)
(MNR, LNR, Qualifikation)
(MNR, PNR, LNR, Std)
(PRNR, PrBez)
(AbtNr, AbtName, AbtLeiter)
Beispiel: Alle Abteilungsnamen Projektbezeichnungen sollen in
einem Attribut ausgegeben werden:
SELECT Abtname AS Name FROM ABT
UNION
SELECT PrBez FROM PROJ;


Alle MNR und PRNR sollen mit entsprechender
Bezeichnung sortiert nach Nummern ausgegeben
werden:
SELECT MNR AS Nummer, ‘MNR‘ AS ArtderNummer
FROM MITARBEITER
UNION
SELECT PRNR, ‘Projektnummer‘
FROM PROJ
ORDER BY Nummer;
Herunterladen