Anfragen an Datenbanken mit SQL Folie 28
Syntax einer Anfrage SFW-Anfrage (Select-From-Where-Anfrage) SELECT <Attributliste> Projektion π FROM <Relationenliste> Kart. Produkt WHERE <Bedingung> Selektion σ Vereinigung SFW-Anfrage UNION SFW-Anfrage Differenz SFW-Anfrage EXCEPT SFW-Anfrage Syntaxvarianten und -details siehe Handbücher der einzelnen Hersteller Folie 29
Bedingungen Prädikate =, <>, <, >, <=, >= Unscharfer Vergleich mit Wildcards _ ein beliebiges Zeichen % eine beliebig lange Folge beliebiger Zeichen, Wildcardauswertung wird durch like erzwungen, z.b. where name like 'M%' Verknüpfung AND, OR, NOT Achtung SQL sortiert doppelte Tupel (z.b. nach einer Projektion) nicht automatisch aus. Hierfür ist das zusätzliche Schlüsselwort DISTINCT nötig. Folie 30
Übungsumgebung Für den praktischen Umgang mit einem Datenbankmanagementsystem bietet die Professur allen Studenten eine PostgreSQL-Spielumgebung an, die volle Datenbank-Funktionalität bereitstellt Damit können neben eigenen Experimenten auch die Übungsaufgaben mit tatsächlichen Datensätzen nachvollzogen werden Das System sowie dessen Benutzungsanleitung sind über die DVS- Homepage www.tu-chemnitz.de/informatik/dvs/ unter dem Punkt Service verlinkt Nichtsdestotrotz sollten Sie auch auf Ihrem eigenen Rechner ein Datenbankmanagementsystem (z.b. PostgreSQL oder MySQL) installieren und die erlernten Konzepte praktizieren! Folie 31
Einfache Anfragen mit SQL Formulieren Sie einfache Anfragen für folgende Anforderungen / Fragen! Das Schema der Ergebnisrelation soll ausschließlich die in Klammern gegebenen Attribute enthalten. 1. Liste der Namen (name) und Adressen (adresse) aller Passagiere 2. Liste aller Flugkapitäne Captain (pinr, name, flug_h) 3. Liste der verschiedenen Flugrouten (start_in, ziel, dauer) 4. Von welchen Städten (start_in) kann man nach London oder Berlin fliegen? 5. Welche Piloten (name) sind nicht Chiefpilot und haben über 1500 Flugstunden (flug_h) absolviert? 6. Liste aller Flüge (fnr, ziel) die nach Berlin, London, Frankfurt, Paris, Köln-Bonn gehen 7. Liste aller Flugkapitäne und Chefpiloten (pinr, quali, flug_h), die mehr als 1500 Flugstunden absolviert haben. Folie 32
Komplexere Anfragen/Joins Kartesisches Produkt... FROM R 1, R 2,..., R n... Theta Join... FROM R 1 JOIN R 2 ON (Bedingung)... Natural Join... FROM R 1 NATURAL JOIN R 2... Benennung/Umbenennung... FROM <alter Name> AS <neuer Name>... SELECT <alter Name> AS <neuer Name>... SELECT <Ausdruck> AS <Name>... Qualifikation Zuordnung von Attributen zu Relationen mittels Dot-Notation Folie 33
Komplexere Anfragen in SQL Lösen Sie die folgenden Aufgaben zunächst durch Verwendung des Kreuzprodukts und anschließend mit Join-Operationen! 1. Welche Maschinen (fznr, typ, geschw) fliegen schneller als 870 km/h? 2. Auflistung der Preise (preis) aller Buchungen der 1. Klasse von London nach Boston. 3. Welche Flüge (fnr, start_in, ziel) haben Passagiere mit Nachnamen Ebert gebucht? 4. Welche Geschwindigkeiten fliegen die Maschinen von AIR BERLIN (fznr, typ, geschw)? 5. Welche Piloten (name) fliegen Maschinen (typ) mit einer Geschwindigkeit über 870 km/h? 6. Mit welchen Piloten (name) und Maschinen (typ) fliegt Passagier Swen Pfeifer? Folie 34
Aggregation & Gruppierung Syntax SELECT FROM WHERE GROUP BY HAVING <Attributliste, Aggregatfunktionen> <Relationenliste> <Bedingung> <Attributliste> <Bedingung für Aggregationen> Aggregatfunktionen AVG, COUNT, SUM, MIN, MAX,... Folie 35
Aggregation & Gruppierung mitarbeiter select abt_nr, avg(geh) as d_geh from mitarbeiter group by abt_nr Folie 36
Aggregation & Gruppierung Formulieren Sie folgende Anfragen in SQL! Angaben in Klammern bezeichnen die Benennung der Spalten der Ergebnistabelle. 1. Wie viele (anz) unterschiedliche Qualifikationen gibt es? 2. Welche Durchschnittsgeschwindigkeit (d_geschw) weisen die Flugzeuge von LUFTHANSA auf? 3. Wie viele Passagiere fliegen erster Klasse? 4. Wie viele Piloten (anz) mit der Qualifikation Chiefpilot sind bei AIR FRANCE beschäftigt? 5. Wie viele Piloten (anz) gibt es für jede Qualifikation (quali)? 6. Welche Piloten (pinr) sind für mehr als einen Flug (anz) eingesetzt? 7. Welche Passagiere (panr) haben mehr als einen Flug (anz) gebucht? Folie 37
Ordnen Syntax SFW-Anfrage ORDER BY <Attribut> [ASC DESC],... Reihenfolge ASC bedeutet aufsteigende und DESC absteigende Sortierung. Wird keine Sortierrichtung vorgegeben, gilt automatisch aufsteigende Sortierung. Beispiel SELECT FROM ORDER BY abt_nr, name, taet mitarbeiter abt_nr, geh DESC Folie 38
Ordnen - Aufgaben Formulieren Sie folgende Anfragen in SQL! Angaben in Klammern bezeichnen die Benennung der Spalten der Ergebnistabelle. 1. Die Relation Flug soll alphabetisch geordnet nach dem Startort und für jeden Startort nach fallender Flugdauer ausgegeben werden. 2. Liste der verschiedenen Qualifikationen in geordneter Reihenfolge. 3. Liste der Fluggesellschaften (gesell_bez) mit ihren Passagieren (name, adresse) in alphabetischer Reihenfolge der Fluggesellschaften und Passagiere 4. Liste der Fluggesellschaften (gesell_bez) mit dem Durchschnittspreis (d_preis) der gebuchten Flüge geordnet nach fallenden Durchschnittspreisen Folie 39
Datum & Zeit Datentypen date, time, timestamp, interval Gültige Datums- / Zeitangaben '2001-09-28', '03:00', '2001-09-28 01:00', '2003-12-19 15:04:09.132968+01', '1 year', '13 years' Gültige Einheiten year, years, month, day, hour, minutes, seconds,... Operatoren +, -, *, / Folie 40
Datums- und Zeitfunktionen weitere Funktionen und Details siehe DBMS-Handbuch Name Rückgabe Beschreibung Beispiel Ergebnis age(timestamp) interval Subtrahiert timestamp vom aktuellen Datum age(date 1957-06-13 ) 46 years 6 mons 6 days age(timestamp, timestamp) interval Subtrahiert die Argumente age(date 2001-04-10, date 1957-06-13 ) date_trunc(text, timestamp) extract(identifier from ausdruck) timestamp Schneidet bis zur angegebenen Einheit ab (year,month,day, hour, minute, second,...) date_trunc( hour, timestamp 2001-02-16 20:38:40 ) Extrahiert einen Teil aus einem extract(hour from timestamp Ausdruck 2001-02-16 20:38:40 ) now() timestamp Aktueller Zeitstempel 2003-12-19 15:22:07.738564+01 CURRENT_DATE date Heutiges Datum 2003-12-19 CURRENT_TIME time Aktuelle Zeit 15:20:54.102398+01 CURRENT_TIMESTAMP timestamp Aktueller Zeitstempel 2003-12-19 15:21:14.552832+01 43 years 9 mons 26 days 23:00 2001-02-16 20:00:00+00 20 Folie 41
Aufgaben zu Datum und Zeit 1. Welche Flugzeuge wurden zwischen dem 20.08.1999 und dem 21.01.2000 gewartet (fznr, kontr)? 2. Welche Maschine(n) (fznr, typ) hat Lufthansa 1999 gekauft? 3. Vor wie vielen Tagen (tage) fand der Flug Bagdad nach Montreal statt? 4. Listen Sie alle Piloten (pinr) und den Jahr ihres Dienstantritts (jahr) auf! Folie 42
Unteranfragen Relationenwertige Unteranfragen An jeder Stelle, an der eine Relation oder ein Wert stehen kann, kann prinzipiell auch wieder eine Anfrage erscheinen. z.b. SELECT... FROM (SFW-Anfrage) AS <Name>... Mengenwertige Unteranfragen Anfragen, die eine Wertemenge (oder einen einzelnen Wert) zurückliefern, können entsprechend verwendet werden. Allerdings ist hierbei zu beachten, dass bei Vergleichen potenziell Wertemengen ausgewertet werden müssen. Dafür stehen im WHERE-Teil die Mengenprädikate zur Verfügung: IN EXISTS ANY ALL Ist Element in Wertemenge enthalten? Ist Wertemenge leer? Erfüllt irgendein Wert der Ergebnismenge die Bedingung? Genügen alle Elemente der Ergebnismenge der Bedingung? Folie 43
Aufgaben Unteranfragen Lösen Sie folgende Anfragen zunächst ausschließlich mit Hilfe von Unteranfragen! Geben Sie - wenn möglich - noch eine Variante ohne Unteranfragen an! 1. Wie heißt der älteste Pilot (name)? 2. Welcher Flugzeugtyp (typ) ist der schnellste (geschw)? 3. Wann wurden die Maschinen (fznr), die von Piloten mit Nachnamen Hummel geflogen werden, das letzte mal überprüft (kontr)? 4. Für welche unterschiedlichen Flugzeugtypen (typ) von AIR BERLIN liegen Buchungen vor? 5. Welche Piloten (name) sind für keinen Flug eingesetzt? 6. Welche Piloten (name) haben mehr Flugstunden (flug_h) als Pilot Jan Berger und gleiche Qualifikation (quali)? 7. Welche Passagiere (name) haben denselben Flug gebucht wie Jim Ziegel [außer Jim Ziegel]? 8. Wie teuer (preis) ist die billigste aller Buchungen der 1. Klasse von London nach Boston? Folie 44