Sunteți pe pagina 1din 4

BAZE DE DATE SEMINAR 3

___________________________________________________________________________

ACTUALIZAREA TABELELOR - COMENZI LMD


(Data Manipulation Language Limbaj de Manipulare a Datelor)
Comanda
Scop
INSERT
Adauga o noua inregistrare in tabela
UPDATE
Modifica valorile unor inregistrari din tabele
DELETE
Sterge inregistrari din tabele
MERGE
Actualizeaza o tabela in functie de anumite conditii
SELECT
Regaseste inregistrari in tabele sau vederi (view).
Dupa actualizarea datelor se va utiliza comanda SELECT * FROM nume_tabela; pentru a
vizualiza rezultatele!

ADAUGAREA INREGISTRARILOR COMANDA INSERT


Inregistrarile se pot adauga in tabele in mai multe moduri:
- precizand explicit in sintaxa comenzii valorile
- cu ajutorul variabilelor de substitutie
- pe baza valorilor din alte tabele
a) Precizarea explicita a valorilor introduse se realizeaza cu comanda:
INSERT INTO nume_tabela VALUES (lista de valori pentru fiecare coloana in ordinea in
care sunt declarate coloanele in tabela);
Atentie! Trebuie precizate valori pentru toate coloanele tabelei.
Vezi scriptul pentru adaugarea inregistrarilor in tabelele utilizate ca exemplu.
Descarcati
de
pe
site
scriptul
de
adaugare
http://bd.ase.ro/uploads/bd_seminar_zi/ru_lmd.txt
O varianta a acestei comenzi este urmatoarea:
INSERT INTO nume_tabela (lista de coloane) VALUES (lista de valori pentru fiecare
coloana);
Exemplu 1. Sa creeze tabela salariati pe baza tabelei angajati fara a prelua si inregistrarile
(doar structura) si sa se adauge un nou angajat
CREATE TABLE salariati AS SELECT * FROM angajati WHERE 2=3;
INSERT INTO salariati (id_angajat, nume, salariul) VALUES (207, 'Ionescu', 4000);
INSERT INTO salariati (id_angajat, nume, salariul) VALUES (207, 'Poppescu', 4200);
SELECT * FROM salariati;

b) Adaugarea inregistrarilor pe baza valorilor din alte tabele:


1

BAZE DE DATE SEMINAR 3

___________________________________________________________________________
INSERT INTO nume_tabela SELECT */lista de coloane
FROM tabela_sursa
[WHERE conditie];
Exemplul 2. Sa se adauge in tabela salariati toti angajatii din tabela angajati care lucreaza in
departamentele 20, 30 si 50. Si sa se finalizeze tranzactia (salvarea modificarii).
INSERT INTO salariati SELECT * FROM angajati
WHERE id_departament IN (20, 30, 50);
SELECT * FROM salariati;
COMMIT;
c) Utilizarea variabilelor de substitutie pentru adaugarea inregistrarilor pe baza
valorilor introduse de utilizator de la tastatura:
INSERT INTO
nume_tabela
(lista
coloane)
VALUES
(&valoare_coloana1,
&valoare_coloana2,...);
Exemplul 3. Sa se adauge in tabela salariati un angajat ale carui date sunt introduse de
utilizator de la tastatura
INSERT INTO salariati (id_angajat, nume, data_angajare, salariul)
VALUES ('&id_angajat','&nume', TO_DATE('&data_angajare', 'mon dd, yyyy'), '&salariul');
Atentie! Pentru data_angajare se va utiliza functia de conversie TO_DATE.
Ex: TO_DATE('jan 20, 2005','mon dd, yyyy')

MODIFICAREA DATELOR COMANDA UPDATE


Sintaxa comenzii este:
UPDATE nume_tabela SET nume_coloana = valoare
[WHERE conditie];
Exemplul 4. Sa se creasca cu 100 salariul angajatilor din tabela salariati care au salariul mai
mic decat 3000:
UPDATE salariati
SET salariul=salariul+100
WHERE salariul<3000 AND comision IS NULL;
SELECT * FROM salariati;
Exemplul 5. Sa se actualizeze salariul angajatilor al caror manager are id = 122 cu salariul
angajatului cu id = 125.
UPDATE salariati
SET salariul=(SELECT salariul FROM salariati WHERE id_angajat=125)
WHERE id_manager=122;
Exemplul 6. Sa se actualizeze salariul si comisionul angajatilor din tabela salariati cu salariul
si comisionul anagajatului cu id_angajat = 167 din tabela angajati, doar pentru angajatii care
au salariul mai mic decat salariul angajatului cu id = 173 din tabela angajati si care lucreaza in
departamentul 50.
UPDATE salariati SET (salariul, comision)=(SELECT salariul, comision FROM angajati
WHERE id_angajat=167)
2

BAZE DE DATE SEMINAR 3

___________________________________________________________________________
WHERE salariul < (SELECT salariul from angajati WHERE id_angajat = 173) AND
id_departament =50;

STERGEREA DATELOR COMANDA DELETE


Sintaxa comenzii este:
DELETE FROM nume_tabela
WHERE conditie;
Exemplul 7. Sa se stearga angajatii din tabela salariati care au id_manager egal cu 122 sau
123.
DELETE FROM salariati
WHERE id_manager IN (122, 123);
Exemplul 8. Sa se sterga angajatii din tabela salariati angajati inainte de anul 1999.
DELETE FROM salariati
WHERE data_angajare<TO_DATE('01-01-1999','DD-MM-YYYY');
Exemplul 9. Sa se sterga toti angajatii din tabela salariati. Sa se anuleze tranzactia.
DELETE FROM salariati;
SELECT * FROM salariati;
ROLLBACK;
SELECT * FROM salariati;

ACTUALIZAREA DATELOR CU COMANDA MERGE


Sintaxa comenzii este:
MERGE INTO nume_tabela USING nume_tabela_sursa
ON (conditia_de_legatura)
WHEN MATCHED THEN
UPDATE SET nume_coloana=valoare
WHEN NOT MATCHED THEN
INSERT VALUES (lista_valori);
Exemplul 10. Sa se actualizeze tabela salariati astfel incat toti salariatii din tabela salariati sa
aiba salariile egale cu cei din tabela angajati, iar pentru cei care nu sunt in tabela salariati sa se
adauge valorile coloanelor (id_angajat, nume, salariul) din tabela sursa agajati. Sa se numere
inregistrarile din cele doua tabele si sa se explice diferenta. Sa se finalizeze tranzactia.
MERGE INTO salariati USING angajati
ON (salariati.id_angajat = angajati.id_angajat)
WHEN MATCHED THEN
UPDATE SET salariati.salariul=angajati.salariul
WHEN NOT MATCHED THEN
INSERT
(id_angajat, nume, salariul) VALUES (angajati.id_angajat, angajati.nume,
angajati.salariul);

BAZE DE DATE SEMINAR 3

___________________________________________________________________________
SELECT COUNT (*) FROM salariati;
SELECT COUNT (*) FROM angajati;
COMMIT;