Free Essay

Iugilgli

In:

Submitted By globi
Words 853
Pages 4
Schüler MatrNr | Name | 26120 | Fichte | 25403 | Jonas | 27103 | Fauler |

Schüler MatrNr | Name | 26120 | Fichte | 25403 | Jonas | 27103 | Fauler |

Professor PersNr | Name | 12 | Wirth | 15 | Tesla | 20 | Urlauber |

Professor PersNr | Name | 12 | Wirth | 15 | Tesla | 20 | Urlauber |

Vorlesung VorlNr | Titel | PersNr | 5001 | ET | 15 | 5022 | IT | 12 | 5045 | DB | 12 |

Vorlesung VorlNr | Titel | PersNr | 5001 | ET | 15 | 5022 | IT | 12 | 5045 | DB | 12 |

hört MatrNr | VorlNr | 25403 | 5001 | 26120 | 5001 | 26120 | 5045 |

hört MatrNr | VorlNr | 25403 | 5001 | 26120 | 5001 | 26120 | 5045 |

einfachste Abfrage SELECT * FROM Student; listet alle Spalten und alle Zeilen der Tabelle Student auf.
Ergebnis:
MatrNr | Namen | 26120 | Fichte | 25403 | Jonas | 27103 | Fauler |

Abfrage mit Spaltenauswahl SELECT VorlNr, Titel FROM Vorlesung listet die Spalten VorlNr und Titel aller Zeilen der Tabelle Vorlesung auf.
Ergebnis:
VorlNr | Titel | 5001 | ET | 5022 | IT | 5045 | DB |

Abfrage mit eindeutigen Werten SELECT DISTINCT MatrNr FROM hört listet nur unterschiedliche Einträge der Spalte MatrNr aus der Tabelle hört auf. Dies zeigt die Matrikelnummern aller Studenten, die mindestens eine Vorlesung hören, wobei mehrfach auftretende Matrikelnummern nur einmal ausgegeben werden.
Ergebnis:
MatrNr | 25403 | 26120 |

Abfrage mit Umbenennung SELECT MatrNr AS Matrikelnummer, Name FROM Student listet die Spalten MatrNr und Name aller Zeilen der Tabelle Student auf. MatrNr wird beim Anzeigeergebnis als Matrikelnummer aufgeführt.
Ergebnis:
Matrikelnummer | Name | 26120 | Fichte | 25403 | Jonas | 27103 | Fauler |

Abfrage mit Filter SELECT VorlNr, Titel FROM Vorlesung WHERE Titel = 'ET' listet VorlNr und Titel aller derjenigen Zeilen der Tabelle Vorlesung auf, deren Titel 'ET' ist.
Die solchermaßen strukturierte, häufig verwendete Anweisung wird nach den Anfangsbuchstaben auch als „SFW-Block“ bezeichnet.
Ergebnis:
VorlNr. | Titel | 5001 | ET |

Abfrage mit Filter nach Inhalt SELECT Name FROM Student WHERE Name LIKE 'F%' listet die Namen aller Studenten auf, deren Namen mit F beginnen. (im Beispiel: Fichte und Fauler).
LIKE kann mit verschiedenen Platzhaltern belegt werden: _ steht für ein fehlendes Zeichen und % steht für eine beliebige Zeichenfolge. So können mit der Abfrage auch Felder nach Inhalt durchsucht werden.
Ergebnis:
Name | Fichte | Fauler |

Abfrage mit Filter und Sortierung SELECT Vorname, Name, StrasseNr, Plz, Ort FROM Student WHERE Plz = '20095' ORDER BY Name listet Vorname, Name, StrasseNr, Plz und Ort aller Studenten aus dem angegebenen Postleitzahlbereich, sortiert nach Nachnamen, auf.

