SQL Structured Query Language weit verbreitete Sprache zur Definition und Manipula- tion...

Post on 06-Apr-2015

105 views 0 download

Transcript of SQL Structured Query Language weit verbreitete Sprache zur Definition und Manipula- tion...

SQL

Structured Query Language

• weit verbreitete Sprache zur Definition und Manipula-tion relationaler Datenbanken

• heute als herstellerunabhängiger Standard weitge-hend akzeptiert

SELECT < attributenliste >

FROM < relationenliste >

WHERE < bedingungsgefüge > (optional)

Der wichtigste Befehl zur Datenmanipulation lautet:

Anfragen an die Datenbank mit folgenden Beziehungen

A1. Geben Sie alle Informationen der Tabelle Mitarbeiter aus!

SELECT persnr, name, gebdat, ort, taet, geh, abtnrFROM mitarb;

SELECT *FROM mitarb;

A2. Geben Sie Name und Geburtsdatum aller Mitarbeiter aus!

SELECT name, gebdatFROM mitarb;

A3. Welche Tätigkeiten gibt es?

SELECT taetFROM mitarb;

A: Projektion

A4. Welche unterschiedlichen Tätigkeiten gibt es?

SELECT DISTINCT taetFROM mitarb;

B: Selektion

B1.1. Erstellen Sie eine Liste aller Mitarbeiter der Abteilung 20!

SELECT nameFROM mitarbWHERE abtnr = 20;

B1.2. Geben Sie Namen und Abteilungsnummer aller Leiter aus!

SELECT name, abtnrFROM mitarbWHERE taet = ‘Leiter‘;

B1: über ein Attribut

B2: über mehrere Attribute

B2.1. Geben Sie alle Informationen des Leitungspersonals der Tabelle Mitarbeiter aus!

SELECT *FROM mitarbWHERE taet = ‘Leiter‘ OR taet = ‘Direktor‘;

B2.2. Geben Sie die Personalnummer der Mitarbeiter aus, die an Projekt 20 und / oder Projekt 30 arbeiten!

SELECT DISTINCT persnrFROM mitarb_projWHERE projnr = 20 OR projnr = 30;

B3: Wertebereichsabfragen

B3.1. Erzeugen Sie eine Auflistung aller Mitarbeiter (Name / Gehalt), die zwischen 1200 € und 1800 € verdienen!

SELECT name, gehFROM mitarbWHERE geh >= 1200 AND geh <= 1800;

B3.2. Geben Sie Namen und Geburtsdatum aller Mitarbeiter aus, die nach 1960 geboren sind!

SELECT name, gebdatFROM mitarbWHERE gebdat > #31/12/60#;

SELECT projnr, pbeg, pendeFROM projWHERE pende - pbeg <=‘730days‘;

B3.3. Listen Sie Projektnummer, Projektbeginn und Projektende der Projekte auf, die eine Laufzeit kleiner gleich zwei Jahre haben!

B4: Zeichenkettenoperationen

B4.1. Geben Sie die Namen aller Mitarbeiter aus, deren Name mit „M“ beginnt!

SELECT nameFROM mitarbWHERE name LIKE ‘M*‘;

B4.2. Suchen Sie die Namen aller Mitarbeiter heraus, deren Name mit „e“ endet!

SELECT nameFROM mitarbWHERE name LIKE ‘*e‘;

B5: Ausdrücke

B5.1. Geben Sie zu jedem Namen eines Mitarbeiters sein Jahreseinkommen aus!

SELECT name, 12*geh AS jahresgehalt_euroFROM mitarb;

B5.2. Ermitteln Sie für jeden Mitarbeiter das Tagesgehalt (20 Arbeitstage im Monat) und geben Sie dieses aus!

SELECT name, geh/20 AS tag_in_euroFROM mitarb;

B6: Gruppenfunktionen

B6.1. Geben Sie das Durchschnittsgehalt, Minimalgehalt, und Maximalgehalt aller Mitarbeiter aus!

SELECT AVG (geh) AS durchsch_geh, MIN (geh) AS mini_geh, MAX (geh) AS maxi_gehFROM mitarb;

B6.2. Ermitteln Sie die Gesamtprojektkapazität und geben Sie diese aus!

SELECT SUM (pkap) AS ges_proj_kapFROM proj;

B6.3. Ermitteln Sie die Anzahl der Mitarbeiter (über Attribut „name“) in Abteilung 20 und geben Sie diese aus!

