SQL
Nach oben Vorwärts

 

Schlüsselwörter der Datenmanipulationssprache(DML)
SELECT Auswahl von Datenbankfeldern
FROM    Auswahl von Tabellen
WHERE    Spezifizieren/Einschränken der ausgewählten Felder
GROUP BY    Gruppierung nach Attributen
HAVING    Filtern der Gruppierung
ORDER BY    Sortieren der Ergebnissätze
GRANT(ANSI-SQL)
WITH OWNER ACCESS OPTION(MS-SQL)
Erteilen von Berechtigung
UNION    Kombinieren der Ergebnisse mehrerer Tabellen
INNER JOIN Kombinieren der Datensätze zweier Tabellen mit gemeinsamen Feld (Exklusion: entspricht der Schnittmenge über die Zeilen zweier Tabellen)
LEFT JOIN, RIGHT JOIN Kombinieren mehrerer Tabellen (Inklusion: entspricht Addition der Spalten zweier Tabellen)
DELETE     Löschen von Einträgen
UPDATE     Aktualisieren von Einträgen
INSERT     Hinzufügen von Einträgen
Schlüsselwörter der Datendefinitionssprache (DDL)
CREATE TABLE   Erzeugen einer Tabelle
CREATE INDEX   Erweitern eine Tabelle um einen Index
ALTER TABLE   Ändern einer Tabelle
DROP    Löschen eines Index oder Tabelle
CONSTRAINT    Einschränkungen, wie Primär- oder Fremdschlüssel.

Weitere wichtige Schlüsselwörter

AVG   Funktion zur Mittelwertbildung.
COUNT   Zählt die Ergebnisdatensätze einer Abfrage
FIRST, LAST    Auswahl des ersten oder letzten Datensatzes einer Abfrage.
MIN, MAX   Auswahl des kleinsten oder größten Wertes einer Abfrage.
STDEV, STDEVP Ermitteln der Standardabweichung
SUM   Summe alle Werte einer Ergebnisspalte
VAR, VARP   Bestimmen die Varianz
Like   Operator für Platzhaltersuche (Wildcards: "%", "_")
BETWEEN   Intervalloperator

Allgemeines über SQL

Die SQL-Syntax entspricht weitestgehend der von PASCAL:
·    Groß - Kleinschreibung wird ignoriert.
·    Vergleichsoperator ist '=' (einfaches Istgleich Zeichen) .
·    And/Or- Verknüpfung mit AND / OR .
·    Zeichenketten werden mit ' begonnen und mit ' beendet.

Da der Schwerpunkt des SQLEntry Moduls der Zugriff auf Microsoft Jet Datenbankmodule wie z.B. Access und Excel-Tabellen ist, gelten die folgend aufgeführten Beispiele vor allem für den SQL - Dialekt den die Microsoft Jet Datenbankengine verwendet. Aber auch die Unterschiede zu anderen Datenbanken (z.B. Oracle), die auch über das SQLEntry Modul angesprochen werden können sind aufgeführt.

Beschreibung der SELECT Anweisung:

SELECT [Prädikat] { * | Tabelle.* | [Tabelle.]Feld1 [AS Alias1] [, [Tabelle.]Feld2 [AS Alias2] [, ...]]}
FROM Tabellenausdruck [, ...] [IN ExterneDatenbank]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]

Eine SELECT-Anweisung ist wie folgt zusammengesetzt:

Prädikat: Eines der folgenden Prädikate: ALL, DISTINCT, DISTINCTROW oder TOP. Mit dem Prädikat schränken Sie die Anzahl der zurückgegebenen Datensätze ein. Standardeinstellung ist: ALL.
*: Gibt an, daß alle Felder aus den angegebenen Tabellen ausgewählt werden.
Tabelle:    Der Name der Tabelle, aus der Datensätze ausgewählt werden.
Feld1, Feld2: Die Namen der Felder, welche die Daten enthalten, die Sie abrufen möchten. Wenn Sie mehrere Felder angeben, werden diese in der angegebenen Reihenfolge abgerufen.
Alias1, Alias2: Die Namen, die anstelle der ursprünglichen Spaltennamen als Spaltenköpfe in Tabelle verwendet werden.
Tabellenausdruck: Der Name der Tabelle(n) mit den Daten, die abgerufen werden sollen.
ExterneDatenbank: Der Name der Datenbank mit den in Tabellenausdruck angegebenen Tabellen, sofern sich die Tabellen nicht in der aktuellen Datenbank befinden.

Beispiele und Bemerkungen:
Access und Excel erlauben die Verwendung von Sonderzeichen zur Bildung von Tabellennamen, welche nicht ANSI-SQL konform sind (z.B. '-' oder '$'). Damit diese Tabellennamen vom der Datenbank trotzdem korrekt erkannt werden, sollten diese Tabellennamen mit eckigen Klammern '[' und ']' eingegrenzt werden, bzw. werden vom Parser des SQLEntry Moduls automatisch konvertiert.

Die minimal erforderliche Syntax für eine SELECT-Anweisung ist:

SELECT Felder FROM Tabelle;

Sie können einen Stern (*) verwenden, um alle Felder in einer Tabelle auszuwählen. Im folgenden Beispiel werden alle Felder in der Tabelle "Personal" ausgewählt:

SELECT * FROM Personal;

Wenn ein Feldname in mehreren Tabellen in dem FROM-Abschnitt angegeben ist, geben Sie den Tabellennamen und den Punktoperator (.) (engl.: qualifier) vor dem Feldnamen an. Im folgenden Beispiel enthält sowohl die Tabelle "Personal" als auch die Tabelle "Vorgesetzte" das Feld "Abteilung". Die SQL-Anweisung wählt das Feld "Abteilung" aus der Tabelle "Personal" und das Feld "VorgName" aus der Tabelle "Vorgesetzte" aus:

SELECT Personal.[Abteilung], Vorgesetzte.[VorgName]
FROM Personal INNER JOIN Vorgesetzte
WHERE Personal.[Abteilung] = Vorgesetzte.[Abteilung];

Wenn ein Feld aus einer Tabelle ausgewählt wird, so wird der Feldname als Name für den Ausgang des entsprechenden Moduls verwendet. Wenn Sie einen anderen Feldnamen verwenden möchten, verwenden Sie das reservierte Wort AS. Im folgenden Beispiel wird der Titel 'Geburtstag' verwendet, um Daten des Feldes [Geburtsdatum] zu bezeichnen:

SELECT [Geburtsdatum]AS Geburtstag FROM Personal;

Sobald Sie Aggregatfunktionen oder Abfragen verwenden, die nicht eindeutige oder mehrfach vorkommende Namen für Field-Objekte zurückgeben, müssen Sie den AS-Abschnitt verwenden, um einen alternativen Namen für das Field-Objekt zur Verfügung zu stellen. Im folgenden Beispiel wird der Titel Personalstärke verwendet, um das zurückgegebene Field-Objekt im Recordset-Objekt zu bezeichnen:

SELECT COUNT([Personal-Nr]) AS Personalstärke FROM Personal;

Sie können die anderen Abschnitte in einer SELECT-Anweisung verwenden, um die zurückgegebenen Daten weiter einzuschränken und zu organisieren. Weitere Informationen finden Sie in der Beschreibung des entsprechenden Abschnitts in der Hilfe.

Beschreibung des Prädikats der SELECT Anweisung.


SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]] FROM Tabelle

Eine SELECT-Anweisung, die diese Prädikate enthält, besteht aus folgenden Teilen:

ALL: Wird angenommen, wenn keines der Prädikate angegeben wird. Die beiden folgenden Beispiele sind äquivalent und geben alle Datensätze der Tabelle "Personal" zurück:

SELECT ALL * FROM Personal ORDER BY [Personal-Nr];
SELECT * FROM Personal ORDER BY [Personal-Nr];

DISTINCT: Wählt Datensätze nicht aus, die in den ausgewählten Feldern mehrfach vorkommende Daten enthalten. Die Werte für alle in der SELECT
-Anweisung aufgeführten Felder müssen eindeutig sein, damit sie in das Ergebnis der Abfrage aufgenommen werden. Beispielsweise können mehrere in der Tabelle "Personal" aufgeführte Angestellte denselben Nachnamen haben. Wenn zwei Datensätze den Wert "Schmidt" im Feld "Nachname" enthalten, gibt die folgende SQL-Anweisung nur einen der Datensätze zurück, die "Schmidt" enthalten:

SELECT DISTINCT Nachname FROM Personal;

Wenn Sie DISTINCT nicht angeben, gibt diese Abfrage beide Datensätze mit "Schmidt" zurück. Wenn der SELECT-Abschnitt mehrere Felder enthält, muß die Kombination der Werte aus allen Feldern eindeutig sein, damit ein bestimmter Datensatz in das Ergebnis aufgenommen wird. Die Ausgabe einer Abfrage, die DISTINCT verwendet, kann nicht aktualisiert werden, und von anderen Benutzern nachträglich vorgenommene Änderungen werden in der Ausgabe nicht berücksichtigt.

DISTINCTROW: Wählt Daten aus mehrfach auftretenden Datensätzen (nicht nur aus mehrfach auftretenden Feldern) nur einmal aus. Beispielsweise können Sie eine Abfrage erstellen, in der die Tabellen "Kunden" und "Bestellungen" über das Feld "Kunden-Nr" verknüpft werden. Die Tabelle "Kunden" enthält keine mehrfachen Einträge für das Feld " Kunden-Nr ", im Gegensatz zur Tabelle "Bestellungen", in der für jeden Kunden mehrere Bestellungen eingetragen sein können. Die folgende SQL-Anweisung zeigt, wie Sie mit DISTINCTROW eine Liste der Firmen erstellen können, die mindestens eine Bestellung in Auftrag gegeben haben, ohne Details zu den Bestellungen in die Liste aufzunehmen:

SELECT DISTINCTROW [Firma]
FROM Kunden INNER JOIN Bestellungen
ON Kunden.[Kunden-Nr] = Bestellungen.[Kunden-Nr]
ORDER BY [Firma];

Wenn Sie DISTINCTROW nicht angeben, erstellt diese Abfrage mehrere Zeilen für alle Firmen mit mehreren Bestellungen. DISTINCTROW ist nur dann wirksam, wenn Sie Felder nicht aus allen, sondern nur aus einigen der in der Abfrage verwendeten Tabellen auswählen. DISTINCTROW wird ignoriert, wenn die Abfrage nur eine Tabelle umfaßt oder wenn Sie Felder von allen Tabellen ausgeben.

TOP n [PERCENT]: Gibt eine bestimmte Anzahl von Datensätzen zurück, die im oberen oder unteren Teil eines durch einen ORDER BY-Abschnitt angegebenen Bereichs liegen. Angenommen, Sie wollten die Namen der 25 besten Studenten aus dem Jahrgang 1994 ermitteln:

SELECT TOP 25 Vorname, Nachname FROM Studenten
WHERE Abschlußjahr = 1994 ORDER BY Abschlußnote DESC;

Wenn Sie keinen ORDER BY-Abschnitt angeben, gibt die Abfrage 25 nicht näher bestimmte Datensätze aus der Tabelle "Studenten" zurück, welche im WHERE-Abschnitt angegebene Bedingung erfüllen. Das TOP-Prädikat trifft keine Auswahl bei gleichen Werten. Wenn im vorhergehenden Beispiel der Notendurchschnitt des 25. und des 26. Studenten übereinstimmen, gibt die Abfrage 26 Datensätze zurück. Sie können auch mit dem reservierten Wort PERCENT einen bestimmten Prozentsatz der Datensätze zurückgeben, die im oberen oder unteren Teil eines durch einen ORDER BY-Abschnitt angegebenen Bereichs liegen. Nehmen Sie an, Sie wollten statt der 25 besten Studenten die besten 10 Prozent des Jahrgangs ermitteln:

SELECT TOP 10 PERCENT Vorname, Nachname
FROM Studenten WHERE Abschlußjahr = 1994
ORDER BY Abschlußnote ASC;

