260 likes | 373 Views
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
E N D
SQL Structured Query Language Wintersemester 2010
RDBSRelationale Datenbanksysteme • 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)
Standardsprache SQL • Ist die sprachliche Fassung des Relationenmodells. • Zentrales Element ist die Abfrage. • Ist deskriptiv, nicht prozedural und enthält: • DDL (DataDescriptionLanguage) – Elemente: • zB CREATE TABLE,… (Anlage eine Tabelle) • DML (Data Manipulation Language) – Elemente: • zB SELECT, UPDATE, DELETE, INSERT INTO, … • DCL (DataControlLanguage) – Elemente: • zB GRANT, … (Vergabe von Zugriffsrechten)
Das Select-Kommando • 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)
Grundstruktur des Select-Befehls SELECT … FROM … WHERE … GROUP BY … HAVING … UNION … ORDER BY … ; Das Kommando endet mit einem Semikolon, die SQL-Schlüsselwörter werden groß geschrieben.
Das Beispielrelationenschema • MITARBEITER = (MNR, Name, Vorname, Gehalt, AbtNr) • QUALI = (MNR, LNR, Qualifikation) • PRARBEIT = (MNR, PNR, LNR, Std) • PROJ = (PRNR, PrBez) • ABT = (AbtNr, AbtName, AbtLeiter)
Die Projektion • 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 Selektion 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
Beispiele zur Selection • 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 • 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.
Maskierungsmöglichkeiten • 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*‘;
Der SELECT-Befehl mit Operatoren • Bei Selektion und Projektion können neu berechnete Attribute hinzugefügt werden. • Zum Beispiel: • SELECT MNR, Name, Vorname, 14*Gehalt AS Jahresgehalt FROM MITARBEITER;
Sortierung nach Tupeln • 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;
Geschachtelte Unterabfragenim WHERE-Teil • 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 • 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.
Geschachtelte Unterabfragenim WHERE-Teil • Beispiel: Gesucht sind alle Mitarbeiter die Abteilungsleiter sind. • SELECT * FROM MITARBEITER WHERE MNR IS (SELECT AbtLeiter FROM ABT);
ANY- und ALL-Operatoren • 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 • 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));
Gruppierungen • 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 • 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 • …
Beispiele zu Gruppierungen • Wieviele Std. wurden pro PRNR in PRARBEIT abgerechnet? SELECT PRNR, SUM (Std) AS Stundensumme FROM PRARBEIT GROUP BY ABTNR; • Welche Abteilungen haben mehr als 5 Mitarbeiter, Ergebnis nach 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;
Joins 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.
Korrelationsnamen (Aliase) • 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.AbtName FROM MITARBEITER AS M, ABT AS A WHERE M.ABTNR = A.ABTNR; SELECT M.*, A.AbtName FROM MITARBEITER AS M, ABT AS A WHERE M.ABTNR = A.ABTNR; Ein Aliasname wird bestimmt.
Korrelierte Unterabfragen • 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));
Unions • 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 ABT UNION SELECT PrBez FROM PROJ;
UNIONS • 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;