Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
LIMBAJUL DE MANIPULARE AL DATELOR
Limbajul de manipulare cuprinde instructiunile : INSERT, UPDATE, DELETE, LOAD si UNLOAD.
Scopul acestui capitol este sa invatam si sa scriem urmatoarele instructiuni:
INSERT -pentru a introduce date intr-un tabel;
UPDATE -pentru modificarea datelor dintr-un tabel;
DELETE -pentru stergerea de date dintr-un tabel;
LOAD -pentru adaugarea de linii intr-un tabel dintr-un fisier
UNLOAD pentru creearea unui fisier ce contine date dintr-o baza de date.
Instrunctiunea INSERT
Instructiunea INSERT este utilizata pentru a insera o linie sau un grup de linii intr-un tabel si are urmatoarea sintaxa:
INSERT INTO nume-tabel[lista de coloane]
VALUES
EXECUTE (nume_procedure)
Exemplu 1.
INSERT INTO stock VALUES(120, 'ANS','Lame de ras',195,'cutii','cutii de 5');
Observatie. Valorile din lista VALUES sunt intr-o corespondenta bijectiva cu coloanele din tabelul specificat.Ordinea valorilor este exact ordinea coloanelor din stock.O alta cerinta este ca valorile din clauza VALUES a instructiunii INSERT trebuie sa fie constante si nu expresii sau una din functiile specificate in cazul informix-ului.Daca se incearca sa se insereze o valoare care nu este permisa intr-o coloana(de exemplu, o valoare NULL intr-o coloana care nu permite valori nule, instructiunea nu se va executa (nu se termina)).
In exemplul de mai sus lista de coloane va fi omisa daca datele vor fi inserate in toate coloanele tabelului.Exista o singura valoare pentru fiecare coloana a tabelului.Daca nu avem valori in lista de valori pentru toate coloanele din tabel trebuie sa specificam pentru ce coloane se insereaza date prin introducerea coloanelor respective in lista.
INSERT INTO stock (manu_code, stock_nume) VALUES ('ANZ',130);
INSERT INTO stock (manu_code, stock_nume) VALUES ('NRG',130);
Coloanele neincluse in lista vor primi valoarea NULL sau valorile implicite.
INSERT INTO customer VALUES(0,'John','Doc','My Sport','A.I.Cuza 46',NULL
'Men.Park','CA','94030','415-555-1212');
Se poate utiliza instructiunea SELECT in locul clauzei VALUES intr-o instructiune INSERT pentru a copia informatii dintr-un alt tabel.
INSERT INTO closed_orders
SELECT *
FROM orders
WHERE paid_date IS NOT NULL
INSERT INTO stock
SELECT stock_nume, manu_code, description, unit_price
FROM stock
WHERE unit='case'
Aceasta se refera la inserarea mai multor linii. Este inserata o linie pentru fiecare linie returnata de o instructiune SELECT. Utilizarea unei instructiuni SELECT intr-o instructiune INSERT permite, de asemenea, sa inseram valori calculate, deoarece lista SELECT poate contine expresii. Rezultatele interogarii trebuie sa corespunda exact cu lista de coloane din instructiunea INSERT (sau a intregului tabel, daca lista de coloane este omisa).
Instructiunea SELECT nu se poate referi la tabelul in care se doreste sa se insereze linii. in cazul cand se doreste sa se faca aceasta, va trebui sa se faca selectia intr-un tabel temporar si apoi selectul dintr-un tabel temporar in tabelul in care s-a inserat.
Instructiuna UPDATE
Instructiunea UPDATE este utilizata pentru a schimba continutul unei coloane sau a mai multora, din una sau mai multe linii ale tabelului. Clauza WHERE a instructiunii UPDATE este utilizata pentru a specifica ce linii sunt actualizate. Fara clauza WHERE, toate liniile din tabelul specificat vor fi actualizate.
Sintaxa generalaa:
UPDATE SET clauza [WHERE conditie]
SET nume_coloana[,nume_coloana] . ) =
Exemplul 1. Acesta da o forma a instructiunii UPDATE
UPDATE customer
SET company='College Sports', phone='510-655-0011'
WHERE customer_nume=118
In acest exemplu nu toate liniile vor fi actualizate deoarece customer_nume este cheie primara a tabelului customer, conditia WHERE din aceasta instructiune asigura ca cel mult o linie din tabelul customer va fi modificata.
Exemplu 2.
UPDATE client
SET adresa='A.I.Cuza 13',
oras='Craiova',
WHERE nr_client=50;
In acest exemplu sunt utilizate o serie de atribuiri pentru a specifica valorile noilor coloane.
Exemplu 3.
UPDATE stoc
SET pret_unitar=pret_unitar*1.05
.
In exemplul 3 se actualizeaza o coloana in toate liniile.
Exemplul 4.
UPDATE orders
SET ship_date, ship_weight, ship_charge)=('3/30/99','50.50,20)
WHERE order_num=1002
In acest exemplu se actualizeaza 3 coloane din linia in care order_num este 1002. Lista de valori contine 3 constante ce specifica noile date .Aceasta este o sintaxa alternativa utilizata la exemplele 1 si 2. Daca se doreste sa se actualizeze numai o linie atunci specificati coloana(ele) ce formeaza o cheie primara in clauza WHERE.
Exemplul 5.
UPDATE client
SET (nume, prenume ('Albu','Petre')
WHERE Nr=111
Exemplul 6.
UPDATE orders
SET ship_struct='ASAP'
WHERE order_date >'6/1/98
AND customer_num IN
(SELECT customer_num
FROM customer
WHERE city='San Diego')
in acest exemplu se utilizeaza o subintrebare in instructiunea UPDATE care conditie se bazeaza pe informatii selectate .O subintrebare poate aparea in clauza SET (exemplul 7) a instructiunii UPDATE sau in clauza WHERE (exemplul 6).
Exemplul de mai sus schimba instructiunile de livrare pentru comenzile plasate de clientii din orasul San Diego, dupa data 6/1/98.
Exemplul 7.
UPDATE produs
SET (Nr_stoc, Cod_interprindere, Cantit
(SELECT Nr_stoc, Cod_interprindere,Cantit
FROM stoc
WHERE descriere='autovehicul')
WHERE nr_produs=100
AND nr_comanda=1000
Istructiunea DELETE
Instructiunea DELETE este utilizata pentru a sterge o linie sau un grup de linii dintr-un tabel.Ea are urmatoarea sintaxa generala:
DELETE FROM
[WHERE conditie]
Daca se utilizeaza instructiunea DELETE fara clauza WHERE, atunci se sterg toate liniile din tabel. Daca utilizati DELETE in interiorul unei tranzactii, ea este considerata ca o singura tranzactie
Utilizarea clauzei WHERE specifica una sau mai multe linii pe care dorim sa le stergem . Conditiile WHERE sunt aceleasi ca si cele din instructiunea UPDATE.
Exemplul 1.
DELETE FROM produs
WHERE nr_comanda<100
Aceasta instructiune sterge toate liniile din tabelul produs in care numarul comenzii este mai mic decat 100.
Exemplul 2.
DELETE FROM items
WHERE order_num IN
(SELECT order_num
FROM orders
WHERE order_date<'1/1/98';
Exemplul 3.
DELETE FROM orders
WHERE order_date<'1/1/98';
In exemplul 2 se sterg toate articolele din comenzile anterioare datei de 1 ian 1998. Deoarece data nu este in tabelul items, este utilizata o intrebare pentru a obtine linii corecte.
In instructiunea din exemplul 3 se sterg toate liniile din tabelul orders cu data de livrare anterioara lui 1 ian 1998.
CREATE TABLE Student
(NrLeg nvarchar(5) primary key not null,
Nume nvarchar(20),
Initiala char(1),
Prenume nvarchar(20),
Sex char(1) DEFAULT 'M' CHECK (Sex IN
('M','m','F','f')),
Data_nastere smalldatetime,
Starecivila nvarchar(1) CHECK (Starecivila IN ('C','N')) ,
Grupa nvarchar(5) )
CREATE TABLE Discipline
(Cod_disciplina varchar(3)primary key not null,
Denumire varchar(20),
Sem varchar(2) check (Sem IN ('I','II')),
Anul varchar(1) check (Anul Between '1' AND '6'))
CREATE TABLE Catalog (
NrLeg nvarchar(5) NOT NULL,
cod_disciplina varchar(3) NOT NULL,
Nota Numeric(2),
Data smalldatetime,
foreign key (NrLeg) references Student,
foreign key(cod_disciplina) references Discipline)
INSERT INTO Student VALUES('101','Popescu','I','Alina','f',CONVERT(smalldatetime,'23/9/1988',103),'C','221')
INSERT INTO Student VALUES('102','Popescu','V','Octavian','m',CONVERT(smalldatetime,'9/9/1989',103),'C','222')
INSERT INTO Student VALUES('103','Lupu','T','Dragos','m',CONVERT(smalldatetime,'12/07/1989',103),'N','223')
INSERT INTO Student VALUES('104','Ursu','C','Mihaela','f',CONVERT(smalldatetime,'21/11/1989',103),'N','222')
INSERT INTO Student VALUES('105','Georgescu','I','Ion','m',CONVERT(smalldatetime,'2/2/1987',103),'C','223')
INSERT INTO Student VALUES('106','Ionescu','I','ANDrei','m',CONVERT(smalldatetime,'9/6/1987',103),'C','222')
INSERT INTO Student VALUES('107','Dragut','G', 'Cristian', 'm', '11/11/1986','N','222')
INSERT INTO Student VALUES('108','Dinu' ,'M' , 'Sorin', 'm' , '01/01/1988','N','222')
INSERT INTO Student VALUES('109','Albu','C', 'Dumitru', 'm', '12/11/1986','N','223')
INSERT INTO Discipline VALUES('1','Probab&stat','I','1')
INSERT INTO Discipline VALUES('2','Baze de date1','I','1')
INSERT INTO Discipline VALUES('3','Baze de date2','II','1')
INSERT INTO Discipline VALUES('4','IA','I','1')
INSERT INTO Discipline VALUES('5','Java','II','1')
INSERT INTO Discipline VALUES('6','Geometrie comp','I','1')
INSERT INTO Catalog VALUES('101','1','8','1/1/2006')
INSERT INTO Catalog VALUES('101','2','6','2/2/2006')
INSERT INTO Catalog VALUES('101','3','10','2/5/2006')
INSERT INTO Catalog VALUES('101','4','9','2/7/2006')
INSERT INTO Catalog VALUES('101','6','7','2/3/2006')
INSERT INTO Catalog VALUES('101','5','7','1/15/2006')
INSERT INTO Catalog VALUES('102','5','9','1/11/2006')
INSERT INTO Catalog VALUES('102','1','5','1/1/2006')
INSERT INTO Catalog VALUES('102','4','4','10/1/2006')
INSERT INTO Catalog VALUES('103','1','10','1/1/2006')
INSERT INTO Catalog VALUES('103','2','10','1/7/2006')
INSERT INTO Catalog VALUES('103','4','6','2/2/2006')
INSERT INTO Catalog VALUES('103','5','10','2/5/2006')
INSERT INTO Catalog VALUES('104','5','5','1/11/2006')
INSERT INTO Catalog VALUES('104','1','3','1/1/2006')
INSERT INTO Catalog VALUES('104','4','4','10/1/2006')
INSERT INTO Catalog VALUES('105','1','10','1/1/2006')
INSERT INTO Catalog VALUES('105','5','10','2/2/2006')
INSERT INTO Catalog VALUES('105','3','10','2/5/2006')
INSERT INTO Catalog VALUES('106','5','2','1/11/2006')
INSERT INTO Catalog VALUES('106','1','5','1/1/2006')
INSERT INTO Catalog VALUES('106','2','4','10/1/2006')
INSERT INTO Catalog VALUES('107','2','10','10/1/2006')
INSERT INTO Catalog VALUES('108','1','8','1/1/2006')
INSERT INTO Catalog VALUES('109','1','9','2/1/2006')
INSERT INTO Catalog VALUES('108','2','8','1/1/2006')
INSERT INTO Catalog VALUES('103','6','10','2/5/2006')
Instructiunea LOAD
Instructiunea LOAD poate fi utilizata la a insera date dintr-un fisier al sistemului de operare intr-un tabel existent al bazei de date. Instructiunea LOAD este utila pentru operatii batch de mutare a datelor de pe un calculator pe altul.Liniile de date inserate utilizate de instructiunea LOAD sunt adaugate ca noi linii in tabel.Datele existente nu sunt suprascrise.
Sintaxa generala:
LOAD FROM 'nume_fisier_sistem' INSERT INTO nume_tabel
Nume_fisier_sistem contine datele care se insereaza in tabelul cu nume_tabel.
Exemplul 1.
LOAD FROM 'state noi' INSERT INTO 'state'
Liniile de date inserate prin utilizarea instructiunii LOAD sunt adaugate ca noi linii in tabel.In cazul din exemplul 1. adaugaram la tabelul state doua tari :Great BritaIn si Romania.Simbolul '
este delimitator intre valorile coloanelor.El poate fi specificat ca parte a instructiunii LOAD
Exemplul 2.
LOAD FROM 'state noi' DELIMITER
INSERT INTO state
Gb| Great Britain
Ro| Roumanie
Unde am specificat | ca delimitator.
Nu pot fi folosite ca delimitator orice caracter ,ca de exemplu litere, cifre, spatii si
Exemplul 3.
LOAD FROM 'clienti noi'
INSERT INTO clienti
(Nr_client, Nume, Prenume)
In acest exemplu se specifica coloanele daca fisierul din care se incarca nu contine date pentru toate coloanele din tabelul nostru.
In exemplul 3, fisierul contine date numai pentru coloanele nr_client, nume si prenume ale tabelului clienti.Daca nu se include o lista de coloane in clauza INSERT INTO, campurile din fisier care nu sunt date de incarcare trebuie sa fie identica cu coloanele din tabelul specificat. Daca nu se specifica nici o valoare pentru o coloana, atunci va fi inserata o valoare NULL sau valoarea implicita. Totusi, o cloana seriala nu va accepta valori NULL pentru care se poate utiliza zero.
Instructiunea UNLOAD
Instructiunea UNLOAD este utilizata pentru a converti liniile negasite intr-o instructiune SELECT, ca fisier ASCII Aceasta este necesara cand trebuie sa mutam date, derulam un calculator in altul.
Sintaxa generala:
UNLOAD TO 'nume_fisier [DELIMITER ';']
SELECT lista de coloane
FROM nume_tabel
[WHERE conditie
Exemplu.
UNLOAD TO 'clienti noi' DELIMITER
SELECT *
FROM clienti WHERE Nr_client>200
Clienti_noi
Albu ;Ion; Electro ;Craiova;
131 ;Negru;Gh ; Daewoo;Craiova;
Daca nu s-a specificat delimitatorul, se ia implicit ,/'.
Exercitii:
INSERT INTO stat
VALUES ('Ro','Romania');
UPDATE clienti
SET stat='Ro'
WHERE stat='R' AND oras='Cluj';
UNLOAD TO 'apeluri_vechi'
SELECT *
FROM apeluri
WHERE data_livrarii=NOT NULL
DELETE FROM apelari
WHERE data_l IS NOT NULL
INSERT INTO stoc
(Nr_stoc, cod_fabrica, descriere, pret_unit)
VALUES 11,'Electro','locomotive',1.000.000.000);
INSERT INTO stoc
VALUES 11,'Electro','locomotive',1.000.000.000,NULL,NULL);
UPDATE stoc
SET (pret_unitar, unit_de_masura, unit_desen
(85,'cutii','iug/cutii')
WHERE nr_stoc=11
AND cod_fabrica='SMT';
UPDATE comenzi
SET pret_unit=pret_unit*110
WHERE data IS NULL
AND nr_client IN
(SELECT nr_client
FROM client
WHERE stat='CA');
LOAD FROM 'apelari_noi'
INSERT INTO apelari
DELETE FROM stoc
WHERE nr_stoc=11
AND cod_fabrica='SMT';
Copyright © 2024 - Toate drepturile rezervate