Sunteți pe pagina 1din 50

Veniamin Bulat

Ion DamaskIn
Microsoft SQL Server
Baze de date
O baza de date e un ansamblu structurat de
date, inregistrat pe suporturi accesibile
calculatorului pentru a satisface simultan
cerintele mai multor utilizatori intr-un mod
selectiv si in timp util.`
PA! SQL SERVER invatat!
cum se cereaza si se acceseaza o baza de date.
PA!
Tema :BD relationare
1)fisiere si baza de date
2)dictionarul datelor
3)termenii-BD si sistemul de gestiune a BD
4)indipendenta a datelor
5)modelele de date:ierarhic,retea si relational...
6)functii unui SGBD
7)arhitectura unui SGBD
8)LDD libbaj de definire a datelor
9)limbaj de manipulare a datelor
10)Rolul persoanelor in elaborarea a BD

11)schema LGBD
12)clasificarea SGBD

ldd - limbaj de definire a datelor (ddl)


lmd - limbaj de manipulare a datelor
lc - limbaj de control
rolul persoanelor in elaborarea, utilizarea bazelor
de date
schema lgbd
clasificarea gbd
sgbd e un ansamblude program ce face toate
operatiile cu baze de date:
deschiderea, citirea, afisarea....
orice baza de date are un dictionar ce contine
informatia despre baza de date
e o baza de date despre alta baza de date.
baza de date are in ansamblu obiectele:
tabelele, formularele, aplicatii, rapoarte,
utilizatorii, programatorii, administratorii
sgbd e un complect de programe

tabelul
are nume
este creat din coloane ce au nume
valorile coloanelor formeaza inregsistrarea
fiecare tabel nu depinde ordinea coloanelor
tabelul trebuie sa aiba 1+ campuri cu valori unice
defineste in mod unic o inregistrare cu chei
primare
independenta datelor:
pentru a asigura independenta
nivelul extern sa nu depinda de nivelul fizic
sunt multe modele de bd
1 model ierarhic
2 model retea
3 model relational

limbaj de definire a datelor

instructiuni:
create- creaza
alter - modifica
drop - sterge
limbaj de manipulare a datelor
Insert
Update
delete-

- introducerea datelor
-

limbaj de control
LC
revoke (rewoke) restrictioneaza accesul
Grant
permite accesul
Schema sgbd
lista de module
lista de actiuni
PA!
de adus cate o pagina de informatie la fiecare
intrebare de la lectie 1..12

Raport...: titlu, sarcina, introducere, cuprins


Evidenta manualelor din grupa noastra.
denumirea, cine a imprumutat, disciplina
luni 5-a LucruIndividual BD
TEMA: Algebra relationala, operatii cu tabele
selectia
proiectia
diviziunea
jonctiunea
(zigma) conditie (R)

SELECT Nume_elev, adr_elev from nume_tabel


WHERE nume_elev like A*
alias - porecla
junctiuni externe
outer join - se iau 2 tabele afisarea totala a
continutului
A left outer
Tema de azi: dependente functionale

tipruile de dependente functionale


reguli de inferenta
inferenta = axioma
tipuri de dependente relationale:
simpla = x -> y (x il determina pe y)
petntru orice x y primeste valoare
dependente ... = constringeri, explicit .
ca sa facem constringeri prin dependente functionale se subintelegecada
oricarui element al unei multimi A i se pune in
corespondenta (i se asociaza) un element Y care
are aceleasi valori pentru aceleasi valori a lui Y
(valorile lui X si Y pot fi diferite)
o dependenta functionala poate fi reprezentata
printr-un tabel grafic sau diagrama.
definitie: dependenta functionala defineste relatia
dintre un atribut sau mai multe atribute ale
aceluiasi tabel sau mai multe atribute a altui
tabel.
dependente functionale e un grup de
constrangeri ce asigura integritatea datelor din
baza de date si, practic, au fost prinele
constrangeri fata de baza de date.

atributul de care depinde un alt atribut se


numeste determinant x->y (x este determinant)
iar atributul care este determinat este determina
elevi (cod personal al elevului [cheia primara],
nume, prenume, adresa, grupa)
codul personal este determinantul iar restul este
determinat
constringerile dependentelor relationale nu pot fi
demonatrate, nu sunt cerinte a lumii reale, dar
sunt niste legaturi (cerinte) "logice" intre atribute
stabilite atat de viata cat si de administratorul
bazei de date.
Clase{CodClasa, Locatie, NrMese, NrTable}
Finisat raportul 1. done.
Raportul:
2 Tema:
2.1
Proiectarea bazei de date
.2
stabilirea scopului (studierea sistemului)
.3
selectarea datelor (stabilirea datelor)
.4
stabilirea coloanelor in tabele
.5
pasii de proiectare a bazei de date
.6
coordonarea cu patronul
3

crearea bazei de date (instructiunile tranzact


SQL)
4
bbelelor
5
modificarea/stergerea structurii (alter)
popularea bazei de date (insert)
actualizarea/modificarea datelor (update)
stergerea datelor (drop)
9 selectarea datelor (select)
9.1
selectarea datelor dintr-un tabel
9.2
selectaera datelor din mai multe tabele
selectarea utilizand subinterogari
selectarea utilizand jonctiuni
interogari cu agregari
interogari combinate (cu operatori de multimi)
elaborarea de formulare
crearea de rapoarte
concluzia (am obtinut cunostinte, abtitudini,
indeletniciri), bibliografia

PA! comentat fiecare instructiune


Tema: normalizrea datelor
normalizarea bazelor de date (descompunerea)
formele normale (FN1 - FN5) = niste reguli
impuse fata de tabel
algoritmi de normalizare prin descompunere, si
verificare (se verifica daca s-a descompus corect)
Formele normale
se elimina elementele/datele redundante (care se
repeta)
FN1
cere ca toata atributele sa fie indivizibile (sa aiba
doar o valoare ce nu poate fi descompusa in alte
atribute)(sa nu fie atribute compuse)
proiectarea se efectueaza in 2 moduri:
1 descompunerea tabelului utilizand formele
normale FN1..FN5
2 descompunerea tabelului in mai multe tabele
utilizand matricea dependentelor functionale
FN2 atributul care nu e cheie - sa depinda de
intreaga cheie
daca si numai daca e in forma normala FN1 si
atributul noncheie depinde de cheia intreaga
(sa apara mai multe tabele)

FN3
daca satisface FN2 si nu exista atribute tranzitive
(care depinde de lol1 prin lol2)
pretul depinde de cheie da reducerea depinde de
pret (reducerea depinde tranzitiv de ID)
Pentru descompunerea tabelelor (normalizare)
exista algoritmi speciali de descompunere a
tabelelor pentru formele normale 2, forma
normala BScod , forma normala 4 si 5
la fel exista si algoritmi de verificare daca la
descompunere nu a avut loc pierderea de date.

Crearea bazei de date :


1 inventarierea (gasim toate datele pe care le
vom introduce

pasi:
1 inventarierea
2 normalizarea
3 discompunerea atributelor (adaugarea
coloanelor pentru campuri (telefon fix, domestic,
lucru)
determinam cheile si vedem ca toate atributele
sa depinda de intreaga cheie

daca cheia primara e din 2 coloane ap vedem ca


atributele 4, 5 sa depinda de primele

PA! Lucrare de control + infor despre FN4 si FN5


invatat algoritm join fara pierdere
Trebu de adus baza mea de date normalizata
Data viitoare invatam limbaje de definire (creare)
a bazelor de date.
PA! foaia de titlu, sarcina, introducerea,
proiectarea bazei de date (pasii 1..6), 1
inventarierea atributelor, 2 chei primare, 3
tabele, 4 redundanta, aruncarea, 5

pasii de proiectare:
pentru ce noua baza de date?
domeniul de aplicare a bazei de date.
ce date trebuie introduse in baza de date?
informatia reprezinta cand sunt mai multe date
care au o legatura intre ele, cand exista legatura
- datele devin informatii.

PA! de perfectionat raportul


foaia de titlu tiparita, sarcina tiparita,
introducerea, crearea, 0,5 pagini de explicatii la
comenzi, comenzile, tipuri, constangeri...

notiuni despre limbajul de interogare a bazei de


date
limbajul de interogare are 2 posibilitati:
de a interoga,
SQL e limbaj neprocedural, dar permite de a
scrie proceduri.

tipuri de date
avem tipuri de date numerice care coincid.
timestamp
PA! descrierea tuturor tipurilor de date (lungimea
si pentru ce sunt prevazute) din SQL Server.

Daca vin si spun 5 caracteristici nespuse a


limbajelor de interogare, am 10.
//////////////redundanta (repetarea cand de mai
multe pro se repeta o valoare)
tema:
proiectarea bazei de date
etape:
1 acumularea datelor (studierea sistemului,
domeniului, )
nr.data
1
2

| denumirea datelor
| nume_student
| prenume student

| sursa datelor
| catalog
| catalog

Firma comerciala
1 | produs
| document de instire |
2 | cantitate |
3 | producator|
4 | pret
|
5 |adresa pr. |
6 |nm.client | Liste
7 |pers.contct |
8 |adresa clientului|

Produse
Producatori
Clienti
Produse
| Produsul nm Producator

produse

produs cantitate pret produse adresa


umbrela
|clienti| - <comanda> - |produs|
comanda
Producator
|--------------------------------------------------------------------------|
|
|
|
|
The ALTER TABLE statement is used to add, delete, or
modify columns in an existing table.

SQL ALTER TABLE Syntax

To add a column in a table, use the following syntax:

ALTER TABLE table_name


ADD column_name datatype
To delete a column in a table, use the following syntax
(notice that some database systems don't allow deleting a
column):

ALTER TABLE table_name


DROP COLUMN column_name
To change the data type of a column in a table, use the
following syntax:
SQL Server / MS Access:

ALTER TABLE table_name


ALTER COLUMN column_name datatype
My SQL / Oracle (prior version 10G):

ALTER TABLE table_name


MODIFY COLUMN column_name datatype
Oracle 10G and later:

ALTER TABLE table_name


MODIFY column_name datatype

PA! descrierea tuturor tipurilor de date (lungimea


si pentru ce sunt prevazute) din SQL Server.
Crearea bazei de date, tabele,
limbaj(instructiuni) de manipulare a datelor.
Operatii aritmetice, expresii, functii.
w
sa se scrie instructiunea de creare a tabelului
produse cu campurile id_produs int,
nume_produs char(50), id_producator int, pret
decimal, descriere_produs text(memo);
CREATE TABLE Produse(
id_produs int,

nume_produs char(50),
id_producator int,
pret decimal(10,2),
descriere_produs text)
In baza faptului c nu a fost indicata
constrangerea Not NULL si nici NULL, implicit se
considera NULL

sa se creeze tabelul comenzi cu campurile


nr_comanda, data_comanda, id_client, toate
campurile cu constrangerea NOT NULL, campul
nr_comanda de tipuk INT, data_comanda de tipul
DATE, id de tipul INT
campul nr_comanda cu constrangerea PRIMERY
KEY.
CREATE TABLE Comenzi(
NrComanda
INT IDENTITY(1,1) PRIMARY
KEY,
DataComanda DATE NOT NULL DEFAULT
GETDATE(),
--cu valoarea implicita = valoarea functiei ce
intoarce data din computer
idClient
INT NOT NULL
--CONSTRAINT Fk - ClientiId FOFOREIGN KEY
idCLIENT REFERENCES Client(IDCLIENT)

La crearea tabelului a fost declarata suplimentar


fata de campuri cheia straina, constrangerea cu
numele fkClient, constrangerea cheiaStraina,
campul idClient, cu referire la tabelul
Client(idClient)
crearea unui tabel cu instructiunea create table
poate fi efectuata cu instructiunea create tavle si
cu instructiunea alter table
cu instructiunea create tabeldescriem campurile
iar cu instructiunea alter table descriem
constrangerile
(creez baza de date produse)
majoritatea sgbd-urilor dispun de asistenti de
creare a bazelor de date dar poate fi creata si
prin metode de programare limbajul sql cum a
fost demonstrat mai sus
sintaxa instructiunilor sql poate devia putin de la
sgbd la sgbd din care motiv se recomanda
1 sa metinem standardul limbajului
instructiunile pot fi divizate in mai multe linii dar
se recomanda formatele aduse in exemplele de
mai sus
Limbaj de modificare
modificarea structuri tabelului se efectueaza cu
instructiunea ALTER TABLE dar este recomandat
sa se efectueze ct mai rar
-------------------------------------------------------

sa se efectueze o proiectare corecta si reusita


majoritatea sgbd-urilor permit un numar limitat
de modificari a structurii tabelelor si un numar si
mai limitat dupa popularea bazei de date
majoritatea sgbd-urilor permit adaugarea unui
camp nou , modificarea tipului (intr-un tip
compatibil, doar marind lungimea)
exemplu: sa se scrie instructiunea ce modifica
structura tabelului COMENZI prin adaugarea
campului infoClient de tipul char(100) cu
constrangerea NULL.
ALTER TABLE Comenzi ADD COLUMN ClientInfo
char(100), NULL.
sa se modifice campul introdus prin majorarea
lungimii pana la 200 de caractere
pentru modificari mai serioase a structurii
tabelelor se recomanda efectuarea urmatoarelor
actiuni in "mod manual":
1 se creaza un tabel cu structura dorita
2 se copie datele dorite prezente din alt tabel,
cu instructiunea insert into -select sau/ | create
table - select
3 se nimiceste tabelul vechi
4 se modifica numele tabelului nou in numele
tabelului vechi
5 se modifica declanatoarele, tranzaciile
corespunztoare dac necesita
ALTER TABLE Comenzi ADD COLUMN ClientInfo

char(200), NULL.
Stergerea unui camp se efectueaza
DROP COLUMN InfoClient;
sa se scrie instructiunea care elimina
constrangerea cheii primare la tabelul Comenzi,
campul DataComenzi
ALTER TABLE Comenzi DROP CONSTRAINT
PKComenzi;
instructiunea va fi corecta doar in cazul cand
cheia primara a campului nrComanda va avea
numele PKComenzi.
pentru atribuirea de nume a cheii primare
constrangerea trebuie sa fie declarata fie la
sfarsitul declararii campurilor in instructiunea
CREATE TABLE, fie cu instructiunea alterTable,
dupa cuvantul cheie Constraint.
s se scrie instruciunea de dezactivare a unei
constrangeri (de dezactivare a constrangerii cheii
primare a tabelului Comenzi)
-- DISABLE PRIMARY KEY
ALTER INDEX PKComenzi DISABLE
redenumirea tabelelor sau a campurilor, daca
sunt acceptate, se efectueaza fie prin
instructiunea RENAME dar majoritatea sgbdurilor utilizeaza procedura SP_RENAME
unele sgbd-uri pot cere numele vechi si numele

nou.
exemplu SP_RENAME 'COMENZI ','ComenziNou';
sa se schimbe numele campului nrComanda in
numele numarComanda, din tabelul comenzi.
SP_Rename
'Comenzi.NrComanda','NumarComanda'
Column...
este de dorit ca la crearea structurii tabelelor sa
se utilizeze la maximum constrangerile, dar, sata
poate duce la cresterea timpului de executie a
modificarilor bazei de date, ceea ce ne impune sa
alegem varianta optimala, sa gasim un
compromis intre timpul de exeutie i numarul de
constrangeri pentru verificare
un exemplu de instructiune cu verificari la
maximum a corectitudinii datelor.
create table raionul(
nrai char(2)
primary key;
check (nrai = LTRIM(UPPER(nrai))),
ERROR 'Indicativul judetului se scrie cu
majuscule'
raion char(25);
not null
check (raion= LTRIM(PROPER(raion)));
ERROR 'prima litera din fiecare cuvint
al'+chr(13)+;

'denumirea raionului este majuscula'+chr(13)+;


'resul literelor mici!',;
regiune char(5) default 'centru'
CHECK (inlist(regiune','centru','Nord','sud'));
error 'regiunea poate avea doar o valoare din
lista'+chr(13)+;
'centru, nord, sud '; ) ;

Daca vin si spun 5 caracteristici nespuse a


limbajelor de interogare, am 10.
n cele ce urmeaz vom prezenta, prin intermediul unor exemple, trei abordri ale
limbajului de cereri n modelul relaional:
Algebra relaional.
Calculul pe tupluri.
Calculul pe domenii.

Interogrile sunt de mai multe tipuri:


de selecie (SELECT) permit afisarea datelor
din una sau mai multe tabele, pe baza unor criterii de
selecie, calcularea unor cmpuri si afisarea datele
ordonate dup anumite cmpuri cresctor sau
descresctor;
de sintetizare a datelor (TOTAL) permit
selectarea unor cmpuri ca criterii de grupare, fiind
aplicate diverse funcii: SUM, MIN, MAX, COUNT, etc;
de analiz ncrucisat (CROSSTAB) de analiz
ncrucisat a datelor;
de aciune (MAKE TABLE, APPEND, UPDATE,
DELETE);

speciale (UNION, PASS THROUGH, DATA


DEFINITION). Cel mai des ntlnite si utilizate sunt
interogrile de selecie.
Interogri cu parametru
n cazul interogrilor de selecie se pot utiliza parametrii.
Dac se doreste citirea interactiv de la tastatur a unei
valori a unui cmp, n vederea verificrii unui criteriu si a
afisrii datelor din tabel/tabele, pe linia Criteria se introduce
ntre paranteze drepte un text, de exemplu [Introduceti data
facturii]. Acest text va fi interpretat ca un parametru,
construindu-se automat pentru acest parametru o caset de
introducere a valorii. Va fi evaluat valoarea citit de la
tastatur, se verific egalitatea cu valorile din cmpul pe
care este plasat parametrul, si anumte [data facturii], si sunt
afisate nregistrrile care verific condiia [data
facturii]=valoarea introdus de la tastatur.

sa se creeze tabelul folosind inserarea pe mai


multe randuri;

interogarea bazei de date


clauzele whery order by group harding.
Selectarea datelor dintr-un tabel, folosirea
functiilor in cereri (in SELECT)

profu da instructiunea da noi scriem setul


dinamic
operanzi : denumiri de campuri, constante,
variabile...
operatii: + - * / and or not
instructiunea SELECT dispune de urmatoarele
clauze:
FROM - specifica numele tabelului din care se
extrag randurile specificate in SELECT
WHERE - se scrie conditiile de filtrare a randurilor
din tabel
SELECT - indica campurile, coloanele
WHERE - indica randurile
daca WHERE nu e utilizat - vor fi preluctate toate
randurile din tabel
indeosebi la instructiunea delete si la
instructiunea update
GROUP BY - permite aranjarea inregistrarilor pe
grupe - o grupa este creata din aceleasi valori a
campului specificat in clausa
gruparea se efectueaza dupa ultimul camp daca
se specifica mai multe campuri in GROUPBY
HAVING - este clauza de filtrare pentru setul
dinamic (rezultatul instructiunii SELECT)
este echivalent cu WHERE ...
ORDER BY - ordoneaza inergistrarile conform

valorilor campurilor specificate in clauze


clauza WHERE permite specificarea de conditii de
filtrare atat utilizand expresii simple precum si
instructiuni de tipul SELECT uniuni
Selectarea unei coloane dintr-un tabel
sa se selecteze din campul client coloana cu
numele clientilor

SELECT nume_client, contactClient


FROM Clienti ORDER BY nume_client
SELECT NumeClient FROM Clienti
WHERE contactClient = 'JonetaSusan'
SELECt NumeClient, idClient
FROM Clienti
WHERE emailclient IS NULL;

SELECT NumeProdus, PretProdus


FROM Produse
WHERE PretProdus > 5;
SELECT PretProdus

FROM Produs
WHERE PretProdus BETWEEN 5 AND 10;
SELECT NumeProdus, PretProdus
FROM Produse
WHERE NumeProdus LIKE 'R%'

SELECT PretProdus
FROM Produse
WHERE PretProdus IN (5.99, 4.99, 8.99);
SELECT idProdus, PretArticol * Cantitate AS Cost
FROM ArticolComandat;
SELECt idProdus, PretProdus * 0.01
FROM ArticolComandat;
SELECT RTRIM (NumeClienti) + '(' +
RTRIM(taraClient)+')' AS numeformatat
FROM Clienti
WHERE idclient = '1000000001';
suma tuturor costurilor produselor comandate
SELECT SUM(Pretunitar * Cantitate) AS CumCost
FROM ArticolComandat;

PA! sa scriem setul dinamic la fiecare instructiune


(rezultatul)

TRMa: interogarea bazei de date


Instructiunea select
1 Activizarea(Crearea) bazei de date Produse;
Pentru aceasta gasim instructiunile in mapa si le
lansam in executie
2 Executarea instructiunilor SELECT de la lectia
de curs, descrierea lor i scrierea setului dinamic
obtinut la calculator.
select id_client, count(*) from Comenzi group by
id_client having count(*) < 2;
sa se scrie instructiunea ce afiseaza numarul
maximal de produse a unui producator;
select id_prod, count(*) from produse

selectarea datelor din mai multe tabele


pate fi efectuata in 3 moduri:
1 utilizand subinterogari - o interogare utilizata
in alta interogare (nu ut
2 utilizand multimile

sa se scrie interogarea ce afiseaza numele


clientilor si campul contact_clienti care au
comandat produsul rgan01 utilizand
subinterogarile.
select nume_client, contact_client
FROM Clienti
where id_client IN (Select id_client from Comenzi
where Numar_Comanda in(select
Numar_comanda from Articol_comandat
where id_produs = 'rgan01'));
prima subinterogare (care e la nivelul inalt),
selecteaza produsul 20008, 20007,
daca in interogarea 2, inloc de interogare punem
20008, 20007 - vom primi acelasi rezultat.
Vom obtine codul clientilor care au efectuat
aceste comenzi,
acestia sunt 10..04, 10..05;
se fa afisa franzeluta, magazinul jucariilor, cu
contactele lor;
prin utilizarea uniunilor, carora li se da prioritate
la extragerea datelor din mai multe tabele, (se
executa mai rapid), instructiunea va fi mai
scurta(constrinsa), insa mai greu de inteles;
SGBD-urile permit utilizarea urmatoarelor tipuri
de uniuni;
echiuniuni - interioare, utilizeaza semnul '=' intre

coloanele cheie (externe si primare)


autouniuni - unirea tabelului cu el insusi aceluiasi tabel, i se atribuie 2 aliasuri diferite,
acre se considera ca 2 tabele care vor fi unite.
uniuni naturale - sunt uniunile ce exclud datele
(coloanele) care se repeta in ambele tabele;
pentru aceasta, pentru unul din tabele utilizam
caracterul de inlocuire "*", in SELECT, pentru
celelalte tabele, specificam campurile
corespunzatoare (evident - care nu se repeta in
prima)
uniuni externe - permit de a extrage inregistrari
din mai multe tabele si care nu sunt corelate.
adica campurile cheie primara si cheie externa nu sunt egale;
pentru crearea uniunilor avem mai multe
posibilitati:
a) fie ca in clauza FROM enumeram tabelele
separate prin virgula, iar in/prin clauza WHERE
specificam condiia de unire si conditia de
filtrare(faca e necesar)
b) utilizam cuvintele in clauza FROM intre tabele,
INNER JOIN, pentru uniuni interioare, sau
echiuniuni, OUTER JOIN, pentru uniuni externe.
LOuter - stinga, ROUTER - din dreapta
FULLOUTER din ambele parti.
sa se scrie instructiunea ce afiseaza numele
producatorului, numele produsului, pretul

produsului, nume producator,


(nume producator e in tabelul producator,
produsele - in produse)
SELECT Nume_Producator, nume_produs,
pret_produs
FROM producatori, Produse
WHERE produse.id_prod = producaori.id_prod;
-- conditie de unire interioara (echiuniune)
//deoarece este semnul egal;;;
vom scri aceeasi instructiune cu inner join
SELECT Nume_Producator, nume_produs,
pret_produs
FROM producatori INNER JOIN Produse
ON Produse.id_prod = Producatori,id_prod;
Utilizarea uniunilor externe
//sistemul ORACLE nu admite cuvintul cheie AS
la atribuirea de alias-uri,
SELECT C.id_client, O.Numar_Comanda,
C.nume_client
FROM Clienti AS C LOUTER Join Comenzi
ON C.id_client = id_clienti;
id_client NumarComanda

nume Alias

pentru extragerea datelor din "mai multe tabele "


avem si alta posibilitate - utilizarea interogarilor
combinate.

Interogarile combinate sunt interogarile care,


intre ele, se semneaza operatorul UNION,
EXCEPT, - , etc.
pentru a scrie interogari combinate este de
ajuns: sa scrim prima interogare, apoi
UNION/EXCEPT, apoi alta interogare...
PA! sa se scrie lista clientilor si a producatorilor
corespunzator, produsele carora au fost
comandate;
din indicatiile profesorului - sa se scrie conspect,
instructiunile aduse, sa se scrie efectul lor, si
setul dinamic;
se va verifica: (acolo sunt instructiuni
intortochiate, ) instructiunile ce nu se refera la
BD_Produse, sa se modifice pentru baza de date
Produse, ca sa se primeasca instructiuni
echivaente, la care sa se scrie explicatii (fara
setul dinamic).

Laborator
sa se scrie instructiunile pentru baza de date din
proiectul nostru:
extragerea unei coloane, extragerea mai multor
coloane, extragerea tuturor coloanelor.

instructiuni cu operatori de relatie >/< = !=


instructiuni cu operatori logici(5) : OR NOT AND
(cate una pentru fiecare, una cu mai multe, si
una cu NOT(impreuna cu <>))
operatori BE, TO, IS, IS NULL, IS NOT NULL LIKE
(3) (se incepe cu o litera, se afla la mijloc, la
urma, incepe cu o litera "[s%"
selectarea datelor din mai multe tabele:
sa avem o subinterogare, uniune simpla unde nu
folosim inner/outer join, uniuni cu sintaxa
innerjoin/outer join si *= ,autouniuni si uniuni
naturale.
2 instructiuni combinate (una cu union si una cu
EXCEPT)
4. interogarea bazei de date
prin interogarea bazei de date se subintelege
extragerea anumitor date de interes.
Aceasta operatie e cea mai frecvent utilizata intro baza de date.
Bazad e date contine cantitati mari de informatii,
insa la un anumit moment, si e convenabil de
lucrat doar cu un volum mic de date.
Pentru interogarea bazei de date se utilizeaza
instructiunea select
cu clauzele: FROM, WHERE, GROUP BY, HAVING,

ORDER BY.
dupa SELECT se permite de a specifica coloanele
ce vor fi extrase sau coloanele ce vor fi calculate,
precum si atribuirea de denumiri "clare" =
aliasuri.
Clauza from permite de a specifica, indica
tabelele in care se contin campurile specificate in
select. Precum si indicarea/stabilirea tipului de
uniri a tabelului.
Clauza WHERE este optionala - in caz de nu este
indicata/utilizata/specificata, vor fi prelucrate
toate inregistrarile tabelului. O deosebita atentie
acestei clauze este in instructiunea DELETE si
UPDATE.
Daca nu se utilizeaza clauza - vor fi
sterse/modificate toate randurile.
Pentru instructiunea SELECT de a specifica
conditii simple sau sofisticate (complicate) de
selectare a randurilor tabelelor specificate in
FROM care contin coloane specificate in SELECT.
4.1 Extragerea datelor dintr-un singur tabel.
Lista cu puncte ....
selectarea datelor unei singuri coloane:
SELECT nume from Stari, posesori WHERE
(posesori.id = stari.id_p and stari.stare =

'nesat');
extragerea mai multor coloane
SELECT nume, denumire_manual from Stari,
posesori,manual WHERE (posesori.id = stari.id_p
and stari.stare = 'nesat' and manual.ID_manual
= stari.id_m);
* extragerea tuturor coloanelor
SELECT * FROM Posesori;
* instructiuni cu operatori de relatie <
SELECT denumire_manual FROM Manual WHERE
(anul < '2014');
* instructiuni cu operatori de relatie >
SELECT denumire_manual FROM Manual WHERE
(anul > '2014');
* instructiuni cu operatori de relatie =
SELECT denumire_manual FROM Manual WHERE
(pret = '50');
* instructiuni cu operatori de relatie !=
SELECT denumire_manual FROM Manual WHERE
(anul != '2014');
* instructiuni cu operatori logici
SELECT denumire_manual FROM Manual WHERE
NOT (anul != '2014');
* instructiuni cu operatori logici OR
SELECT denumire_manual FROM Manual WHERE
(ID_editura LIKE '01' OR ID_editura LIKE '04');
* instructiuni cu operatori logici AND
SELECT denumire_manual FROM Manual WHERE
((ID_editura LIKE '03' OR ID_editura LIKE '04')
AND (anul = '2013' OR anul = '2014');
* operator IS NULL

SELECT * FROM Stari WHERE id_m IS NULL;


* Operator IS NOT NULL
SELECT * FROM Manual WHERE pret IS NOT
NULL;
* Operator LIKE, se incepe litera specificata
SELECT * FROM Manual WHERE anul like '[0%';
* Operator LIKE, cu ultima litera specificata
SELECT * FROM Manual WHERE anul LIKE '%4';
* Operator LIKE, cu o litera din interior
specificata
SELECT * FROM Manual WHERE anul LIKE
'%0%';
* selectarea datelor din mai multe tabele cu
subinterogari
selectarea datelor din mai multe tabele:
sa avem o subinterogare, uniune simpla unde nu
folosim inner/outer join, uniuni cu sintaxa
innerjoin/outer join si *= ,autouniuni si uniuni
naturale.
2 instructiuni combinate (una cu union si una cu
EXCEPT)
// nu e obligatoriu, asa se recomanda
Pe data viitoare, la laborator, trebuie sa predau
tema:
modificarea datelor cu ajutorul interogarilor
Importarea datelor din alte surse: (alte baze de
date, sau chiar excel) prin interogari, cu
instructiuni
elaborarea interogarilor de actiuni.

PA! Evaluare, teorie 30min.


numarul produselor a producatorului furdui.
select count(id_produs) FROM
Produse,producatori
WHERE (produse.id_prod = Producatori.id_prod
and Producatori.nume_prod like "Furdui");

sa se afiseze numele clientului ce a efectuat


comanda 20006
select nume_client from clienti, comenzi where
(comenzi.id_client = clienti.id_client and
comenzi.NumarComanda = '20006');
numarul de produse de la data de 05.01.2004

data de astazi
interogari de modificare a datelor
interogari cu actiuni

import, export.
modificarea datelor intr-o baza de date se
efectueaza cu comanda update (interogari cu
aciuni)
in comanda update specificam numele tabelului,
comanda SET, numele campului(coloanei) semnul
"Egal" i valoarea nou a cmpului.
s se scrie instruciunea ce modific valoarea
cmpului email_client, atribuindu-i o adres de
email a clientului ce nu dispune ce nu dispune de
email.
In comanda UPDATE poatefi utilizata clauza
WHERE i se recomand mai mult ca att ca
condiie de filtrare e recomandat s se utilizeze
cheia primar a rndului
dac clauza WHERE nu persist, atunci cu
valoarea specificat n SET vor fi modificate
vaorile tuturor rndurilor.
Sa se scrie instructiunea ce modifica din tabelul
Clienti campul email_client a clientilor ce nu
dispun de email.
UPDATE Clienti
SET email_client = 'mail1@mail.ru'
WHERE email_client IS NULL;

in baza faptului ca in tabelul clienti avem 2 clienti


fara email, clientul cu 1000003 10200034 nu au
email, valoarea mail1@mail.ru va fi adresa de
email la ambii clienti ceea ce este incorect, din
motiv c condiia de filtrare nu a fost dat corect.
Se recomanda de utiliza ca condiie de filtrare
ID_Client
din care motiv vom modifica adresa celui de-al 2lea client.
Sa se modifice din tabelul clienti valoarea
campului email_client, in valoarea
i1436@mail.md, a clientului cu codul 1000005
UPDATE Clienti
SET email_client = 'i1436@mail.md'
WHERE id_client = 1000005;
cu instructiunea UPDATE putem modifica
simultan valorile la mai multe coloane, atat la
mai multe randuri cat si la un singur rand.
Pentru aceasta. in comanda UPDATE, dupa
cuvantul SET, se scrie separata prin virgula
urmatoarea pereche;
<camp> = <valoarea noua>
Sa se scrie comanda ce modifica data comenzii in
data de astazi si id a clientului la comanda cu
numarul 20008

UPDATE Comenzi
SET DataComanda = GETDATE, ID_Client=
'1000005'
WHERE NumarComanda = 20008

Pe data viitoare, la laborator, trebuie sa predau


tema:
modificarea datelor cu ajutorul interogarilor
Importarea datelor din alte surse: (alte baze de
date, sau chiar excel) prin interogari, cu
instructiuni
elaborarea interogarilor de actiuni.
PA! Evaluare, teorie 30min.
Update pe o coloana
Upadte pe mai multe coloane
Update pe o coloana si mai multe randuri.
Delete pe unul sau mai multe randuri.
Lucrare de control pe instructiunea SELECT cu
setul dinamic.

Modificarea si stergerea datelor

PA!
Comanda DELETE.
referat la tema import, export;
Update Produse
SET Pret_Produs = 15
WHERE IDprodus = 'BR03';
Sa se modifice pretul producatorului id_prod din
3.49 in valoarea 5
UPDATE Produse
SET Pret_Produs = 5
WHERE ID_prod = 'DLL01';
Sa se modifice la producatorul cu codul 'JTS01'
numele producatorului si statul producatorului;
Update Producatori
SET nume_prod = 'Garuta',
stat_prod = 'Cahul'
Where id_prod = 'JTS01';

Stergerea
Pentru a sgerge o coloana
DELETE FROM Comenzi
WHERE Numar_Comanda = 20005
AND Numar comanda = 20008;

majoreaza pretul produselor comandate cu 20 %


UPDATE ArticolComandat
SET Pret_articol = Pret_articol/100*120;
indeci i tranzacii
o vedere este un tabel virtual, da nu e asa ca
interogarea creaza si afiseaza un tabel virtual.
o vedere contine o interogare cu nume care
poate fi salvata.
avem posibilitatea de a modifica vederile,
in sql server avem OR REPLACE , atunci aam
posibilitatea sa modific, sau spoate de facut
ALTER VIEW
vederile sunt utilizate pentru instructiuni
complicate

CREATE VIEW ClientProdus AS


SELECT NumeClient, ContactClient
FROM Clienti, Comenzi, ArticolComandat
WHERE Client.id_client
IN (
Select id_Clienti
FROM Comenzi
WHERE Numar_comanda
IN (
SELECT NumarComanda
FROM ArticolComandat))
Index-ul se utilizeaza pentru tabele mari.
index-ul mareste viteza de cautare in tabele
mari.

PA! conspect : pasii de creare a indicilor


The CREATE INDEX statement is used to create indexes
in tables.
Indexes allow the database application to find data
fast; without reading the whole table.

Indexes
An index can be created in a table to find data
more quickly and efficiently.
The users cannot see the indexes, they are just
used to speed up searches/queries.

Note: Updating a table with indexes takes more


time than updating a table without (because the
indexes also need an update). So you should
only create indexes on columns (and tables) that
will be frequently searched against.
SQL CREATE INDEX Syntax
Creates an index on a table. Duplicate values are
allowed:
CREATE INDEX index_name
ON table_name (column_name)
SQL CREATE UNIQUE INDEX Syntax
Creates a unique index on a table. Duplicate
values are not allowed:
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
Note: The syntax for creating indexes varies
amongst different databases. Therefore: Check
the syntax for creating indexes in your database.
CREATE INDEX Example
The SQL statement below creates an index
named "PIndex" on the "LastName" column in
the "Persons" table:
CREATE INDEX PIndex
ON Persons (LastName)
If you want to create an index on a combination
of columns, you can list the column names within
the parentheses, separated by commas:
CREATE INDEX PIndex
ON Persons (LastName, FirstName)

Laborator
sa se execute instructiunile de modificare a
datelor:
1
sa se modifice in baza de date produse campul
stat_client in valoarea ch a clientului cu codul
100..3
UPDATE Clienti
SET stat_client = "Ch"
WHERE id_client = "1000000003";
in tabelul ArticolComandat sa se modifice
pret_articol a articolelor codul carora incepe cu
RGA
UPDATE ArticolComandat
SET Pret_articol = 10
WHERE id_produs LIKE "RGA%";
In tabelul comenzi sa se stearga randurile la care
anul din data_comanda este 2004
DELETE FROM Comenzi
WHERE '2014'
IN(SELECT EXTRACT(YEAR FROM
DataComanda));
EXTRACT(YEAR FROM DataComanda) = '2004';

CREATE VIEW ClientProdus AS


SELECT NumeClient, ContactClient
FROM Clienti, Comenzi, ArticolComandat
WHERE Client.id_client
IN (
Select id_Clienti
FROM Comenzi
WHERE Numar_comanda
IN (
SELECT NumarComanda
FROM ArticolComandat))

Sa se modifice in tabelul produse numele


produselor care incep cu o cifra iar valoarea noua
sa fie ultimul cuvant din denumirea actuala a
produsului.
SET @subdesc=RTRIM(LEFT(SELECT Nume_produs from Produse
where nume_produs between '0%' and '9%', CHARINDEX(' ', @desc)
- 1));

UPDATE Produse
SET nume_produs
=REPLACE(nume_produs,RTRIM(nume_produs),'
% ', '')
WHERE nume_produs

Sa se creeze vederea in modul interactiv, care ne


va afisa produsele comandate de clientii din
statul Db, sa se scrie rezultatele executiei si
vederea in caiet,
sa se creeze index pentru coloana Nume_prod a
tabelului producatori i pentru coloana cantitate
a tabelului ArticolCmoandat.

indexarea trebu de invatat


Chetrean
sa se creeze vederea cu numele Chetream ce
afiseaza comenzile comandate de chetrean in
anul 2016
Create VIEW Chetrean AS
SELECT numarComanda FROM Comenzi, Clienti
WHERE clienti.id_client = comenzi.id_client
AND clienti.nume_client = 'Chetrean'
AND '2016' = EXTRACT(YEAR FROM
DataComanda);

UPDATE Clienti

SET email_client = "mailu meu"


WHERE email_client IS NULL;
functii si proceduri
trigger-e (declansatoare)
Limbajul Tranzact SQL, permite, ca si orice limbaj
de programare, de a crea functii utilizator practic
cu aceleasi caracteristici ca limbajele de
programare de nivel innalt ;
functia poate dispune de parametri SQL duspune
de functii standarte
independent de tipul valorii baza, avem 2 tipuri
de functii:
a) functii de tip scalar (functia ce intoarce o
valoare de un tip definit in SQL_Server)
b) functii de tip tabelar (functii care returneaza
un set de inregistrari si poate fi asimilat unui
tabel virtual)
avantajele utilizarii functiilor sunt:
1) permite utilizatorului de a crea module
structurate, programe structurate
2) micsoreaza volumul codului de program
3) functiile create pot fi utilizate in vederi
Procese de utilizare a functiilor in proceduri
permite scrierea de coduri clare.
Crearea functiilor se efectueaza cu instructiunea
CREATE FUNCTION FSQL
(ListaDeParametriOptionala) Blocul Functiei

SQL dispune de proceduri de mai multe tipuri


cum ar fi:
Proceduri rezidente
O procedura Rezident reprezinta un set d
einstrutiuni SQL grupate logic si care efectueaza
o anumita sarcina(sub algritm)
Proceduri rezidente sunt obiecte a bazei de date
si pot fi utilizate atat in modul interactiv cat si in
proceduti
3 proceduri de sistem sunt proceduri definite de
utilizatori pe sql server care suunt puse la
dispozitia utilizatorului si sunt memorate in baza
de date master.
numele acestor proceduri se incep cu prefixul
SP_DATABASES (afizeaza toate bazele de date de
pe server)
SP_Columns - afiseaza informatiile dsepre
coloanele tabelului specificat ca parametru
SP_HELP afiseaza informatia despre obiectul
specificat din baza de date
AP_EXECUTESQL - permite executarea unor
instructiuni SQL specificate ca parametru.
SP_RENAME - redenumeste un obiect in baza de
datel
SP_SPACEUSED - afiseaza numarul de
inregistrari si spatiul utilizat de un alt tabel sau
vedere pe server.
Proceduri stocate - proceduri creat de utilizatori

si stocate pe server cu un anumit nume care pot


fi apelate si se compileaza la executare
o procedura stocata este un set de instructiuni
care pot fi utilizate ca un obiect intreg avand
prioritatea pemiterea comiterii de erori,
executarea corecta a ordinii instructiunilor,
micsoreaza viteza de executare
1 Crearea procedurii
CREATE PROCEDURE proceduramea(lista
parametri)
2 executarea procedurii
EXEC numeprocedura(lista de parametri)
3 compilarea procedurii se efectueaza in
momentul executarii
4 executarea de catre server a procedurii
Declansatoare (TRIGGER) sunt proceduri care
sunt "legate" de un anumit tabel si o anumita
(anumite) operatii, de tipul INSERT, Update,
aceste proceduri se executa automat cand se
executa operatia pentru care au fost create a
tabelului specificat.
Utilizarea declansatoarelor permit efectuarea de
operatii in alte tabele in functie de modificarile
dintr-un tabel, de exemplu: adaugarea de

inregistrari in tabelul ArticolComandat, daca s-a


introdus o comanda de inregistrare in tabelul
comenzi.
efectuarea de validari suplimentare
Determinarea coloanelor cu valoare calculata
CREATE TRIGGER Stat_Client
ON Clienti
FOR INSERT, UPDATE
AS UPDATE Clienti
SET Stat_Client = UPPER(stat_Client)
WHERE id_Client = inserat.id_client;
Daca trigger-ul e creat pentru comanda INSERT
atunci sunt vizibile doar datele noi inserate.
daca TRIGGER e creat pentru update - sunt
accesibile atat datele noi inserate cat si datele
vechi
TRIGGER-ul creat pentru DELETE permite accesul
la toate datele din tabel
PA! de scris procedura ce adauga un produs nou
in tabelu produse , bomboane meteorit, a
producatorukui jts1, cantitatea si pretul la
alegere.
De creat TRIGGER de inserare a unei comenzi in
tabelul comenzi, si in tabelul articol comandat
randurile corespunzatoare+
de creat tranzacii de stergere a comeniloe dun

tabelul comenzi care au depasit termenul de


realizare lab partea a 2-a
crearea bazei de date, interogarea de toate
tipurile, modificarea de toate tipurile, vederile,
import a datelor, back-up-ul la baza de date,
concluzia

Victor Goncear cerinte profesor:


baza de date magazin produse alimentare
id_producator
den-produsului
contact_produc
str_prod

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