Informatikmaterialien 
von Tino Hempel

Startseite | Informatik | Physik | Mathematik | Sonstiges |
 


Richard-Wossidlo-Gymnasium Ribnitz-Damgarten
Fachbereich Informatik


Operationen der Relationenalgebra in SQL

SQL (Structured Query Language) ist eine Programmiersprache der 4. Generation und die Sprache zum Aufbau, zur Verwaltung und zur Abfrage von relationalen Datenbanken. Sie wurde von IBM im Rahmen eines Forschungsprojektes entwickelt und 1987 international standardisiert. (Fast) alle Datenbanksysteme arbeiten mit dieser Sprache.

Einteilung der SQL-Funktionen

SQL-Befehle werden in drei Klassen unterteilt:

Klasse DDL DCL DML
Beispiele Databank erzeugen
CREATE DATABASE
Zugriffsrechte gewähren
GRANT
Tabelle abfragen
SELECT
Tabelle erzeugen
CREATE TABLE
Zugriffsrechte entziehen
REVOKE
Tabellenzeile löschen
DELETE
Tabellenaufbau ändern
ALTER TABLE
   Tabellenzeile einfügen
INSERT
Tabelle löschen
DROP TABLE
   Tabellendaten ändern
UPDATE
Tabelle umbenennen
RENAME
     
Virtuelle Tabelle erzeugen
CREATE VIEW
     

DML-Befehl SELECT

Die SQL-Abfrage erfolgt mit dem Befehl SELECT unter Angabe von bis zu sechs Komponenten. Die allgemeine Syntax hat die Gestalt:

SELECT [ALL | DISTINCT] {spalten | *}
FROM tabelle [alias] [tabelle [alias]] ...
[WHERE {bedingung | unterabfrage}]
[GROUP BY spalten [HAVING {bedingung | unterabfrage}]]
[ORDER BY spalten [ASC | DESC]...];

Die schwierige Syntax lässt sich wie folgt verstehen:

Klausel Erläuterung
SELECT [DISTINCT] Wähle die Werte aus der/den Spalte(n) [mehrfache Datensätze nur einmal]...
FROM ... aus der Tabelle bzw. den Tabellen ...
WHERE ... wobei die Bedingung(en) erfüllt sein soll(en) ...
GROUP BY ... und gruppiere die Ausgabe von allen Zeilen mit gleichem Attributwert zu einer einzigen ...
HAVING ... wobei darin folgende zusätzliche Bedingung(en) gelten müssen/muss ...
ORDER BY [ASC/DESC] ... und sortiere nach den Spalten [auf- bzw. absteigend].

Die SQL-Befehle sind maximal 256-Zeichen lang und müssen mit Semikolon abgeschlossen werden. Attributbezeichner, die Leerzeichen oder Satzzeichen enthalten müssen in eckigen Klammen gesetzt werden. 

Selektion in SQL

Aus der Tabelle Schüler sollen alle Zeilen selektiert werden, in denen der Name "Müller" steht. 
Die Selektion hat also die Form: SName = 'Müller'(Schüler)

Die Umsetzung in SQL lautet: SELECT * FROM Schüler WHERE Name = 'Müller';

Schüler SName = 'Müller'(Schüler)
SNr Vorname Name
4711 Paul Müller
0815 Erich Schmidt
7472 Sven Lehmann
1234 Olaf Müller
2313 Jürgen Paulsen

 

SNr Vorname Name
4711 Paul Müller
1234 Olaf Müller
 

Die WHERE-Klausel liefert also die Selektion. Um zu zeigen, dass alle Spalten in der Ausgabetabelle angezeigt werden sollen, wird ein Joker – das Prozent-Symbol bzw. in MS-ACCEES das Stern-Symbol – verwendet.

Nun sollen aus der Tabelle Schüler sollen alle Zeilen selektiert werden, in denen der Name "Müller" steht und deren Vorname mit "O" beginnt. 
Die Selektion hat also die Form: SName = 'Müller' UND Vorname beginnt mit 'O'(Schüler)

Die Umsetzung in SQL lautet: SELECT * FROM Schüler WHERE Name = 'Müller' AND Vorname LIKE 'O%';

Schüler SName = 'Müller'(Schüler)
SNr Vorname Name
4711 Paul Müller
0815 Erich Schmidt
7472 Sven Lehmann
1234 Olaf Müller
2313 Jürgen Paulsen

 

SNr Vorname Name
1234 Olaf Müller
 

Bedingungen lassen sich mit AND, OR und NOT verknüpfen. Das Sternsymbol steht als Platzhalter für eine beliebige Folge von Zeichen. Soll ein einzelnes Zeichen ausgeblendet werden, so benutzt man das Fragezeichen als Joker. LIKE wird verwendet im Sinne von "SO WIE". 

