4.1 UPDATE SET-sætning
Hvis du skal ændre eksisterende poster i tabellen, så bruger vi operatoren til dette UPDATE
.
UPDATE
På den ene side ligner operatøren operatøren INSERT
, fordi vi skal angive nye værdier for kolonnerne. Og på den anden side på operatøren SELECT
, fordi det giver dig mulighed for at arbejde med det samme med datagrupper.
Vigtig! Formålet med operatøren UPDATE
er at ændre dataene ikke i en række i tabellen, men i alle rækker, der opfylder en bestemt betingelse. Og laver du en lille fejl, kan du nemt miste alle data i tabellen.
Generelt overblik over anmodningen:
UPDATE table SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE condition;
Lad os skrive en forespørgsel, der vil øge lønnen for alle vores medarbejdere med 100. Vores forespørgsel vil se sådan ud:
UPDATE employee SET
salary = salary+100;
Og nu for alle , der har en løn på under 50K, vil vi også øge den med 20%. Eksempel på anmodning:
UPDATE employee SET
salary = salary*1.2
WHERE salary<50000;
Og selvfølgelig vil vi øge direktørens løn med 2 gange, hvordan kunne det være uden ham:
UPDATE employee SET
salary = salary*2
WHERE id=4;
4.2 Komplekse dataændringsscenarier
Hvis du beslutter dig for at ændre data i flere tabeller på samme tid, eller når du ændrer data i en tabel, skal du udfylde den med data fra en anden, eller blot på en eller anden måde bruge data fra en anden tabel i processen med at ændre den første, så venter overraskelser os.
Lad os prøve at ændre niveauet for alle brugere i brugertabellen, der findes i medarbejdertabellen. For nemheds skyld vil vi kontrollere sammenfaldet af brugere ved navn.
Hvordan vil vi gerne skrive denne forespørgsel:
UPDATE user SET
level = 80,
WHERE user . name IN ( list of names from employee table );
Nå, lad os tilføje en liste over navne fra medarbejdertabellen til denne forespørgsel:
UPDATE user SET
level = 80,
WHERE user.name IN (select name from employee);
Interessant! Selve SQL-forespørgslen for at få navnene viste sig at være endnu kortere end beskrivelsen af opgaven. Skaberne af SQL spiste ikke deres brød forgæves.
Tvunget til at forstyrre dig -denne tilgang vil ikke fungere. Først skal du deltage i disse tabeller, det vil se sådan ud:
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;
Lad os gøre det lidt sværere. Du skal kun sætte niveauet til 80 for gode medarbejdere, hvis løn vil være mere end 50k. Den komplette løsning vil se således ud:
UPDATE user, good_employees SET
user.level = 80
WHERE user.name = good_employees.name;
En sådan sammenføjning af tabeller er faktisk INNER JOIN
, så i sidste ende vil kun brugere, der har et match ved navn i den anden tabel blive tilbage.
Men vi mangler stadig at vælge gode medarbejdere, så lad os tilføje noget mere kode:
SELECT * FROM employee WHERE salary >= 50000
Og nu erstatter vi denne tabel i vores sidste forespørgsel:
UPDATE user,
(SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
user.level = 80
WHERE user.name = good_emps.name;
Lev med det nu.
GO TO FULL VERSION