4.1 UPDATE SET-sætning
Hvis du skal ændre eksisterende poster i tabellen, så bruger vi operatoren til dette UPDATE.
UPDATEPå 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 UPDATEer 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