Homepage-Webhilfe Event-Banner

SQL-Crashkurs

SQL (Structured Query Language) ist eine Datenbanksprache, die dazu verwendet wird, um mit dem Datenbankmanagementsystem (DBMS) zu kommunizieren. Dadurch können dann Datenbanken und Tabellen verwaltet werden (Data Definition Language, kurz DDL), aber auch Daten aus Tabellen abgefragt (Data Query Language, kurz DQL), geändert, gelöscht und Daten in Tabellen eingetragen (Data Manipulation Language, kurz DML) werden.

In diesem Crashkurs lernen Sie lediglich die Datenabfrage (DQL) und Datenmanipulation (DML) kennen, da es sich hierbei um die wichtigsten Bestandteile handelt (in Bezug auf Webanwendungen). Für die Erstellung von Datenbanken und Tabellen empfehlen wir Ihnen daher die Verwendung eines Frontends (z. B. phpMyAdmin).


Abfragen führen Sie in SQL mit dem SELECT-Statement aus. Nach dem SELECT-Schlüsselwort geben Sie einen Ausdruck an, der angibt, welche Spalten in der Ergebnistabelle angezeigt werden sollen:

SELECT Vorname, Nachname FROM Kontakt;

Möchten Sie alle Spalten ausgeben, so können Sie an Stelle von Spaltennamen das Sternzeichen * angeben:

SELECT * FROM Kontakt;

Ebenfalls ist es möglich, die Spaltennamen mit dem AS-Schlüsselwort für die Ausgangstabelle umzubenennen:

SELECT Nachname AS Name, Telefonnummer FROM Kontakt;

Möchten Sie doppelte Einträge herausfiltern (dabei werden nur die auszugebenden Spalten berücksichtigt), so können Sie nach dem SELECT-Schlüsselwort DISTINCT notieren:

SELECT DISTINCT Nachname FROM Kontakt;

Im Regelfall möchten Sie nicht alle Zeilen einer Tabelle ausgeben, sondern nur bestimmte. Hier kann Ihnen die WHERE-Klausel helfen, mit welcher Sie Bedingungen angeben können, welche Zeilen ausgegeben werden sollen und welche nicht. Einzelne Bedingungen können mit AND (Und-Verknüpfung) und OR (Oder-Verknüpfung) kombiniert werden und über runde Klammern gruppiert werden. Als Vergleichsoperatoren kommen = (ist gleich), <> (ist ungleich, alternativ auch ggf. !=), < (ist kleiner), <= (ist kleiner oder gleich), > (ist größer) und >= (ist größer oder gleich) zum Einsatz. Hierzu einige Beispiele:

SELECT * FROM Kontakt WHERE Vorname = 'Max';
SELECT * FROM Kontakt WHERE Nachname = 'Meyer' OR Nachname = 'Maier';
SELECT * FROM Kontakt WHERE Geburtsjahr <= 1990;
SELECT * FROM Kontakt WHERE (Geburtsjahr = 1987 OR Geburtsjahr = 1994) AND Ort = 'Musterstadt';

Möchten Sie Zeichenmuster vergleichen, so verwenden Sie den LIKE-Operator sowie das Prozentzeichen % (beliebige Anzahl an Zeichen) oder den Unterstrich _ (genau ein Zeichen) als Platzhalter:

SELECT * FROM Kontakt WHERE Nachname LIKE 'M%';

Um auf einen Wertebereich zu prüfen, so können Sie den BETWEEN-Operator verwenden:

SELECT * FROM Kontakt WHERE Geburtsjahr BETWEEN 1980 AND 2000;

Da die Datentypen in der Datenbanktechnik einen undefinierten Wert (NULL) zulassen, müssen Sie diesen bei Abfragen natürlich auch prüfen können. Dafür können Sie in der WHERE-Klausel IS NULL (ist undefiniert) oder IS NOT NULL (ist nicht undefiniert) notieren. Verwendet werden kann der NULL-Wert z. B. auch bei einer fehlenden Information.

SELECT * FROM Kontakt WHERE Ort IS NULL;

Um das Ergebnis zu sortieren, können Sie die Schlüsselwörter ORDER BY angeben. Danach notieren Sie den Spaltennamen sowie ggf. das Schlüsselwort ASC (ascending, zu Deutsch aufsteigend, Standard) oder DESC (descending, zu Deutsch absteigend).

