SQL-Anweisungen im Überblick

Im Folgenden stellen wir Ihnen nun die wichtigsten SQL-Anweisungen für den Einsatz in Ihren Datenbank mit praktischen Beispielen vor. Sie können einzelne Anweisungen mithilfe unserer Erweiterung „SQL-Eingabe“ (siehe Seite 6) oder per VBA im Direktfenster direkt in der Beispieldatenbank zu diesem Beitrag ausprobieren.

Datensätze auswählen
Um Datensätze aus einer Tabelle zu selektieren und beispielsweise einem Recordset zuzuweisen, verwenden Sie „SELECT“. Sie können entweder den kompletten Datensatz mit Angabe des Sternchens „*“ oder einzelne Felder durch Angabe einer Namensliste auswählen:

SELECT * | Feldliste FROM
Tabellenname
WHERE Bedingung
GROUP BY Feldname
ORDER BY Feldliste ADC  | DESC;

„Tabellenname“ definiert die Tabelle, aus der Datensätze selektiert werden sollen. Die folgende Anweisung liefert beispielsweise alle Felder und alle Datensätze aus der Tabelle „Adressen“:

SELECT * FROM Adressen;

Über „WHERE“ können Sie eine Bedingung prüfen und so nur bestimmte Datensätze selektieren, die zum Beispiel wie in der folgenden Anweisung im Feld „Land“ den Inhalt „Belgien“ aufweisen:

SELECT * FROM Kunden
WHERE Land = ‚Belgien‘;

Mit „GROUP BY“ lassen sich Datensätze, die im Feld „Feldname“ gleiche Inhalte aufweisen, gruppieren. Die folgende Anweisung, die sich zum Beispiel der Eigenschaft „Datensatzherkunft“ eines Kombinationsfeldes zuweisen lässt, liefert eine alphabetisch sortierte Auswahl aller bisher verwendeten Länder aus der Tabelle „Adressen“:

SELECT Land FROM Adressen
GROUP BY Land ORDER BY Land;

„ORDER BY“ erlaubt schließlich die Sortierung nach einem oder mehreren der selektierten Felder. Die folgende Anweisung sortiert das Abfrageergebnis nach dem Feld „Umsatz“:

SELECT Firma, Umsatz FROM Lieferanten
ORDER BY Umsatz;

Für jedes Feld können Sie mit „ASC“ bzw. „DESC“ eine aufsteigende oder absteigende Sortierung festlegen. Mit der folgenden Anweisung erhalten Sie eine absteigend sortierte Umsatzübersicht, bei gleichen Umsatzzahlen wird nach dem Nachnamen aufsteigend sortiert:

SELECT * FROM Kunden
ORDER BY Umsatz DESC, Nachname
ASC;

Feldinhalte aktualisieren
Mit „UPDATE“ ändern Sie die Inhalte einzelner Felder in Datensätzen einer Tabelle:

UPDATE Tabellenname
SET Feldname=Ausdruck
WHERE Bedingung;

„Tabellenname“ legt die Tabelle fest, in der Datensätze aktualisiert werden sollen. Über den Parameter „Feldname“ bestimmen Sie das Feld, dessen Inhalt zu ändern ist. „Ausdruck“ ist entweder eine Konstante oder eine Berechnung. Die folgenden Anweisungen setzen zum Beispiel das Ja/Nein-Feld „Mailingaktion“ aller Datensätze der Tabelle „Kunden“ auf „Nein“ oder erhöhen alle Inhalte des Feldes „VKPreis“ um 5%:

UPDATE Kunden
SET Mailingaktion = No;
UPDATE Artikel
SET VKPreis = VKPreis * 1.05;

Nutzen Sie „WHERE“, um eine Bedingung zu definieren und so nur bestimmte Datensätze zu aktualisieren. Mit der folgenden Anweisung wird für alle Lieferanten, bei denen ein Umsatz von mehr als 10.000 Euro erzielt wurde, ein Rabatt von 15% für die Artikel der Warengruppe „Schokolade“ eingetragen:

UPDATE Lieferanten
SET Rabatt = 15
WHERE Umsatz > 10000 And
Warengruppe = ‚Schokolade‘;

 

Datensätze löschen
Zum Löschen von Datensätzen aus einer Tabellen nutzen Sie die Anweisung „DELETE“. Die Tabelle selbst bleibt erhalten:

DELETE * FROM Tabellenname
WHERE Bedingung;

„Tabellenname“ definiert die Tabelle, aus der Datensätze gelöscht werden sollen. Die folgende Anweisung löscht alle Datensätze aus der Tabelle „Bestellungen“:

DELETE * FROM Bestellungen;

Über „WHERE“ können Sie eine Bedingung prüfen und so nur bestimmte Datensätze löschen, bei denen z. B. der Umsatz unterhalb einer bestimmten Grenze liegt oder der letzte Besuch durch den Außendienst bereits mehrere Jahre zurückliegt:

DELETE * FROM Lieferanten
WHERE BestellungWert < 10000;
DELETE * FROM Kunden
WHERE Year([LetzterBesuch]) <= 2000;

 

Tabellen zusammenführen
Verwenden Sie „INSERT INTO“, um die Inhalte einer Tabelle zu einer anderen Tabelle hinzuzufügen. Dabei ist es möglich, nur einzelne Felder oder komplette Datensätze zu übertragen:

INSERT INTO Tabelle1 (Zielfelder)
SELECT *|Quellfelder FROM Tabelle2
WHERE Bedingung;

