Zum Inhalt
wannacode

UPDATE: Werte ändern

Kurz gesagt: UPDATE … SET … WHERE ändert Spalten in den Zeilen, die die Bedingung erfüllen, mit einem Ausdruck, der den alten Wert benutzen kann; ohne WHERE ändert es jede Zeile.

Problem

Eine Preiserhöhung

Der Lieferant der Milchprodukte erhöht die Preise um 10 %. Ab heute muss auch der Shop alles in der Kategorie „Milchprodukte“ um 10 % teurer verkaufen.

Es sind fünf Produkte. Du könntest die Preise von Hand ändern, eins nach dem anderen. Aber morgen ist es eine Kategorie mit 200 Produkten, und Abschreiben von Hand geht garantiert schief.

Die Idee

UPDATE … SET … WHERE

UPDATE sagt, welche Tabelle, SET sagt, welche Spalte und was sie wird, und WHERE sagt, in welchen Zeilen:

SQLDatenbank: Shop

price * 1.1 wird für jede Zeile einzeln berechnet, mit dem Preis dieser Zeile. Die Frischmilch kostete 1,60 € und kostet jetzt 1,76 €. ROUND(…, 2) rundet auf den Cent, denn der Preis ist in Euro und Cent. Über dem Ergebnis siehst du, wie viele Zeilen die Anweisung geändert hat: fünf.

Genauer, für Neugierige

Ohne ROUND zeigt der Bildschirm auch 1.76. Aber für den Computer ist 1.6 × 1.1 gleich 1.7600000000000002, weil Kommazahlen binär gespeichert werden und nicht immer exakt. Dann findet eine Suche nach dem Preis 1.76 die Frischmilch nicht:

SQLDatenbank: Shop

Runde Geld also, wenn du es speicherst. Echte Shops speichern Preise oft in ganzen Cent (176) oder in einer Spalte mit einem exakten Dezimaltyp, den PostgreSQL und MySQL haben (DECIMAL). SQLite hat so einen Typ nicht.

SET kann mehrere Spalten enthalten, durch Kommas getrennt. 30 Banitsas kommen an, und ihr Preis wird 2,60 €:

SQLDatenbank: Shop

stock + 30 nimmt den alten Bestand und addiert 30. Im Ausdruck rechts von = haben die Spalten die alten Werte der Zeile.

Probier es aus

Eine Bestellung ist unterwegs

Bestellung 59 ist bezahlt und ist heute mit dem Kurier rausgegangen. Ändere ihren Status auf shipped.

SQLDatenbank: Shop

Sieh es dir an

UPDATE ohne WHERE

Die Shopleitung will eine Aktion: Pfefferminztee für 0,99 €. Jemand tippt in Eile und vergisst WHERE:

SQLDatenbank: Shop

Alle 25 Produkte kosten jetzt 0,99 €, sogar das Messerset, das 39 € gekostet hat. Die Datenbank fragt nicht „bist du sicher?“. Ohne WHERE gilt die Anweisung für jede Zeile.

Hier behebt der Knopf „Neue Datenbank“ alles. Eine echte Datenbank hat keinen solchen Knopf. Es bleiben Backups und Transaktionen: Mit einer Transaktion lässt sich eine Änderung zurücknehmen, bevor sie bestätigt ist. Sie lernst du später im Kurs kennen.

Die Idee

Erst SELECT

Die Gewohnheit, die dich davor schützt: Führ vor einem UPDATE ein SELECT mit demselben WHERE aus. Du siehst genau, welche Zeilen sich ändern werden, und nichts ändert sich.

Getränke werden um 5 % teurer. Die Kategorie ist am Namen bekannt, und eine Unterabfrage liefert ihre Nummer:

SQLDatenbank: Shop

Vier Produkte, genau die richtigen. Jetzt wird aus SELECT … FROM ein UPDATE … SET, und WHERE bleibt gleich:

SQLDatenbank: Shop

Hier macht ROUND einen sichtbaren Unterschied: 0,90 × 1,05 ist 0,945, und 14,90 × 1,05 ist 15,645. Die Preise werden 0,95 € und 15,65 €.

Eine Unterabfrage in WHERE funktioniert in UPDATE genauso wie in SELECT.

Probier es aus

Die vergessenen Bestellungen

Es gibt Bestellungen mit dem Status new von vor 2026, die niemand bezahlt hat. Storniere sie: Ihr Status wird cancelled.

SQLDatenbank: Shop

Übung

Zwei Aufgaben

1. Eine Aktion für die Produkte, von denen der Shop reichlich hat: Jedes Produkt mit mehr als 50 auf Lager wird 20 % billiger, auf den Cent gerundet. Die Geschenkkarte hat keine Kategorie und gehört nicht zur Aktion.

Die Aktion (geprüft wird die ganze Tabelle products):

SQLDatenbank: Shop

2. Maria Ivanova (maria.ivanova@example.com) hat alle ihre neuen Bestellungen auf einmal bezahlt. Ändere deren Status auf paid. Finde die Kundin über die E-Mail-Adresse, mit einer Unterabfrage.

Marias neue Bestellungen werden bezahlt:

SQLDatenbank: Shop

Test

Teste dich

1. Was macht UPDATE products SET stock = 0; ohne WHERE?
2. Wie addierst du 30 zum Bestand von Produkt 4?
3. Welche gute Gewohnheit gilt vor einem UPDATE?
4. Was ändert sich bei UPDATE orders SET status = 'paid', ordered_at = '2026-10-25' WHERE id = 34;?

Erstellt von Ivo Gergov im Rahmen der Kampagne von Evo Tech für zugängliche Programmierausbildung ·