SQL Überblick SQL steht für Structured Query Language und bedeutet soviel wie strukturierte Abfragesprache. SQL ist die De-facto-Standardsprache, mit der sich Daten aus relationalen Datenbanken abrufen und dort manipulieren lassen. SQL ist eine nicht prozedurale Sprache. Das bedeutet „was“ statt „wie“. SQL beschreibt, welche Daten abgerufen, aktualisiert oder gelöscht werden und nicht wie es zu geschehen hat. SQL ist eine echte, plattformunabhängige und produktübergreifende Sprache. Und da sie eine höhere Sprache der vierten Generation ist (4GL), lassen sich komplexe Funktionen mit wenigen Codezeilen formulieren. Ursprünglich wurde SQL von IBM für DB2, ein relationales DBMS (RDBMS = Relational Database Management System), entwickelt. ANSI und ISO standardisierten SQL, welches den Datenbankherstellern nun als Richtlinie dient. Der aktuelle Standard ist der ANSI 1992 (SQL-92). Mit SQL kann der Programmierer oder Datenbankadministrator folgende Aufgaben ausführen: - die Struktur einer Datenbank modifizieren. die Einstellungen der Systemsicherheit ändern. Benutzerberechtigungen für Datenbanken oder Tabellen einrichten. eine Datenbank nach Informationen abfragen. den Inhalt einer Datenbank aktualisieren. Einführung In einer kurzen Einführung möchte ich die grundlegenden SQL Befehle vorstellen. Ich zeige wie man eine kleine, einfache Datenbank anlegt, Tabellen erstellt, diese mit Werten füllt, diese dann manipuliert um am Ende alles wieder zu löschen. Als Plattform kommt MySQL zum Einsatz. MySQL ist ein RDBMS, welches weitgehend den SQL-92 Standard unterstützt. Zuerst möchte ich die Datentypen von ANSI-SQL vorstellen. Zeichenstrings: CHARACTER, CHARACTER VARYING, CHARACTER, STRING, VARCHAR Numerische Datentypen: DECIMAL, DOUBLE PRECISION, FLOAT, INTEGER, INTERVAL, NUMBER, NUMERIC, REAL, SMALLINT Binäre Datentypen: BIT, BIT VARYING Datum-/Zeitangaben: DATE, TIME, TIMESTAMP Erstellen einer Datenbank ist sehr einfach. Der Befehl dafür ist CREATE DATABASE dbKlasse; In SQL ist ein Semikolon hinter einer SQL-Anweisung Pflicht, Groß-/Kleinschreibung ist jedoch nicht von Bedeutung. Jetzt haben wir eine Datenbank namens dbKlasse erzeugt. Es ist nun an der Zeit ihr eine Tabelle zuzufügen. Doch bevor wir dies tun, müssen wir MySQL sagen, an welcher Datenbank wir operieren möchten. Dies geschieht in dem man USE dbKlasse; Eingibt. Damit wählen wir die Datenbank dbKlasse aus. Nun erstellen wir eine Tabelle Namens tblPersons. Doch bevor wir dies tun, müssen wir wissen welche Attribute sie haben soll. Wir beschränken uns auf den Vor- und Nachnahmen, sowie das Geburtsdatum. Unsere Tabelle enthält demnach die Attribute Fname, Lname, Birthdate, sowie einem Primärschlüssel zur eindeutigen Identifizierung der Person (des Datensatzes). Erstellen der Tabelle: CREATE TABLE tblPersons( P_ID INTEGER NOT NULL AUTO_INCREMENT, PRIMARY KEY(P_ID), Fname VARCHAR(24), Lname VARCHAR(24) NOT NULL, Birthdate DATE ); Etwas zur Syntax und Befehlen. CREATE TABLE erklärt sich von selbst, genauso wie tblPersons (Name der Tabelle). P_ID ist der Name des ersten Attributs. INTEGER ist der Datentyp, also eine Ganzzahl. NOT NULL bedeutet, dass dieses Feld nicht Leer sein darf. AUTO_INCREMENT bedeutet, dass dieser Wert sich mit einem neuem Eintrag automatisch um eins vergrößert. PRIMARY KEY(attr_name) definiert das Feld als Primärschlüssel, muss von der Definition des Attributs durch ein Komma getrennt werden. Die Attributdefinitionen werden ebenfalls durch Kommata getrennt. Die komplette Tabellendefinition muss von klammern umschlossen werden und die Anweisung schließlich mit einem Semikolon abgeschlossen. Fügen in unsere Tabelle nun einige Datensätze ein. Dies geschieht mit dem Befehl INSERT. INSERT INTO tblPersons (Fname, Lname, Birthdate) VALUES („Waldemar“, „Haffner“, „1981-11-26“) ; möglich wäre auch insert into tblPersons (p_id, fname, lname, birthdate) values (37, ‘Waldemar’, ‘Haffner’, ‘1981-11-26’) ; Der Unterschied zwischen den beiden Versionen ist sichtbar, abgesehen von der Groß/Kleinschreibung und den doppelten, sowie einfachen Anführungsstrichen, ist der Hauptunterschied in den Attributnamen. In der ersten Version fügen die Werte lediglich in die Spalten Fname, Lname und Birthdate ein, während wir in der zweiten, P_ID explizit angeben. In der ersten Version war es möglich darauf zu verzichten, weil es ein AUTO_INCREMENT Wert ist, er wird also automatisch generiert, aus dem vorhergehendem Wert. Zur Syntax und Befehlen: INSERT INTO ist der eigentliche Befehl zum einfügen von Daten, daraufhin folgt der Tabellenname. In den Klammern hinter dem Tabellennamen, durch Kommata getrennt, sind Attributnamen angegeben in die wir die Werte einfügen wollen. Das Schlüsselwort VALUES sagt, dass nun die Werte folgen. Diese werden ebenfalls von Klammern umfasst und durch Kommata getrennt. Die Reihenfolge muss derjenigen entsprechen, die wir bei Attributnamen bestimmt haben. Beim Einfügen der Werte ist zu beachten, dass Zeichenfolgen in Anführungszeichen stehen müssen, während bei numerischen Werten diese verzichtbar sind. Nach dem Einfügen der Werte, wollen wir diese abrufen. Zum Abrufen der Werte verwende wir den Befehl SELECT. Eine komplette Abfrage könnte wie folgt aussehen: SELECT * FROM tblPersons; Damit würden wir alle Einträge der Tabelle, in der Eintragsreihenfolge, abrufen. Wir können die Abfrage einschränken und sortiert ausgeben. Dies geschieht mit Hilfe einer Bedingung und der Schlüsselwörter ORDER BY. Solche Abfrage würde z.B. so aussehen: SELECT Fname, Lname, Birthday from tblPersons WHERE p_id > 4 AND Lname <> “Haffner” AND Fname LIKE “R%” ORDER BY Lname ; SELECT ist wohl der Befehl der meisten verwendet wird. SELECT heißt soviel wie wählen, in unseren Beispiel wählen wir die Attribute Fname, Lname und Birthday. Nur die Werte dieser Spalten werden also gewählt (demnach auch ausgegeben). Die Auswahl ist bedingt. Sie wird durch eine Bedingung eingeschränkt. In unserem Beispiel werden lediglich Werte der Datensätze ausgegeben, dessen P_ID Wert größer als 4 ist, der Lname nicht „Haffner“ lautet und Fname mit einem R anfängt. Sortiert wird die Ausgabe alphabetisch und zwar nach dem Lname, also dem Nachnahmen. Kommen wir nun zum Aktualisieren der Daten. Angenommen Sie haben einen Fehler beim Eintragen gemacht, einen Namen falsch geschrieben, und möchten diesen korrigieren. Also aktualisieren Sie ihn mit UPDATE. UPDATE tblPersons SET Fname = „Klassensprecher“ WHERE Lname = “Haffner” ; Mit UPDATE weisen sie MySQL an, eine Aktualisierung durchzuführen. Hinter UPDATE folgt der Tabellenname, dahinter der Befehl SET und dann der Attributname. Damit nicht alle Datensätze betroffen werden, definieren wir eine Einschränkung, wie es bei SELECT demonstriert wurde. Kommen wir nun zum Löschen von Datensätzen. Wie nicht anders zu erwarten ist lautet der Befehl DELETE und eine Anweisung sieht dann so aus: DELETE FROM tblPersons WHERE p_id < 2 ; DELETE löscht immer ein ganzes Tupel. Es erwartet als Parameter nur den Tabellennamen. Eine Einschränkung ist, natürlich wie immer, optional. Ohne Einschränkung jedoch würde DELETE alle Datensätze der Tabelle löschen. Eine Tabelle entfernt man aus der Datenbank mit dem Befehl DROP: DROP TABLE tblPersons; Eine Datenbank löscht man ebenfalls mit DROP: DROP DATABASE dbKlasse; (doc.) 2003, Waldemar Haffner Quellen: - SQL in 21 Tagen - MySQL Datenbankhandbuch von Guido Stepken ([email protected]) - etwas Erfahrung