Sunteți pe pagina 1din 3

Comanda UPDATE Comanda UPDATE este folosit pentru a modifica valorile datelor existente n tabele.

Sintaxa uzual a comenzii UPDATE prezint urmtoarele variante: 1)


UPDATE tabel SET coloana1 = expresie1, coloana2 = expresie2, ... [WHERE condiie];

2)
UPDATE tabel SET coloana1 = expresie1, coloana2 = expresie2, ... FROM tabele_cuplate [WHERE condiie];

Clauza FROM este o extensie specifica SQL Server, inexistenta n standardul SQL92 . Prin aceast extensie se poate specifica o cuplare de mai multe tabele care se poate folosi n locul unei fraze Select imbricat n clauza WHERE. Sunt acceptate toate tipurile de asocieri (Inner, Left, Right, Full) sunt acceptate i reyultate obinute din fraze Select. Comanda UPDATE modific valorile nregistrrilor n funcie de condiia clauzei WHERE. n lipsa clauzei WHERE, vor fi actualizate toate nregistrrile din tabelul dat. Expresia furnizat ca valoare nou a unei coloane poate cuprinde valorile curente ale cmpurilor din nregistrarea care este actualizat. Exemple:
update tProduse set pret=pret*1.1 update tProduse set pret=pret*0.95 where categoria = Alimentare update tProduse set pret=pret*0.95 where codProd in (select codProd from tProduse where categoria = Alimentare) update tProduse set pret=CASE When pret<100 then pret*1.1 When pret<200 then pret*1.08 When pret<300 then pret*1.05 Else pret*1.03 END

Presupunnd c avem un tabel tModiPret cu structura:


create table tModiPret ( codProd char(10) primary key, procent float )

ce conine procentele diferentiate de modificare a preturilor anumitor produse, Pentru a modifica datele din tabela tProduse pe baza datelor din tabela tModiPret se poate folosi urmtoarea comand care conine tabele corelate

update tProduse set pret=pret*1.1 from tProduse A inner join tModiPret B on A.codProd=B.codProd

sau
UPDATE tProduse SET pret=pret*(1+ (SELECT procent FROM tModiPret A WHERE A.codP=tProduse.codProd)/100) WHERE codProd IN (SELECT codProd FROM tModiPret);

Obs. Daca nu includem conditia


WHERE codProd IN (SELECT codProd FROM tModiPret)

atunci
(SELECT procent FROM tModiPret A WHERE A.codP=tProduse.codProd)/100)

Va returna null pentru valorile din coloana codProd ce nu se gasesc n tModiPret i prin urmare pentru aceste coduri, pret va fi setat cu null

Dac tabelul de actualizat este implicat n diverse legturi cu alte tabele ca partea unu a unei legturi unu la multi i opiunea update cascading este activat atunci orice modificare n cmpul de legatur va fi propagat i n tabelele secundare corelate
ALTER TABLE tDetaliiBon ADD FOREIGN KEY(CodProd) REFERENCES tProduse (CodProd) on update cascade update tProduse set codProd ='p101' where codProd='p1'

va produce automat modificarea n tabelul tDetaliiBon din codProd='p1' n codProd ='p101' Comanda DELETE Comanda DELETE realizeaz tergerea nregistrrilor dintr-un tabel n funcie de anumite condiii. Comanda DELETE terge numai nregistrri din tabel nu i tabelul. Pentru a terge un tabel se folosete comanda DROP TABLE. Sintaxa uzual a comenzii DELETE prezint urmtoarele variante: 1)
DELETE [FROM] tabel [WHERE condiie];

2)
DELETE [FROM] tabel FROM tabele_cuplate [WHERE condiie];

Similar comenzii UPDATE, comanda DELETE terge anumite nregistrri n funcie de condiia din clauza WHERE. n lipsa clauzei WHERE vor fi terse toate nregistrrile din tabelul dat. n aceast clauz pot fi incluse i subinterogri. De exemplu urmtoarea comand terge toate nregistrrile pentru care gradul didactic este asistent
DELETE tDetaliiBon

terge toate rndurile tabelului tDetaliiBon


DELETE tDetaliiBon where NrBon=101

terge toate rndurile tabelului tDetaliiBon pentru care NrBon=101


DELETE tDetaliiBon from tBonuriConsum A inner join tDetaliiBon B on A.NrBon=B.NrBon where dataBon <'01/01/2008' DELETE tBonuriConsum where dataBon <'01/01/2008'

Dac tabelul din care tergem este implicat n diverse legturi cu alte tabele ca partea unu a unei legturi unu la multi i opiunea delete cascading este activat atunci tergerea unui rnd va genera tergerea tuturor rndurilor ce corespund la cheie din tabelele secundare corelate.
alter table tDetaliiBon add constraint Fk_NrBon_tDet foreign key(NrBon) references tBonuriConsum (NrBon) on delete cascade delete from tBonuriConsum where NrBon='104'

va produce stergerea automat din tabelul tDetaliiBon a tuturor rndurilor pentru care NrBon=104 Comanda TRUNCATE Pentru a terge n mod rapid toate nregistrrile dintr-o tabel se folosete comanda TRUNCATE cu urmtoarea sintax:
TRUNCATE TABLE tabel

Exemplu
truncate table tModiPret

tergerea nregistrrilor cu ajutorul comenzii TRUNCATE este mult mai avantajoas dect eliminarea tabelului i recrearea lui ulterioar deoarece eliminarea tabelului necesit recrearea indecilor, constrngerilor de integritate, declanatoarelor etc.

S-ar putea să vă placă și