Das ASC-Prädikat gibt die Rückgabe der kleinsten Werte an. Der Wert im Anschluß an TOP muß ohne Vorzeichen sein und den Datentyp Integer haben. TOP hat keinen Einfluß darauf, ob die Abfrage aktualisierbar ist.

Tabelle: Der Name der Tabelle, aus der Datensätze abgerufen werden.
Beschreibung des FROM Abschnittes

SELECT Feldliste FROM Tabellenausdruck [IN ExterneDatenbank]

Eine SELECT-Anweisung mit einem FROM-Abschnitt besteht aus folgenden Teilen:

Feldliste:
Die Namen von Feldern, die zusammen mit Alias-Bezeichnungen für Feldnamen, SQL-Aggregatfunktionen, Auswahlprädikaten (ALL, DISTINCT, DISTINCTROW oder TOP) oder anderen Optionen für die SELECT-Anweisung abgerufen werden sollen.
Tabellenausdruck:
Ein Ausdruck, der eine oder mehrere Tabellen kennzeichnet, aus denen Daten abgerufen werden. Der Ausdruck kann ein einzelner Tabellenname sein, ein Name einer gespeicherten Abfrage oder ein zusammengesetzter Name, der sich aus einer Verknüpfung (INNER JOIN, LEFT JOIN oder RIGHT JOIN) ergibt.
ExterneDatenbank:
Der vollständige Pfad einer externen Datenbank, die alle Tabellen in Tabellenausdruck enthält.

Die Angabe von FROM ist erforderlich und muß auf alle SELECT-Anweisungen folgen.
Die Reihenfolge der Tabellennamen in Tabellenausdruck ist ohne Bedeutung.
Sie können Daten aus einer externen Datenbank schneller und komfortabler abrufen, wenn Sie statt eines IN-Abschnitts eine verknüpfte Tabelle verwenden.

Das folgende Beispiel zeigt, wie Sie Daten aus der Tabelle "Personal" abrufen können:

SELECT Nachname, Vorname FROM Personal;

Beschreibung des WHERE Abschnittes
Gibt an, welche Datensätze der im FROM-Abschnitt aufgeführten Tabellen von einer SELECT-, UPDATE- oder DELETE-Anweisung betroffen sind.

SELECT Feldliste FROM Tabellenausdruck WHERE Kriterien

Eine SELECT-Anweisung, die einen WHERE-Abschnitt enthält, besteht aus folgenden Teilen:

Feldliste:
Die Namen von Feldern, die zusammen mit Alias-Bezeichnungen für Feldnamen, Auswahlprädikaten (ALL, DISTINCT, DISTINCTROW oder TOP) oder anderen Optionen für die SELECT-Anweisung abgerufen werden sollen.
Tabellenausdruck:
Der Name einer oder mehrerer Tabellen, aus denen Daten abgerufen werden.
Kriterien:
Ein Ausdruck mit Kriterien, die Datensätze erfüllen müssen, damit sie in das Abfrageergebnis aufgenommen werden.

Das Datenbankmodul wählt die Datensätze aus, welche im WHERE -Abschnitt aufgeführten Bedingungen erfüllen. Wenn Sie keinen WHERE-Abschnitt angeben, gibt die Abfrage alle Zeilen aus der Tabelle zurück. Wenn Sie mehrere Tabellen in Ihrer Abfrage angeben und keinen WHERE- oder JOIN-Abschnitt angegeben haben, erzeugt die Abfrage ein kartesisches Produkt der Tabellen.

WHERE ist optional, muß aber auf FROM folgen, wenn es angegeben wird. Sie können z.B. alle Angestellten der Vertriebsabteilung (WHERE Abteilung = 'Vertrieb') oder alle Kunden im Alter von 18 bis 30 Jahren (WHERE Alter Between 18 And 30) auswählen.

WHERE ist dem HAVING-Abschnitt ähnlich. WHERE bestimmt, welche Datensätze ausgewählt werden. Analog dazu bestimmt HAVING, welche Datensätze angezeigt werden, nachdem sie mit GROUP BY gruppiert wurden.

Verwenden Sie den WHERE-Abschnitt, um Datensätze auszuschließen, die nicht von einem GROUP BY-Abschnitt gruppiert werden sollen.

Sie können verschiedene Ausdrücke verwenden, um zu bestimmen, welche Datensätze die SQL-Anweisung zurückgibt. Die folgende SQL-Anweisung wählt z.B. alle Angestellten aus, deren Gehalt DM 40.000 übersteigt:

SELECT Nachname, Gehalt
FROM Personal
WHERE Gehalt > 40000;

Ein WHERE-Abschnitt kann bis zu 40 Ausdrücke enthalten, die durch logische Operatoren wie And und Or verknüpft sind.

Wenn Sie einen Feldnamen eingeben, der ein Leerzeichen oder Satzzeichen enthält, müssen Sie den Namen in eckige Klammern ([ ]) einschließen. Zum Beispiel könnte eine Kundeninformationstabelle Informationen über bestimmte Kunden enthalten:

SELECT [Vom Kunden bevorzugtes Restaurant]

Wenn Sie das Argument Kriterien angeben, müssen Datumsliterale im amerikanischen Datumsformat angegeben werden, auch wenn Sie nicht die amerikanische Version des Microsoft Jet-Datenbankmoduls (gilt auch für deutschen ODBC-Treiber )verwenden. Der 10. Mai 1996 wird z.B. in Deutschland in der Form 10.5.96 und in den USA in der Form 5/10/96 geschrieben. Schließen Sie Datumsangaben auf jeden Fall in #-Zeichen ein, wie in den folgenden Beispielen gezeigt.

Zur Suche nach Datensätzen vom 10. Mai 1996 in einer Datenbank mit deutschen Einträgen müssen Sie die folgende SQL-Anweisung verwenden:

SELECT *
FROM Bestellungen
WHERE [Versanddatum] = #5/10/96#;

Beschreibung des GROUP BY Abschnittes
Faßt Datensätze, die in der angegebenen Feldliste dieselben Werte enthalten, zu einem einzelnen Datensatz zusammen. Für jeden Datensatz wird ein Ergebniswert berechnet, wenn Sie eine SQL-Aggregatfunktion wie SUM oder COUNT in der SELECT-Anweisung angeben.

SELECT Feldliste
FROM Tabelle
WHERE Kriterien
[GROUP BY Gruppenfeldliste]

Eine SELECT-Anweisung, die einen GROUP BY-Abschnitt enthält, besteht aus folgenden Teilen:

Feldliste:
Die Namen von Feldern, die zusammen mit Alias-Bezeichnungen für Feldnamen, SQL-Aggregatfunktionen, Auswahlprädikaten (ALL, DISTINCT, DISTINCTROW oder TOP) oder anderen Optionen für die SELECT-Anweisung abgerufen werden sollen.
Tabelle:
Der Name der Tabelle, aus der Datensätze abgerufen werden. Weitere Informationen finden Sie in der Beschreibung zum FROM-Abschnitt.
Kriterien:
Auswahlkriterien. Wenn die Anweisung einen WHERE-Abschnitt enthält, gruppiert das Microsoft Jet-Datenbankmodul Werte, nachdem die WHERE-Bedingungen für die Datensätze überprüft wurden.
Gruppenfeldliste:
Die Namen von bis zu 10 Feldern zum Gruppieren von Datensätzen. Die Reihenfolge der Feldnamen in Gruppenfeldliste bestimmt die Gruppierungsebenen (von höchster zu niedrigster Ebene).
GROUP BY ist optional.

Ergebniswerte werden nicht angegeben, wenn die SELECT-Anweisung keine SQL-Aggregatfunktion enthält.

Null-Werte in GROUP BY-Feldern werden berücksichtigt und gruppiert. Null-Werte werden jedoch in keiner SQL-Aggregatfunktion ausgewertet.

Verwenden Sie den WHERE-Abschnitt, um Zeilen auszuschließen, die nicht gruppiert werden sollen, und verwenden Sie den HAVING-Abschnitt, um Datensätze nach dem Gruppieren zu filtern.

Alle Felder in der SELECT-Feldliste müssen entweder im GROUP BY-Abschnitt enthalten sein oder als Argument für eine SQL-Aggregatfunktion angegeben werden.

Beschreibung des HAVING Abschnittes

Gibt an, welche der gruppierten Datensätze in einer SELECT-Anweisung mit einem GROUP BY-Abschnitt angezeigt werden sollen. Nachdem GROUP BY Datensätze kombiniert, zeigt HAVING alle von dem GROUP BY-Abschnitt gruppierten Datensätze an, die die im HAVING-Abschnitt angegebenen Bedingungen erfüllen.

SELECT Feldliste
FROM Tabelle
WHERE Auswahlkriterien
GROUP BY Gruppenfeldliste
[HAVING Gruppenkriterien]

Eine SELECT-Anweisung, die einen HAVING-Abschnitt enthält, besteht aus folgenden Teilen:

Feldliste:
Die Namen von Feldern, die zusammen mit Alias-Bezeichnungen für Feldnamen, SQL-Aggregatfunktionen, Auswahlprädikaten (ALL, DISTINCT, DISTINCTROW oder TOP) oder anderen Optionen für die SELECT-Anweisung abgerufen werden sollen.
Tabelle:
Der Name der Tabelle, aus der Datensätze abgerufen werden. Weitere Informationen finden Sie in der Beschreibung zum FROM-Abschnitt.

Auswahlkriterien:
Wenn die Anweisung einen WHERE-Abschnitt enthält, gruppiert das Microsoft Jet-Datenbankmodul Werte (betrifft auch Applikationen die über ODBC auf das MS-Jet DBM zugreifen, wie z.B.: ICONNECT.), nachdem die WHERE-Bedingungen für die Datensätze überprüft wurden.

Gruppenfeldliste:
Die Namen von bis zu 10 Feldern zum Gruppieren von Datensätzen. Die Reihenfolge der Feldnamen in Gruppenfeldliste bestimmt die Gruppierungsebenen (von höchster zu niedrigster Ebene).

Gruppenkriterien:
Ein Ausdruck, der bestimmt, welche gruppierten Datensätze angezeigt werden sollen.

HAVING ist optional.
HAVING hat eine ähnliche Funktion wie der WHERE-Abschnitt, der bestimmt, welche Datensätze ausgewählt werden. Nachdem Datensätze mit GROUP BY gruppiert wurden, bestimmt HAVING, welche Datensätze angezeigt werden:

SELECT [Kategorie-Nr], Sum(Lagerbestand)
FROM Artikel WHERE [Artikel].[Artikelname] LIKE 'BOS%'
GROUP BY [Kategorie-Nr] HAVING Sum(Lagerbestand) > 100

Ein HAVING-Abschnitt kann bis zu 40 Ausdrücke enthalten, die durch logische Operatoren wie AND und OR verknüpft sind.

Beschreibung des ORDER BY Abschnittes
Sortiert die Ergebnisdatensätze einer Abfrage nach einem oder mehreren angegebenen Feldern in aufsteigender oder absteigender Reihenfolge.

SELECT Feldliste
FROM Tabelle
WHERE Auswahlkriterien
[ORDER BY Feld1 [ASC | DESC ][, Feld2 [ASC | DESC ] ][, ... ]]]

Eine SELECT-Anweisung, die einen ORDER BY-Abschnitt enthält, besteht aus folgenden Teilen:

Feldliste:
Die Namen von Feldern, die zusammen mit Alias-Bezeichnungen für Feldnamen, SQL-Aggregatfunktionen, Auswahlprädikaten (ALL, DISTINCT, DISTINCTROW oder TOP) oder anderen Optionen für die SELECT-Anweisung abgerufen werden sollen.
Tabelle: Der Name der Tabelle, aus der Datensätze abgerufen werden. Weitere Informationen finden Sie in der Beschreibung zur FROM.

