sql structured query language
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 PresentationTRANSCRIPT
SQL Structured Query Language
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)
RDBSRelationale Datenbanksysteme
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
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
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
MITARBEITER = (MNR, Name, Vorname, Gehalt, AbtNr)
QUALI = (MNR, LNR, Qualifikation) PRARBEIT = (MNR, PNR, LNR, Std) PROJ = (PRNR, PrBez) ABT = (AbtNr, AbtName, AbtLeiter)
Das Beispielrelationenschema
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
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
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 MITARBEITERWHERE (Gehalt >= 3000) AND (Gehalt <=
5000);
SELECT *FROM ABT
WHERE Abt-Leiter IS NULL; -> alle Abteilungen ohne Abteilungsleiter.
Beispiele zur Selection
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
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
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
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 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
Beispiel: Gesucht sind alle Mitarbeiter die Abteilungsleiter sind.
SELECT * FROM MITARBEITER WHERE MNR IS
(SELECT AbtLeiter FROM ABT);
Geschachtelte Unterabfragenim WHERE-Teil
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));
ANY- und ALL-Operatoren
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 ◦ …◦
Gruppierungen
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
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.
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.
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
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
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