Informatikmaterialien |
Startseite
| Informatik | Physik | Mathematik | Sonstiges | |
Richard-Wossidlo-Gymnasium
Ribnitz-Damgarten |
---|
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.
SQL-Befehle werden in drei Klassen unterteilt:
DDL
– Data Definition Language
Befehle zur Definition von Tabellen und anderer
Datenstrukturen
DCL
– Data Control Language
Befehle zur Kontrolle der Zugriffberechtigungen
DML
– Data Manipulation Language
Befehle zur Datenmanipulation und Datenabfrage
Klasse DDL DCL DML Beispiele Databank erzeugen
CREATE DATABASEZugriffsrechte gewähren
GRANTTabelle abfragen
SELECTTabelle erzeugen
CREATE TABLEZugriffsrechte entziehen
REVOKETabellenzeile löschen
DELETETabellenaufbau ändern
ALTER TABLETabellenzeile einfügen
INSERTTabelle löschen
DROP TABLETabellendaten ändern
UPDATETabelle umbenennen
RENAMEVirtuelle Tabelle erzeugen
CREATE VIEW
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.
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".
Operator Erklärung = < <= >= > <> vergleicht ein Attributwert mit einem anderen bzw. Konstante auf
Gleichheit, kleiner als, kleiner gleich, größer gleich, größer, UngleichheitBETWEEN ... AND ... vergleicht, ob der Attributwert zwischen zwei Grenzen liegt IN (..., ..., ...) vergleicht, ob der Attributwertein Element der Menge ist LIKE vergleich 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) NULL prüft, ob ein Attributwert (nicht) undefiniert ist
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.
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.
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 KNr Fehlstunden Paul Müller 03 12 Olaf Müller 23 3 Erich Schmidt 03 0 Erich Schmidt 23 0
zur Startseite |
© Tino Hempel 1997 - 2008 | Im Web vertreten seit 1994. Eine Internet-Seite aus dem Angebot von Tino Hempel. |