Auswahlkriterien:
Wenn die Anweisung einen WHERE-Abschnitt enthält, sortiert das Datenbankmodul Werte, nachdem die WHERE Bedingungen für die Datensätze überprüft wurden.
Feld1, Feld2: Die Namen der Felder, nach denen Datensätze sortiert werden sollen.
ORDER BY ist optional. Wenn Sie jedoch möchten, daß Ihre Daten in sortierter Reihenfolge angezeigt werden, müssen Sie ORDER BY verwenden.

Die Standardeinstellung für die Sortierreihenfolge ist aufsteigend (A bis Z, 0 bis 9). In den beiden folgenden Beispielen werden die Namen der Angestellten nach ihren Nachnamen sortiert:

SELECT Nachname, Vorname FROM Personal ORDER BY Nachname;
SELECT Nachname, Vorname FROM Personal ORDER BY Nachname ASC;

Sie können die Daten in absteigender Reihenfolge (Z bis A, 9 bis 0) sortieren, indem Sie am Ende jedes Feldes, nach dem in absteigender Reihenfolge sortiert werden soll, das reservierte Wort DESC angeben. Das folgende Beispiel wählt Gehälter aus und sortiert sie in absteigender Reihenfolge:

SELECT Nachname, Land FROM Personal ORDER BY Land DESC, Nachname;

Wenn Sie ein Feld mit Memo oder OLE-Objekt-Daten im ORDER BY-Abschnitt angeben, tritt ein Fehler auf. Dieses Datenbankmodul kann Felder dieses Typs nicht sortieren.

ORDER BY ist normalerweise der letzte Eintrag in einer SQL-Anweisung.

Sie können im ORDER BY-Abschnitt noch weitere Felder angeben. Die Datensätze werden zuerst nach dem ersten im Anschluß an ORDER BY angegebenen Feld sortiert. Datensätze, die in diesem Feld denselben Wert haben, werden dann nach dem Wert im zweiten aufgeführten Feld sortiert usw.

Beschreibung der WITH OWNERACCESS OPTION
Verwenden Sie in einer Mehrbenutzerumgebung mit einer geschützten Arbeitsgruppe die Deklaration WITH OWNERACCESS OPTION in einer Abfrage. Damit erteilen Sie dem die Abfrage ausführenden Benutzer die gleichen Berechtigungen, die auch der Eigentümer der Abfrage besitzt.

SQL-Anweisung
WITH OWNERACCESS OPTION

Die WITH OWNERACCESS OPTION-Deklaration ist optional.
Das folgende Beispiel erlaubt dem Benutzer die Anzeige von Gehaltsinformationen, auch wenn er ansonsten nicht zur Ansicht des Feldes "Gehalt" berechtigt ist, sofern die Abfrage von einer Person mit den nötigen Berechtigungen erstellt wurde:

SELECT Nachname, Vorname, Land
FROM Personal ORDER BY Nachname
WITH OWNERACCESS OPTION;

Wenn ein Benutzer normalerweise nicht zum Erstellen einer Tabelle oder zum Hinzufügen zu einer Tabelle berechtigt ist, können Sie dem Benutzer unter Verwendung von WITH OWNERACCESS OPTION die Berechtigung zur Ausführung einer Tabellenerstellungs- oder Anfügeabfrage erteilen.

Wenn Sie die Einhaltung der Sicherheitseinstellungen für die Arbeitsgruppe und der Benutzerberechtigungen erzwingen möchten, geben Sie die WITH OWNERACCESS OPTION-Deklaration nicht an.

Diese Option erfordert, daß Sie Zugriff auf die Datei SYSTEM.MDW haben, die der Datenbank zugeordnet ist. Sie kann nur in geschützten Mehrbenutzerumgebungen sinnvoll eingesetzt werden.

Beschreibung der SELECT INTO Anweisung
Definiert eine Tabellenerstellungsabfrage.

SELECT Feld1[, Feld2[, ...]] INTO NeueTabelle [IN ExterneDatenbank]
FROM Quelle


Die SELECT...INTO-Anweisung besteht aus folgenden Teilen:
Feld1, Feld2:
Die Namen der Felder, die in die neue Tabelle kopiert werden sollen.
NeueTabelle:
Der Name der zu erstellenden Tabelle, der den Standard-Namenskonventionen folgen muß. Wenn der mit NeueTabelle vergebene Name mit dem einer bereits bestehenden Tabelle übereinstimmt, tritt ein auffangbarer Fehler auf.
ExterneDatenbank:
Der Pfad einer externen Datenbank. Eine Beschreibung des Pfades finden Sie in der Beschreibung zum IN-Abschnitt.
Quelle:
Der Name der bestehenden Tabelle, aus der Datensätze ausgewählt werden. Es kann sich um eine einzelne Tabelle, um mehrere Tabellen oder um eine Abfrage handeln.

Sie verwenden Tabellenerstellungsabfragen zum Archivieren von Datensätzen, zum Erstellen von Sicherungskopien der Tabellen oder zum Erstellen von Kopien, die in eine andere Datenbank exportiert werden. Sie können solche Abfragen auch als Grundlage für Berichte verwenden, die Daten aus einem bestimmten Zeitraum anzeigen. Sie könnten z.B. einen Bericht mit dem Namen "Monatsumsätze nach Gebieten" erstellen, indem Sie dieselbe Tabellenerstellungsabfrage jeden Monat ausführen.

·    Sie sollten einen Primärschlüssel für die neue Tabelle definieren. Wenn Sie die Tabelle erstellen, übernehmen die Felder in der neuen Tabelle den Datentyp und die Feldgröße aller Felder aus den Tabellen, die der Abfrage zugrunde liegen. Alle anderen Feld- oder Tabelleneigenschaften werden jedoch nicht übertragen.

·    Sie können einer bestehenden Tabelle Daten hinzufügen, indem Sie die INSERT INTO-Anweisung anstelle einer Anfügeabfrage verwenden.

·    Sie können vor Ausführung der Tabellenerstellungsabfrage feststellen, welche Datensätze ausgewählt werden, indem Sie zuerst die Ergebnisse einer SELECT-Anweisung untersuchen, in der dieselben Auswahlkriterien verwendet werden.

Beschreibung der IN-Klausel (SQL)
Mit der IN-Klausel kann das Microsoft Jet-Datenbankmodul eine Verbindung zu einer Datenbank, wie z.B. einer dBASE-, Paradox- oder einer externe Jet-Datenbank herstellen.

So kennzeichnen Sie eine Zieltabelle:

[SELECT | INSERT] INTO Ziel IN
{Pfad | ["Pfad" "Typ"] | ["" [Typ; DATABASE = Pfad]]}

So kennzeichnen Sie eine Quelltabelle:

FROM Tabellenausdruck IN
{Pfad | ["Pfad" "Typ"] | ["" [Typ; DATABASE = Pfad]]}

Eine SELECT-Anweisung, die eine IN-Klausel enthält, besteht aus folgenden Teilen:

Ziel:
Der Name der externen Tabelle, in die Daten eingefügt werden.
Tabellenausdruck:
Der Name einer oder mehrerer Tabellen, aus denen Daten abgerufen werden. Dieses Argument kann ein einzelner Tabellenname sein, eine gespeicherte Abfrage oder ein zusammengesetzter Name, der sich aus einer Verknüpfung mit INNER JOIN, LEFT JOIN oder RIGHT JOIN ergibt.
Pfad:
Der vollständige Pfad für das Verzeichnis oder die Datei, das oder die Tabelle enthält.
Typ:
Die Bezeichnung für den Datenbanktyp, der zum Erstellen von Tabelle verwendet wird, wenn es sich nicht um eine Jet-Datenbank handelt (z.B. dBASE III, dBASE IV, Paradox 3.x oder Paradox 4.x).

Mit IN können Sie jeweils nur eine Verbindung zu einer externen Datenbank aufbauen.

In einigen Fällen verweist das Pfadargument auf das Verzeichnis, das die Datenbankdateien enthält. Beim Arbeiten mit dBASE-, FoxPro- oder Paradox-Datenbanktabellen gibt das Pfadargument z.B. das Verzeichnis an, in dem die .DBF- oder .DB-Dateien enthalten sind. Der Dateiname für die Tabelle wird aus den Argumenten Ziel oder Tabellenausdruck abgeleitet.

Sie geben eine Datenbank an, die keine Jet-Datenbank ist, indem Sie ein Semikolon (;) an den Namen anhängen und ihn in Apostrophe (' ') oder Anführungszeichen (" ") einschließen. Beispielsweise ist sowohl 'dBASE IV;' als auch "dBASE IV;" zulässig.

Sie können auch das reservierte Wort DATABASE verwenden, um die externe Datenbank anzugeben. Die folgenden Zeilen geben beispielsweise dieselbe Tabelle an:

... FROM Table IN "" [dBASE IV; DATABASE=C:\DBASE\DATA\SALES;];
... FROM Table IN "C:\DBASE\DATA\SALES" "dBASE IV;"

Sie arbeiten schneller und komfortabler, wenn Sie eine anstelle von IN eine eingebundene Tabelle verwenden.

Sie können das reservierte Wort IN auch als Vergleichsoperator in einem Ausdruck verwenden. Weitere Informationen finden Sie in der Beschreibung zum IN-Operator.

Beschreibung von SQL-Unterabfragen
Eine Unterabfrage ist eine SELECT-Anweisung, die entweder innerhalb einer SELECT-, SELECT...INTO-, INSERT...INTO-, DELETE- oder UPDATE
-Anweisung oder innerhalb einer anderen Unterabfrage verschachtelt ist.

Eine Unterabfrage kann in drei Syntaxvarianten formuliert werden:

Vergleich [ANY | ALL | SOME] (SQLAnweisung)
Ausdruck [NOT] IN (SQLAnweisung)
[NOT] EXISTS (SQLAnweisung)

Eine Unterabfrage besteht aus folgenden Teilen:

Vergleich:
Ein Ausdruck und ein Vergleichsoperator, der den Ausdruck mit den jeweiligen Ergebnissen der Unterabfrage vergleicht.
Ausdruck:
Ein Ausdruck, nach dem innerhalb der Ergebnismenge der Abfrage gesucht wird.
SQLAnweisung:
Eine SELECT-Anweisung, die dasselbe Format hat und nach denselben Regeln aufgebaut ist wie jede andere SELECT-Anweisung. Diese Anweisung muß in runde Klammern eingeschlossen sein.

Sie können in der Feldliste einer SELECT-Anweisung oder in einem WHERE- oder HAVING-Abschnitt anstelle eines Ausdrucks eine Unterabfrage verwenden. Indem Sie in einer Unterabfrage eine SELECT-Anweisung einsetzen, stellen Sie einen oder mehrere bestimmte Werte bereit, die dann im Ausdruck des zugehörigen WHERE- oder HAVING-Abschnitts ausgewertet werden.

Verwenden Sie das Prädikat ANY oder SOME (bedeutungsgleich), wenn Sie Datensätze aus der Hauptabfrage abrufen möchten, die den Vergleich mit mindestens einem der von der Unterabfrage zurückgegebenen Datensätze erfüllen. Im folgenden Beispiel werden alle Artikel zurückgegeben, deren Einzelpreis ("Einzelpreis") höher ist als der Einzelpreis irgendeines der Artikel, die mit einem Rabatt von 25 Prozent oder mehr verkauft werden:

SELECT * FROM Artikel WHERE Einzelpreis > ANY
(SELECT Einzelpreis FROM Bestelldetails
WHERE Rabatt >= .25);

Verwenden Sie das Prädikat ALL, wenn Sie nur die Datensätze der Hauptabfrage abrufen möchten, die den Vergleich mit allen von der Unterabfrage abgerufenen Datensätzen erfüllen. Würden Sie im vorangegangenen Beispiel ANY durch ALL ersetzen, so würde die Abfrage nur diejenigen Artikel zurückgeben, deren jeweiliger Einzelpreis höher ist als der aller (auch der teuersten) Produkte, die mit einem Rabatt von 25 Prozent oder mehr verkauft werden. Damit ist diese Abfrage deutlich restriktiver.

