Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Sql


Index » educatie » » informatica » Sql
» Limbajul de manipulare a datelor


Limbajul de manipulare a datelor


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';





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate