8.4 SQL-Befehle 

In diesem Abschnitt werden die wichtigsten SQL-Befehle behandelt. Sie werden anhand von einigen typischen Beispielen mit ihren Auswirkungen erläutert.
8.4.1 Auswahl mit Select 

Die Anweisung select dient zur Auswahl von Datensätzen, damit diese angezeigt werden können. Sie wird mithilfe von ExecuteReader() ausgeführt. Ein erstes Beispiel wurde mit select * from personen bereits gezeigt. Weitere Beispiele sind:
select name, vorname from personen
Select
Es werden nur die Werte der Felder name und vorname für alle Datensätze angefordert. Das Abfrage-Ergebnis ist kleiner, die Werte der anderen Felder sind nicht in ihm enthalten und können auch nicht in der Schleife ausgegeben werden:
Abbildung 8.22 Nur Felder name und vorname
Beispiel:
select * from personen where gehalt > 3600
where
Innerhalb der where-Klausel können Bedingungen angegeben werden, ähnlich wie bei einer If-Verzweigung. Das Ergebnis beinhaltet nur die Datensätze, die der Bedingung genügen – in diesem Fall die Datensätze, bei denen der Wert im Feld gehalt größer als 3600 ist.
Abbildung 8.23 Nur falls Gehalt > 3600
Beispiel:
select * from personen where name = 'Schmitz'
Hochkommata
Wird mit dem Wert einer Zeichenkette oder eines Datums verglichen, so muss dieser Wert in einfache Hochkommata gesetzt werden (nicht zu verwechseln mit dem doppelten Hochkomma für Zeichenketten in Visual Basic oder dem schrägen Accent!).
Abbildung 8.24 Nur falls Name = 'Schmitz’
Operatoren
Vergleichsoperatoren
Bei einer Bedingung können Vergleichsoperatoren verwendet werden:
| Operator | Erläuterung |
|
= |
gleich |
|
<> |
ungleich |
|
> |
größer als |
|
>= |
größer als oder gleich |
|
< |
kleiner als |
|
<= |
kleiner als oder gleich |
not, and, or
Über logische Operatoren können mehrere Bedingungen miteinander verbunden werden:
| Operator | Erläuterung |
|
not |
Der Wahrheitswert einer Bedingung wird umgekehrt |
|
and |
Beide Bedingungen müssen zutreffen |
|
or |
Nur eine der Bedingungen muss zutreffen |
Mit diesen Operatoren kann man z. B. folgende Abfrage formulieren:
select * from personen where gehalt >= 3600 and gehalt <= 3650
Das Ergebnis beinhaltet nur die Datensätze, bei denen der Wert im Feld gehalt zwischen 3600 und 3650 liegt, einschließlich der Ober- und Untergrenze.
Abbildung 8.25 Nur falls Gehalt von 3600 bis 3650
Operator Like
Like
Der Operator like wird speziell für die Suche nach Zeichenketten mithilfe von Platzhaltern verwendet. Der Platzhalter % (Prozentzeichen) steht in MS Access für eine beliebige Anzahl von unbekannten Zeichen. Der Platzhalter _ (Unterstrich) steht in MS Access für genau ein unbekanntes Zeichen.
Beispiel:
select * from personen where name like 'M%'
Das Ergebnis beinhaltet nur die Datensätze, bei denen der Wert im Feld name mit M beginnt. Danach dürfen beliebig viele unbekannte Zeichen folgen.
Abbildung 8.26 Nur falls Name mit 'M' beginnt
Beispiel:
select * from personen where name like '%i%'
Viele unbekannte Zeichen
Das Ergebnis beinhaltet nur die Datensätze, die im Wert des Felds name den Buchstaben »i« enthalten. Davor und danach dürfen beliebig viele unbekannte Zeichen folgen.
Abbildung 8.27 Nur falls Name Buchstaben 'i' enthält
Beispiel:
select * from personen where name like 'M__er'
Ein unbekanntes Zeichen
Das Ergebnis beinhaltet nur die Datensätze, deren erster Buchstabe ein »M« ist und bei denen der vierte Buchstabe ein »e« und der fünfte ein »r« ist. Es werden also alle Personen gefunden, die Maier, Meier, Mayer, Meyer usw. heißen.
Abbildung 8.28 Nur falls Name mit 'M' beginnt und mit 'er' endet
Sortierung
Order by
Die Reihenfolge der Datensätze im Abfrage-Ergebnis Ausgabe lässt sich mit order by beeinflussen. Man gibt einen oder mehrere Sortierschlüssel an. Die Sortierung ist normalerweise aufsteigend. Falls man eine absteigende Sortierung wünscht, muss der Zusatz desc verwendet werden.
Beispiel:
select name, gehalt from personen order by gehalt desc
Die Datensätze sind fallend nach Gehalt sortiert. Es werden nur die Werte der Felder name und gehalt angezeigt.
Abbildung 8.29 Sortiert nach Gehalt, fallend
Beispiel:
select * from personen order by name, vorname
Die Datensätze sind nach Name aufsteigend sortiert. Bei gleichem Namen sind sie nach vorname aufsteigend sortiert.
Abbildung 8.30 Nach Name, Vorname sortiert
Suche, Auswahl mit Parametern
Sucht der Benutzer nach einem bestimmten Datensatz, so kann der eingegebene Suchbegriff in die SQL-Anweisung eingebaut werden:
cmd.CommandText = _ "select * from personen where name like '" _ & txtEingabe.text & "'"
Benutzereingabe
Die gesamte Visual Basic-Anweisung, einschließlich des SQL-Befehls, ist hier dargestellt. Es werden alle Datensätze angezeigt, die den Wert im Feld name haben, den der Benutzer im Textfeld txtEingabe eingetragen hat.
Man beachte, dass sich die Zeichenkette, die den SQL-Befehl enthält, aus mehreren Teilen zusammensetzt. Keinesfalls darf man die einfachen Hochkommata vor und nach der Zeichenkette vergessen.
Noch einen Schritt weiter geht man mit dieser Anweisung:
cmd.CommandText = _ "select * from personen where name like '%" _ & txtEingabe.text & "%'"
Es werden alle Datensätze angezeigt, die einen Wert im Feld name haben, in dem die Zeichenkette vorkommt, die der Benutzer im Textfeld txtEingabe eingetragen hat.
Innerhalb des Visual Basic-Programms ist es sinnvoll, sich zumindest während der Entwicklung den zusammengesetzten Befehl anzeigen zu lassen. Erfahrungsgemäß werden gerade beim Einfügen von Suchparametern häufig Fehler gemacht. Die nächste Anweisung sollte also lauten: MsgBox(cmd.CommandText). Diese kann man später wieder auskommentieren.
8.4.2 Ändern mit Update 

