SQL-Befehle

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Seitentitel: Einführung in SQL: SQL-Befehle
(Einführung in SQL: SQL-Befehle)


Manchen Einsteigern mag SQL sehr sperrig erscheinen. SQL ist weniger für improvisierte Einmalabfragen gedacht als vielmehr zur Entwicklung von stabilen, dauerhaft nutzbaren Abfragen. Wenn die Abfrage einmal entwickelt ist, wird sie meistens in eine GUI- oder HTML-Umgebung eingebunden, sodass der Benutzer mit dem SQL-Code gar nicht mehr in Berührung kommt.

Es gibt zwar einen SQL-Standard (siehe das Kapitel Einleitung), der möglichst von allen Datenbanken übernommen werden soll, aber leider hält sich kein angebotenes DBMS (Datenbank-Management-System) vollständig daran. Es kommt also je nach DBMS zu leichten bis großen Abweichungen, und für Sie führt kein Weg daran vorbei, immer wieder in der Dokumentation ihrer persönlichen Datenbank nachzulesen. Das gilt natürlich besonders für Verfahren, die im SQL-Standard gar nicht enthalten sind, von Ihrem DBMS trotzdem angeboten werden.

Attention green.svg

 
Die Abweichungen eines bestimmten DBMS vom SQL-Standard werden sehr oft als SQL-Dialekt bezeichnet.


Allgemeine Hinweise[Bearbeiten]

Die gesamte Menge an Befehlen ist recht überschaubar; Schwierigkeiten machen die vielen Parameter mit zahlreichen Varianten.

Der Übersicht halber wurde SQL in Teilbereiche gegliedert; allerdings gibt es auch für diese Aufteilung Unterschiede bei den DBMS, den Dokumentationen und in Fachbüchern. Diese Aufteilung (siehe Inhaltsverzeichnis dieses Kapitels) dient aber nicht nur der Übersicht, sondern hat auch praktische Gründe:

  • Data Manipulation Language (DML)-Befehle werden vor allem von „einfachen“ Anwendern benutzt.
  • Data Definition Language (DDL)- und Transaction Control Language (TCL)-Befehle dienen Programmierern.
  • Data Control Language (DCL)-Befehle gehören zum Aufgabenbereich von Systemadministratoren.

Dies sind die Bestandteile eines einzelnen Befehls:

  • der Name des Befehls
  • der Name des Objekts (Datenbank, Tabelle, Spalte usw.)
  • ein Hinweis zur Maßnahme, soweit diese nicht durch den Befehl klar ist
  • weitere Einzelheiten
  • das Semikolon als Zeichen für den Abschluss eines SQL-Befehls

Damit dies alles eindeutig ist, gibt es eine Reihe von Schlüsselwörtern (key words, reserved words, non-reserved words), anhand derer das DBMS die Informationen innerhalb eines Befehls erkennt.

Die Schreibweise eines Befehls ist flexibel.

  • Groß- und Kleinschreibung der Schlüsselwörter werden nicht unterschieden.
  • Ein Befehl kann beliebig auf eine oder mehrere Zeilen verteilt werden; der wichtigste Gesichtspunkt dabei ist die Lesbarkeit auch für Sie selbst beim Schreiben.
  • Das Semikolon ist nicht immer erforderlich, wird aber empfohlen. Bei manchen DBMS wird der Befehl erst nach einem folgenden GO o. ä. ausgeführt.

Für eigene Bezeichner, d. h. die Namen von Tabellen, Spalten oder eigenen Funktionen gilt:

  • Vermeiden Sie unbedingt, Schlüsselwörter dafür zu verwenden; dies führt schnell zu Problemen auch dort, wo es möglich wäre.
  • Das Wort muss in der Regel mit einem Buchstaben oder dem Unterstrich a…z A…Z _ beginnen. Danach folgen beliebig Ziffern und Buchstaben.
  • Inwieweit andere Zeichen und länderspezifische Buchstaben (Umlaute) möglich sind, hängt vom DBMS ab.
Der Autor dieser Zeilen rät davon ab, aber das mag Geschmackssache sein. Bei den Erläuterungen zur Beispieldatenbank (Namen von Tabellen und Spalten) wird sowieso für englische Bezeichner plädiert.

Dieses Buch geht davon aus, dass Schlüsselwörter nicht als Bezeichner dienen und auch Umlaute nicht benutzt werden.

Kommentare können in SQL-Befehle fast beliebig eingefügt werden (nur die Schlüsselwörter dürfen natürlich nicht „zerrissen“ werden). Es gibt zwei Arten von Kommentaren:

-- (doppelter Bindestrich, am besten mit Leerzeichen dahinter)

Alles von den beiden Strichen an (einschließlich) bis zum Ende dieser Zeile gilt als Kommentar und nicht als Bestandteil des Befehls.

/* (längerer Text, gerne auch über mehrere Zeilen) */

Alles, was zwischen '/*' und '*/' steht (einschließlich dieser Begrenzungszeichen), gilt als Kommentar und nicht als Bestandteil des Befehls.

DML – Data Manipulation Language[Bearbeiten]

DML beschäftigt sich mit dem Inhalt des Datenbestandes. „Manipulation“ ist dabei nicht nur im Sinne von „Manipulieren“ zu verstehen, sondern allgemeiner im Sinne von „in die Hand nehmen“ (lat. manus = Hand).

Das Kapitel DML (1) - Daten abfragen befasst sich mit dem SELECT-Befehl.

  • Gelegentlich finden Sie dafür auch den Begriff Data Query Language (DQL). Diese Einführung fasst ihn als Teilgebiet der DML auf; nur aus Gründen der Übersicht gibt es getrennte Kapitel.

Die Befehle INSERT, UPDATE, DELETE dienen der Speicherung von Daten und werden in DML (2) - Daten speichern behandelt.

Bei diesen Befehlen ist immer genau eine Tabelle – nur bei SELECT auch mehrere – anzugeben, dazu Art und Umfang der Arbeiten sowie in aller Regel mit WHERE eine Liste von Bedingungen, welche Datensätze bearbeitet werden sollen.

Die folgenden Erläuterungen sind einheitlich für alle DML-Befehle zu beachten.

Datenmengen, nicht einzelne Datensätze[Bearbeiten]

Bitte beachten Sie, dass SQL grundsätzlich mengenorientiert arbeitet. DML-Befehle wirken sich meistens nicht nur auf einen Datensatz aus, sondern auf eine ganze Menge, die aus 0, einem oder mehreren Datensätzen bestehen kann. Auch die WHERE-Bedingungen sorgen „nur“ für den Umfang der Datenmenge; aber das Ergebnis ist immer eine Datenmenge.

Im Einzelfall wissen Sie als Anwender oder Programmierer natürlich häufig, ob die Datenmenge 0, 1 oder n Datensätze enthalten kann oder soll. Aber Sie müssen selbst darauf achten, denn SQL oder das DBMS können das nicht wissen.

Die Struktur als Datenmenge führt auch dazu, dass es bei einem SELECT-Befehl keine „natürliche“ Reihenfolge gibt, in der die Daten angezeigt werden. Manchmal kommen sie in der Reihenfolge, in der sie gespeichert wurden; aber bei umfangreicheren Tabellen mit vielen Änderungen sieht es eher nach einem großen Durcheinander aus – es sei denn, Sie verwenden die ORDER BY-Klausel.

SQL-Ausdrücke[Bearbeiten]

In vielen Fällen wird der Begriff Ausdruck verwendet. Dies ist ein allgemeiner Begriff für verschiedene Situationen:

  • An Stellen, an denen ein einzelner Wert angegeben werden muss, kann auch ein Werte-Ausdruck verwendet werden: ein konstanter Wert (Zahl, Text, boolescher Wert), das Ergebnis einer Funktion, die einen solchen Wert zurückgibt, oder eine Abfrage, die als Ergebnis einen einzigen Wert liefert.
  • An Stellen, an denen eine oder mehrere Zeilen einer Datenmenge angegeben werden müssen, kann auch ein SQL-Ausdruck (im SQL-Standard als query expression bezeichnet) verwendet werden. Dabei handelt es sich um einen SQL-Befehl (in der Regel einen SELECT-Befehl), der als Ergebnis eine Menge von Datensätzen liefert.
  • An Stellen, an denen eine Liste einzelner Werte angegeben werden muss, kann ebenfalls ein SQL-Ausdruck verwendet werden; dieser muss dann als Ergebnis eine Menge passender Werte liefern.

