4.1 Istruzione UPDATE SET
Se è necessario modificare i record esistenti nella tabella, per questo utilizziamo l'operatore UPDATE
.
Da un lato, l'operatore UPDATE
è simile a operator INSERT
, perché dobbiamo specificare nuovi valori per le colonne. E d'altra parte, sull'operatore SELECT
, perché ti consente di lavorare immediatamente con i gruppi di dati.
Importante! Lo scopo dell'operatore UPDATE
è modificare i dati non in una riga della tabella, ma in tutte le righe che soddisfano una determinata condizione. E se commetti un piccolo errore, puoi facilmente perdere tutti i dati nella tabella.
Vista generale della richiesta:
UPDATE table SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE condition;
Scriviamo una query che aumenterà lo stipendio di tutti i nostri dipendenti di 100. La nostra query sarà simile a questa:
UPDATE employee SET
salary = salary+100;
E ora per tutti coloro che hanno uno stipendio inferiore a 50K, lo aumenteremo anche del 20%. Esempio di richiesta:
UPDATE employee SET
salary = salary*1.2
WHERE salary<50000;
E, naturalmente, aumenteremo di 2 volte lo stipendio del regista, come potrebbe essere senza di lui:
UPDATE employee SET
salary = salary*2
WHERE id=4;
4.2 Scenari complessi di modifica dei dati
Se decidi di modificare i dati in più tabelle contemporaneamente o quando modifichi i dati in una tabella, devi riempirla con i dati di un'altra o semplicemente in qualche modo utilizzare i dati di un'altra tabella nel processo di modifica della prima, poi ci aspettano sorprese.
Proviamo a cambiare il livello di tutti gli utenti nella tabella degli utenti che esistono nella tabella dei dipendenti. Per semplicità, verificheremo la coincidenza degli utenti per nome.
Come vorremmo scrivere questa query:
UPDATE user SET
level = 80,
WHERE user . name IN ( list of names from employee table );
Bene, aggiungiamo un elenco di nomi dalla tabella dei dipendenti a questa query:
UPDATE user SET
level = 80,
WHERE user.name IN (select name from employee);
Interessante! La stessa query SQL per ottenere i nomi si è rivelata ancora più breve della descrizione dell'attività. I creatori di SQL non hanno mangiato il loro pane invano.
Costretto a sconvolgerti -questo approccio non funzionerà. Per prima cosa devi unirti a queste tabelle, sarà simile a questa:
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;
Rendiamolo un po' più difficile. È necessario impostare il livello su 80 solo per i buoni impiegati il cui stipendio sarà superiore a 50k. La soluzione completa sarà simile a questa:
UPDATE user, good_employees SET
user.level = 80
WHERE user.name = good_employees.name;
Tale join di tabelle è in realtà INNER JOIN
, in modo che alla fine rimarranno solo gli utenti che hanno una corrispondenza per nome nella seconda tabella.
Ma abbiamo ancora bisogno di selezionare in qualche modo buoni dipendenti, quindi aggiungiamo altro codice:
SELECT * FROM employee WHERE salary >= 50000
E ora sostituiamo questa tabella nella nostra query finale:
UPDATE user,
(SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
user.level = 80
WHERE user.name = good_emps.name;
Conviverci ora.
GO TO FULL VERSION