By Frank Kalis
Dieser Artikel wird gerade überarbeitet und erweitert.
SQL ist eine deklarative Sprache. Der eigentliche Sprachkern besteht aus ca. 30 Befehlen, welche sich in folgende Unterbereiche aufteilen.
Datenmanipulation (DML)
DML Statements werden verwendet, um Daten in der Datenbank zu verarbeiten, zu manipulieren oder neue Daten in die Datenbank aufzunehmen. Die Befehle dieser Kategorie sind die wahrscheinlich am häufigsten verwendeten (zumindest bei den Endbenutzern der Datenbank). Tatsächlich gibt es vier Basisoperationen:
SELECT (=Daten anfordern)
INSERT (=neue Daten hinzufügen)
UPDATE (=existierende Daten verändern)
DELETE (=existierende Daten löschen)
Weitergehende DML Befehle werden später erläutert.
SELECT
Wahrscheinlich der bekannteste SQL Befehl überhaupt, wird er verwendet, um Daten aus der Datenbank abzufragen.
DISTINCT
In Verbindung it SELECT verwendet, um eindeutige Zeilen zurückzugeben.
FROM
Gibt die Datenquelle an, von der die Daten zurückgegeben werden sollen.
WHERE
Wird benutzt, um die zurückgegebenen Daten einzuschränken. Nur diejenigen, die dem Kriterium entsprechen, sind im Ergebnisset vorhanden.
ORDER BY
Legt die Sortierreihenfolge der Ergebnismenge fest. Die Angabe von ORDER BY ist die einzige verläßliche Möglichkeit, die Ergebnismenge in der Art und Weise zurückzugeben, wie man es erwartet. aufgrund der Implementierung gab es im SQL Server 6.5 auch bei bestimmten Abfragen ein sortiertes Resultset. Dies ist aber geändert worden. Gibt man ORDER BY nicht an, so gibt SQL Server die Daten auf dem schnellstmöglichen Weg zurück. Dies mag der Sortierung des Clustered Index (sofern vorhanden) entsprechen, oder auch nicht. Eine Garantie gibt es aber, wie gesagt, nicht.
=, >, <, >=, <=, <>
Vergleichsoperatoren.
EXISTS
Logischer Existenztest, wird verwendet, um zu überprüfen, ob eine Unterabfrage Zeilen zurückgibt. EXISTS ist sehr effizient, da er nur überprüft, ob mindestens eine Zeile den Kriterien entspricht. Sobald dies der Fall ist, gibt EXISTS ein logisches WAHR zurück und stoppt mit der weiteren Ausführung. Ob noch weitere Zeilen den Kriterien entsprechen oder wieviele Zeile insgesamt den Kriterien entsprechen, interessiert den EXISTS Befehl nicht.
BETWEEN
Bereichsoperator. Selektiert Daten, die in diesem Bereich liegen.
IN
Zugehörigkeitstest. Gibt nur die Zeilen zurück, die mit den Werten in der Liste übereinstimmen.
LIKE
Zeichenfolgenmustervergleich. Nur diejenigen Zeilen, die mit der angegebenen Zeichenfolge übereinstimmen,
werden zurückgegeben.
IS NULL
Überprüft explizit auf das Vorhandensein von NULL Werten.
AND, OR, NOT
Verbindet logisch mehrere Ausdrücke.
SELECT INTO
Erstellt eine Tabelle 'on the fly'. Hierfür muss die Datenbankoption 'SELECT INTO/BULKCOPY' aktiviert.
sein.
JOIN
Verknüpft zwei Tabellen durch einen INNER JOIN, wobei die Angabe von INNER optional ist. Es werden nur
die Zeilen zurückgegeben, bei denen die Werte des verknüpften Feldes übereinstimmen.
LEFT OUTER JOIN, RIGHT OUTER JOIN
Verknüpft zwei Tabellen und gibt alle Zeilen der OUTER Tabelle zurück und zusätzlich bei Übereinstimmung
auch Werte der INNER Tabelle.
FULL OUTER JOIN
Verknüpft zwei Tabellen und gibt alle Zeilen aus beiden Tabellen zurück.
UNION
Kombiniert die Ergebnisse von einer oder mehreren Abfragen.
INSERT VALUES
Fügt neue Daten zu einer Tabelle hinzu.
DEFAULT VALUES
Gibt an, dass die definierten Standardwerte beim INSERT verwendet werden sollen, sofern explizit keine anderen Werte angegeben wurden.
UPDATE SET
Verändert die Daten in einer Tabelle.
DELETE WHERE
Löscht Daten aus einer Tabelle.
Datendefinition (DDL)
Diese Art von Befehlen wird verwendet, um die Struktur der Datenbank zu verändern. Genauer gesagt, werden
DDL Befehle vewendet, um Objekte
Wobei als Objekte Datenbanken, Tabellen, Indizes, Trigger usw. gelten. DDL Befehle sind dynamisch, d.h. sie können auch im laufenden Betrieb eingesetzt werden.
CREATE
Erstellt eine neue Instanz eines Objektes in der Datenbank.
ALTER
Modifiziert ein Objekt in der Datenbank.
DROP
Entfernt ein Objekt aus der Datenbank.
TRUNCATE TABLE
Entfernt sämtliche Daten aus einer Tabelle, lässt aber die Tabellenstruktur unverändert. TRUNCATE wird
nur minimal im Transaktionsprotokoll aufgezeichnet.
PRIMARY KEY
Deklariert eine Primarschlüsseleinschränkung auf eine oder mehrere Spalten einer Tabelle. Setzt Einmaligkeit durch. Im Unterschied zu einer UNIQUE Einschränkung darf hier kein Wert NULL sein.
FOREIGN KEY
Deklariert ein Fremdschlüsseleinschränkung auf eine oder mehrere Spalten einer Tabelle.
REFERENCE
Verbindet PK und FK. Wird zusammen mit der FK Deklaration verwendet, um die Tabelle und die Spalte
anzugeben, die durch den FK referenziert werden.
CHECK
Hierdurch wird eine CHECK Einschränkung auf eine Spalte deklariert, diese schränkt den Wertebereich
ein, der für diese Spalte zulässig ist.
WITH NOCHECK
Deaktiviert FK und CHECK Einschränkungen während Tabellenänderungen.
DEFAULT
Eine DEFAULT Einschränkung auf eine Spalte gibt den Wert an, der eingetragen wird, wenn der Benutzer
nicht anderes eingibt.
UNIQUE
Deklariert eine UNIQUE Einschränkung, verhindert nicht einmalige Werte in einer Spalte. Im Unterschied zu einer PRIMARY KEY Einschränkung darf genau ein Wert NULL sein.
IDENTITY
Deklariert eine IDENTITY Eigenschaft auf eine numerische Spalte ohne Dezimalstellen. Stellt im Idealfall eine fortlaufende Nummerierung dar, da der Wert stets um eine definierbare Schrittweite erhöht wird. Achtung: IDENTITY ohne weitere Einschränkungen garantiert keine Einmaligkeit der Werte!
CONVERT / CAST
Wandelt Datentypen in andere um.
Datenkontrolle (DCL)
Diese Kategorie könnte auch als 'Diverse' bezeichnet werden. Hier finden sich Befehle wieder, die für die Datenbankadministration und -wartung verwendet werden.
GRANT
Weist eine Berechtigung einem Benutzer oder einer Rolle zu.
REVOKE
Widerruft Objekt- oder Befehlsberechtigung.
DENY
Verbietet Zugriff auf ein Objekt.
BACKUP (DUMP)
Sichert eine Datenbank oder ein Transaktionsprotokoll. DUMP wird aus Gründen der Abwärtskompatibilität unterstützt.
RESTORE (LOAD)
Gegenstück zu BACKUP. Auch hier wird LOAD aus Gründen der Abwärtskompatibilität unterstützt.
Funktionen
DATEDIFF
Differenz in Tagen zwischen zwei Datumswerten. Dabei bezieht sich die Differenzenbildung stets auf Mitternacht der jeweiligen Tage. Die Zeitangaben beider Tagen werden ignoriert.
GETDATE
Liefert das aktuelle Datum und Uhrzeit des Servers. Alternativ kann man das ANSI-SQL Synonym CURRENT_TIMESTAMP verwenden.
DATEADD
Addiert eine Zahl zu einem angegebenen Datumsteil.
DATENAME
Liefert einen Teil des Datums als Zeichenfolge zurück.
+
Verknüpft zwei Zeichen- oder Binärzeichenfolgen.
SUBSTRING
Liefert eine Teilzeichenfolge innerhalb einer anderen zurück.
RTRIM / LTRIM
Entfernt recht oder linke Leerzeichen aus einer Zeichenfolge.
PATINDEX / CHARINDEX
Sucht nach einem Zeichenmuster innerhalb einer Zeichenfolge und gibt die Stelle zurück, an der diese beginnt. Bei PATINDEX sind Wildcards erlaubt, bei CHARINDEX nicht.
UPPER / LOWER
Wandelt eine Zeichenfolge in Gross- oder Kleinbuchstaben um.
ABS
Gibt den absoluten Betrag einer Zahl wieder.
RAND
Erzeugt eine Zufallszahl zwischen 0 und 1.
SQRT
Berechnet die Quadratwurzel.
%
Modulus. Gibt den ganzzahligen Rest einer Division zurück.
Zusammenfassungen, Aggregate, Gesamtsummen
TOP
Gibt entweder die entsprechende Zahl oder den Prozentsatz an Datensätzen zurück.
SUM
Gesamtsumme aller Werte eines Ausdrucks.
AVG
Arithmetischer Durchschnitt aller Werte eines Ausdrucks.
MIN / MAX
Liefert den kleinsten, grössten Wert zurück.
COUNT
Anzahl der selektierten Datensätze.
GROUP BY
Gruppiert gleicht Werte. Findet normalerweise Anwendung bei Aggregatfunktionen.
HAVING
Spezifiziert ähnlich wie WHERE Bedingungen, die jedoch erst ausgewertet werden, nachdem Aggregatfunktionen
berechnet wurden.
COMPUTE
Ermöglicht die Berechnung zusätzlicher Werte zusammen mit Aggregatfunktionen, wie z.B. Gesamtsummen. Die Ausgabe erfolgt in einer extra Zeile. Streng genommen in nicht relationalem Format.
COMPUTE BY
Fungiert als eine Art zweite GROUP BY Klausel, z.B. für Zwischensummen. Ebenfalls nicht relational.
ROLL UP
Berechnet Zwischen- und Gesamtsummen mit relationaler Ausgabe.
CUBE
Berechnet multidimensionale Zwischen- und Gesamtsummen mit relationaler Ausgabe.
Programmierkonstrukte
Obwohl SQL eine deklarative Sprache ist, stellt T-SQL einige grundlegende Programmierkonstrukte wie Ablaufkontrollen und Entscheidungshilfen bereit, die begrenzte prozedurale Möglichkeiten geben. T-SQL stellt auch die Unterstützung für CURSOR bereit.
--
Leitet einen einzeiligen Kommentar ein.
/* .. */
Umschliesst einen mehrzeiligen Kommentar.
SET
Setzt Verarbeitungoptionen für die Dauer der Session oder Prozedur.
BEGIN / END
Definiert einen Anweisungsblock.
IF .. ELSE
Die grundlegende Entscheidungsstruktur. Ermöglicht konditionale Verarbeitung.
WHILE
Die grundlegende Ablaufkontrollstruktur. Die nachfolgenden Anweisungen werden wiederholt, solange die
Bedingung wahr ist.
CONTINUE
Startet einen neuen WHILE Durchlauf.
BREAK
Beendet die innerste Schleife.
RETURN
Beendet die Prozedur oder Abfrage.
GOTO
Lenkt den Ablauf zu einer Sprungmarke.
CASE
Bedingte Verarbeitung. CASE ist ein vielfach übersehener, aber mächtiger Befehl.