 | 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)
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.
|
|