Datenmanipulation mit SQL (Structured Query Language)
Im Rahmen der Lehrveranstaltung „Einführung in die Informatik“ (Übung) wird nur die SQL- Anweisung zur Auswahl (SELECT) behandelt.
SQL-Anweisungen zur Datenmanipulation
Auswahl (SELECT) Mutation
Ändern (UPDATE)
Einfügen (INSERT)
Löschen
(DELETE)
A. Allgemeine Syntax des SELECT-Befehls:
SELECT Auswahl der gewünschten Attribute Angabe ist notwendig
FROM Angabe der Tabelle(n) Angabe ist notwendig
WHERE Angabe von Bedingungen Angabe ist nicht notwendig
GROUP BY Gruppierung Angabe ist nicht notwendig
ORDER BY Sortierung Angabe ist nicht notwendig
Beispiele:
Zugrunde liegt folgende ACCESS-Tabelle:
Studentenstammdaten
MatrikelNr Nachname Vorname Namenszusatz Geburtsdatum PLZ Strasse Hausnummer 1 Maier Xaver 01.05.1982 85354 Unter der alten Isarbrücke 99
2 Großkotz 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
MatrikelNr Nachname 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 Vorname Namenszusatz Geburtsdatum PLZ Strasse Hausnummer 1 Maier Xaver 01.05.1982 85354 Unter der alten Isarbrücke 99
2 Großkotz 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
666666 Topman Ute Freifrau von und zu 07.07.1983 99999 Am Schlachthof 1
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
15 2 09.06.2005 5540 4
Fächerstammdaten
FachID Bezeichnung 1000 Mathematik 1 1001 Statistik 1 1128 BWL 4435 VWL 4711 Physik 5540 Chemie 5640 Botanik
Fächerstammdaten
FachID Bezeichnung 9978 Informatik 9999 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.