SELECT * FROM Kontakt ORDER BY Geburtsjahr DESC;

Natürlich können Sie auch mehrere Spalten angeben, nach welchen nacheinander sortiert werden soll:

SELECT * FROM Kontakt ORDER BY Nachname, Vorname;

Oft ist es notwendig, Daten über mehrere Tabellen abzufragen. Ein kurzes Beispiel dazu: Sie haben eine Tabelle mit Blogbeiträgen und eine Tabelle mit Autoren. In einem Datensatz von einem Blogbeitrag ist jedoch lediglich die ID des Autors hinterlegt und nicht der Name. Für die Ausgabe möchten Sie jedoch den Autornamen ermitteln. Ein solches Szenario lässt sich mit Hilfe eines normalen SELECT-Ausdrucks erreichen. Sie müssen hierfür lediglich beide Tabellen notieren, vor den Spaltennamen die Tabellennamen angeben und die Tabellen über eine WHERE-Klausel verbinden:

SELECT Beitrag.Titel, Beitrag.Text, Beitrag.Datum, Autor.Name FROM Beitrag, Autor WHERE Beitrag.AutorID = Autor.ID;

Bei komplexen Abfragen wird der Ausdruck jedoch sehr schnell lang. Deshalb können Sie den Tabellennamen Abkürzungen zuweisen, die dann innerhalb des Ausdrucks verwendet werden können:

SELECT B.Titel, B.Text, B.Datum, A.Name FROM Beitrag B, Autor A WHERE B.AutorID = A.ID;

Die geläufigere (und empfohlene) Variante zur Verknüpfung von Tabellen ist jedoch die Verwendung von JOIN. Hierfür wird der INNER JOIN (innere natürliche Verknüpfung) verwendet. Das Schlüsselwort INNER darf jedoch weggelassen werden. Das SQL-Statement für das erste Beispiel würde also wie folgt aussehen:

SELECT Beitrag.Titel, Beitrag.Text, Beitrag.Datum, Autor.Name FROM Beitrag JOIN Autor ON Beitrag.AutorID = Autor.ID;

Auch hier ist die Verwendung von Abkürzungen möglich:

SELECT B.Titel, B.Text, B.Datum, A.Name FROM Beitrag B JOIN Autor A ON B.AutorID = A.ID;

Neben den inneren Verknüpfungen gibt es auch noch äußere Verknüpfungen. Hierbei gibt es drei unterschiedliche Typen LEFT OUTER JOIN, RIGHT OUTER JOIN und FULL OUTER JOIN. Das Schlüsselwort OUTER kann jedoch, wie INNER beim INNER JOIN auch, einfach weggelassen werden. Die geläufigste Variante der äußeren Verknüpfungen ist der LEFT OUTER JOIN. Die äußeren Verknüpfungen werden immer dann verwendet, wenn die Daten in der Tabelle, welche mit dem JOIN verbunden wird nicht unbedingt existieren müssen. Die SQL-Statements von oben geben, wie Ihnen bereits bekannt ist, alle Beiträge mit dem passenden Autor zurück. Ist für einen Beitrag ein Autor angegeben, welcher nicht mehr existiert, oder kein Autor angegeben (NULL-Wert), so würde auch der Beitrag nicht zurückgegeben werden. Möchten Sie jedoch trotzdem alle Beiträge ermitteln (also auch die, ohne existierenden Autor), so verwenden Sie eine äußere Verknüpfung. Die Spaltenwerte aus der verknüpften Tabelle (in diesem Fall Autor.Name) werden dann für die Ergebnistabelle mit NULL-Werten gefüllt:

SELECT Beitrag.Titel, Beitrag.Text, Beitrag.Datum, Autor.Name FROM Beitrag LEFT JOIN Autor ON Beitrag.AutorID = Autor.ID;

Abfragen können natürlich auch über mehr als zwei Tabellen durchgeführt werden. Das Schema bleibt jedoch immer das Gleiche.

SELECT Beitrag.Titel, Beitrag.Text, Beitrag.Datum, Autor.Name, Kategorie.Bezeichnung FROM Beitrag JOIN Autor ON Beitrag.AutorID = Autor.ID JOIN Kategorie ON Beitrag.KategorieID = Kategorie.ID;