Datenintegrität[Bearbeiten]

Bei allen Datenmanipulationen ist zu beachten, dass die Bedingungen für Querverweise erhalten bleiben, siehe das Kapitel Fremdschlüssel-Beziehungen. Beispielsweise darf ein Datensatz in der Tabelle Abteilung erst dann gelöscht werden, wenn alle zugeordneten Mitarbeiter gelöscht oder versetzt wurden.

Hinweis für Programmierer: Parameter benutzen![Bearbeiten]

Ein SQL-Befehl in einem Programm sollte niemals als „langer String“ mit festen Texten erstellt werden, sondern mit Parametern. Das erleichtert die Wiederverwendung, die Einbindung von Werten, vermeidet Probleme mit der Formatierung von Zahlen und Datumsangaben und verhindert SQL-Injection.

Im Kapitel DML (2) - Daten speichern steht unter UPDATE so ein Beispiel:

Dies korrigiert die Schreibweise des Namens beim Mitarbeiter mit der Personalnummer 20001
UPDATE Mitarbeiter
   SET Name = 'Mayer'
 WHERE Personalnummer = 20001;

Dieses Beispiel sieht besser so aus:

UPDATE Mitarbeiter
   SET Name = @Name
 WHERE Personalnummer = @PersNr;

In einem Programm mit ADO.NET und Visual Basic für MS-SQL wird dieser Befehl wie folgt verwendet.

VB.NET-Quelltext
' zuerst der vollständige SQL-Befehl in einer oder mehreren Zeilen
Dim sel As String = "UPDATE ... @PersNr;"
' danach die Festlegungen zu den Parametern
Dim cmd As SqlCommand = new SqlCommand(sel)
cmd.Parameters.AddWithValue("@Name", "Mayer")
cmd.Parameters.AddWithValue("@PersNr", 20001)

Zwar unterscheidet sich die Art, wie die Parameter bezeichnet werden, nach Programmiersprache und DBMS. Auch sieht es nach mehr Schreibarbeit aus. Aber diese Unterschiede sind viel geringer als die Unterschiede nach den Datentypen; insgesamt wird die Arbeit viel sicherer.

Parameter gibt es nur für DML-Befehle, nicht für DDL oder DCL.

DDL – Data Definition Language[Bearbeiten]

DDL definiert die Struktur einer Datenbank.

Hierzu gibt es die Befehle CREATE, ALTER, DROP; diese werden für Datenbank-Objekte DATABASE, TABLE, VIEW usw. verwendet.

Einzelheiten werden in DDL - Struktur der Datenbank behandelt.

TCL – Transaction Control Language[Bearbeiten]

Damit die Daten dauerhaft zusammenpassen, also die Integrität der Daten gewahrt bleibt, sollen Änderungen, die zusammengehören, auch „am Stück“ übertragen und gespeichert werden. Falls eine einzelne dieser Änderungen nicht funktioniert, muss der gesamte Vorgang rückgängig gemacht werden.

Dies wird durch Transaktionen gesteuert, die mit COMMIT oder ROLLBACK abgeschlossen werden.

Einzelheiten werden in TCL - Ablaufsteuerung behandelt.

DCL – Data Control Language[Bearbeiten]

Eine „vollwertige“ SQL-Datenbank regelt umfassend die Rechte für den Zugriff auf Objekte (Tabellen, einzelne Felder, interne Funktionen usw.). Hierzu kommen die Befehle GRANT und REVOKE zum Einsatz.

Mehr darüber steht in DCL - Zugriffsrechte.

Zusammenfassung[Bearbeiten]

In diesem Kapitel lernten wir grundlegende Informationen zu SQL-Befehlen kennen:

  • Die Befehle der DML (Data Manipulation Language) bearbeiten die Daten und gehören zum Aufgabenbereich eines jeden Benutzers.
  • Mit SELECT werden Daten abgerufen, mit INSERT und UPDATE gespeichert und mit DELETE gelöscht.
  • Die DML-Befehle arbeiten mengenorientiert; anstelle konkreter Werte werden häufig Ausdrücke verwendet.
  • Die Befehle der DDL (Data Definition Language) steuern die interne Struktur der Datenbank und gehören zum Aufgabenbereich von Programmentwicklern.
  • Die Befehle der TCL (Transaction Control Language) sorgen für die Integrität der Daten beim Speichern und gehören ebenfalls zum Aufgabenbereich von Programmentwicklern.
  • Die Befehle der DCL (Data Control Language) sorgen für die Zugriffssicherheit und gehören zum Aufgabenbereich von Systemadministratoren.