Mit dem Prädikat IN rufen Sie nur diejenigen Datensätze der Hauptabfrage ab, für die einige Datensätze der Unterabfrage einen gleichen Wert enthalten. Im folgenden Beispiel werden alle Artikel zurückgegeben, die mit einem Rabatt von 25 Prozent oder mehr verkauft werden:

SELECT * FROM Artikel WHERE [Artikel-Nr] IN
(SELECT [Artikel-Nr] FROM Bestelldetails
WHERE Rabatt >= .25);

Umgekehrt können Sie NOT IN verwenden, um Datensätze der Hauptabfrage abzurufen, für die kein Datensatz der Unterabfrage einen gleichen Wert enthält.

Mit dem Prädikat EXISTS (und dem optionalen reservierten Wort NOT) in True/False-Vergleichen können Sie herausfinden, ob die jeweilige Abfrage überhaupt Datensätze zurückgibt.

Außerdem können Sie in einer Unterabfrage Alias-Bezeichnungen für Tabellennamen verwenden, um auf Tabellen zu verweisen, die in einem FROM

-Abschnitt außerhalb der Unterabfrage angegeben wurden. Das folgende Beispiel liefert die Namen der Angestellten, deren Gehalt größer oder gleich dem Durchschnittsgehalt aller Angestellten ist, die dieselbe Position bekleiden. Die Tabelle "Personal" erhält die Alias-Bezeichnung "T1":

SELECT Nachname, Vorname, Position, Gehalt
FROM Personal AS T1 WHERE Gehalt >=
(SELECT AVG(Gehalt) FROM Personal
WHERE T1.Position = Personal.Position) ORDER BY Position;

 

Beschreibung des UNION Operators
Erstellt eine Union-Abfrage, in der die Ergebnisse zweier oder mehrerer unabhängiger Abfragen oder Tabellen kombiniert werden.

[TABLE] Abfrage1 UNION [ALL] [TABLE] Abfrage2 [UNION [ALL] [TABLE] AbfrageN [ ... ]]

Die UNION-Operation besteht aus folgenden Teilen:
Abfrage1-N: Eine SELECT-Anweisung, der Name einer gespeicherten Abfrage oder der Name einer gespeicherten Tabelle, der das Schlüsselwort TABLE vorangeht.

Bemerkungen:
Sie können die Ergebnisse zweier oder mehrerer Abfragen, Tabellen und SELECT-Anweisungen in jeder beliebigen Kombination in einer einzelnen UNION-Operation zusammenführen. Im folgenden Beispiel werden die Ergebnisse einer bestehenden Abfrage mit dem Namen "Neue Kunden" und eine SELECT
-Anweisung zusammengeführt:

TABLE [Neue Kunden] UNION ALL
SELECT * FROM Kunden
WHERE Bestellmenge > 1000;

Standardmäßig werden keine mehrfach vorkommenden Datensätze zurückgegeben, wenn Sie eine UNION-Operation verwenden. Sie können aber das Prädikat ALL angeben und so dafür sorgen, daß alle Datensätze zurückgegeben werden. Außerdem hat dies zur Folge, daß die Abfrage schneller ausgeführt wird.

Alle Abfragen in einer UNION-Operation müssen gleich viele Felder abrufen. Diese Felder müssen aber weder gleich groß sein noch denselben Datentyp haben.

Verwenden Sie Alias-Bezeichnungen nur in der ersten SELECT-Anweisung, da diese in anderen Anweisungen ignoriert werden. Verweisen Sie im ORDER BY-Abschnitt auf Felder, indem Sie deren Namen aus der ersten SELECT-Anweisung angeben.

Anmerkungen:
·    Sie können einen GROUP BY- oder HAVING-Abschnitt in jedem Abfrage-Argument verwenden, um die zurückgegebenen Daten zu gruppieren.
·    Sie können einen ORDER BY-Abschnitt hinter das letzte Abfrage-Argument setzen, um die zurückgegebenen Daten in einer bestimmten Reihenfolge anzuzeigen.

Beschreibung des INNER JOIN Operators
Kombiniert Datensätze aus zwei Tabellen, sobald ein gemeinsames Feld dieselben Werte enthält.
FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.Feld1 VerglOp Tabelle2.Feld2
Die INNER JOIN-Operation besteht aus folgenden Teilen:
Tabelle1, Tabelle2:
Die Namen der Tabellen, aus denen Datensätze kombiniert werden.
Feld1, Feld2: Die Namen der Felder, die verknüpft werden. Nicht numerische Felder müssen im Datentyp und in der Art der enthaltenen Daten übereinstimmen, können aber unterschiedliche Feldnamen haben.
VerglOp: Ein beliebiger relationaler Vergleichsoperator: "=", "<", ">", "<=", ">=" oder "<>".

Sie können eine INNER JOIN-Operation in jedem FROM-Abschnitt verwenden. Dies ist die gebräuchlichste Art der Verknüpfung. In dieser Verknüpfung werden Datensätze aus zwei Tabellen kombiniert, sobald übereinstimmende Werte in einem Feld gefunden werden, das in beiden Tabellen vorhanden ist.

Sie können INNER JOIN in Abfragen auf den Tabellen "Abteilungen" und "Personal" verwenden, um das gesamte Personal aus allen Abteilungen auszuwählen. Wenn Sie dagegen alle Abteilungen (auch Abteilungen ohne zugeordnetes Personal) oder das gesamte Personal (auch Personal, das keiner Abteilung zugeordnet ist) auswählen wollen, können Sie mit einer LEFT JOIN- oder RIGHT JOIN-Operation eine Inklusionsverknüpfung erstellen.

Wenn Sie Felder verknüpfen möchten, die Daten vom Typ Memo oder OLE-Objekt enthalten, tritt ein Fehler auf.

Sie können zwei beliebige numerische Felder ähnlichen Typs verknüpfen. Sie können z.B. Felder vom Typ "Autowert" und "Long" verknüpfen, da diese einen ähnlichen Datentyp haben. Sie können jedoch keine Felder mit den Typen "Single" und "Double" verknüpfen.

Das folgende Beispiel zeigt, wie Sie die Tabellen "Kategorien" und "Artikel" über das Feld "Kategorie-Nr" verknüpfen können:

SELECT Kategoriename, Artikelname FROM Kategorien INNER JOIN Artikel ON Kategorien.[Kategorie-Nr] = Artikel.[Kategorie-Nr];

In diesem Beispiel ist "Kategorie-Nr" das Feld, über das die Verknüpfung hergestellt wird, das Feld selbst jedoch erscheint nicht in der Abfrageausgabe, da es nicht in der SELECT-Anweisung enthalten ist. Sie können das verknüpfte Feld mit aufnehmen, indem Sie den Feldnamen in der SELECT-Anweisung angeben - in diesem Fall Kategorien.[Kategorie-Nr].

Mit der folgenden Syntax können Sie in einer JOIN-Anweisung auch mehrere ON-Abschnitte verknüpfen:

SELECT Felder FROM Tabelle1 INNER JOIN Tabelle2
ON Tabelle1.Feld1 VerglOp Tabelle2.Feld1 AND
ON Tabelle1.Feld2 VerglOp Tabelle2.Feld2) OR
ON Tabelle1.Feld3 VerglOp Tabelle2.Feld3)];

Mit der folgenden Syntax können Sie JOIN-Anweisungen verschachteln:

SELECT Felder FROM Tabelle1 INNER JOIN
(Tabelle2 INNER JOIN [( ]Tabelle3
[INNER JOIN [( ]Tabellex [INNER JOIN ...)]
ON Tabelle3.Feld3 VerglOp Tabellex.Feldx)]
ON Tabelle2.Feld2 VerglOp Tabelle3.Feld3)
ON Tabelle1.Feld1 VerglOp Tabelle2.Feld2;

Eine LEFT JOIN- oder RIGHT JOIN-Operation kann innerhalb von INNER JOIN verschachtelt werden, jedoch kann INNER JOIN nicht innerhalb von LEFT JOIN oder RIGHT JOIN verschachtelt werden.

Beschreibung der LEFT JOIN-, RIGHT JOIN Operatoren
Kombiniert Datensätze aus Quelltabellen, wenn die Operation in einem FROM-Abschnitt verwendet wird.

FROM Tabelle1 [ LEFT | RIGHT ] JOIN Tabelle2 ON Tabelle1.Feld1 VerglOp Tabelle2.Feld2

Die Operationen LEFT JOIN und RIGHT JOIN bestehen aus folgenden Teilen:

Tabelle1, Tabelle2:
Die Namen der Tabellen, aus denen Datensätze kombiniert werden.
Feld1, Feld2:
Die Namen der Felder, die verknüpft werden. Die Felder müssen denselben Datentyp haben und dieselbe Art von Daten enthalten, können aber unterschiedliche Namen haben.
VerglOp:
Ein beliebiger relationaler Vergleichsoperator: "=", "<", ">", "<=", ">=" oder "<>".

Mit einer LEFT JOIN-Operation können Sie eine linke Inklusionsverknüpfung erstellen. Linke Inklusionsverknüpfungen schließen alle Datensätze aus der ersten (linken) Tabelle von zwei Tabellen ein, auch wenn keine entsprechenden Werte für Datensätze in der zweiten (rechten) Tabelle vorhanden sind.

Mit einer RIGHT JOIN-Operation können Sie eine rechte Inklusionsverknüpfung erstellen. Rechte Inklusionsverknüpfungen schließen alle Datensätze aus der zweiten (rechten) Tabelle von zwei Tabellen ein, auch wenn keine übereinstimmenden Werte für Datensätze in der ersten (linken) Tabelle vorhanden sind.

Sie können z.B. LEFT JOIN für die Tabellen "Abteilungen" (linke Tabelle) und "Personal" (rechte Tabelle) verwenden, um alle Abteilungen auszuwählen, auch Abteilungen, denen kein Personal zugeordnet ist. Zum Auswählen des gesamten Personals (einschließlich des Personals, das keiner Abteilung zugeordnet ist) würden Sie RIGHT JOIN verwenden.

Das folgende Beispiel zeigt, wie Sie die Tabellen "Kategorien" und "Artikel" über das Feld "Kategorie-Nr" verknüpfen können. Die Abfrage erstellt eine Liste aller Kategorien, die auch Kategorien ohne Artikel umfaßt:

SELECT Kategoriename,Artikelname FROM Kategorien LEFT JOIN Artikel ON Kategorien.[Kategorie-Nr] = Artikel.[Kategorie-Nr];

In diesem Beispiel ist "Kategorie-Nr" das Feld, über das die Verknüpfung hergestellt wird, das Feld selbst erscheint jedoch nicht in der Abfrageausgabe, da es nicht in der SELECT-Anweisung enthalten ist. Sie können das verknüpfte Feld ebenfalls aufnehmen, indem Sie den Feldnamen in der SELECT-Anweisung angeben - in diesem Fall "Kategorien.[Kategorie-Nr]".

Anmerkungen:
·    Sie können eine Abfrage erstellen, die nur Datensätze enthält, in denen die Daten in den verknüpften Feldern identisch sind, indem Sie eine INNER JOIN-Operation verwenden.
·    Sie können LEFT JOIN oder RIGHT JOIN innerhalb eines INNER JOIN-Abschnitts verschachteln, jedoch kann INNER JOIN nicht innerhalb von LEFT JOIN oder RIGHT JOIN verschachtelt sein. Im Hilfethema zu INNER JOIN wird beschrieben, wie Sie Verknüpfungen innerhalb anderer Verknüpfungen verschachteln können.
·    Sie können mehrere ON-Abschnitte miteinander verknüpfen. Im Hilfethema zu INNER JOIN wird beschrieben, wie Abschnitte miteinander verknüpft werden können.
·    Wenn Sie Felder mit Daten vom Typ Memo oder OLE-Objekt miteinander verknüpfen möchten, tritt ein Fehler auf.

Beschreibung der UPDATE Anweisung
Erstellt eine Aktualisierungsabfrage, die Werte in Feldern einer angegebenen Tabelle aufgrund angegebener Kriterien ändert.

