ASP - Datenbankkurs (Ihre Datenbank im Internet)

(c) 1998 - 2002 by Stefan Falz Webconsulting


Überblick

Eine Abfrage ist nichts anderes, als eine Auswahl von Datensätzen aus einer Tabelle.
Die Abfrage selbst wird in SQl (Structured Query Language) definiert, wobei man hier
entscheidet, was und vor allem wie abgefragt wird. Es gibt unterschiedliche Abfragetypen, wobei die
Auswahlabfrage zum Filtern von Datensätzen die wohl am meisten benötigte Art sein wird.



Kriterien

Kriterien sind Angaben im SQL-String, die in einem Datensatz erfüllt sein müssen, damit der
Datensatz gefiltert wird. Ein Beispiel hierfür ist eine Suche im Kundenstamm nach einer bestimmten
Kundennummer duchsuchen oder nach allen Kunden, die eine bestimmte PLZ haben.

Angaben zur Tabelle, die abgefragt werden soll, müssen gemacht werden.
Auswahlkriterien müssen nicht unbedingt angegeben werden.
So wird im Beispiel des Gästebuchs eine Abfrage der Tabelle "Gaestebuch" ohne Kriterien gestartet,
    SELECT * FROM [Gaestebuch]

während bei der Suche im Artikelstamm nach einem Teilstring in verschiedenen Feldern der Tabelle
"Artikelstamm" gesucht wird.
    SELECT * FROM [Artikelstamm] WHERE
    [Bezeichnung] Like '%" & Request.QueryString("Text") & "%'" OR
    [Bezeichnung 1] Like '%" & Request.QueryString("Text") & "%'"

Das Prozentzeichen bewirkt, daß der eingegebene Text am Anfang, am Ende und in der Mitte
des Feldinhalts gesucht wird. Das gesamte Abfragekriterium ist in Hochkommata ' ... ' eingeschlossen.
Dieses Zeichen erhalten Sie durch gleichzeitiges Drücken von [Shift] und #.

Ein Beispiel für das Zugreifen auf einen bestimmten Datensatz ist auch der Anmeldedialog beim Aufruf
der Verwaltung Ihre Gästebuchs. Hier müssen verschiedene Kriterien erfüllt sein:
Nach erfolgreicher Überprüfung der Anmeldedaten werden die erforderlichen Daten zur Verwaltung
in einem Session-Objekt gespeichert.
Diese Angaben begleiten den Benutzer nun während seiner gesamten Sitzung.


Sortierung

Eine sehr wichtige Rolle bei Abfragen spielt auch die Sortierung bestimmter Felder. Standardmäßig
werden die Datensätze in der Reihenfolge Ihres Auftretens in der Tabelle ausgegeben. Das bedeutet, daß
eine evtl. eingestellte Sortierung in der Datenbank automatisch übernommen wird. Durch Anhängen des Zusatz
"ORDER BY [Feldname]" an den SQL-String erzwingt man aber eine andere Sortierung.
Die Sortierung kann aufsteigend (Standard) oder absteigend (muß explizit angegeben werden) erfolgen.
Als Sortierkriterium können alle Felder einer Tabelle benutzt werden, Numerische, alphanumerische, Datumsfelder, ....
Sollen z.B. alle Felder der Tabelle [Kunden] nach der Postleitzahl und hierin nach der Strasse sortiert werden, gilt:
    SELECT * FROM [Kunden] ORDER BY [KundenPLZ], [KundenStrasse]
Man trennt die Sortierfelder durch ein Komma und gibt das nächste Sortierfeld ohne die Angabe "ORDER BY"
dahinter an.



Abfragearten

Es gibt verschiedene Abfragearten. Bisher wurden nur Auswahlabfragen behandelt, die Datensätze aus
einer Tabelle lesen. Weitere Arten sind im folgenden:
Aktualisierungsabfragen aktualisieren bestimmte Felder in einer Tabelle.
Dies ist z.B. beim aktuellen Thema Euro sinnvoll, damit man nicht bei allen 457.159 Artikeln den Taschrechner
auspacken muß und sich auch noch Finger wunschreibt. Im folgenden Beispiel wird bei allen Artikeln der
Verkaufspreis in Euro umgerechnet und im Tabellenfeld VK_Netto_E gespeichert.
    UPDATE [Artikel] SET [VK_Netto_E] = [VK_Netto] / EuroFaktor
EuroFaktor wird innerhalb der ASP-Seite als Variable deklariert und bekommt den Wert: 1.95583
Löschabfragen löschen jeweils komplette Datensätze aus einer Tabelle.
Beachten Sie bitte, daß keine Angaben zu Tabellenfelden zwischen DELETE und FROM gemacht werden dürfen, da es
ansonsten zu einer Fehlermeldung kommt. Das Beispiel löscht alle Datensätze aus der Tabelle "Feedback", in
denen das Ja/Nein-Feld "Rueckmeldung" den Wert "Falsch" hat und das "Eintragsdatum" < als das
Löschatum ist. "Löschdatum" ist hierbei ein Wert, der aus den Einstellungen des Kunden berechnet wird.
Bsp.: Eintragsdatum = 10.03.99; AnzTage_Speichern = 7; Löschdatum = 17.03.99
    DELETE FROM [Feedback] WHERE NOT [Rueckmeldung] AND [Löschdatum] < Date
