Datenbanken 5. Übung Aufgabe: Abfragen an die relationale Datenbank für das Personalwesen Lösungsschritte: Abfragen an die relationale Datenbank werden mit dem SQL-Befehl SELECT ... ausgeführt: select <spalten> from <tabellen> [where <bedingung> ...] [group by <spalten> ... [ [order by <spalten>] /* 1. Klausel */ /* 2. Klausel */ /* 3. Klausel */ having <bedingung> ] ] Die 1. Klausel legt fest, welche Spalten (Attribute) im Ergebnis (Abbildungsbereich) berücksichtigt werden sollen. Die 2. Klausel bezeichnet die Tabellen und Views (Sichten), aus denen Zeilen und Spalten abgefragt werden sollen. Die 3. Klausel ist optional und bestimmt, daß nur diejenigen Zeilen im Ergebnis angezeigt werden sollen, die einer bestimmten Bedingung genügen. Insgesamt besteht der SELECT-Befehl aus 6 Komponenten: Mit FROM /* 2. Klausel */ werden die Datensätze der Tabellen (Definitionsbereich) ausgewählt. Sie werden um die Datensätze vermindert, die die bei WHERE /* 3. Klausel */ angegebene(n) Bedingung(en) nicht erfüllen. Durch GROUP BY werden Datensätze (Tupel) mit gleichen Attributen zusammengefaßt. Gemeinsame Gruppeneigenschaften können unter HAVING angegeben sein. Die so ausgewählten Datensätze werden auf die nach SELECT /* 1. Klausel */ angegebenen Spalten (Abbildungsbereich) projiziert. Schließlich werden die Datensätze (Tupel) für die Ausgabe sortiert, wie bei ORDER BY festgelegt. Select-Anweisungen können unterschiedliche Ausprägungen annehmen. Das folgende Klassifizierungsschema ordnet die Anweisungen und zeigt, was die select-Anweisung leistet: Selektion und Projektion, Einfache Bedingungen, Komplexe Bedingungen, Verbundanweisungen (Verknüpfung mehrerer Tabellen, Verknüpfung einer Tabelle mit sich selbst (SELF JOIN)), Unterabfragen (Unterabfragen mit einem oder mehreren Ergebnissen, Unterabfragen mit EXISTS), Aggregat-Funktionen, GROUP-BY- und HAVING-Klausel, Operatoren der relationalen Algebra (MINUS, INTERSECT, UNION), Erzeugen bzw. Löschen von Tabellen, Sichten (Views), Kreuztabellenabfrage (mit DECODE). Suchbedingungen in select-Anweisungen Im Mittelpunkt von select-Anweisungen steht die Suchbedingung. Sie wird mit der where<bedingung> zur Auswahl (bzw. zum Eliminieren) von Tabellenzeilen und in der having-<bedingung> zur Auswahl (bzw. zum Eliminieren) von Gruppen benutzt. Eine Suchbedingung ist zusammengesetzt aus Ausdrücken (arithmetisch, Zeichenketten, Namen) und Prädikaten. Arithmetischer Ausdruck Konstante Spaltenname Qualifizierer.Spaltenname Arithm._Ausdruck arithm._Operator Arithm._Ausdruck (arithm._Ausdruck) 1 Bsp. 6, 7.00 gehalt job.gehalt gehalt + 0.1 * gehalt (gehalt + 0.1 * gehalt) Datenbanken Funktion(arithm._Ausdruck) Aggregatsfunktion(arithm._Ausdruck) sqrt(gehalt) sum(gehalt) Zeichenkette bzw. Name Konstante Spaltenname Qualifizierer.Spaltenname Funktion(Zeichenkette_bzw._Name) Aggregatsfunktion(Zeichenkette_bzw._Name) Bsp. ‘Konstruktion‘ abt_id, ang_id, gebdatum angestellte.abt_id count(angestellte.ang_id) Der SQL-Standard umfaßt 7 Ausprägungen von Prädikaten. Ausgewertet nehmen die Prädikate die Werte „true“, „false“ oder „unknown“ an. Prädikat Vergleichsprädikat Format between ausdr1 [not] between ausdr2 and ausdr3 Qualifiziertes Prädikat ausdr[all / any ]( Subselect ) IN-Praedikat ausdr [not] in (wert {, wert} [not] exists (Subselect) spaltenname is [not] null spaltenname [not] like ‘muster‘ exists-Praedikat is null - Prädikat like-Prädikat Bsp. ausdr1(ausdr 2 / Subselect ) 1 >(Subselect) >= all (Subselect) Mit diesen Prädikaten kann die Suchbedingung so festgelegt werden: Suchbedingung Praedikat (Suchbedingung) not Suchbedingung Suchbedingung AND Suchbedingung Suchbedingung OR Suchbedingung 1 Bsp. exists (Subselect) not exists (Subselect) ist einer der Vergleichsoperatoren =, <>, !=, >, >=, <, <= 2