UPDATE Tabelle SET NeuerWert WHERE Kriterien;

Die UPDATE-Anweisung besteht aus folgenden Teilen:

Tabelle: Der Name der Tabelle, deren Daten geändert werden sollen.
NeuerWert: Ein Ausdruck, der den Wert angibt, der in einem bestimmten Feld in den aktualisierten Datensätzen eingefügt werden soll.
Kriterien: Ein Ausdruck, der festlegt, welche Datensätze aktualisiert werden. Es werden nur Datensätze aktualisiert, welche die im Ausdruck angegebene Bedingung erfüllen.

UPDATE ist besonders hilfreich, wenn viele Datensätze geändert werden sollen oder wenn die zu ändernden Datensätze aus mehreren Tabellen stammen.

Sie können mehrere Felder gleichzeitig ändern. Im folgenden Beispiel werden die Werte für das Feld "Bestellmenge" um 10 Prozent und die Werte für das Feld "Fracht" für Lieferungen in die USA um 3 Prozent erhöht:

UPDATE Bestellungen SET Frachtkosten = Frachtkosten * 1.1125 WHERE Bestimmungsland = 'USA';

Wichtig:
·    UPDATE erzeugt keine Ergebnismenge. Wenn Sie einen Datensatz aktualisiert haben, kann die Operation nicht rückgängig gemacht werden. Sie können herausfinden, welche Datensätze aktualisiert werden, indem Sie zuerst die Ergebnisse einer Auswahlabfrage untersuchen, die dieselben Auswahlkriterien verwendet, und anschließend die Aktualisierungsabfrage ausführen.
·    Erstellen Sie immer Sicherungskopien Ihrer Daten. Wenn Sie einen falschen Datensatz aktualisieren, können Sie diesen mit Hilfe der Sicherungskopien wiederherstellen.

Beschreibung der INSERT INTO Anweisung
Fügt einer Tabelle einen Datensatz oder mehrere Datensätze hinzu. Dies wird als Anfügeabfrage bezeichnet.

Abfrage zum Anfügen mehrerer Datensätze:

INSERT INTO Ziel [IN ExterneDatenbank] [(Feld1[, Feld2[, ...]])]
SELECT [Quelle.]Feld1[, Feld2[, ...]
FROM Tabellenausdruck

Abfrage zum Anfügen eines einzelnen Datensatzes:

INSERT INTO Ziel [(Feld1[, Feld2[, ...]])] VALUES (Wert1[, Wert2[, ...])

Die INSERT INTO-Anweisung besteht aus folgenden Teilen:

Ziel:
Der Name der Tabelle oder Abfrage, an die Datensätze angefügt werden sollen.
ExterneDatenbank
Der Pfad einer externen Datenbank. Eine Beschreibung des Pfades finden Sie in der Beschreibung zur IN-Klausel.
Quelle:
Der Name der Tabelle oder Abfrage, aus der Datensätze kopiert werden sollen.
Feld1, Feld2:
Namen der Felder, an die Daten angefügt werden sollen, wenn diese einem Argument Ziel folgen, oder die Namen der Felder, aus denen Daten gelesen werden sollen, wenn diese einem Argument Quelle folgen.
Tabellenausdruck:
Der Name der Tabelle(n), aus der oder denen Datensätze eingefügt werden. Bei diesem Argument kann es sich um den Namen einer einzelnen Tabelle oder einen zusammengesetzten Namen (als Ergebnis einer INNER JOIN-, LEFT JOIN- oder RIGHT JOIN-Operation) oder eine gespeicherte Abfrage handeln.
Wert1, Wert2:
Die Werte, die in bestimmte Felder des neuen Datensatzes eingefügt werden sollen. Jeder Wert wird in das Feld eingefügt, das der Position des Wertes in der Liste entspricht: Wert1 wird in Feld1 des neuen Datensatzes eingetragen, Wert2 in Feld2 usw. Sie müssen alle Werte in Anführungszeichen (" ") einschließen und die Werte durch Kommas voneinander trennen.

Mit der INSERT INTO-Anweisung können Sie einer Tabelle einen einzelnen Datensatz hinzufügen, indem Sie die Syntax zum Anfügen einzelner Datensätze verwenden (s.o.). In diesem Fall gibt Ihr Code den Namen und Wert für alle Felder des Datensatzes an. Sie müssen alle Felder des Datensatzes, denen ein Wert zugewiesen werden soll, und jeweils einen Wert für diese Felder angeben. Wenn Sie nicht alle Felder angeben, wird für fehlende Spalten der Standardwert oder Null eingefügt. Datensätze werden am Ende der Tabelle angefügt.

Sie können auch INSERT INTO verwenden, um eine Gruppe von Datensätzen aus einer anderen Tabelle oder Abfrage mit der SELECT ... FROM-Klausel anzufügen, wie oben in der Syntax zum Anfügen mehrerer Datensätze beschrieben. In diesem Fall gibt die SELECT-Klausel die Felder an, die an die angegebene Tabelle Ziel angefügt werden sollen.

Als Quell- oder Zieltabelle kann eine Tabelle oder eine Abfrage angegeben werden. Wenn eine Abfrage angegeben wird, werden Datensätze an alle Tabellen angefügt, die in der Abfrage angegeben sind.

INSERT INTO ist optional, geht jedoch der SELECT-Anweisung voraus, wenn es verwendet wird.

Wenn die Zieltabelle einen Primärschlüssel enthält, müssen Sie dem Primärschlüsselfeld (oder den Primärschlüsselfeldern) eindeutige Werte ungleich Null anfügen. Andernfalls werden die Datensätze nicht angehängt und eine entsprechende Fehlermeldung auf den Error- Ausgang ausgegeben..

Wenn Sie einer Tabelle mit einem Zählerfeld Datensätze anfügen, dürfen Sie das Zählerfeld nicht in der Abfrage angeben, wenn das Jet-Datenbankmodul die angefügten Datensätze neu numerieren soll. Geben Sie das Zählerfeld in der Abfrage an, wenn die ursprünglichen Werte aus dem Feld beibehalten werden sollen.

Verwenden Sie die IN-Klausel, um Datensätze an eine Tabelle in einer anderen Datenbank anzufügen.

Sie können eine neue Tabelle erzeugen, indem Sie statt dessen die SELECT... INTO-Anweisung verwenden, um eine Tabellenerstellungsabfrage zu erstellen.

Sie können vor dem Ausführen der Anfügeabfrage feststellen, welche Datensätze angefügt werden, indem Sie zuerst eine Auswahlabfrage ausführen, die dieselben Auswahlkriterien verwendet, und sich die Ergebnisse ansehen.

Eine Anfügeabfrage kopiert Datensätze aus einer oder mehreren Tabellen in eine andere Tabelle. Die Anfügeabfrage hat keine Auswirkung auf die Tabellen, die die anzufügenden Datensätze enthalten.

Anstatt existierende Datensätze aus einer anderen Tabelle anzufügen, können Sie den Wert für jedes Feld in einem einzelnen neuen Datensatz mit der VALUES-Klausel angeben. Wenn Sie keine Feldliste angeben, muß die VALUES-Klausel für alle Felder der Tabelle einen Wert enthalten, da ansonsten die INSERT-Anweisung nicht ausgeführt werden kann. Verwenden Sie für alle weiteren zu erstellenden Datensätze jeweils eine weitere INSERT INTO
-Anweisung mit einer VALUES-Klausel.

Beispiele:
Wählt alle Datensätze in der hypothetischen Tabelle "Neue Kunden" aus und fügt sie der Tabelle "Kunden" hinzu. (Wenn einzelne Spalten nicht angegeben sind, müssen die Spaltennamen der SELECT-Tabelle exakt mit denen in der INSERT INTO-Tabelle übereinstimmen.)

INSERT INTO Kunden SELECT [Neue Kunden].* FROM [Neue Kunden];

Legt einen neuen Datensatz in der Tabelle "Personal" an.

INSERT INTO Personal (Vorname, Nachname, Position) VALUES ("Harry", "Washington", "Trainee");

Wählt alle Trainees aus einer hypothetischen Tabelle "Trainees" aus, die vor mehr als 30 Tagen eingestellt wurden, und fügt deren Datensätze der Tabelle "Personal" hinzu.

INSERT INTO Personal SELECT Trainees.* FROM Trainees WHERE Einstellungsdatum < Now() - 30;

Beschreibung der DELETE Anweisung
Erstellt eine Löschabfrage, die Datensätze aus einer oder mehreren der im FROM-Abschnitt aufgeführten Tabellen löscht, sofern diese die in dem WHERE
-Abschnitt angegebene Bedingung erfüllen.

DELETE FROM Tabelle WHERE Kriterien

Die DELETE-Anweisung besteht aus folgenden Teilen:
Tabelle: Der Name der Tabelle, aus der Datensätze gelöscht werden.
Kriterien: Ein Ausdruck, der angibt, welche Datensätze gelöscht werden sollen.

DELETE ist besonders hilfreich, wenn viele Datensätze gelöscht werden sollen.

Wenn Sie die ganze Tabelle löschen möchten, können Sie dazu eine DROP-Anweisung verwenden. Hierbei geht allerdings die Tabellenstruktur verloren. Im Gegensatz dazu werden durch DELETE nur die Daten gelöscht. Die Tabellenstruktur und alle Tabelleneigenschaften (z.B. Feldattribute und Indizes) bleiben erhalten.

Mit DELETE können Sie Datensätze aus Tabellen entfernen, die in einer 1:n-Beziehung zu anderen Tabellen stehen. Operationen mit Löschweitergabe löschen zusätzlich die Datensätze auf der n-Seite einer Beziehung, die mit dem Datensatz auf der 1-Seite, der durch die Abfrage gelöscht wird, in Beziehung stehen. In der Beziehung zwischen den Tabellen "Kunden" und "Bestellungen" steht die Tabelle "Kunden" z.B. auf der 1-Seite und die Tabelle "Bestellungen" auf der n-Seite der Beziehung. Das Löschen eines Datensatzes aus "Kunden" führt dazu, daß die entsprechenden Datensätze aus "Bestellungen" gelöscht werden, wenn die Löschweitergabe aktiviert ist.

Eine Löschabfrage löscht ganze Datensätze, nicht nur Daten in bestimmten Feldern. Wenn Sie Werte in bestimmten Feldern löschen möchten, müssen Sie eine Aktualisierungsabfrage erstellen, die die Werte auf Null setzt.

Wichtig:
·    Das Löschen von Datensätzen mit einer Löschabfrage kann nicht rückgängig gemacht werden. Wenn Sie wissen möchten, welche Datensätze gelöscht werden, überprüfen Sie zuerst die Ergebnisse einer Auswahlabfrage, die dieselben Kriterien verwendet, und führen Sie anschließend die Löschabfrage durch.
·    Erstellen Sie regelmäßig Sicherungskopien Ihrer Daten. Wenn Sie die falschen Datensätze gelöscht haben, können Sie diese aus den Sicherungskopien wiederherstellen.

Weitere Beispiele:
Wenn Sie in Microsoft Access in der SQL-Ansicht im Abfragefenster arbeiten, werden Feldnamen (Feld1, Feld2) als Spaltenüberschriften in der Datenblattansicht verwendet.

Dasselbe gilt für die Ausgänge des SQLEntry Moduls, auch hier werden die Namen für die Ausgänge anhand der Spaltennamen erzeugt (siehe CREATE TABLE).

Verwenden Sie das reservierte Wort AS, um eine andere Spaltenüberschrift bzw. einen anderen Namen für einen Ausgang anzuzeigen.

Das folgende Beispiel verwendet den Titel "Geburtstag" als Überschrift für die Spalte des Ergebnisdatenblatts bzw. als Namen für den Ausgang welcher das Geburtsdatum ausgibt:

SELECT [Geburtsdatum] AS Geburtstag FROM Personal;

Wenn Sie Aggregatfunktionen oder Abfragen verwenden, die mehrdeutige oder mehrfach auftretende Feldnamen zurückgeben, müssen Sie die Klausel AS auch verwenden, um einen alternativen Namen für das Feld anzugeben. Das folgende Beispiel erstellt die Spaltenüberschrift "Personalstärke" in der Datenblattansicht:

SELECT COUNT([Personal-Nr]) AS [Personalstärke] FROM Personal;

Beschreibung der CREATE INDEX Anweisung
Legt einen neuen Index für eine bereits vorhandene Tabelle an.

CREATE [UNIQUE] INDEX Index
ON Tabelle (Feld [ASC|DESC][, Feld [ASC|DESC], ...])
[WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]

Die CREATE INDEX-Anweisung besteht aus folgenden Teilen:

Index: Der Name des Indexes, der angelegt werden soll.
Tabelle: Der Name der existierenden Tabelle, die den Index enthalten wird.
Feld:
Der Name eines oder mehrerer zu indizierender Felder. Sie erstellen einen Einzelfeldindex, indem Sie den Feldnamen in Klammern hinter dem jeweiligen Tabellennamen angeben. Sie erstellen einen Mehrfelderindex, indem Sie den Namen aller Felder angeben, die in die Indexdefinition aufgenommen werden sollen. Sie können Indizes für eine absteigende Sortierung erstellen, indem Sie das reservierte Word DESC (für descending = absteigend) verwenden. Andernfalls legen Indizes eine aufsteigende Sortierreihenfolge fest.

Bemerkungen:
Mit dem reservierten Wort UNIQUE können Sie verhindern, daß zu einem Index gehörende Felder in unterschiedlichen Datensätzen gleiche Werte enthalten.

Im optionalen WITH-Abschnitt können Sie Regeln zur Überprüfung von Daten vorschreiben:
·    Mit der Option DISALLOW NULL können Sie verhindern, daß neu angelegte Datensätze in den Feldern, die zum Index gehören, Null-Einträge enthalten.
·    Mit der Option IGNORE NULL können Sie dafür sorgen, daß Datensätze, die in den indizierten Feldern Null-Werte enthalten, in den Index aufgenommen werden.
·    Mit dem reservierten Wort PRIMARY können Sie die Felder, die den Index definieren sollen, als Primärschlüssel festlegen. Da dies impliziert, daß der Schlüssel eindeutig ist, können Sie auf die Angabe des reservierten Worts UNIQUE verzichten.

Sie können mit CREATE INDEX auch einen Pseudoindex für eine verknüpfte Tabelle aus einer ODBC-Datenquelle (z.B. von SQL Server) erstellen, die noch keinen Index hat. Sie benötigen keine Berechtigungen oder keinen Zugriff auf den Remote Server, um einen Pseudoindex zu erstellen. Der Remote-Datenbank ist der Pseudoindex nicht bekannt, und sie wird dadurch auch nicht verändert. Sowohl für verknüpfte als auch für systemeigene Tabellen verwenden Sie dieselbe Syntax. Dies ist besonders hilfreich, wenn Sie einen Index für eine Tabelle erstellen, die normalerweise aufgrund eines fehlenden Indexes schreibgeschützt wäre.

Sie können mit der ALTER TABLE-Anweisung einer Tabelle auch einen Einzelfeldindex oder einen Mehrfelderindex hinzufügen, und mit der ALTER TABLE-Anweisung oder der DROP-Anweisung können Sie einen Index entfernen, der mit ALTER TABLE oder CREATE INDEX erstellt wurde.

Anmerkung Verwenden Sie das reservierte Wort PRIMARY nicht, wenn Sie einen neuen Index für eine Tabelle erstellen, die bereits einen Primärschlüssel hat, da dies einen Fehler verursachen würde.

Erstellt einen Index, der aus den Feldern "Telefon privat" und "Durchwahl Büro" in der Tabelle "Personal" besteht.

Beispiele:

CREATE INDEX NewIndex ON Personal (Telefon privat, Durchwahl Büro);
CREATE UNIQUE INDEX Kunden-Nr ON Kunden (Kunden-Code) WITH DISALLOW NULL;

Erstellt einen Index für eine eventuell eingebundene ODBC-Tabelle. Der neue Index ist der Tabelle der Netzdatenbank weder bekannt, noch wirkt er sich auf die Netzdatenbank aus.

CREATE UNIQUE INDEX Bestell-Nr ON Bestelldetails (Bestell-Nr);

Beschreibung der CREATE TABLE Anweisung
Erstellt eine neue Tabelle.

CREATE TABLE Tabelle (Feld1 Typ [(Größe)] [NOT NULL]
[Index1] [, Feld2 Typ [(Größe)] [NOT NULL] [Index2] [, ...]]
[, CONSTRAINT Mehrfelderindex [, ...]])

Die CREATE TABLE-Anweisung besteht aus folgenden Teilen:

Tabelle: Der Name der Tabelle, die angelegt werden soll.
Feld1, Feld2:
Die Namen der Felder, die in der neuen Tabelle erstellt werden sollen. Sie müssen mindestens ein Feld erstellen.
Typ: Der Datentyp für Feld in der neuen Tabelle.
Größe: Die Feldgröße in Anzahl an Zeichen (nur bei Feldern des Datentyps Text und Binary).
Index1, Index2:
Ein CONSTRAINT-Abschnitt, der einen Einzelfeldindex definiert. In der Beschreibung zum CONSTRAINT-Abschnitt finden Sie weitere Informationen zum Erstellen dieses Indexes.

Mehrfelderindex:
Ein CONSTRAINT-Abschnitt, der einen Mehrfelderindex definiert. In der Beschreibung zum CONSTRAINT-Abschnitt finden Sie weitere Informationen zum Erstellen dieses Indexes.

Definieren Sie mit der CREATE TABLE-Anweisung eine neue Tabelle und deren Felder sowie die Feld-Einschränkungen. Sofern NOT NULL für ein Feld festgelegt wurde, sind gültige Daten für die Datensätze in diesem Feld erforderlich.

Ein CONSTRAINT-Abschnitt legt Einschränkungen für ein Feld fest und zum Einrichten des Primärschlüssels verwendet werden. Sie können auch die CREATE INDEX-Anweisung verwenden, um einen Primärschlüssel oder zusätzliche Indizes für existierende Tabellen zu erstellen.

Sie können NOT NULL für ein einzelnes Feld oder innerhalb eines benannten CONSTRAINT-Abschnitts, der sich entweder auf ein einzelnes Feld oder auf mehrere CONSTRAINT-Felder bezieht, verwenden. Sie können die CONSTRAINT-Einschränkung aber nur einmal für ein Feld verwenden, da ansonsten ein Laufzeitfehler auftritt.

Beispiele:
Erstellt eine neue Tabelle mit dem Namen "Eine Tabelle", die zwei Felder des Typs "Text" enthält.

CREATE TABLE EineTabelle (Vorname TEXT, Nachname TEXT);

Erstellt eine neue Tabelle mit dem Namen "Tabelle1", die zwei Felder des Typs "Text" enthält, ein Feld des Typs "Datetime" (Datum/Zeit) sowie einen eindeutigen Index, der aus diesen drei Feldern besteht.

CREATE TABLE Tabelle1 (Vorname TEXT, Nachname TEXT, Geburtsdatum DATETIME, CONSTRAINT Tabelle1Einschränk UNIQUE (Vorname, Nachname, Geburtsdatum));

Erstellt eine neue Tabelle mit zwei Feldern des Typs "Text" und einem Feld des Typs "Integer". Das Feld "SozVNr" ist der Primärschlüssel.

CREATE TABLE NeueTabelle (Vorname TEXT, Nachname TEXT, SozVNr INTEGER CONSTRAINT MyFieldConstraint PRIMARY KEY);

Beispiel für ANSI SQL (z.B.: Orakle) Tabelle:

CREATE TABLE Block (
Block-Nr TEXT REFERENCES Tabelle1
ON DELETE NO ACTION ON UPDATE CASCADE,
Feld1 INTEGER    NOT NULL,
Feld2 SINGLE,
Feld3 CHARACTER(50),
Feld4 BINARY,
Feld5 BIT,
Feld6 BYTE,
Feld7 DOUBLE,
Feld8 SHORT,
Feld9 TEXT,
Feld10 INTEGER,
PRIMARY KEY (Feld1, Feld2, Feld3),
FOREIGN KEY (FELD5, Feld6, Feld7) REFERENCES AndereTabelle
ON DELETE CASCADE ON UPDATE CASCADE);

Beispiel für Microsoft Jet Tabelle (z.B.: Access):

CREATE TABLE Block
( Schlüssel TEXT,
Info TEXT,
BlockNr INTEGER
CONSTRAINT MyPrime PRIMARY KEY);


Noch ein Beispiel:

CREATE TABLE Translations
(TransNr INTEGER CONSTRAINT MyPrime PRIMARY KEY,
Deutsch TEXT,
English TEXT,
French TEXT);

Beschreibung der ALTER TABLE Anweisung
Ändert den Entwurf einer Tabelle, nachdem diese mit der CREATE TABLE-Anweisung erstellt wurde.

ALTER TABLE Tabelle {ADD {COLUMN Feld Typ[(Größe)]
NOT NULL] [CONSTRAINT Index] |CONSTRAINT Mehrfelderindex} |
DROP {COLUMN Feld | CONSTRAINT Indexname } }

Die ALTER TABLE-Anweisung besteht aus folgenden Teilen:

Tabelle: Der Name der Tabelle, die geändert werden soll.
Feld: Der Name des Feldes, das zur Tabelle hinzugefügt oder daraus gelöscht werden soll.
Typ: Der Datentyp von Feld.
Größe: Die Feldgröße in Anzahl an Zeichen (nur bei Feldern des Datentyps Text und Binary).
Index:
Der Index für Feld. In der Beschreibung zum CONSTRAINT-Abschnitt finden Sie weitere Informationen zur Konstruktion dieses Indexes.

Mehrfelderindex:
Die Definition eines Mehrfelderindexes, der zu Tabelle hinzugefügt werden soll. In der Beschreibung zum CONSTRAINT-Abschnitt finden Sie weitere Informationen zur Konstruktion dieses Abschnitts.

Indexname: Der Name des Mehrfelderindexes, der entfernt werden soll.

Mit der ALTER TABLE-Anweisung können Sie eine bereits vorhandene Tabelle auf mehrere Arten ändern:

·    Sie können ADD COLUMN verwenden, um ein neues Feld zur Tabelle hinzuzufügen. Sie geben den Feldnamen, den Datentyp und (für Text- und Binärfelder) optional die Größe an. Beispielsweise fügt die folgende Anweisung ein Textfeld der Tabelle "Personal" hinzu, das 25 Zeichen lang ist und den Namen "Anmerkungen" hat:

ALTER TABLE Personal ADD COLUMN Anmerkungen TEXT(25)

Sie können auf Basis dieses Feldes auch einen Index definieren. Weitere Informationen zu Einzelfeldindizes finden Sie in der Beschreibung zum CONSTRAINT-Abschnitt.

Wenn Sie NOT NULL für ein Feld angeben, müssen die neuen Datensätze gültige Daten in dem Feld besitzen.

·    Verwenden Sie die ADD CONSTRAINT, um einen Mehrfelderindex hinzuzufügen. Weitere Informationen zu Mehrfelderindizes finden Sie in der Beschreibung zum CONSTRAINT-Abschnitt.
·    Verwenden Sie DROP COLUMN, um ein Feld zu löschen. Sie müssen lediglich den Namen des Feldes angeben.
·    Verwenden Sie die DROP CONSTRAINT, um einen Mehrfelderindex zu löschen. Geben Sie dazu den Namen des Indizes hinter dem reservierten Wort CONSTRAINT an.
·    Sie können immer nur jeweils ein Feld bzw. einen Index hinzufügen oder löschen.
·    Mit der CREATE INDEX-Anweisung können Sie sowohl einen einfachen als auch einen Mehrfelderindex zu einer Tabelle hinzufügen, und mit der ALTER TABLE- oder DROP-Anweisung können Sie Indizes löschen, die mit ALTER TABLE oder CREATE INDEX erstellt wurden.
·    Sie können NOT NULL für ein einzelnes Feld oder innerhalb eines benannten CONSTRAINT-Abschnitts, der entweder auf ein einzelnes Feld oder mehrere CONSTRAINT-Felder angewendet wird, verwenden. Sie können die NOT NULL-Einschränkung aber nur einmal auf ein Feld anwenden, da ansonsten ein Laufzeitfehler auftritt.

Beschreibung der DROP Anweisung
Löscht eine bestehende Tabelle aus einer Datenbank oder einen bestehenden Index aus einer Tabelle.

DROP {TABLE Tabelle | INDEX Index ON Tabelle}

Die DROP-Anweisung besteht aus folgenden Teilen:

Tabelle:
Der Name der Tabelle, die gelöscht werden soll, oder der Tabelle, aus der ein Index gelöscht werden soll.
Index:
Der Name des Indexes, der aus Tabelle gelöscht werden soll.

Sie müssen die Tabelle schließen, bevor Sie diese löschen oder einen Index daraus entfernen können.

Sie können einen Index auch mit der ALTER TABLE-Anweisung aus einer Tabelle löschen.

Sie können mit CREATE TABLE eine Tabelle und mit CREATE INDEX oder ALTER TABLE einen Index erstellen. Zum Ändern einer Tabelle verwenden Sie ALTER TABLE.

Beispiel:
Um das folgende Beispiel durchzuführen, erstellen Sie für die Tabelle Personal in der Datenbank Nordwind zuerst einen Index mit dem Namen Index1 und dann eine neue Tabelle mit dem Namen Trainees. Erstellen Sie in der Beispieldatenbank Nordwind eine neue Abfrage und schließen Sie das Dialogfeld Tabelle anzeigen, ohne eine Tabelle oder Abfrage anzugeben. Wechseln Sie zur SQL-Ansicht, fügen Sie das gewünschte Beispiel in das SQL-Fenster ein, und führen Sie die Abfrage aus.

Warnung: Diese Beispiele ändern die Datenbank. Erstellen Sie daher bei Bedarf zuerst eine Sicherungskopie der Datenbank.

Das folgende Beispiel löscht den Index Index1 aus der Tabelle Personal.

DROP INDEX Index1 ON Personal;

Das nächste Beispiel löscht die Tabelle Trainees aus der Datenbank.

DROP TABLE Trainees;

Das folgende Beispiel geht von der Existenz eines hypothetischen Indexes "Index1" und der hypothetischen Tabelle "Trainees" aus. Beachten Sie, daß es diese Objekte in der Nordwind-Datenbank nicht tatsächlich gibt.

Löscht "Index1" aus der Tabelle "Personal".

DROP INDEX Index1 ON Personal;

Löscht die Tabelle "Trainees" aus der Datenbank.

DROP TABLE [Trainees];

Beschreibung des CONSTRAINT Abschnitts

Eine Einschränkung (engl.: constraint) ist einem Index ähnlich, kann aber auch verwendet werden, um eine Beziehung mit einer anderen Tabelle aufzubauen.

Sie können den CONSTRAINT-Abschnitt in ALTER TABLE- und CREATE TABLE-Anweisungen verwenden, um Einschränkungen zu erstellen oder zu löschen. Es gibt zwei Typen von CONSTRAINT-Abschnitten: einen Typ, um eine Einschränkung für ein einzelnes Feld zu definieren, und einen Typ, um eine Einschränkung für mehrere Feldern zu definieren.

Einzelfeldeinschränkung:

CONSTRAINT Name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES FremdTabelle [(FremdFeld1, FremdFeld2)]}

Mehrfeldereinschränkung:

CONSTRAINT Name
{PRIMARY KEY (Primär1[,Primär2[, ...]]) |
UNIQUE (Eindeutig1[,Eindeutig2[, ...]]) |
NOT NULL (Nichtnull1[, Nichtnull2 [, ...]]) |
FOREIGN KEY (Ref1[,Ref2[, ...]])
REFERENCES FremdTabelle [(FremdFeld1 [, FremdFeld2 [, ...]])]}

Der CONSTRAINT-Abschnitt besteht aus folgenden Teilen:

Name: Der Name der zu definierenden Einschränkung.
Primär1, Primär2:
Die Namen der Felder, die als Primärschlüssel definiert werden sollen.
Eindeutig1, Eindeutig2:
Die Namen der Felder, die als eindeutiger Schlüssel definiert werden sollen.
Nichtnull1, Nichtnull2:
Der Name der Felder, die auf Nicht-Null-Werte beschränkt sind.
Ref1, Ref2: Der Name eines oder mehrerer Fremdschlüsselfelder, die auf Felder in einer Fremdtabelle verweisen.
FremdTabelle: Der Name der Fremdtabelle, die das oder die durch FremdFeld angegebenen Felder enthält.
FremdFeld1, FremdFeld2:
Die Namen des Feldes oder der Felder in FremdTabelle, die durch Ref1, Ref2 usw. angegeben sind. Sie können auf Angabe dieses Abschnittsverzichten, wenn das referenzierte Feld der Primärschlüssel von FremdTabelle ist.

Die Syntax für einen Einzelfeldindex verwenden Sie innerhalb des Felddefinitionsabschnitts einer ALTER TABLE- oder CREATE TABLE-Anweisung unmittelbar hinter der Angabe des Felddatentyps.

Die Syntax für einen Mehrfelderindex verwenden Sie immer dann, wenn Sie das reservierte Wort CONSTRAINT außerhalb eines Felddefinitionsabschnitts in einer ALTER TABLE- oder CREATE TABLE-Anweisung verwenden.

Mit CONSTRAINT können Sie ein Feld angeben, das eine der folgenden Arten von Einschränkungen definiert:

·    Sie können das reservierte Wort UNIQUE verwenden, um ein Feld als eindeutigen Schlüssel festzulegen. Das heißt, daß kein in diesem Feld stehender Wert innerhalb der Datensätze der jeweiligen Tabelle mehrfach vorkommen darf. Sie können jedes Feld bzw. jede Feldliste auf eindeutige Werte beschränken. Ist ein Mehrfelderindex als eindeutiger Schlüssel festgelegt, so müssen die kombinierten Werte aller Indexfelder selbst dann eindeutig sein, wenn zwei oder mehr Datensätze in nur einem dieser Felder denselben Wert enthalten.

·    Sie können die reservierten Wörter PRIMARY KEY verwenden, um ein Feld oder mehrere Felder einer Tabelle als Primärschlüssel festzulegen. Alle zum Primärschlüssel gehörenden Werte müssen eindeutig und ungleich Null sein, und eine Tabelle kann immer nur einen Primärschlüssel haben.

Anmerkung:
Legen Sie für eine Tabelle, die bereits einen Primärschlüssel besitzt, keine PRIMARY KEY-Einschränkung fest, da dies einen Fehler verursacht.

·    Sie können die reservierten Wörter FOREIGN KEY verwenden, um ein Feld als Fremdschlüssel festzulegen. Besteht der Primärschlüssel der Fremdtabelle aus mehreren Feldern, so müssen Sie eine Mehrfelderindexdefinition verwenden, in der die referenzierenden Felder, der Name der Fremdtabelle sowie die Namen der referenzierten Felder der Fremdtabelle aufgeführt sind. Letztere müssen dabei in derselben Reihenfolge angegeben sein, in der die referenzierenden Felder angegeben sind. Bilden die referenzierten Felder den Primärschlüssel der Fremdtabelle, so müssen Sie die referenzierten Felder nicht angeben, da das Datenbankmodul standardmäßig annimmt, daß der Primärschlüssel der Fremdtabelle mit den referenzierten Feldern übereinstimmt.

Beschreibung der AVG Funktion
Berechnet den arithmetischen Mittelwert einer Menge von Werten in einem bestimmten Feld einer Abfrage.

Avg(Ausdr)

Der Platzhalter Ausdr stellt einen Zeichenfolgenausdruck dar, der das Feld mit den numerischen Daten kennzeichnet, deren Durchschnitt gebildet werden soll, oder einen Ausdruck, der mit den Daten in diesem Feld eine Berechnung durchführt. Die Operanden in Ausdr können den Namen eines Tabellenfeldes, einer Konstante oder einer Funktion (d.h. eine integrierte oder benutzerdefinierte Funktion, aber keine der anderen SQL- oder Domänen-Aggregatfunktionen) enthalten.

Bemerkungen:
Der mit AVG berechnete Mittelwert ist das arithmetische Mittel (die Summe der Werte dividiert durch die Anzahl der Werte). Sie können AVG z.B. zum Berechnen der durchschnittlichen Frachtkosten verwenden.

Die AVG-Funktion ignoriert bei der Berechnung Felder mit dem Wert Null.

Dieses Beispiel verwendet die Tabelle "Bestellungen" zum Berechnen der durchschnittlichen Frachtkosten für Bestellungen mit Frachtkosten über 100 DM.

SELECT Avg(Frachtkosten) AS [Durchschnittliche Frachtkosten] FROM Bestellungen WHERE Frachtkosten > 100;

Beschreibung der COUNT Funktion
Gibt die ANzahl der duch eine SELECT query ausgewählten Zeilen zurück.

Count(Ausdr)

Der Platzhalter Ausdr stellt einen Zeichenfolgenausdruck dar, der das Feld kennzeichnet, das gezählt werden soll
Count (*) gibt die Anzahl der Zeilen einer Tabelle zurück.

Beschreibung der First, Last Funktionen
Geben den Wert eines Feldes aus dem ersten oder letzten Datensatz einer Abfrage zurück.

First(Ausdr)
Last(Ausdr)

Der Platzhalter Ausdr stellt einen Zeichenfolgenausdruck dar, der das Feld mit den zu verwendenden Daten kennzeichnet, oder einen Ausdruck, der Berechnungen mit den Daten in diesem Feld durchführt. Die Operanden in Ausdr können den Namen eines Tabellenfeldes, einer Konstanten oder einer Funktion enthalten (entweder eine integrierte oder eine benutzerdefinierte Funktion, aber keine der anderen SQL- oder Domänen-Aggregatfunktionen).

In diesem Beispiel wird die Tabelle "Personal" verwendet, um die Werte aus dem Feld "Nachname" für den ersten und letzten Datensatz zurückzugeben, die von der Tabelle zurückgegeben wurden.

SELECT First(Nachname), Last(Nachname) FROM Personal;

In den folgenden beiden Beispielen wird die Verwendung der Funktionen First und Last mit der Verwendung der Funktionen Min und Max verglichen, wenn es darum geht, das frühste bzw. das späteste Geburtsdatum von Angestellten zu finden.

SELECT First(Geburtsdatum), Last(Geburtsdatum) FROM Personal;
SELECT Min(Geburtsdatum), Max(Geburtsdatum) FROM Personal;

Beschreibung der Min, Max Funktionen
Geben den kleinsten oder größten Wert aus einer Reihe von Werten zurück, die in einem bestimmten Feld einer Abfrage enthalten sind.

Min(Ausdr)
Max(Ausdr)

Die Funktionen Min und Max verwenden den folgenden Platzhalter:
Der Platzhalter Ausdr stellt einen Zeichenfolgenausdruck dar, der das Feld mit den Daten kennzeichnet, die ausgewertet werden sollen, oder einen Ausdruck, der eine Berechnung mit den Daten in diesem Feld durchführt. Die Operanden in Ausdr können den Namen eines Tabellenfeldes, einer Konstanten oder einer Funktion enthalten (entweder eine integrierte oder eine benutzerdefinierte Funktion, aber keine der anderen SQL- oder Domänen-Aggregatfunktionen).

Bemerkungen:
Sie können Min und Max verwenden, um den kleinsten und größten Wert in einem Feld basierend auf der angegebenen Zusammenfassung oder Gruppierung zu bestimmen. Sie können diese Funktionen z.B. verwenden, um die niedrigsten und die höchsten Frachtkosten zurückzugeben. Wenn keine Zusammenfassung angegeben wurde, wird die gesamte Tabelle verwendet.