Die Bestandteile der SQL-Befehle werden anhand von Schlüsselwörtern erkannt und ausgewertet.

Übungen[Bearbeiten]

Übung 1 Begriffsklärung Zur Lösung

Was versteht man unter „SQL“?

  1. Süß – Quadratisch – Lecker
  2. Server's Quick Library
  3. Structured Query Language
  4. Standard Quarterly Lectures

Übung 2 Begriffsklärung Zur Lösung

Was versteht man unter „DBMS“?

  1. Datenbankmanagementsprache
  2. Datenbankmanagementsystem
  3. Data-Base Manipulation Standard
  4. Deutsche Bahn Mobilstation

Übung 3 Begriffsklärung Zur Lösung

Was versteht man unter „SQL-Dialekt“?

  1. die Sprache des Computers
  2. die Sprache des Benutzers
  3. die Sprache des Programmierers eines DBMS
  4. die Abweichungen der SQL-Befehle vom SQL-Standard
  5. die jeweilige Version eines DBMS

Übung 4 Teilbereiche von SQL Zur Lösung

Zu welchem der SQL-Teilbereiche DML (Data Manipulation Language), DDL (Data Definition Language), TCL (Transaction Control Language), DCL (Data Control Language) gehören die folgenden Befehle?

  1. wähle Daten aus
  2. erzeuge eine Tabelle in der Datenbank
  3. erzeuge eine Prozedur
  4. ändere die Informationen, die zu einem Mitarbeiter gespeichert sind
  5. ändere die Definition einer Spalte
  6. bestätige eine Gruppe von zusammengehörenden Anweisungen
  7. gewähre einem Benutzer Zugriffsrechte auf eine Tabelle
  8. SELECT ID FROM Mitarbeiter
  9. ROLLBACK
  10. UPDATE Versicherungsvertrag SET ...
  11. lösche einen Datensatz in einer Tabelle
  12. lösche eine Tabelle insgesamt

Übung 5 SQL-Kommentare Zur Lösung

Welche der folgenden Zeilen enthalten korrekte Kommentare? Mit werden weitere Teile angedeutet, die für die Frage unwichtig sind.

  1. SELECT * FROM Mitarbeiter;
  2. UPDATE Mitarbeiter SET Name = 'neu'; -- ändert den Namen aller Zeilen
  3. DEL/*löschen*/ETE FROM Mitarbeiter WHERE ...
  4. -- DELETE FROM Mitarbeiter WHERE ...
  5. UPDATE Mitarbeiter /* ändern */ SET Name = ...; /* usw. */
Lösungen

Lösung zu Übung 1 Begriffsklärung Zur Übung

Antwort 3 ist richtig.

Lösung zu Übung 2 Begriffsklärung Zur Übung

Antwort 2 ist richtig.

Lösung zu Übung 3 Begriffsklärung Zur Übung

Antwort 4 ist richtig.

Lösung zu Übung 4 Teilbereiche von SQL Zur Übung

1. DML – 2. DDL – 3. DDL – 4. DML
5. DDL – 6. TCL – 7. DCL – 8. DML
9. TCL – 10. DML – 11. DML – 12. DDL

Lösung zu Übung 5 SQL-Kommentare Zur Übung
  1. Diese Zeile enthält keinen Kommentar.
  2. Der letzte Teil nach dem Semikolon ist ein Kommentar.
  3. Dieser Versuch eines Kommentars zerstört das Befehlswort DELETE und ist deshalb unzulässig.
  4. Die gesamte Zeile zählt als Kommentar.
  5. Diese Zeile enthält zwei Kommentare: zum einen zwischen dem Tabellennamen und dem Schlüsselwort SET sowie den Rest der Zeile hinter dem Semikolon.

Siehe auch[Bearbeiten]

Bei Wikipedia gibt es Erläuterungen zu Fachbegriffen:

Zur Arbeit mit SQL-Parametern unter C# und ADO.NET gibt es eine ausführliche Darstellung: