Datenmanipulation mit SQL (Structured Query Language) Im Rahmen der Lehrveranstaltung „Einführung in die Informatik“ (Übung) wird nur die SQLAnweisung zur Auswahl (SELECT) behandelt. SQL-Anweisungen zur Datenmanipulation Auswahl (SELECT) Ändern (UPDATE) Mutation Einfügen (INSERT) Löschen (DELETE) A. Allgemeine Syntax des SELECT-Befehls: SELECT FROM WHERE GROUP BY ORDER BY Auswahl der gewünschten Attribute Angabe der Tabelle(n) Angabe von Bedingungen Gruppierung Sortierung Angabe ist notwendig Angabe ist notwendig Angabe ist nicht notwendig Angabe ist nicht notwendig Angabe ist nicht notwendig Beispiele: Zugrunde liegt folgende ACCESS-Tabelle: Studentenstammdaten MatrikelNr Nachname 1 Maier 2 Großkotz Vorname Namenszusatz Geburtsdatum PLZ Strasse Hausnummer Xaver 01.05.1982 85354 Unter der alten Isarbrücke 99 Waldemar 02.02.1980 80808 Menterschwaige 88 5 Neureich-Müller Elfriede 01.02.1978 80809 Grünwald 1 7 Bond James 02.02.1971 85354 Am Wörth 1b 9 Rammelmaier Rambo 07.07.1982 81234 Am Schlagring 55 1. Aus der Tabelle Studentenstammdaten werden alle Datensätze (weil keine Bedingung angegeben ist) angezeigt (Kopie der kompletten Tabelle wird ausgegeben) SELECT * FROM Studentenstammdaten Ausgegeben wird die komplette Tabelle „Studentenstammdaten“ 2. Projektion: Aus der Tabelle Studentenstammdaten werden für alle Datensätze (weil keine Bedingung angegeben ist) die Werte der Felder „MatrikelNr“ und „Nachname“ ausgegeben SELECT MatrikelNr, Nachname FROM Studentenstammdaten Ausgegeben wird: MatrikelNr Nachname 1 Maier 2 Großkotz 5 Neureich-Müller 7 Bond 9 Rammelmaier 3. Projektion mit qualifizierter Auswahl: Aus der Tabelle Studentenstammdaten werden für alle Datensätze, für die das Feld MatrikelNr den Wert 7 enthält (WHERE-Bedingung) die Werte der Felder „MatrikelNr“ und „Nachname“ ausgegeben SELECT MatrikelNr, Nachname FROM Studentenstammdaten WHERE MatrikelNr = 7 Ausgegeben wird: MatrikelNr Nachname 7 Bond B. Auswahlabfragen mit Bezug auf mehrere Tabellen. Es sollen für die folgenden Beispiele folgende Tabellen (mit ihren Datensätzen) gegeben sein. Studentenstammdaten MatrikelNr Nachname 1 Maier 2 Großkotz Vorname Xaver Namenszusatz 02.02.1980 80808 Menterschwaige 88 5 Neureich-Müller Elfriede 01.02.1978 80809 Grünwald 1 7 Bond James 02.02.1971 85354 Am Wörth 1b 9 Rammelmaier Rambo 07.07.1982 81234 Am Schlagring 55 07.07.1983 99999 Am Schlachthof 1 666666 Topman Waldemar Geburtsdatum PLZ Strasse Hausnummer 01.05.1982 85354 Unter der alten Isarbrücke 99 Ute Freifrau von und zu Prüfungsleistungen LfdNr Matrikelnummer Datum Fach_ID Note 1 7 09.06.2005 4711 1 2 7 09.06.2005 1128 4,3 3 7 09.06.2005 9978 2 4 7 09.06.2005 4435 2,3 5 7 09.06.2005 5540 1 6 9 09.06.2005 4711 2 7 9 09.06.2005 1128 3 8 9 09.06.2005 9978 1 9 9 09.06.2005 4535 2 10 9 09.06.2005 5640 1 11 5 09.06.2005 9978 2 12 5 09.06.2005 4435 1 13 1 09.06.2005 9978 3 14 1 09.06.2005 4435 2 2 09.06.2005 5540 4 15 Fächerstammdaten FachID 1000 1001 1128 4435 4711 5540 5640 9978 9999 Bezeichnung Mathematik 1 Statistik 1 BWL VWL Physik Chemie Botanik Informatik Zoologie C. Übungsaufgaben 1. Sie sehen in in der Entwurfsansicht für Abfragen in MS-Access folgende Auswahlabfrage a) Wie viele Datensätze (basierend auf den o.g. Tabellen) erwarten Sie? b) Wie lautet die zugehörige SQL-Abfrage? Lösungshinweis zu a) Kartesisches Produkt Lösungshinweis zu b) SELECT Prüfungsleistungen.Matrikelnummer, Studentenstammdaten.Nachname, Studentenstammdaten.Vorname, Prüfungsleistungen.Fach_ID, Prüfungsleistungen.Note FROM Studentenstammdaten,Prüfungsleistungen 2. Angenommen, mit der o.g. Abfrage soll zu jeder Matrikelnummer der Vor- und Nachname ausgegeben werden. Welche Änderungen sind vorzunehmen a) im Entwurfsfenster der Auswahlabfrage in Access b) in der SQL-Abfrage c) alternativ bereits im Beziehungsfenster von Access Lösungshinweis zu a) Verknüpfung (Inner Join) zwischen den Tabellen über die Felder MatrikelNr bzw. Matrikelnummer einrichten Lösungshinweis zu b) SELECT Prüfungsleistungen.Matrikelnummer, Studentenstammdaten.Nachname, Studentenstammdaten.Vorname, Prüfungsleistungen.Fach_ID, Prüfungsleistungen.Note FROM Studentenstammdaten INNER JOIN Prüfungsleistungen ON Studentenstammdaten.MatrikelNr = Prüfungsleistungen.Matrikelnummer; SELECT Prüfungsleistungen.Matrikelnummer, Studentenstammdaten.Nachname, Studentenstammdaten.Vorname, Prüfungsleistungen.Fach_ID, Prüfungsleistungen.Note FROM Studentenstammdaten,Prüfungsleistungen WHERE Studentenstammdaten.MatrikelNr = Prüfungsleistungen.Matrikelnummer; Lösungshinweis zu c) Beziehungen vom ER-Modell übernehmen – möglichst referentielle Integrität definieren. 3. Angenommen, es liegt folgende Auswahlabfrage vor a) Wie viele Datensätze (basierend auf dem o.g. Tabellen) erwarten Sie? b) Wie lautet die zugehörige SQL-Abfrage? c) Angenommen, mit der o.g. Abfrage soll zu jeder Matrikelnummer der Vor- und Nachname und zu jeder Fach_ID die Bezeichnung ausgegeben werden. Welche Änderungen sind vorzunehmen -) im Entwurfsfenster der Auswahlabfrage in Access -) in der SQL-Abfrage -) alternativ bereits im Beziehungsfenster von Access 4. Erläutern Sie anhand der o.g. Tabellen die Begriffe Mastertabelle, Detailtabelle sowie referentielle Integrität. 5. Könnte referentielle Integrität zwischen den o.g. Tabellen eingerichtet werden? Welche Änderungen sind ggf. vorzunehmen (Begründen Sie Ihre Antworten) 6. Auswahlabfrage – Basierend auf drei Tabellen: a) Ergänzen Sie die folgende Auswahlabfrage in Access in der Weise, dass Ihnen nur die Matrikelnummern (ergänzt um Vor- und Nachname) sowie Fachbezeichnungen ausgegeben werden, in denen der Prüfling eine Note besser als 2,7 erzielt hatte. b) Formulieren Sie den zugehörigen SQL-Befehl. 7. Lassen Sie sich alle Datensätze aus den o.g. Tabellen ausgeben, die einer referentiellen Integrität widersprechen würden. 8. Lassen Sie sich alle Studenten ausgeben, die bisher noch an keiner Prüfung teilgenommen hatten.