ExecuteNonQuery
Die Anweisung update dient zur Änderung von einem oder mehreren Feldinhalten in einem oder mehreren Datensätzen. Sie wird mithilfe von ExecuteNonQuery() ausgeführt und ähnelt in ihrem Aufbau der Anweisung select. Die Auswahlkriterien sollten sorgfältig gewählt werden, da sonst eventuell nicht nur die gewünschten Datensätze verändert werden.
update personen set gehalt = 3800
Diese Anweisung würde bei allen Datensätzen der Tabelle personen den Wert für das Feld gehalt auf den Wert 3800 setzen. Dies wäre sicherlich nicht realistisch.
update personen set gehalt = 3800 where personalnummer = 2297
Diese Anweisung setzt nur bei einem Datensatz den Wert für das Feld gehalt neu. Es empfiehlt sich, in einer solchen Situation die Auswahl über das Feld zu treffen, auf dem ein eindeutiger Index steht, also hier über das Feld personalnummer.
Fehler bei Änderung
Versucht man, Änderungen vorzunehmen, die der Tabellenaufbau nicht zulässt, so wird eine Fehlermeldung zu Visual Basic durchgeleitet. Mögliche Fehler sind:
- Man möchte einen leeren Wert in ein Feld eintragen, das in MS Access so definiert ist, dass kein leerer Wert eingetragen werden darf.
- Man möchte einen Wert in einem Feld, auf dem ein eindeutiger Index steht, eintragen, der bereits in einem anderen Datensatz vorkommt.
- Man möchte ein ungültiges Datum oder eine ungültige Zahl eintragen.
8.4.3 Löschen mit Delete 

Die Anweisung delete dient zum Löschen von einem oder mehreren Datensätzen. Sie wird mithilfe von ExecuteNonQuery() ausgeführt. In ihrem Aufbau ähnelt sie ebenfalls der Anweisung select. Die Auswahlkriterien sollten sorgfältig gewählt werden, da sonst eventuell nicht nur die gewünschten Datensätze gelöscht werden.
delete from personen
Diese Anweisung wird man vermutlich nie einsetzen: Sie löscht alle (!) Datensätze der Tabelle personen.
delete from personen where personalnummer = 2297
Einen Datensatz löschen
Diese Anweisung löscht genau einen Datensatz, da die Auswahl über das Feld gemacht wurde, auf dem ein eindeutiger Index steht, das Feld personalnummer.
8.4.4 Einfügen mit Insert 

Die Anweisung insert wird zum Einfügen neuer Datensätze genutzt. Sie wird mithilfe von ExecuteNonQuery() ausgeführt.
insert into personen
(name, vorname, personalnummer, gehalt, geburtstag)
values('Müller', 'Gerd', 4711, 2900, '12.08.1976')insert ... values
Damit wird ein neuer Datensatz eingefügt. Die Feldnamen in Klammern geben die Anzahl und Reihenfolge der Werte vor, die nach values in Klammern stehen. Es sind wieder die einfachen Hochkommata bei Zeichenketten und Datumsangaben zu beachten.
Beim Einfügen sollte man die gleichen Fehler vermeiden wie beim Ändern.



Jetzt online bestellen














