Sql Einstieg
Hier also eine kleine Einführung, was SQL Statements betrifft - also Abfragen und Datenmanipulation auf eine Datenbank - dies kann jetzt Oracle, DB2, Sybase, Informix, Microsoft Access, msSQL oder mySQL sein. [Es kann natürlich vorkommen das einzelne Befehle in den verschiedenen Datenbanken anders lauten (sogenannte eigene Erweiterungen wie zb T-SQL von MS) - ich gebe keine Garantie darauf das alle Befehle überall funktionieren ]
SQL steht auf der Hierarchie der Programmiersprachen ganz oben, da sie sehr mächtig ist (wenige Befehle können großes Bewirken, im vergleich zu Assembler wo man sehr sehr viele Befehle braucht um großes zu Bewirken, aber das ist ja ein anderes Thema)
Ich nehme als Testbeispiel folgende Datenbank her:
Tabelle t_Users:
- usid (autowert, primary key)
- usname (textzeile)
- uspwd (textzeile)
- usmail (textzeile)
Tabelle t_Access:
- acid (autowert, primary key)
- acfilename (textzeile)
- ac2us (zahl)
Tabelle t_News:
- neid (autowert, primary key)
- netitle (textzeile)
- netext (textfeld)
- ne2us (zahl)
Kurze Erklärung:
In diesem Beispiel soll ein kleines News System abgebildet werden. User können zum Beispiel News verfassen wenn sie die Berechtigung auf die entsprechende Datei haben (zb ADDNEWS.ASP). Die Zugriffsberechtigung auf die Dateien kann über die Tabelle t_ACCESS gesteuert werden.
Zum Grundverständnis: in einer Datenbank werden Tabellen abgelegt. Eine Tabelle besteht aus diversen Feldern (zb Name, Passwort, E-Mail). Die Inhalte werden in Datensätzen (Records) abgelegt.
Das SELECT Statement (Abfragen auf eine Datenbank ausführen.)
-- Alle Datensätze in der Tabelle t_users ausgeben
- select * from t_Users
-- nur bestimmte Spalten auswählen:
- select usname,usmail from t_Users
-- die Reihenfolge beeinflussen mit "order by"
- select usname,usmail from t_Users order by usname
man kann auch asc (default) oder desc anhängen.
- select usname,usmail from t_Users order by usname asc (asc kann hier weggelassen werden!)
- select usname,usmail from t_Users order by usname desc
die erste abfrage gibt die user nach namen von a bis z sortiert aus und die zweite von z bis a!
-- mehrere Kriterien in der Sortierung (zb bei zwei gleichen Namen!)
- select usname,usmail from t_Users order by usname, usmail
-- Abfragen eingrenzen mit "where", in diesem Fall alle User deren ID größer als 2 ist
- select * from t_Users where usid > 2
-- alle User deren ID kleiner als 2 ist
- select * from t_Users where usid < 2
-- alle User deren ID kleiner gleich 2 ist
- select * from t_Users where usid <= 2
-- alle User deren ID größer gleich 2 ist
- select * from t_Users where usid >= 2
-- alle User deren ID ungleich 2 ist
- select * from t_Users where usid <> 2
-- alle User deren Name "Quentin" ist (bei den Anführungszeichen muss man aufpassen, man kann auch einfache Anführungszeichen - Apostroph ' - verwenden.)
- select * from t_Users where usname = "Quentin"
Hinweis: nur Strings (Zeichenketten) müssen mit " bzw mit ' eingeschlossen werden, Zahlen benötigen keine Anführungszeichen!
-- alle User, die mit "a" beginnen ausgeben:
- select * from t_Users where usname like 'a%"
-- alle User, die die Zeichenfolge "o" im Namen haben (zb "Klon" und "Holyfly")
- select * from t_Users where usname like '%o%"
-- alle User, deren ID zwischen 1 und 10 liegen
- select * from t_Users where usid between 1 and 10
-- alle User, die alphabetisch zwischen Holyfly und Quentin liegen (==> Holyfly, Klon, Quentin)
- select * from t_Users where usname between "Holyfly" and "Quentin"
die angegebenen Between-Grenzen (also Holyfly und Quentin) werden auch noch ausgegeben!
-- alle User, die sich außerhalb gewisser Grenzen befinden
- select * from t_Users where usname NOT between "Holyfly" and "Quentin"
-- die anzahl aller user in einer eigenen spalte "menge" ausgeben
- select count(*) as menge from t_Users
wenn man bei einem select mehrere einträge hat, die gleich sind, kann man eine wiederholung mit dem befehl DISTINCT verhindern. hier muss man aufpassen, wenn man "select distinct netitle from t_news" ausführt erhält man ein recordset mit der spalte "netitle" und den einträgen "hallo", "topnews" und "update", sobald man aber "select distinct netitle,neid from t_news" verwendet hat man nur noch unterschiedliche einträge, da die id ein automatisch erhöhter wert ist.
jetzt haben wir den abfrage teil im schnelldurchlauf abgeschlossen, ich hoffe ich habe nichts vergessen. widmen wir uns jetzt der datenmanipulation..
dies geschieht im prinzip mit den 3 befehlen insert into, update und delete
datensätze hinzufügen (insert into)
syntax: INSERT INTO t_Tabellenname (spalte1, spalte2,...) VALUES (wert1, wert2, ....)
-- beispiel, einen neuen user hinzufügen mit insert into
- insert into t_users (usname,uspwd,usmail) values ("Kojote","023"," kojote@asdf.comDiese E-Mail Adresse ist gegen Spam Bots geschützt, Sie müssen Javascript aktivieren, damit Sie es sehen können ")
datensätze bearbeiten (update)
syntax: UPDATE t_Tabellenname SET spalte1 = wert1, spalte2 = wert2
-- beispiel, das passwort des neuen users "kojote" auf "230" ändern
- update t_users set uspwd="230" where usname="Kojote"
datensätze entfernen (delete)
syntax: DELETE FROM t_Tabellenname WHERE (Bedingung)
-- beispiel, den user "Kojote" wieder löschen (sorry dude!)
- delete from t_users where usname="Kojote"
|