OperatorErklärung
= < <= >= > <>vergleicht ein Attributwert mit einem anderen bzw. Konstante auf
Gleichheit, kleiner als, kleiner gleich, größer gleich, größer, Ungleichheit
BETWEEN ... AND ...vergleicht, ob der Attributwert zwischen zwei Grenzen liegt
IN (..., ..., ...)vergleicht, ob der Attributwertein Element der Menge ist
LIKEvergleich von Zeichenketten anhand von Ähnlichkeitsoperatoren mit Unterscheidung auf Groß- und Kleinschreibung:
%: Platzhalter für beliebiege Zeichen (in MS Access: *)
_: Platzhalter für ein Zeichen (in MS-Access: ?)
IS (NOT) NULLprüft, ob ein Attributwert (nicht) undefiniert ist

Projektion in SQL

Aus der Tabelle Schüler sollen alle Spalten mit dem Attribut "Name" projiziert werden. 
Die Projektion hat also die Form: PName(Schüler)

Die Umsetzung in SQL lautet: SELECT Name FROM Schüler; 

Schüler PName(Schüler)
SNr Vorname Name
4711 Paul Müller
0815 Erich Schmidt
7472 Sven Lehmann
1234 Olaf Müller
2313 Jürgen Paulsen

 

Name
Müller
Schmidt
Lehmann
Müller
Paulsen

Im Gegensatz zur Projektion laut Relationenalgebra zeigt SQL alle Mehrfacheintragungen an. Um dies zu unterbinden, muss dem SELECT-Befehl das Attribut DISTINCT hinzugefügt werden.

Die Umsetzung in SQL lautet: SELECT DISTINCT Name FROM Schüler; 

Schüler PName(Schüler)
SNr Vorname Name
4711 Paul Müller
0815 Erich Schmidt
7472 Sven Lehmann
1234 Olaf Müller
2313 Jürgen Paulsen

 

Name
Müller
Schmidt
Lehmann
Paulsen

Die SELECT-Klausel liefert also die Projektion. 

Hintereinanderausführung von Projektion und Selektion

Aus der Tabelle Schüler sollen die Vornamen aller Schüler angezeigt werden, deren Nachname Müller ist. 
Die Abfrage hat also die Form: PVorname(SName = 'Müller'(Schüler))

Die Umsetzung in SQL lautet: SELECT Vorname FROM Schüler WHERE Name='Müller';

Schüler PVorname(SName = 'Müller'(Schüler))
SNr Vorname Name
4711 Paul Müller
0815 Erich Schmidt
7472 Sven Lehmann
1234 Olaf Müller
2313 Jürgen Paulsen

 

Vorname
Paul
Olaf
 

Die Abarbeitung des SQL-Befehls erfolgt also immer von innen nach außen, d. h. zuerst die Selektion, dann die Projektion. 

Join in SQL

Aus den Tabellen Schüler und Kurse soll eine Tabelle gebildet werden. Das gemeinsame Attribut lautet SNr.  

Die Umsetzung in SQL lautet:  
SELECT * 
FROM Schüler INNER JOIN Kurse ON Schüler.SNr = Kurse.SNr
ORDER BY Kurse.Fehlstunden DESC;

Schüler Kurse JSNr(Schüler, Kurs)
SNr Vorname Name
4711 Paul Müller
0815 Erich Schmidt
7472 Sven Lehmann
1234 Olaf Müller
2313 Jürgen Paulsen
SNr KNr Fehlstunden Punkte
0815 03 0 12
4711 03 12 03
1234 23 3 14
0815 23 0 10

 

 

Schüler.SNr Vorname Name Kurse.SNr KNr Fehlstunden Punkte
4711 Paul Müller 4711 03 12 03
1234 Olaf Müller 1234 23 3 14
0815 Erich Schmidt 0815 03 0 12
0815 Erich Schmidt 0815 23 0 10
 

Das Ergebnis ist ein INNER JOIN, wobei die entstandene Tabelle nach den Fehlstunden absteigend sortiert ist. Ein solcher Ergebnis wird aber i. d. R. nicht gewünscht. Es genügen oft nur einige Spalten des Verbundes – NATURAL JOIN.

Aus den Tabellen Schüler und Kurse sollen alle Schülernamen mit ihren Fehlstunden aufgelistet werden. Der Befehl lautet:
SELECT Schüler.Vorname, Schüler.Name, Kurse.KNr, Kurse.Fehlstunden
FROM Schüler INNER JOIN Kurse ON Schüler.SNr = Kurse.SNr
ORDER BY Kurse.Fehlstunden DESC;

PVorname, Name, KNr, Fehlsunden(JSNr(Schüler, Kurs))
Vorname Name KNrFehlstunden
Paul Müller 0312
Olaf Müller 233
Erich Schmidt 030
Erich Schmidt 230
 




zur Startseite
© Tino Hempel 1997 - 2008 Im Web vertreten seit 1994.
Eine Internet-Seite aus dem Angebot von Tino Hempel.