4.1 UPDATE SET-Anweisung
Wenn Sie vorhandene Datensätze in der Tabelle ändern müssen, verwenden wir hierfür den Operator UPDATE
.
Einerseits UPDATE
ähnelt der Operator dem Operator INSERT
, da wir neue Werte für die Spalten angeben müssen. Und zum anderen auf den Operator SELECT
, weil er es ermöglicht, sofort mit Datengruppen zu arbeiten.
Wichtig! Der Zweck des Operators UPDATE
besteht darin, die Daten nicht in einer Zeile der Tabelle, sondern in allen Zeilen zu ändern, die eine bestimmte Bedingung erfüllen. Und wenn Sie einen kleinen Fehler machen, können leicht alle Daten in der Tabelle verloren gehen.
Gesamtansicht der Anfrage:
UPDATE table SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE condition;
Schreiben wir eine Abfrage, die das Gehalt aller unserer Mitarbeiter um 100 erhöht. Unsere Abfrage sieht folgendermaßen aus:
UPDATE employee SET
salary = salary+100;
Und jetzt erhöhen wir für alle , die ein Gehalt von weniger als 50.000 haben, auch dieses um 20 %. Anfragebeispiel:
UPDATE employee SET
salary = salary*1.2
WHERE salary<50000;
Und natürlich erhöhen wir das Gehalt des Direktors um das Zweifache, wie wäre es ohne ihn:
UPDATE employee SET
salary = salary*2
WHERE id=4;
4.2 Komplexe Datenänderungsszenarien
Wenn Sie sich entscheiden, Daten in mehreren Tabellen gleichzeitig zu ändern, oder wenn Sie Daten in einer Tabelle ändern, müssen Sie diese mit Daten aus einer anderen füllen oder einfach Daten aus einer anderen Tabelle beim Ändern der ersten verwenden. dann erwarten uns Überraschungen.
Versuchen wir, die Ebene aller Benutzer in der Benutzertabelle zu ändern, die in der Mitarbeitertabelle vorhanden sind. Der Einfachheit halber überprüfen wir die Übereinstimmung der Benutzer anhand des Namens.
Wie möchten wir diese Abfrage schreiben:
UPDATE user SET
level = 80,
WHERE user . name IN ( list of names from employee table );
Nun, fügen wir dieser Abfrage eine Liste mit Namen aus der Mitarbeitertabelle hinzu:
UPDATE user SET
level = 80,
WHERE user.name IN (select name from employee);
Interessant! Die SQL-Abfrage selbst zum Abrufen der Namen erwies sich als noch kürzer als die Beschreibung der Aufgabe. Die Erfinder von SQL haben ihr Brot nicht umsonst gegessen.
Gezwungen, dich zu verärgern -Dieser Ansatz wird nicht funktionieren. Zuerst müssen Sie diese Tabellen verknüpfen. Das sieht dann etwa so aus:
UPDATE table 1, table 2 SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE table 1.id = table 2.ref_id;
Machen wir es etwas schwieriger. Sie müssen die Stufe nur für gute Mitarbeiter auf 80 setzen, deren Gehalt mehr als 50.000 beträgt. Die vollständige Lösung sieht folgendermaßen aus:
UPDATE user, good_employees SET
user.level = 80
WHERE user.name = good_employees.name;
Eine solche Verknüpfung von Tabellen ist eigentlich INNER JOIN
, so dass am Ende nur Benutzer übrig bleiben, die in der zweiten Tabelle eine namentliche Übereinstimmung haben.
Aber wir müssen noch irgendwie gute Mitarbeiter auswählen, also fügen wir noch etwas Code hinzu:
SELECT * FROM employee WHERE salary >= 50000
Und jetzt ersetzen wir diese Tabelle in unserer letzten Abfrage:
UPDATE user,
(SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
user.level = 80
WHERE user.name = good_emps.name;
Lebe jetzt damit.