Anfügeabfragen sind sehr nützlich, wenn man mit temporären Daten arbeitet.
So kann man z.B. in einer Shopping-Mall den Warenkorb des Anwenders während seiner Sitzung in einer temp.
Tabelle verwalten und nach Bestätigen der Bestellung die Datensätze in die Tabelle Bestellung übernehmen.
Nach erfolgreicher Übernahme der Datensätze löscht man die Einträge des Kunden im Warenkorb. Man könnte
dies zwar auch in einer Tabelle bewerkstelligen, aber durch das ständige Einfügen und Löschen von Datensätzen
kann man ziemlich schnell die Integrität der Datenbank verlieren, was unter Umständen auch Datenverlust
bedeutet. Die erste Lösung hat mehrere Vorteile:
Erstens wird der Warenkorb nicht so voll, daß man aufgrund der Datenmenge mitunter sehr lange auf Ergebnisse
warten muß und zweitens wird die Verwaltung und Bearbeitung der eingegangenen Bestellungen übersichtlicher.
    INSERT INTO [Bestellungen] SELECT * FROM [Warenkorb] WHERE
    [Bestellung_OK) AND [Shop_ID] = Session("Shop_ID")

Hier erfolgt das Löschen der Datensätze aus der temporären Tabelle "Warenkorb".
    DELETE FROM [Warenkorb] WHERE [Shop_ID] = Session("Shop_ID")
Bei dem Beispiel wird davon ausgegangen, daß die Struktur der Tabellen "Bestellungen" und "Warenkorb" gleich ist.
Anmerkung: "Shop_ID" ist ein Feld, daß zur Zuordnung eines Datensatzes zum Anwender benötigt wird.
Die Session-Variable Session("Shop_ID") wird zu Beginn einer Session festgelegt und begleitet den
Anwender während der gesamten Zeit, n der er sich innerhalb der WebSite befindet.
[Bestellung_OK] wird auf Wahr gesetzt, sobald der Anwender einen Artikel in den Warenkorb legt. Dieser Wert
kann aber jederzeit auf Falsch gesetzt werden, indem er im Warenkorb die Option "Artikel nicht übernehmen
" wählt. Der Datensatz wird hierbei insoweit gekennzeichnet, daß er bei einer Bestellung nicht in die Tabelle
"Bestellungen" übertragen wird, aber vor erfolgter Bestellung immer noch im Warenkorb vorhanden ist, so
daß der Kunde den Artikel ggfs. wieder aufnehmen kann, ohne wieder in den Artikelstamm gehen zu müssen.

Tabellenerstellungsabfragen erstellen, wie der Name schon sagt,
neue Tabellen auf der Vorlage anderer Tabellen. Die erstellten Tabellen haben den gleichen Aufbau wie Ihre
Vorlagen und enthalten je nach Kriterienangabe die gleichen Datensätze. Das gute an der Sache ist, daß sich
auch lediglich Teile einer Tabelle kopieren lassen. Wenn man z.B. eine neue Tabelle "Kunden_Neu" mit allen
Datensätzen sowie allen Tabellenfeldern der Tabelle "Kunden" erstellen will, benutzt man
folgende SQL-Anweisung:
    SELECT * INTO [Kunden_Neu] FROM [Kunden]
Ein anderes Beispiel ist das Erstellen einer Tabelle, die zur Sicherung der Kundenumsätze dient. Die neue
Tabelle enthält lediglich die Felder "Kunden_ID" und "Kunden_Umsatz". Über den Sinn einer solchen
Sicherung läßt sich zwar streiten, aber als Beispiel sieht es ganz gut aus.
    SELECT Kunden_ID, Kunden_Umsatz INTO [Kunden_Neu] FROM [Kunden]
Bei der Tabellenerstellungsabfrage ist zu beachten, daß eine evtl. vorhandene Tabelle gleichen Namens rigoros
überschrieben wird.



Quelltext

SELECT * FROM [Tabelle] WHERE [Tabellenfeld] = 'Kriterium'
** Alle Datensätze, die dem Kriterium genau entsprechen **

SELECT [Tabellenfeld] FROM [Tabelle] WHERE [Tabellenfeld] = 'Kriterium'
** Nur Auswahl des angegebenen Tabellenfeld **

SELECT * FROM [Tabelle] WHERE [Tabellenfeld] Like '%Kriterium%'
** Vergleich, ob Teilstring innerhalb Tabellenfeld vorkommt **

SELECT * FROM [Tabelle] WHERE [Tabellenfeld] Like 'Kriterium%'
** Vergleich, ob Teilstring am Anfang des Tabellenfelds vorkommt **

SELECT * FROM [Tabelle] WHERE [Tabellenfeld] Like '%Kriterium'
** Vergleich, ob Teilstring am Ende des Tabellenfelds vorkommt **

SELECT * FROM [Tabelle]
** Alle Datensätze der Tabelle **

SELECT * FROM [Tabelle] ORDER BY Tabellenfeld
** Alle Datensätze der Tabelle aufsteigend nach Tabellenfeld sortiert **

SELECT * FROM [Tabelle] ORDER BY Tabellenfeld DESC
** Alle Datensätze der Tabelle absteigend nach Tabellenfeld sortiert **

DELETE FROM [Tabelle] WHERE [Tabellenfeld] = 'Kriterium'
** Löschen von Datensätzen, die einen bestimmten Inhalt eines Feldes haben **

SELECT * INTO [Tabelle2] FROM [Tabelle]
** Erstellen einer neuen Tabelle mit gleicher Struktur und Inhalt wie Vorlage **

INSERT INTO [Tabelle2] SELECT * FROM [Tabelle] WHERE [Tabellenfeld] = Kriterium
** Anfügen von Datensätzen **

UPDATE [Tabelle] SET [Tabellenfeld2] = [Tabellenfeld1] * Variable
** Aktualisieren von Datensätzen **


© 1998 - 2001 by Stefan Falz Webconsulting
Für Schäden oder Beeinträchtigungen jedwelcher Art durch Benutzung der Skripte wird keinerlei Haftung übernommen !