In diesem Beispiel wird die Tabelle "Bestellungen" verwendet, um die niedrigsten und die höchsten Frachtkosten für Bestellungen mit dem Ziel Großbritannien zurückzugeben.

SELECT Min(Frachtkosten) AS [Min Frachtkosten], Max(Frachtkosten) AS [Max Frachtkosten] FROM Bestellungen WHERE Bestimmungsland = 'GB';

Beschreibung der StDev, StDevP Funktionen
Geben Schätzungen für die Standardabweichung einer Grundgesamtheit oder einer Stichprobe aus einer Grundgesamtheit zurück. Die Grundgesamtheit oder Stichprobe wird durch eine Folge von Werten dargestellt, die in einem bestimmten Feld einer Abfrage enthalten sind.

StDev(Ausdr)
StDevP(Ausdr)

Der Platzhalter Ausdr stellt einen Zeichenfolgenausdruck dar, der das Feld kennzeichnet, das die numerischen Daten für die Auswertung enthält, oder einen Ausdruck, der eine Berechnung mit den Daten in diesem Feld durchführt. Die Operanden in Ausdr können den Namen eines Tabellenfeldes, einer Konstanten oder einer Funktion enthalten (entweder eine integrierte oder eine benutzerdefinierte Funktion, aber keine der anderen SQL- oder Domänen-Aggregatfunktionen).

Bemerkungen:
Die StDevP-Funktion wertet eine Grundgesamtheit aus, die StDev-Funktion eine Stichprobe aus einer Grundgesamtheit.

Wenn die zugrundeliegende Abfrage weniger als zwei Datensätze enthält (oder für StDevP keine Datensätze), liefern diese Funktionen den Wert Null (wodurch angegeben wird, daß eine Standardabweichung nicht berechnet werden kann).

In diesem Beispiel wird die Tabelle "Bestellungen" verwendet, um die Standardabweichung der Frachtkosten für Bestellungen mit dem Ziel Großbritannien zu schätzen.

SELECT StDev(Frachtkosten) AS [Std Frachtkosten] FROM Bestellungen WHERE ShipCountry = 'UK';
SELECT StDevP(Freight) AS [StdAbwG Frachtkosten] FROM Bestellungen WHERE Bestimmungsland = 'Großbritannien';

Beschreibung der Sum Funktion
Gibt die Summe einer Reihe von Werten zurück, die in einem bestimmten Feld einer Abfrage enthalten sind.

Sum(Ausdr)

Der Platzhalter Ausdr stellt einen Zeichenfolgenausdruck dar, der das Feld kennzeichnet, das die zu summierenden numerischen Daten enthält, oder einen Ausdruck, der eine Berechnung mit den Daten in diesem Feld durchführt. Die Operanden in Ausdr können den Namen eines Tabellenfeldes, einer Konstanten oder einer Funktion enthalten (entweder eine integrierte oder eine benutzerdefinierte Funktion, aber keine der anderen SQL- oder Domänen-Aggregatfunktionen).

Bemerkungen:
Die Sum-Funktion summiert die Werte in einem Feld auf. Sie können z.B. Sum verwenden, um die gesamten Frachtkosten zu ermitteln.

Die Sum-Funktion ignoriert Datensätze, die Null-Felder enthalten. Im folgenden Beispiel wird gezeigt, wie Sie das Produkt aus den Summen in den Feldern "Einzelpreis" und "Anzahl" berechnen können:

SELECT
Sum(Einzelpreis * Anzahl)
AS [Gesamteinnahme] FROM [Bestelldetails];

In diesem Beispiel wird die Tabelle "Bestellungen" verwendet, um die Gesamtumsätze für Bestellungen mit dem Ziel Großbritannien zu berechnen.

SELECT Sum(Einzelpreis*Anzahl) AS [GB Gesamtverkäufe] FROM Bestellungen INNER JOIN [Bestelldetails] ON Bestellungen.Bestell-Nr = [Bestelldetails].Bestell-Nr WHERE (Bestimmungsland = 'GB');

Beschreibung der Var, VarP Funktionen
Geben Schätzungen der Varianz einer Grundgesamtheit oder einer Stichprobe aus einer Grundgesamtheit zurück. Die Grundgesamtheit oder Stichprobe wird durch eine Folge von Werten dargestellt, die in einem bestimmten Feld einer Abfrage enthalten sind.

Var(Ausdr)
VarP(Ausdr)

Die VarP-Funktion wertet eine Grundgesamtheit aus, die Var-Funktion eine Stichprobe aus einer Grundgesamtheit.

Der Platzhalter Ausdr stellt einen Zeichenfolgenausdruck dar, der das Feld kennzeichnet, das die numerischen Daten für die Auswertung enthält, oder einen Ausdruck, der eine Berechnung mit den Daten in diesem Feld durchführt. Die Operanden in Ausdr können den Namen eines Tabellenfeldes, einer Konstanten oder einer Funktion enthalten (entweder eine integrierte oder eine benutzerdefinierte Funktion, aber keine der anderen SQL Aggregatfunktionen).

Bemerkungen:
Wenn die zugrundeliegende Abfrage weniger als zwei Datensätze enthält, geben die Funktionen Var und VarP einen Null-Wert zurück (der anzeigt, daß keine Varianz berechnet werden kann).

Sie können die Funktionen Var und VarP in einem Abfrageausdruck oder in einer SQL-Anweisung verwenden.

In diesem Beispiel wird die Tabelle "Bestellungen" verwendet, um die Varianz der Frachtkosten für Bestellungen mit dem Ziel Großbritannien zu schätzen.

SELECT Var(Freight) AS [GB Frachtkosten Varianz] FROM Bestellungen WHERE Bestimmungsland = 'GB';
SELECT VarP(Freight) AS [GB Frachtkosten Varianz G] FROM Bestellungen WHERE Bestimmungsland = 'GB';

Beschreibung des Like Operators
Wird zum Vergleichen eines Zeichenfolgenausdrucks mit einem Suchmuster in einem SQL-Ausdruck verwendet.
Ausdruck Like "Muster"
Die Syntax für den Like-Operator besteht aus folgenden Teilen:
Ausdruck: SQL-Ausdruck, der in einer WHERE-Klausel verwendet wird.
Muster: Zeichenfolge oder Zeichenfolgenkonstante, mit der Ausdruck verglichen wird.
Von ANSI SQL verwendete Platzhalter sind: "%" für Zeichenkette und "_" für einzelnes Zeichen

Sie können den Like-Operator verwenden, um Werte in einem Feld zu finden, die mit dem von Ihnen angegebenen Muster übereinstimmen. Für Muster können Sie den vollständigen Wert (z.B. Like "Schmidt") angeben oder Platzhalterzeichen (z.B. die Zeichen, die vom Betriebssystem erkannt werden), um einen Bereich von Werten zu finden (z.B. Like "Sch%").

In einem Ausdruck können Sie den Like-Operator verwenden, um einen Feldwert mit einem Zeichenfolgenausdruck zu vergleichen. Wenn Sie z.B. Like "C%" in einer SQL-Abfrage eingeben, gibt die Abfrage alle Feldwerte zurück, die mit dem Buchstaben C beginnen. In einer Parameterabfrage können Sie den Benutzer zur Eingabe eines Suchmusters auffordern.

Im folgenden Beispiel werden Daten zurückgegeben, die mit dem Buchstaben P beginnen und anschließend genau drei Zeichen enthalten:

Like "P___"

Dieses Beispiel liefert eine Liste von Angestellten, deren Namen mit dem Buchstaben A beginnen.

SELECT * FROM Personal WHERE Nachname Like "A%"

Beschreibung des Between Operators
Bestimmt, ob der Wert eines Ausdrucks innerhalb eines bestimmten Bereichs von Werten liegt. Dieser Operator kann in SQL-Anweisungen verwendet werden.

Ausdr [Not] Between Wert1 And Wert2

Die Syntax des Between...And-Operators besteht aus folgenden Teilen:

Ausdr: Ausdruck, der das Feld kennzeichnet, das die auszuwertenden Daten enthält.
Wert1, Wert2: Ausdrücke, gegen die Sie Ausdr auswerten möchten.

Bemerkungen:
Wenn der Wert von Ausdr im Bereich von Wert1 bis Wert2 (einschließlich) liegt, liefert der Between...And-Operator den Wert True, andernfalls liefert er False. Sie können den logischen Operator Not angeben, um die umgekehrte Bedingung auszuwerten (d.h. ob Ausdr außerhalb des Bereichs liegt, der durch Wert1 und Wert2 definiert wird).
Sie können mit Between...And feststellen, ob der Wert eines Feldes innerhalb eines bestimmten numerischen Bereichs liegt.

SQL Datentypen
Die SQL-Datentypen des Microsoft Jet-Datenbankmoduls (z.B. ACCESS, EXCEL) umfassen 13 Hauptdatentypen, die vom Microsoft Jet-Datenbankmodul definiert werden, sowie mehrere zulässige Synonyme, die für diese Datentypen erkannt werden.
Die folgende Tabelle zeigt eine Liste der primären Datentypen. Die Synonyme sind unter Reservierte Wörter des Microsoft Jet-Datenbankmoduls aufgelistet.
Datentyp    Speicherbedarf Beschreibung
BINARY    1 Byte pro Zeichen Beliebige Arten von Daten können in einem Feld diesen Typs gespeichert werden. Es wird keine Übersetzung der Daten (z.B. nach Text) vorgenommen. Die Art, wie Daten in ein BINARY-Feld eingegeben werden, bestimmt die Art der Ausgabe.
BIT    1 Byte Ja/Nein-Werte (boolesche Werte) sowie Felder, die einen von zwei möglichen Werten enthalten.
BYTE    1 Byte Eine Ganzzahl von 0 bis 255.
COUNTER    4 Bytes Eine Zahl, die vom Jet-Datenbankmodul immer dann automatisch hochgezählt wird, wenn zu einer Tabelle ein neuer Datensatz hinzugefügt wird. Im Jet-Datenbankmodul wird der Datentyp Long für diesen Wert verwendet.
CURRENCY    8 Bytes Eine skalierte Ganzzahl von -922.337.203.685.477,5808 bis 922.337.203.685.477,5807.
DATETIME
(Siehe DOUBLE)
8 Bytes Eine Datums- oder Zeitangabe ab dem Jahr 100 bis zum Jahr 9999.
GUID    128 Bits Eine eindeutige Kennummer, die mit Fernprozeduraufrufen (RPC = remote procedure calls) verwendet wird. Wird nicht unterstützt.
SINGLE    4 Bytes Eine Gleitkommazahl einfacher Genauigkeit, die die folgenden Werte annehmen kann: -33,402823E38 bis -1,401298E-45 für negative Werte, 1,401298E-45 bis 3,402823E38 für positive Werte und 0.
DOUBLE    8 Bytes Eine Gleitkommazahl doppelter Genauigkeit, die die folgenden Werte annehmen kann: -1.79769313486232E308 bis -4.94065645841247E-324 für negative Werte, 4,94065645841247E-324 bis 1,79769313486232E308 für positive Werte und 0.
SHORT    2 Bytes    Eine kurze Ganzzahl von 32,768 bis 32,767.
LONG    4 Bytes    Eine lange Ganzzahl von 2,147,483,648 bis 2,147,483,647.
LONGTEXT    1 Byte pro Zeichen Von 0 bis maximal 1,2 Gigabytes.
LONGBINARY Nach Bedarf Von 0 bis maximal 1,2 Gigabytes. Wird für OLE-Objekte verwendet. LONGTEXT und LONGBINARY werden durch das SQLEntry Module noch nicht unterstützt.
TEXT    1 Byte pro Zeichen   Von 0 bis 255 Zeichen.

Anmerkung Sie können in SQL-Anweisungen auch das reservierte Wort VALUE verwenden.