dml (1) select (1)

Werbung
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
Herunterladen