DDL (1) DML (1) SELECT (1) AHS, LK Inf 13/1, Lue / SZR, Cs 1. Datensätze einfügen (INSERT) (a) Eingabe von vollständigen Datensätzen (auch Tabellen-Zeilen genannt): insert into Tabellenname values (Wert1, Wert2, ..., WertN), ... (WertX1, WertX2, ..., WertXN); Die Werte müssen in der Reihenfolge geschrieben werden, wie es der Reihenfolge ihrer Datenfelder in der Tabellendefinition entspricht. An Stelle eines Wertes kann auch null geschrieben werden, sofern Nullwerte in dieser Spalte erlaubt sind. (b) Eingabe eines neuen Datensatzes, wobei nur für einen Teil seiner Datenfelder Werte angegeben werden. Hinter dem Tabellennamen werden die Spalten, für die Werte angegeben werden, genannt. Die Liste der Spalten muss in Klammern eingeschlossen werden, selbst dann, wenn die Liste nur aus einem einzigen Spaltennamen besteht. Die Reihenfolge der Spaltennamen muss nicht wie bei a) ihrer Reihenfolge in der Tabellendefinition entsprechen. Jedoch müssen die anschließend aufgeführten Werte, welche ebenfalls in Klammern stehen, in Anzahl und Reihenfolge mit den Spaltennamen exakt übereinstimmen. Für nicht aufgeführte Spalten wird logischerweise auch kein Wert angegeben. Sie werden vom DBMS folgendermaßen behandelt: Wenn in der Tabellendefinition ein Default-Wert angegeben wurde, wird er genommen. Wenn not null, aber kein Default-Wert eingegeben wurde, setzt das System die Werte auf den Standard-Wert 0 bzw. ’’ (leere Zeichenkette). Falls weder not null noch ein Default-Wert angegeben wurde, erhält der Eintrag den Wert null. insert into Tabellenname (Spaltename1, Spaltename2,...) values (Wert1, Wert2, ...), ... (WertX1, WertX2, ...); 2. Datensätze ändern bzw. aktualisieren (UPDATE) update Tabellenname set Spaltenname1=Wert1, Spaltenname2=Wert2, ... , SpaltennameN=WertN where Bedingung; Beispiel: update Adresse set Nachname='Meier' where Nachname='Mustermann'; 3. Datensätze löschen (DELETE) Mit folgender Anweisung löscht man alle Zeilen einer Tabelle: delete from Tabellenname; Ausgewählte Zeilen löscht man mit der Anweisung: delete from Tabellenname where Bedingung; Beispiel: delete from Adresse where Vorname='Michael' and Nachname='Mustermann'; 1. Logisch, dass eine Angabe von Spaltennamen nur in der Bedingung sinnvoll ist, aber nicht unmittelbar hinter dem Schlüsselwort DELETE. Wird ein Datensatz gelöscht, werden seine Werte für alle Spalten gelöscht. Will man nur einen Teil der Einträge tilgen, z. B. aus Datenschutzgründen, muss man den UPDATE-Befehl benutzen und die entsprechenden Datenfelder auf null setzen. 4. Daten der Tabelle anzeigen (SELECT) Sämtliche Einträge einer Tabelle erhält man mit der Anweisung: select * from Tabellenname; “Select” bedeutet jedoch “auswählen”, und das ist nicht nur zufällig. Fast immer ist es so, dass man Informationen aus der Datenbank durch die Anzeige ganz bestimmter Daten gewinnen möchte. Die Selektion bestimmter Daten erreicht man genau wie bei UPDATE und DELETE mit Hilfe einer WHEREKlausel: select * from Adresse DDL (1) DML (1) SELECT (1) AHS, LK Inf 13/1, Lue / SZR, Cs where Vorname='Michael'; Nun werden dir nur die Michaels angezeigt. Wenn dich die Adresse gar nicht interessiert, sondern nur der Name, kannst du auch einzelne Datenfelder auswählen: select Vorname, Nachname from Adresse where Vorname='Michael'; Und es ist auch möglich, einfach die Anzahl der Michaels anzeigen zu lassen: select count(*) from Adresse where Vorname='Michael'; Die WHERE-Klausel Wie du siehst, ist die WHERE-Klausel für DML-Befehle sehr bedeutend. Es gibt sie bei UPDATE, DELETE und SELECT (nur INSERT hat keine WHERE-Klausel). Die Grundform ist: WHERE Bedingung und „Bedingung“ scheint zunächst ein boolescher Ausdruck zu sein (was gleich widerlegt werden wird). Fakt ist: Die WHERE-Klausel wird Datensatz für Datensatz ausgewertet, und alle Datensätze, bei denen die Bedingung „wahr“ ergibt, werden ausgewählt. Erinnerung: Ein Vergleich mit einem Nullwert liefert niemals „wahr“. Er liefert nämlich null. Die Bedingung in „WHERE Vorwahl = null“ liefert null, und die gewünschten Datensätze werden nicht ausgewählt. Die Bedingung in „WHERE isNull(Vorwahl)“ macht es besser und liefert true, wenn in der Spalte „Vorwahl“ ein Nullwert steht. Übrigens: Auch „WHERE NOT (Vorwahl = null)“ ergibt für alle Datensätze null und wählt folglich stets keinen einzigen Datensatz aus, selbst dann nicht, wenn die Vorwahl-Spalte gar keine Nullwerte enthält. Auch hier macht „WHERE NOT (isNull(Vorwahl))“ es besser. Die isNull-Funktion ergibt immer einen echten booleschen Wert, true oder false. Mit ihr kann man auch beweisen, dass (Spaltenname = null) immer den Wert null hat: „WHERE isNull(Spaltenname = null)“ wählt stets alle Datensätze aus. Eine Bedingung kann also 3 Werte (true, false und null) annehmen. Operator Bedeutung = gleich Operator Bedeutung isNull (x) testet ob x den Wert null hat. (siehe oben) != oder <> ungleich < kleiner and oder && und <= kleiner oder gleich or oder || oder > größer >= größer oder gleich not oder ! nicht Ein weiterer wichtiger Operator ist LIKE. Like vergleicht Textfelder mit Mustern, die Wildcards enthalten. SQL kennt zwei Wildcards: % steht für eine Folge von beliebig vielen (auch 0) Zeichen _ steht für genau ein Zeichen und die WHERE-Klausel lautet zum Beispiel: WHERE Vorname LIKE 'M%' (findet alle Vornamen, die mit M beginnen) oder WHERE Nachname LIKE 'Me_er' (findet Meier, Meyer, Meuer, aber nicht Mayer) SQL-Anweisungen aus einer Datei einfügen Man kann sämtliche SQL-Anweisungen, beginnend mit dem Befehl use datenbankname; auch in eine Datei schreiben (Dateiendung *.sql) und die Anweisungen im Batch-Modus von mysql ausführen lassen. Dazu ruft man mysql folgendermaßen auf: Windows: c:\xampp\mysql\bin\mysql -u root < datei.sql Linux: /opt/lampp/bin/mysql -u root < datei.sql