SELECT COUNT (name) AS anz_mitarbeiter_abt20FROM mitarbWHERE abtnr = 20;

B7: Bildung von Gruppen (mit gleichen Attributen)

B7.1. Geben Sie für jede Abteilung Nummer und Durchschnittsgehalt gruppiert nach Abteilungsnummer aus!

SELECT abtnr, AVG (geh) AS durchsch_gehFROM mitarbGROUP BY abtnr;

B7.2. Geben Sie Abteilungsnummer, Tätigkeit, Anzahl je Tätigkeit gruppiert nach Abteilungsnummer und Tätigkeit aus!

SELECT abtnr, taet, COUNT (taet) AS AnzahlFROM mitarbGROUP BY abtnr, taet;

B8: Ordnen der Ergebnisrelation

B8.1. Geben Sie Abteilungsnummer und Name aller Leiter nach Abteilungsnummern geordnet aus!

SELECT abtnr, nameFROM mitarbWHERE taet = ‘Leiter‘ORDER BY abtnr;

B8.2. Geben Sie alle Informationen der Tabelle Mitarbeiter geordnet nach Abteilungen und innerhalb der Abteilungen nach Tätigkeiten aus!

SELECT *FROM mitarbORDER BY abtnr, taet;

B9: Join über 2 Relationen

B9.1. Geben Sie die Namen aller Projektleiter aus!

SELECT DISTINCT nameFROM mitarb, projWHERE persnr = pleit;

B9.2. Geben Sie die Namen und Personalnummern aller Mitarbeiter aus, die an Projekt 20 und / oder Projekt 30 arbeiten!

SELECT DISTINCT name, mitarb.persnrFROM mitarb, mitarb_projWHERE mitarb.persnr = mitarb_proj.persnr AND (projnr = 20 OR projnr = 30);

B9.3. Geben Sie die Namen und Abteilungsnamen aller Mitarbeiter aus!

SELECT name, abtnameFROM mitarb, abtWHERE mitarb.abtnr = abt.abtnr;

B9.4. Geben Sie Name, Gehalt und Abteilungsort des Mitarbeiters Richter aus!

SELECT name, geh, abt.ortFROM mitarb, abtWHERE mitarb.abtnr = abt.abtnr AND name = ‘Richter‘;

B9.5. Geben Sie Namen, Personalnummern und Abteilungsnamen aller Mitarbeiter aus, die weder in der Direktion noch in der Forschung arbeiten!

SELECT name, persnr, abtnameFROM mitarb, abtWHERE mitarb.abtnr = abt.abtnr AND NOT (abtname = ‘Direktion‘ OR abtname = ‘Forschung‘);

B10: Join auf sich selbst (nur auf eine Relation bezogen)

B10.1. Geben Sie die Namen und Gehälter aller Mitarbeiter aus, die mehr verdienen als Jaeger!

SELECT y.name, y.gehFROM mitarb AS x, mitarb AS yWHERE x.name = ‘Jaeger‘ AND x.geh < y.geh;

B10.2. Geben Sie die Namen aller Mitarbeiter aus, die in der gleichen Abteilung arbeiten wie Altmann!

SELECT y.nameFROM mitarb AS x, mitarb AS yWHERE x.name = ‘Altmann‘ AND x.abtnr = y.abtnr;

B11: Join über mehrere Relationen

B11.1. Geben Sie die Namen, Abteilungsnamen von Mitarbeitern aus, die an Projekten arbeiten, die Walther leitet!

SELECT y.name, abtnameFROM mitarb AS x, mitarb AS y, proj, mitarb_proj, abtWHERE x.name = ‘Walther‘ AND x.persnr = pleit

AND proj.projnr = mitarb_proj.projnr AND mitarb_proj.persnr = y.persnr AND y.abtnr = abt.abtnr AND y.name <> ‘Walther‘;

B12: Unterabfragen (Verschachtelung von SELECT im WHERE-Zweig)

B12.1. Geben Sie die Namen aller Mitarbeiter aus, die in Chemnitz arbeiten!

SELECT nameFROM mitarbWHERE abtnr IN (SELECT abtnr FROM abt WHERE ort = ‘Chemnitz‘);

SELECT nameFROM mitarb, abtWHERE abt.ort = ‘Chemnitz‘ AND abt.abtnr = mitarb.abtnr;

(2..Möglichkeit – siehe auch Join über 2 Relationen)