SQL unterstützt einige Aggregatfunktionen, mit welchen es möglich ist, bestimmte Daten zusammenzufassen und diese dann als einzelnen Wert zurückgeben zu lassen. Aggregatfunktionen können, wie Spaltennamen auch, im SELECT-Ausdruck angegeben werden. Auch das Umbenennen der Spalte ist möglich und wird hier meistens auch angewendet, da andernfalls der Spaltenname dem Funktionsaufruf entspricht. Die wichtigsten SQL-Aggregatfunktionen sind MIN() (kleinster Wert), MAX() (größter Wert), AVG() (Durchschnitt), SUM() (Summe) und COUNT() (Anzahl). Innerhalb der runden Klammern wird ein Ausdruck (im Regelfall ein Spaltenname) angegeben, welcher angibt, von welchem Wert bestimmte Daten ermittelt werden sollen.

SELECT MIN(Preis) AS Minimum FROM Rechnungsposition WHERE RechnungsID = 123;
SELECT MAX(Preis) AS Maximum FROM Rechnungsposition WHERE RechnungsID = 123;
SELECT AVG(Preis) AS Durchschnitt FROM Rechnungsposition WHERE RechnungsID = 123;
SELECT SUM(Preis) AS Summe FROM Rechnungsposition WHERE RechnungsID = 123;
SELECT COUNT(*) AS Anzahl FROM Rechnungsposition WHERE RechnungsID = 123;

Möchten Sie einen Datensatz (also eine Zeile) in eine Tabelle einfügen, so benötigen Sie das Statement INSERT INTO. Anschließend notieren Sie den Tabellennamen, gefolgt von dem Schlüsselwort INSERT INTO und einem runden Klammernpaar, in welchem Sie die Werte der Zellen durch Komma getrennt angeben.

INSERT INTO Kontakt VALUES (132, 'Max', 'Mustermann', 1984, '01234 / 56789', 'Musterstadt');

Meistens möchten Sie jedoch nicht alle Spalten einer Tabelle mit einem Wert füllen, da entweder nicht alle Informationen verfügbar sind oder die Tabelle eine Spalte mit der AUTO_INCREMENT-Eigenschaft hat, bei welcher der Wert automatisch bestimmt werden soll. In diesem Fall können Sie nach dem Tabellennamen runde Klammern notieren und darin die Spaltennamen angeben. Grundsätzlich sollte dieser Syntax immer bevorzugt werden, da man hier direkt erkennen kann, welche Spalten mit welchem Wert gefüllt werden.

INSERT INTO Kontakt (Vorname, Nachname, Geburtsjahr, Wohnort) VALUES ('Max', 'Mustermann', 1984, 'Musterstadt');

Um Datensätze in einer Tabelle zu aktualisieren, können Sie das UPDATE-Statement verwenden. Hierfür wird nach dem UPDATE-Schlüsselwort der Tabellenname notiert. Es folgt das Schlüsselwort SET und ein oder mehrere Zellenzuweisungen. Dabei wird der Spaltenname, gefolgt von einem Gleichheitszeichen und dem „neuen“ Wert angegeben. Zum Schluss können Sie noch die WHERE-Klausel angeben, um nur bestimmte Datensätze zu aktualisieren, da andernfalls alle Datensätze geändert werden würden.

UPDATE Kontakt SET Nachname = 'Mustermann' WHERE Vorname = 'Maria' AND Nachname = 'Musterfrau'
UPDATE Kontakt SET Wohnort = 'Musterstadt', Telefonnummer = '01234 / 56789' WHERE ID = 105

Um Datensätze aus einer Datenbank zu löschen, können Sie das DELETE-Statement verwenden. Hier müssen Sie lediglich das Schlüsselwort FROM, die Tabelle und ggf. eine WHERE-Klausel (um nur bestimmte Datensätze zu löschen) angeben. Wenn Sie die WHERE-Klausel weglassen, werden alle Daten der Tabelle (jedoch nicht die Tabelle selbst) gelöscht.

DELETE FROM Kontakt WHERE ID = 105

Wichtig: Beachten Sie, dass das Löschen von Daten aus einer Datenbank eher unüblich ist. Im Regelfall verwenden Sie lediglich eine zusätzliche Spalte, mit welcher Sie einen Gelöscht-Status darstellen.

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen OK