Seitenleiste

Community

SQL

Grundlagen

Datenbanksysteme

Client/Server

Eingebettet

Data Manipulation Language

Diese Kategorie der SQL Befehle ist für lesen, schreiben, ändern und löschen der Daten innerhalb einer Datenbank zuständig. Außerdem werden die Abfragen der Daten über die DML vorgenommen. Dieser Teil stellt den wichtigsten und auch am häufigsten benutzten Teil der SQL dar.

Manipulationsbefehle

Daten einfügen: INSERT

Mit dem Befehl INSERT INTO können Daten zu einer Tabelle hinzugefügt werden:

 INSERT INTO Tabellenname (Spaltenname, Spaltenname2) VALUES (Spaltenwert,Spaltenwert2);


Mit einem INSERT können auch mehrere Zeilen zur Tabelle hinzufügt werden (In SQLite NICHT zulässig):

 INSERT INTO Tabellenname (Spaltenname, Spaltenname2) VALUES (Spaltenwert,Spaltenwert2), (Spaltenwert,Spaltenwert2),(...,..);


Alternativ ist es auch möglich, die Spaltennamen wegzulassen. Allerdings muss man dann die Werte in der Reihenfolge eingeben, in der die Tabellenfelder definiert sind und Werte für jedes Feld bereitstellen:

 INSERT INTO Tabellenname VALUES (Spaltenwert, Spaltenwert2);


Hier ein Beispiel:

 INSERT INTO Personal (Personalnummer,Name,Vorname,Abteilung,Gehalt) VALUES (123,'Muster','Max','Einkauf',2000);


Es ist mit dem INSERT INTO Befehl auch möglich eine andere Tabelle als Quelle zum Einfügen zu benutzen. Die Syntax dazu lautet:

 INSERT INTO Tabellenname(Spaltenname,Spaltenname2) SELECT Spaltenname,Spaltenname2 FROM Tabellenname2;


Hier ein Beispiel:

 INSERT INTO Personal (Personalnummer,Name,Vorname,Abteilung) SELECT Personalnummer,Name,Vorname,Abteilung FROM Personal_alt;

Dieser Code würde die Werte Personalnummer,Vorname und Abteilung aus der Tabelle Personal_alt in die Tabelle Personal einfügen. Wie und wozu man den Befehl SELECT sonst noch benutzen kann, findet ihr am Ende dieser Seite.

Daten ändern: UPDATE

Für die Veränderung von Daten wird folgende Syntax erwartet:

 UPDATE Tabellenname SET Spaltenname=neuer_Spaltenwert WHERE Spaltenname=Spaltenwert; 

Nach dem Schlüsselwort SET wird die Spalte angegeben, in der die Änderung stattfinden soll. Nach dem „=“ wird der neue Wert übergeben. Diesen Wert kann man auch vom Datenbankmanagmentsystem verarbeiten lassen, statt einen expliziten Wert anzugeben. Handelt es sich um ein Integerfeld könnte man beispielsweise „Zahlenfeld=Zahlenfeld*2“ einsetzen. Die optionale WHERE Anweisung legt eine Bedingung für die Änderung fest. Man beachte folgendes Beispiel:

 UPDATE Personal SET Gehalt=Gehalt*1.02; 

Hiermit würden in der Tabelle Personal alle Werte in der Spalte Gehalt um zwei Prozent erhöht werden.

 UPDATE Personal SET Gehalt=Gehalt*1.05 WHERE Abteilung='Einkauf';

Hier würde das Gehaltsfeld nur dann um fünf Prozent erhöht werden, wenn im Feld Abteilung „Einkauf“ steht. Natürlich ist es auch möglich Werte direkt anzugeben, statt sie zu verechnen:

 UPDATE Personal SET Gehalt=2500 WHERE Personalnummer=123;

Hier wird auch deutlich, warum es so wichig ist einen Primärschlüssel zu vergeben. Da jeder Schlüsselwert nur einmal vorkommen darf, kann man damit eine Tabellenzeile eindeutig identifizieren.

Daten löschen: DELETE und TRUNCATE

Mit DELETE kann man eine Zeile aus einer Tabelle löschen:

 DELETE FROM Tabellenname WHERE Spaltenname=Spaltenwert


Natürlich gibt es dazu auch ein Beispiel:

 DELETE FROM Personal WHERE Personalnummer=123;


Mit dem Befehl TRUNCATE kann man eine ganze Tabelle leeren und die Autoincrement Werte zurücksetzen(Nicht zulässig in SQLite):

 TRUNCATE TABLE Tabellenname; 

Datenabfrage über SELECT

Über die Selectabfrage können die Daten, die wir so mühevoll in die Datenbank getippt haben auch wieder herausgeholt werden. Die Syntax dafür lautet:

 SELECT [DISTINCT] Spaltenname,Spaltenname2 FROM Tabellenname [WHERE][ORDER BY];


Um alle Datensätze aus der Tabelle zu holen kann man so vorgehen:

 SELECT * FROM Personal;

Das '*' Zeichen steht hier für alle Spaltennamen.

 SELECT Name FROM Personal;

Diese Zeile gibt nur die Werte der Spalte Name aus. Wozu dient nun das Schlüsselwort DISTINCT? Es sorgt dafür, das ein Datensatz nur einmal ausgegeben wird, selbst wenn er mehrfach in der Tabelle vorkommen sollte.

 SELECT Name FROM Personal WHERE Personalnummer=123;

Dieses Kommando würde den Wert „Mustermann“ ausspucken, wenn wir von der obigen Tabelle ausgehen. Auf diese Weise lassen sich ganz gezielt Werte aus der Datenbank holen. WHERE ist übrigens nicht auf einen Operator beschränkt:

Operator Bedeutung
= ist gleich
!= bzw <> ungleich
> größer als
< kleiner als
>= größer oder gleich
<= kleiner oder gleich


Es gibt auch noch die Möglichkeit eine Unterabfrage in eine SELECT Anweisung zu setzen:

 SELECT Name FROM Personal WHERE (SELECT Gehalt FROM Personal WHERE Gehalt<2000);

Dieser Befehle würde nur die Namen der Personen ausgeben, die weniger als 2000 im Gehaltfeld stehen haben.

 SELECT Name FROM Personal WHERE Personalnummer<200 ORDER BY Name DESC;

Diese Befehlszeile würde alle Datensätze ausgeben, deren Personalfeldwerte unter 200 liegen und sie anschließend nach dem Feld Name absteigend sortieren. ASC steht für aufsteigende Sortierung und DESC für absteigende Sortierung.

Wie kann man diesen Befehl sinnvoll einsetzen? Nehmen wir eine Tabelle, die als Telefonbuch fungiert als Beispiel:

 SELECT Ort,Name,Vorname,Telefonnr FROM Telefonbuch ORDER BY Ort,Name,Vorname;

Dies würde zuerst die Orte sortieren. Anschließend würden die Nachnamen dazu sortiert werden. Als letztes würden die Datensätze noch nach Vornamen sortiert werden und das Ergebnis wäre eine ordentlich nach Orten und Alphabet sortiertes Telefonbuch, wie wir es kennen.