Abfrage mit verknüpften Tabellen SELECT Vorlesung.VorlNr, Vorlesung.Titel, Professor.PersNr, Professor.Name FROM Professor, Vorlesung WHERE Professor.PersNr = Vorlesung.PersNr
Die Aufzählung hinter FROM legt die Datenquellen fest: an dieser Stelle können mit Hilfe sogenannter JOINs mehrere Tabellen über Schlüsselfelder miteinander verknüpft werden, so dass Daten aus verschiedenen Tabellen zusammengeführt und angezeigt werden.
Innerer natürlicher Verbund: Alle Datensätze aus den Tabellen Professor und Vorlesung, die den gleichen Wert im Feld PersNr haben. Professoren ohne Vorlesung und Vorlesungen ohne Professor werden damit nicht angezeigt.
Dies ist theoretisch äquivalent zu: SELECT Vorlesung.VorlNr, Vorlesung.Titel, Professor.PersNr, Professor.Name FROM Professor INNER JOIN Vorlesung ON Professor.PersNr = Vorlesung.PersNr
Vorsicht: Nicht alle Implementierungen verstehen die Schlüsselwörter „INNER“, „OUTER“ und „JOIN“.
Tabellen können auch ohne Verwendung von Schlüsselfeldern miteinander verknüpft werden: SELECT Vorlesung.Titel, Professor.Name FROM Professor, Vorlesung WHERE Professor.PersNr = Vorlesung.PersNr
Ergebnis:
Titel | Name | ET | Tesla | IT | Wirth | DB | Wirth |

Linker äußerer Verbund
SELECT Vorlesung.VorlNr, Vorlesung.Titel, Professor.PersNr, Professor.Name
FROM Professor LEFT OUTER JOIN Vorlesung
ON Professor.PersNr = Vorlesung.PersNr
Äußerer linker Verbund: Alle Datensätze der Tabelle Professor und alle Datensätze aus beiden Tabellen, die den gleichen Wert im Feld PersNr haben. Professoren ohne Vorlesung sind enthalten, Vorlesungen ohne Professor sind nicht enthalten.
Die folgende Abfrage liefert nur diejenigen Datensätze, zu denen kein passender Datensatz im linken äußeren Verbund existiert (alle Professoren, die keine Vorlesungen halten):
SELECT Professor.PersNr, Professor.Name
FROM Professor LEFT OUTER JOIN Vorlesung
ON Professor.PersNr = Vorlesung.PersNr
WHERE Vorlesung.PersNr IS NULL
Das Gleiche mittels einer Unterabfrage:
SELECT a.PersNr, a.Name
FROM Professor a
WHERE NOT EXISTS (SELECT * FROM Vorlesung WHERE PersNr = a.PersNr)

Gruppierung mit Aggregat-Funktionen
SELECT COUNT(Vorlesung.PersNr) AS Anzahl, Professor.PersNr, Professor.Name
FROM Professor LEFT OUTER JOIN Vorlesung
ON Professor.PersNr = Vorlesung.PersNr
GROUP BY Professor.Name, Professor.PersNr
Äußerer linker Verbund und Gruppierung, Aggregation: Zählt die Anzahl der Vorlesungen pro Professor.
Bemerkung: COUNT(Professor.PersNr) oder COUNT(*) wären falsch (Nullwerte sollen nicht mitgezählt werden).
Zusammenfassung [Bearbeiten]
Zusammengefasst sind die wichtigsten Elemente einer SQL-SELECT-Abfrage wie folgt anzugeben:
SELECT [DISTINCT] Auswahlliste [AS Spaltenalias]
FROM Quelle [AS Tabellenalias]
[WHERE Where-Klausel]
[GROUP BY (Group-by-Attribut)+]
[HAVING Having-Klausel]
[ORDER BY (Sortierungsattribut [ASC|DESC])+];
Erläuterung:
Mengenoperatoren können auf mehrere SELECT-ABFRAGEN angewandt werden, die gleich viele Attribute haben und bei denen die Datentypen der Attribute übereinstimmen: * UNION vereinigt die Ergebnismengen. In einigen Implementierungen werden mehrfach vorkommende Ergebnistupel wie bei DISTINCT entfernt, ohne dass "UNION DISTINCT" geschrieben werden muss bzw. darf. * UNION ALL vereinigt die Ergebnismengen. Mehrfach vorkommende Ergebnistupel bleiben erhalten. Einige Implementierungen interpretieren aber "UNION" wie "UNION ALL" und verstehen das "ALL" möglicherweise nicht und geben eine Fehlermeldung aus. * EXCEPT liefert die Tupel, die in einer ersten, jedoch nicht in einer zweiten Ergebnismenge enthalten sind. Mehrfach vorkommende Ergebnistupel werden entfernt. * MINUS ist ein analoger Operator wie EXCEPT, der von manchen SQL-Dialekten alternativ benutzt wird. * INTERSECT liefert die Schnittmenge zweier Ergebnismengen. Mehrfach vorkommende Ergebnistupel werden entfernt.

Similar Documents