Die folgende Anweisung überträgt alle Datensätze aus einer Tabelle „Neue Adressen“ in eine Haupttabelle „Adressen“:

INSERT INTO Adressen
SELECT * FROM NeueAdressen;

Wenn Sie lediglich die Inhalte einzelner Felder übertragen möchten, spezifizieren Sie die Feldnamen für das Ziel in runden Klammern. Die Feldnamen im „SELECT“- Teil geben Sie ohne runde Klammern an. Die Namen der Quell- und Zielfelder können voneinander abweichen, aber die Datentypen müssen übereinstimmen! Die folgende Anweisung überträgt nur die Inhalte der Felder „NachnameNeu“ und „VornameNeu“ aus der Tabelle „Neue Adressen“ in die Felder „Nachname“ und „Vorname“ der Tabelle „Adressen“:

INSERT INTO Adressen (Nachname, Vorname)
SELECT NachnameNeu, VornameNeu
FROM NeueAdressen;

Mit „WHERE“ können Sie eine Bedingung prüfen und so nur bestimmte Feldinhalte oder Datensätze übertragen. In diesem Beispiel werden nur die Datensätze übertragen, bei denen das Feld „Land“ den Inhalt „Deutschland“ aufweist:

INSERT INTO Adressen SELECT *
FROM NeueAdressen
WHERE Land = ‚Deutschland‘;

 

 

Spezielle Operatoren für Kriterien nutzen
In SQL-Anweisungen können Sie also die Auswahl der Datensätze über eine „WHERE“-Klausel einschränken:

INSERT INTO Adressen SELECT *
FROM NeueAdressen
WHERE Land = ‚Deutschland‘;
UPDATE Lieferanten SET Rabatt = 10
WHERE Umsatz > 10000;
DELETE * FROM Lieferanten
WHERE Bestellungen < 100;
SELECT * FROM Kunden
WHERE Land <> ‚Deutschland‘;

In den meisten Fällen verwenden Sie dabei für Ihre Bedingungen die Standardoperatoren „=“ (gleich), „<“ (kleiner), „>“ (größer) oder „<>“ (ungleich). Daneben gibt es noch verschiedene Operatoren, mit denen sich Kriterien einfacher und übersichtlicher formulieren lassen.

 

Werte innerhalb von Bereichen prüfen
Mit „BETWEEN“ können Sie zum Beispiel leicht feststellen, ob ein Feldinhalt innerhalb bestimmter Grenzwerte liegt:

Feldname [NOT] BETWEEN Startwert
AND Endwert

„Feldname“ legt das Feld fest, dessen Inhalt in dem über „Startwert“ und „Endwert“ definierten Bereich liegen soll. Die folgende Anweisung selektiert nur die Lieferanten, bei denen der Umsatz im Bereich von 10.000 Euro bis 19.999 Euro liegt:

SELECT * FROM Lieferanten
WHERE Umsatz BETWEEN 10000 AND 19999;

Werteübereinstimmung prüfen Der Operator „IN“ erleichtert die Selektion von Datensätzen, die fest definierten Kriterien entsprechen müssen. So lassen sich zum Beispiel Bestellungen von Kunden der Benelux-Staaten einfacher und übersichtlicher selektieren: Beispielsweise für die Auswahl der Kunden aus den Benelux-Ländern: Numerische Werte oder Zahlen verwenden Sie ohne Anführungszeichen:

 

Werteübereinstimmung prüfen
Der Operator „IN“ erleichtert die Selektion von Datensätzen, die fest definierten Kriterien entsprechen müssen. So lassen sich zum Beispiel Bestellungen von Kunden der Benelux-Staaten einfacher und übersichtlicher selektieren:

Feldname IN (Wert1, Wert2, Wert3…)

Beispielsweise für die Auswahl der Kunden aus den Benelux-Ländern:

SELECT * FROM Bestellungen
WHERE Land IN (‚Belgien‘, ‚Niederlande‘, ‚Luxemburg‘);

Numerische Werte oder Zahlen verwenden Sie ohne Anführungszeichen:

SELECT * FROM Artikel
WHERE Warengruppe IN (400, 378, 127, 12, 47);

 

 

Feldinhalte mit Suchmuster überprüfen
Mithilfe von „LIKE“ können Sie Datensätze anhand eines Suchmusters selektieren. Der Suchbegriff darf dann nur teil weise im Feld enthalten sein, damit die Bedingung als erfüllt angesehen wird:

LIKE Ausdruck

So können Sie beispielsweise mit „LIKE ‘04*’“ alle Kunden mit Vorwahl im norddeutschen Raum oder mit „Like ‘*Hamburg*’“ alle Kunden auswählen, die in „Hamburg“ wohnen, auch wenn in das Feld „Ort“ zum Beispiel „Hamburg-Harburg“ oder „Bahrenfeld bei Hamburg“ eingetragen wurde:

SELECT Nachname, Vorname, Telefon
FROM Kunden
WHERE Left$(Telefon,2)= ’04*‘;
SELECT * FROM Adressen
WHERE Ort Like ‚*Hamburg*‘;

Das Sternchen „*“ steht als Platzhalter für beliebige Zeichen, sodass es z. B. bei „‘*Hamburg*’“ keine Rolle spielt, an welcher Position sich der Begriff im Feld befindet. Bei „‘04*’“ muss der Feldinhalt hingegen mit „04“ beginnen.