SQL-Befehle

Werbung
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.
Herunterladen