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.