8.4 SQL-Befehle
In diesem Abschnitt werden die wichtigsten SQL-Befehle anhand von einigen typischen Beispielen mit ihren Auswirkungen erläutert, siehe auch Projekt DBSqlBefehle.
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
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, siehe Abbildung 8.14.
Abbildung 8.14 Nur die Felder »name« und »vorname«
Beispiel:
select * from personen where gehalt > 3600
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, siehe Abbildung 8.15.
Abbildung 8.15 Nur falls »gehalt« größer als 3600 ist
Beispiel:
select * from personen where name = 'Schmitz'
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 Akzent!). Das Ergebnis sehen Sie in Abbildung 8.16.
Abbildung 8.16 Nur falls »name« gleich »Schmitz« ist
Operatoren
Bei einer Bedingung können Vergleichsoperatoren verwendet werden, siehe Tabelle 8.11.
Operator | Erläuterung |
größer als oder gleich |
|
kleiner als oder gleich |
Über logische Operatoren können mehrere Bedingungen miteinander verbunden werden, siehe Tabelle 8.12.
Operator | Erläuterung |
Der Wahrheitswert einer Bedingung wird umgekehrt. |
|
Beide Bedingungen müssen zutreffen. |
|
Nur eine der Bedingungen muss zutreffen. |
Mit diesen Operatoren kann man z. B. die 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, siehe Abbildung 8.17.
Abbildung 8.17 Nur falls »gehalt« zwischen 3600 und 3650 liegt
Operator like
Der Operator like wird speziell für die Suche nach Zeichenketten mithilfe von Platzhaltern verwendet. Der Platzhalter % (Prozentzeichen) steht in Access für eine beliebige Anzahl von unbekannten Zeichen. Der Platzhalter _ (Unterstrich) steht in 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, siehe Abbildung 8.18. Danach dürfen beliebig viele unbekannte Zeichen folgen.
Abbildung 8.18 Nur falls »name« mit »M« beginnt
Beispiel:
select * from personen where name like '%i%'
Das Ergebnis beinhaltet nur die Datensätze, die im Wert des Felds name den Buchstaben »i« enthalten, siehe Abbildung 8.19. Davor und danach dürfen beliebig viele unbekannte Zeichen folgen.
Abbildung 8.19 Nur falls »name« den Buchstaben »i« enthält
Beispiel:
select * from personen where name like 'M__er'
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 z. B. Maier, Meier, Mayer oder Meyer heißen, siehe Abbildung 8.20.
Abbildung 8.20 Nur falls »name« aus »M«, zwei beliebigen Zeichen und »er« besteht
Sortierung
Die Reihenfolge der Datensätze im Abfrage-Ergebnis lässt sich mit order by beeinflussen. Sie können einen oder mehrere Sortierschlüssel angeben. Die Sortierung ist normalerweise aufsteigend. Falls Sie eine absteigende Sortierung wünschen, 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, siehe Abbildung 8.21.
Abbildung 8.21 Sortiert nach »gehalt«, fallend
Beispiel:
select * from personen order by name, vorname
Die Datensätze sind nach dem Feld name aufsteigend sortiert. Bei gleichem Inhalt in diesem Feld sind sie nach dem Feld vorname aufsteigend sortiert, also wäre z. B. »Schmitz, Joachim« vor »Schmitz, Peter« einsortiert.
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 & "'"
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.
Beachten Sie, dass sich die Zeichenkette, die den SQL-Befehl enthält, aus mehreren Teilen zusammensetzt. Keinesfalls dürfen Sie die einfachen Hochkommata vor und nach der Zeichenkette vergessen.
Noch einen Schritt weiter gehen Sie 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: MessageBox.Show(cmd.CommandText). Diese können Sie später wieder auskommentieren.
8.4.2 Ändern mit update
Die Anweisung update dient der Ä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.
8.4.3 Löschen mit delete
Die Anweisung delete dient dem Löschen von einem oder mehreren Datensätzen. Sie wird ebenfalls 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 werden Sie vermutlich nie einsetzen: Sie löscht alle (!) Datensätze der Tabelle personen.
delete from personen where personalnummer = 2297
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. Auch sie wird mithilfe von ExecuteNonQuery() ausgeführt.
insert into personen
(name, vorname, personalnummer, gehalt, geburtstag)
values('Müller', 'Gerd', 4711, 2900, '12.08.1976')
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. Beachten Sie wieder die einfachen Hochkommata bei Zeichenketten und Datumsangaben.
8.4.5 Typische Fehler in SQL
Vor allem beim Einfügen und beim Ändern treten häufig Fehler auf. Die Fehler werden zu Visual Basic durchgeleitet und aufgrund der Ausnahmebehandlung ausgegeben. Typische Fehler sind:
- Eintragen eines bereits vorkommenden Wertes in ein Feld, auf dem ein eindeutiger Index steht
- Eintragen eines Wertes mit dem falschen Datentyp oder eines Wertes, der für den betreffenden Datentyp ungültig ist
- Eintragen eines leeren Wertes in ein Feld, das in der Datenbank so definiert ist, dass kein leerer Wert eingetragen werden darf
Einige Beispiele für Fehler:
update personen set name = Mohr
where personalnummer = 6714
Der Wert für das Feld name wurde nicht in einfache Anführungsstriche gesetzt, siehe Abbildung 8.22.
Abbildung 8.22 Fehlende Anführungsstriche
update personen set geburtstag = '18.07.'
where personalnummer = 6714
Der Wert für das Feld geburtstag ist kein gültiges Datum, siehe Abbildung 8.23.
Abbildung 8.23 Ungültiges Datum
insert into personen
(name, vorname, personalnummer, gehalt, geburtstag)
values('Müller', 'Gerd', 6714, 2900, '12.08.1976')
Der Wert für das eindeutige Feld personalnummer kommt bereits vor, siehe Abbildung 8.24.
Abbildung 8.24 Doppelter Wert
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.