Sunteți pe pagina 1din 49

Suport de curs – Gestiunea bazelor de date

t
Conf. Univ. Dr. Cătălin Tudor

r i g h
op y
C
BAZE DE DATE – Concept general

Organizarea datelor în baze de date


 Conceptul de bază de date:
Baza de date = un ansamblu de structuri de
date corelate logic şi funcţional, memorate pe
suporturi adresabile, ce pot fi accesate simultan de mai
mulţi utilizatori, în mod selectiv şi în timp real.
 Scop: regăsirea rapidă a informației de orice
tip, prin stabilirea de criterii de interogare
definite de utilizatori.
 Utilizatorii bazei de date:
 Administratorul bazei de date
 Analistul/proiectantul bazei de date
 Programatorii de aplicații
 Utilizatorii finali

Cătălin Tudor 1
Suport de curs – Gestiunea bazelor de date

Structuri de date:

• O structură de date corespunde unei clase


(grupări) de obiecte reale sau conceptuale şi are
ca atribute caracteristicile acestor obiecte.
• Se identifică printr-un nume unic şi se
reprezintă în planul datelor printr-o mulţime de
realizări (înregistrări).
• Gestiunea datelor se focalizează pe precizarea

t
structurilor de date şi a relaţiilor care există

h
între realizările acestora.

y r i g
C op
BAZE DE DATE – generalităţi

Cerinţe pentru gestiunea corectă a


datelor
• Independenţa datelor faţă de programele de
aplicaţii:
 Baza de date trebuie să aibă o structură de sine-
stătătoare, a cărei existenţă să nu depindă de alte
programe care o utilizează.
• Asigurarea unei structuri cât mai puţin redundante:
 Informaţiile din cadrul unei baze de date trebuie să fie
unice (să nu se repete) în cadrul bazei de date.
• Integritatea datelor:
 Datele trebuie să respecte diverse restricţii şi corelaţii
logice între ele, restricţii ce împiedică apariţia erorilor
logice sau structurale la nivelul bazei de date.

Cătălin Tudor 2
Suport de curs – Gestiunea bazelor de date

Considerente în alegerea unei soluţii pentru


managementul datelor:
• volumul de date ce urmează a fi stocat şi procesat
• gradul de expunere la riscuri
• tipul de aplicaţii care vor exploata datele (aplicaţii
web, aplicaţii de tip business intelligence, sisteme
informatice clasice, etc)
• previziunile de extindere pe termen mediu în
privinţa volumului de date din cadrul organizaţiei
• costurile de licenţiere şi politica de licenţiere a
producătorului

i g h t
y r
C op

Cătălin Tudor 3
Suport de curs – Gestiunea bazelor de date

Server de date: un SGBD avansat instalat, de


regulă, pe o staţie de lucru mai puternică, cu rolul
de a furniza informaţii într-o organizaţie.

Pentru volum mare de date (server database) • Flexibilitate


• Performate crescute in procesarea datelor
► Microsoft SQL Server • Facilitati complexe de administrare
• Instrumente specifice pentru analiza datelor
► Oracle (implementarea tehnologiilor Datawarehouse si
Dataminining)

t
► IBM DB2
• Securitate sporita a datelor

h
► Sybase • Scalabilitate

y r i g
C op
 Desemnează relaţia dintre două entităţi
software care partajează sarcini comune
într-o reţea de calculatoare.
 Un program care poartă denumirea de
client, iniţiază o cerere informaţională
către un alt program, denumit server,
capabil să furnizeze răspunsul la cererea
clientului .
 Avantajul principal:
• accesul permanent la date din orice locaţie a unei
instituții sau organizații, prin conectarea tuturor
aplicaţiilor client la o singură bază de date.

Cătălin Tudor 4
Suport de curs – Gestiunea bazelor de date

 Clientul – este entitatea care


• asigură interfaţa cu utilizatorul,
• lansează cereri de executare a unor operaţii către o
entitate server
• afişează datele primite de la server într-un format
inteligibil pentru utilizator.

 Serverul – este entitatea care


• Recepţionează cererile lansate de clienţi,
• interpretează comenzile,
• execută operaţiile necesare

t
• furnizează răspunsul către client.

r i g h
op y
C
Exemplificarea generică a relației
Client-Server

Cătălin Tudor 5
Suport de curs – Gestiunea bazelor de date

Exemplu de utilizare a tehnologiei


Client – Server într-o organizaţie

i g h t
y r
C
 Client-Server
op se bazează pe trei
componente:
• logica prezentării (responsabilă cu interfaţa grafică expusă
utilizatorilor);
• logica procesării (responsabilă cu gestionarea şi aplicarea
tuturor regulilor legate de managementul şi prelucrarea
datelor);
• logica stocării datelor (ce va gestiona păstrarea şi
extragerea datelor).
 În funcție de modul de grupare a
componentelor Client-Server, există:
• Arhitectura client-server pe două nivele (two tiers)
• Arhitectura client-server pe trei nivele (three tiers)
• Arhitectura client-server multi-nivel (n tiers)

Cătălin Tudor 6
Suport de curs – Gestiunea bazelor de date

Tipologia sistemelor Client-Server

Arhitectura client-server pe două nivele (two tiers)

•Logica prezentării: Calculatorul Client

t
•Logica datelor: Calculatorul Server

g h
•Logica procesării: împărțită între Client și Server

y r i
C op
Tipologia sistemelor Client-Server

Arhitectura client-server pe trei nivele (three tiers)

•Logica prezentării: Calculatorul Client


•Logica datelor: Calculatorul Server
•Logica procesării: Serverul de aplicație

Cătălin Tudor 7
Suport de curs – Gestiunea bazelor de date

Tipologia sistemelor Client-Server


• Arhitectura client-server multi-nivel (n tiers)

•Logica prezentării: Calculatorul Client

t
•Logica datelor: Calculatorul Server

g h
•Logica procesării: Server de aplicație și Server Web

y r i
C op
Tipuri de date în SQL Server
 Categorii de tipuri de date:
 Numere exacte
 Şiruri de caractere non-Unicode
 Şiruri de caractere Unicode
 Numere aproximative
 Şiruri de caractere binare
 Dată și oră
 Alte tipuri de date

Cătălin Tudor 8
Suport de curs – Gestiunea bazelor de date

Tipuri de date în SQL Server


 Numere exacte  Numere aproximative
 Numere întregi  Float
 bigint  Real
 int
 Şiruri de caractere non-
 smallint
 tinyint
Unicode
 bit  char

 Numere cu zecimale  varchar


 Decimal  text
 Numeric  Şiruri de caractere Unicode
 Money  nchar
 Smallmoney

t
 nvarchar

h
 ntext

y r i g
C op
Tipuri de date în SQL Server
 Şiruri de caractere  Alte tipuri de date
binare  cursor
 binary  uniqueidentifier
 varbinary  xml
 image  table

 Dată și oră
 date
 datetime
 datetime2
 smalldatetime
 time

Cătălin Tudor 9
Suport de curs – Gestiunea bazelor de date

Crearea tabelelor în SQL Server


 Tabel: obiect din cadrul bazei de date utilizat pentru a stoca
informații structurate conform definiției câmpurilor
existente.
 Reprezintă elementul de tip nucleu al bazei de date pe care
se bazează celelalte obiecte ale bazei de date.
 Tabelele sunt grupate în cadrul grupului Tables.
 Structura unui tabel: - câmpuri (columns), chei (primare,
externe), restricţii (constraints), declanşatori (triggers),
indecşi (indexes).

i g h t
y r
C op
Crearea tabelelor în SQL Server (II)
 Instrucţiuni pentru crearea tabelelor SQL Server:
 Forma minimalistă:
CREATE TABLE Nume_tabel
(
nume_câmp1 tip_data(dimensiune) [restricţie câmp],
nume_câmp2 tip_data(dimensiune) [restricţie câmp],
nume_câmp3 tip_data(dimensiune) [restricţie câmp],
....,
Nume_camp_cheie_externa
CONSTRAINT cheie_externa REFERENCES nume_tabel_extern (cheie primară
tabel extern)
);

Cătălin Tudor 10
Suport de curs – Gestiunea bazelor de date

Crearea tabelelor în SQL Server (III)


 Exemplu:

CREATE TABLE [dbo].[Produse](


[IdProdus] [int] NOT NULL,
[CodIntern] [nvarchar](255) NULL,
[Denumire] [nvarchar](255) NULL,
[Cantitate per unitate masura] [nvarchar](255) NULL,
[Descriere] [nvarchar](255) NULL,
[TermenValabilitate(zile)] [int] NULL,
[Perisabil] [bit] NOT NULL,
[CodCategorie] [int] NULL,
CONSTRAINT PK_Produs PRIMARY KEY CLUSTERED (IdProdus),

t
CONSTRAINT FK_Categorie FOREIGN KEY (CodCategorie),

h
REFERENCES dbo.CategoriiProduse (CodCategorie)

y r i g
C op
Instrucţiuni pentru modificarea şi
ştergerea tabelelor din baza de date
 Instrucţiunea ALTER TABLE – modificarea structurii sau
definiţiei tabelului:
ALTER TABLE [dbo].[Produse] WITH CHECK ADD CONSTRAINT [Produse_FK]
FOREIGN KEY([CodCategorie])
REFERENCES [dbo].[CategoriiProduse] ([CodCategorie])
ON DELETE CASCADE
GO
 Intrucţiunea DROP TABLE– elimină definitiv o tabelă din cadrul
bazei de date
DROP TABLE dbo.Produse;

Cătălin Tudor 11
Suport de curs – Gestiunea bazelor de date

Tipuri de tabele în SQL Server


 Tabele permanente ale bazei de date – sunt cele obţinute în urma
definirii modelului relaţional formând baza de stocare pentru datele
reţinute pe server;
 Tabele temporare – sunt tabele locale ce au existenţă de viaţă
scurtă, definită pe perioada sesiunii în care utilizatorul care le
creează este conectat.
 Sunt automat distruse (implicit) la terminarea procedurii în care au fost
utilizate temporar.
 Se regăsesc în baza de date cu numele tempdb implicit definită pe server
 Tipuri de tabele temporare:
 globale (disponibile tuturor utilizatorilor şi tuturor sesiunilor de lucru)

t
 locale (disponibile doar utilizatorului curent şi sesiunii în care acesta lucrează)

r i g h
op y
C
Tabele temporare - exemple
 Crearea unui tabel temporar local:
create table #Enumerare
(
NumeDepartament varchar(20),
CodDepartament int
)
 Crearea unui tabel temporar global:
create table ##SesiuniDeLucru
(
NumeUtilizator nvarchar(50),
IdSesiune int
)

Cătălin Tudor 12
Suport de curs – Gestiunea bazelor de date

Asocieri între tabele


 Obiecte care grupează totalitatea legăturilor ce se creează între
entităţile (tuplurile) a două tabele (asocieri binare) sau
aparţinând unei singure tabele (asocieri unare).
 Au rolul de a permite accesarea mai multor tabele în acelaşi
timp.
 Asocierile pot avea:
 caracter permanent: completează structura bazei de date şi sunt
ataşate tabelelor existente, introducând restricţia de integritate
referenţială.
 caracter temporar: utilizate în extragerea datelor din baza de

h t
date, fiind prezente doar în obiectele de tip cerere (interogare).

y r i g
C op
Implementarea restricţiilor asupra datelor

 Restricţii privind integritatea referenţială


 Definesc constrângerile legate de relaţia dintre cheia
primară şi cheia externă
 Restricţii de domeniu
 Definesc reguli impuse asupra datelor prin intermediul
câmpurilor din tabele.
 Declanşatori (proceduri de tip Trigger)
 Pot fi utilizate pentru implementarea de restricţii complexe
care privesc date din mai multe tabele.

Cătălin Tudor 13
Suport de curs – Gestiunea bazelor de date

Specificarea vizuală a restricţiilor de domeniu la


nivelul tabelelor

i g h t
y r
C op
Exemplu: Implementarea restricţiei privind
datele din factură

Cătălin Tudor 14
Suport de curs – Gestiunea bazelor de date

Restricţii privind integritatea referenţială

h t
In fereastra de proprietăţi ale asocierii
se pot configura restricţiile de integritate

y r i g
C op
Limbajul Transact-SQL (T-SQL)

Cătălin Tudor 15
Suport de curs – Gestiunea bazelor de date

un limbaj standardizat de interogare a bazelor de date


relaționale (ANSI SQL-89)
 Este un limbaj declarativ:
 utilizatorul trebuie să descrie informațiile pe care vrea să le
obțină, fără a preciza algoritmii necesari pentru obținerea
rezultatelor.
 nu sunt necesare cunoștințe de programare.
 Poate fi utilizat prin apelarea unui vocabular specific,
recunoscut de toate bazele de date relaționale: Oracle,
Access, SQL Server, Informix, Ingres, DB2, Sybase, etc.
T-SQL: dialect al limbajului SQL pentru bazele de date

t
SQL Server

r i g h
op y
C Vocabularul SQL:
Instrucţiuni – permit execuţia anumitor acţiuni (CREATE,
ALTER, SELECT, UPDATE, DELETE, etc.)
Clauze – specifică argumentele unei instrucțiuni (FROM,
WHERE, ORDER BY, etc.)
Funcții – efectuează prelucrări asupra datelor (care devin
argumente sau parametrii) în scopul afișării unor rezultate
specifice (SUM, ROUND, UPPER, LEFT, GETDATE, ISNULL
etc.).
Operatori – acționează asupra datelor (care devin operanzi),
permițând definirea unor expresii, calcule, etc. (aritmetici, de
comparare, logici, de concatenare, etc.).

Cătălin Tudor 16
Suport de curs – Gestiunea bazelor de date

 instrucţiuni de definire a datelor (permit descrierea


structurii bazei de date):
 CREATE, ALTER, DROP
 instrucţiuni de selecţie a datelor (permit consultarea
bazei de date):
 SELECT
 instrucțiuni de manipulare a datelor (permit
adăugarea, modificarea și ștergerea înregistrărilor):
 INSERT, UPDATE, DELETE
 instrucţiuni privind controlul accesului la date
(permit acordarea sau revocarea drepturilor de acces

t
pe utilizatori):

h
 GRANT, REVOKE

y r i g
C op
Formatul general al frazei SQL de selecție:
SELECT [ALL / DISTINCT / TOP N] <listă_selecţie>
FROM <listă tabele>
[WHERE <criteriu de filtrare>]
[GROUP BY <listă câmpuri de grupare>]
[HAVING <criteriu de grupare>]
[ORDER BY <listă câmpuri de ordonare> [ASC|DESC]];
unde:
• Lista de selecţie precizează atributele sau expresiile ale căror valori
vor fi returnate;
• listă-tabele specifică tabelele din care se vor extrage datele înlănţuite
prin condiţii de compunere;
• WHERE permite exprimarea criteriului de selecţie înaintea efectuării
oricărei grupări în vederea sintetizării informaţiei;
• GROUP BY folosit pentru a partiţiona o tabelă în grupuri după câmpul
specificat;
• HAVING specifică criterii de selecţie pentru date agregate;
• ORDER BY precizează atributul/atributele după care se va face
ordonarea.

Cătălin Tudor 17
Suport de curs – Gestiunea bazelor de date

Precizarea domeniului de selecție


Predicatele ALL, DISTINCT și TOP:

ALL – permite selectarea tuturor înregistrărilor, afişând


valorile câmpurilor specificate din tabelul selectat;
DISTINCT – permite excluderea valorilor dublură pentru
fiecare câmp selectat (doar înregistrări unice la nivelul
atributelor vizibile);
TOP ”n” – permite afișarea primelor ”n” înregistrări din
lista rezultatului interogării, ordonată după valorile unor
câmpuri.

i g h t
y r
C op
Functii SQL uzuale

Cătălin Tudor 18
Suport de curs – Gestiunea bazelor de date

Functia CONVERT
 coverteste rezultatul unei expresii intr-un anumit timp de date

Sintaxa:
CONVERT (tip_date_rezultat [(lungime)], expresie [, stil_coversie])

 tip_date_rezultat – tipul de date in care se converteste expresie


 lungime – lungimea tipului de date, doar pentru tipurile de date care suporta
 expresie – orice expresie admisibila SQL, al carei rezultat se va converti in
tip_date_rezultat
 stil_conversie – cod folosit atunci cand se doreste utilizarea unor modele de conversie SQL;

Cateva coduri uzuale pentru stil_conversie pentru conversia in/din data/ora:


Cod Format data/ora rezultat
101 mm/dd/yyyy

t
103 dd/mm/yyyy

h
108 hh:mi:sec

i g
113 dd mon yyyy hh:mi:ss:mmm

y r
C
Functia CONVERT (exemple)op
Nota: In acest caz codul 103 indica in ce mod
este specificata data in sirul de caractere
(dd/mm/yyyy) pentru a fi corect convertita in
formatul datei serverului !
Daca se doreste afisarea in formatul
dd/mm/yyyy, o data calendaristica trebuie
convertita in sir de caractere, cu cod 103, asa
cum este in primul exemplu, altfel se afiseaza in
formatul serverului.

Cătălin Tudor 19
Suport de curs – Gestiunea bazelor de date

Functia CONVERT (exemple)

i g h t
y r
C
Functia GETDATE() op
 returneaza data si ora serverului
Exemplu: data si ora serverului

Exemplu: data serverului

Exemplu: ora serverului

Cătălin Tudor 20
Suport de curs – Gestiunea bazelor de date

Functiile DAY, MONTH, YEAR


Sintaxa:

 DAY (expresie)
 MONTH(expresie)
 YEAR(expresie)

i g h t
y r
C
Functia DATEPART
Sintaxa:
op
 DATEPART (informatie_calendaristica, expresie_data/ora)

Extrage dintr-o data calendaristica/ora o anumita informatie calendaristica,


identificata printr-un cod
Informatie_calendaristică Rezultat
(valori uzuale)
year An
month Luna
day Zi
dayofyear Numar zi din an
quarter Trimestru
week Numar saptamana din an
hour Ora
minute Minutele
second Secundele

Cătălin Tudor 21
Suport de curs – Gestiunea bazelor de date

Functia DATEPART (exemple)

i g h t
y r
C
Functia DATEDIFF
Sintaxa:
op
 DATEDIFF (informatie_calendaristica, data/ora start, data/ora final)

Calculeaza diferenta dintre doua date calendaristice (data/ora final si data/ora start). Rezultatul
este furnizat intr-un anumit tip de informatie calendaristica, identificata printr-un cod

Cătălin Tudor 22
Suport de curs – Gestiunea bazelor de date

Functia DATEADD
Sintaxa:

 DATEADD (informatie_calendaristica, n, data/ora start)


Retunează o data calendaristică, pornind de la o anumită dată de referinţă la care se adaugă un număr n
de fracţiuni ale datei (în format informaţie calendaristică)

i g h t
y r
C
Functiile LTRIM, RTRIM op
 LTRIM(expresie) – elimina spatiile nesemnificative de la stanga unei
expresii de tip sir de caractere

 RTRIM(expresie) – elimina spatiile nesemnificative de la dreapta unei


expresii de tip sir de caractere

Cătălin Tudor 23
Suport de curs – Gestiunea bazelor de date

Functiile LEN, LOWER, UPPER


 LEN(expresie) – returnează numărul de caractere dintr-o
expresie
 LOWER(expresie) – returnează şirul de caractere din expresie
scris cu litere mici
 UPPER (expresie) – returnează şirul de caractere din expresie
scris cu litere mari

i g h t
y r
C op
Functiile LEFT, RIGHT, SUBSTRING
 LEFT(expresie, n) – returneaza n caractere de la stanga unei expresii sir
de caractere

 RIGHT(expresie, n) – returneaza n caractere de la dreapta unei expresii


sir de caractere

 SUBSTRING (expresie, start, n) – returneaza n caractere dintr-o expresie


sir de caractere, incepand de la pozitia start

Cătălin Tudor 24
Suport de curs – Gestiunea bazelor de date

Agregarea datelor în limbajul T-SQL


Funcții de agregare utilizate pentru grupuri de date:
AVG ( [ DISTINCT ] expression )
COUNT ([ DISTINCT ] expression | * } )
SUM ( [DISTINCT ] expression )
MAX (expression),MIN (expression )
• DISTINCT - valorile identice să fie luate în considerare
o singură dată în momentul efectuării calculelor.
• Simbolul * - numărarea tuturor valorilor domeniului pe
care se aplică funcţia, inclusiv a valorilor nule (NULL).

i g h t
y r
C op
Considerente generale privind agregarea
datelor
 Rezultatul unei interogări de agregare va afișa doar realizările
câmpului/câmpurilor de grupare și valorile agregate ale
câmpului/câmpurilor de sintetizat.
 Funcțiile de agregare pot fi utilizate pentru unul sau mai multe
câmpuri din cadrul sursei de date, dar și pentru câmpuri calculate.
 Gruparea se poate realiza pentru mai multe câmpuri ale sursei de date
sau calculate. Ordinea de grupare este cea a selectării câmpurilor
necesare pentru afișare.
 În cazul în care intervin condiţii de filtrare, mai întâi are loc filtrarea și
apoi vor fi agregate datele rezultate în urma acesteia.
 Câmpurile folosite doar pentru a stabili condiţii de filtrare nu sunt
niciodată afișate în rezultatul final.

Cătălin Tudor 25
Suport de curs – Gestiunea bazelor de date

Considerente generale privind agregarea datelor


Exemplu de agregare cu condiții de filtrare:
Care este prețul cel mai mic la care a fost achiziționat fiecare produs în parte, afișând doar produsele
facturate într-o cantitate mai mică de 24?

Pasul 1: Filtrarea
înregistrărilor

Pasul 2: Gruparea și
agregarea datelor

i g h t
y r
C op
Grupări de date şi funcţii de grup
1. Funcții de agregare aplicate tuturor înregistrărilor, fără a fi
necesară gruparea:
Să se afișeze câte facturi au fost emise în luna februarie, anul 2012.

SELECT Count(*) AS [Numar de facturi]


FROM Facturi
WHERE Month([DataFactura])=2 AND Year([DataFactura])=2012
2. Funcții de agregare aplicate pe grupuri de înregistrări:
Să se afișeze pentru fiecare denumire de furnizor câte facturi au fost emise de
acesta.
SELECT DenumireFz, Count(*) AS [Numar de facturi]
FROM Facturi INNER JOIN Furnizori
ON Furnizori.CodFiscal=Facturi.CodFiscal
GROUP BY DenumireFz

Cătălin Tudor 26
Suport de curs – Gestiunea bazelor de date

Grupări de date şi funcţii de grup


3. Funcții de agregare aplicate grupurilor, cu criterii de filtrare:
Să se afișeze câte facturi au fost emise în luna februarie anul 2012,
de fiecare furnizor.
SELECT Count(*) AS [Numar de facturi]
FROM Facturi INNER JOIN Furnizori
ON Furnizori.CodFiscal=Facturi.CodFiscal
WHERE Month([DataFactura])=2 AND Year([DataFactura])=2012
GROUP BY DenumireFz

4. Funcții de agregare aplicate pe grupuri cu filtrare pe expresii:


Să se afișeze care sunt furnizorii care au emis mai mult de 3 facturi în luna
februarie a anului 2012.
SELECT DenumireFz
FROM Facturi INNER JOIN Furnizori
ON Furnizori.CodFiscal=Facturi.CodFiscal

t
WHERE Month([DataFactura])=2 AND Year([DataFactura])=2012

h
GROUP BY DenumireFz

g
HAVING Count(*)>3

y r i
C op
Grupări de date şi funcţii de grup
Afişaţi numărul total de plăţi, numărul total de bonuri de casă şi numărul distinct al bonurilor de
casă, ştiind că anumite bonuri de casă sunt achitate prin mai multe tipuri de plăţi şi alte bonuri de
casă nu sunt achitate încă.

Select Count(*) as NrTotalInregistrari,


COUNT( P.NrBonCasa ) as NrBonuriCasa,
COUNT(Distinct P.NrBonCasa ) as NrBonuriCasaDistincte
FROM BonuriDeCasa BC
LEFT JOIN Plati P on P.NrBonCasa=BC.NrBonCasa

Cătălin Tudor 27
Suport de curs – Gestiunea bazelor de date

Funcţiile de clasificare Row_Number(),


Rank(), NTile(NrGrupe)
Apelare:
<Nume_Funcţie> OVER ([PARTITION BY
<câmp_partiţionare>] ORDER BY <câmp_ordonare> )

 Row_Number()
 Atribuie un număr de ordine fiecărei înregistrări în funcţie de un
criteriu de ordonare specificat în clauza OVER.

i g h t
y r
C op
Funcţiile de clasificare Row_Number(),
Rank(), NTile(NrGrupe)
 RANK()
 Atribuie un rang fiecărei înregistrări în funcţie de un
criteriu de ordonare. Înregistrările cu aceleaşi valori pe
câmpul după care se face ordonarea vor avea acelaşi rang.
 NTile(NrGrupe)
 Permite distribuirea înregistrărilor dintr-un set de
rezultate pe N intervale în funcţie de un criteriu de
ordonare.

 Clauza PARTITION BY – divide setul


de rezultate în partiţii sau
subseturi asupra cărora se va aplica
mai departe funcţia de clasificare
respectivă.

Cătălin Tudor 28
Suport de curs – Gestiunea bazelor de date

Funcţiile de clasificare - Exemplificare


SELECT Nume, Prenume, SalariuIncadrare,
Row_Number() over (order by SalariuIncadrare) as OrdineSalariu,
RANK() over (order by SalariuIncadrare) as RangSalariu,
NTILE(3) over (order by SalariuIncadrare) as IncadrareSalariuPeGrupe
FROM Vanzatori

i g h t
y r
C op
Funcţiile de clasificare - Exemplificare
Select IdPlata, SumaPlatita, YEAR(DataOraPlata) as An,
Row_Number() over (partition by YEAR(DataOraPlata) order by
SumaPlatita DESC) as OrdonarePlata
FROM Plati
Order by year(DataOraPlata)

Cătălin Tudor 29
Suport de curs – Gestiunea bazelor de date

Alte funcţii uzuale


ISNULL ( expresie , valoare de înlocuit )
 evaluează dacă o expresie conţine valoarea NULL şi, în cazul în care
condiţia este îndeplinită, înlocuieşte expresia cu valoarea specificată
ca al doilea argument .
ISDATE (expresie )
 evaluează dacă o expresie poate fi evaluată ca o dată calendaristică
validă. În cazul în care condiţia este îndeplinită returneză valoarea 1,
în caz contrar 0.
ISNUMERIC(expresie)
 evaluează dacă o expresie poate fi evaluată ca valoare numerică. În
cazul în care condiţia este îndeplinită returneză valoarea 1, în caz

t
contrar 0.

r i g h
op y
C
Căutarea în cadrul şirurilor de caractere pe
baza şabloanelor definite prin operatorul de
comparaţie LIKE
Sintaxa:  <expresie> [NOT] LIKE <sir de caractere>
 <expresie> nume de câmp dintr-un tabel sau orice altă expresie SQL validă
ce poate fi evaluată drept şir de caractere
 <sir de caractere> şirul sau tiparul ce urmează a fi regăsit în cadrul expresiei
pe care se efectuează căutarea
 Caractere speciale utilizabile la căutare:
% ţine locul unui şir de zero sau mai multe caractere

_ ţine locul unui caracter

[] orice caracter din enumerarea sau intervalul cuprins între paranteze

[^ ] - orice caracter în afară de cele din enumerarea sau intervalul specificat


după simbolul ^ intre paranteze.

Cătălin Tudor 30
Suport de curs – Gestiunea bazelor de date

Utilizare operator LIKE în expresii


 Să se afişeze toţi vânzătorii al căror nume încep cu litere de la N
la R.
SELECT * FROM Vanzatori
WHERE Nume LIKE '[N-R]%‘
 Să se selecteze doar vânzătorii de sex masculin care sunt născuţi în
luna ianuarie.
SELECT * FROM Vanzatori
WHERE CNPVanzator LIKE '1__01%‘
 Să se afle care sunt vânzătorii care nu sunt născuţi în anul 1978.

t
Select * from Vanzatori

h
WHERE CNPVanzator like '_[^7][^8]%'

y r i g
C op
Structura alternativă CASE
 Se folosește pentru a afișa o valoare în funcție de rezultatul
evaluării unei condiţii în clauza SELECT.
CASE expresieA
WHEN expresieB1 THEN expresie_Rezultat
[WHEN expresieB2 THEN expresie_Rezultat]

[ELSE expresie_Rezultat_F]
END

CASE
WHEN expresie_logica1 THEN expresie_Rezultat
[WHEN expresie_logica2] THEN expresie_Rezultat

[ELSE expresie_Rezultat_F]
END

Cătălin Tudor 31
Suport de curs – Gestiunea bazelor de date

Structura alternativă CASE: exemple


SELECT NrBonCasa , SumaPlatita,
CASE NTILE(3)over(order by SumaPlatita)
when 1 then 'Valoare mica'
when 2 then 'Valoare medie'
else 'Valoare mare'
end as TipIncasare
FROM Plati

SELECT NrBonCasa , SumaPlatita,


CASE
when NTILE(3)over(order by SumaPlatita)=1 then 'Valoare mica'
when NTILE(3)over(order by SumaPlatita)=2 then 'Valoare medie'
else 'Valoare mare'
end as TipIncasare

h t
FROM Plati

y r i g
C op
Utilizarea sub-interogărilor în limbajul T-SQL
 Sub-interogare=structură SQL al cărei rezultat ajută în
rezolvarea unei alte interogări (interogări imbricate)
 Predicate utilizate pentru sub-interogări:
 ANY – compară partea stângă a sa cu oricare dintre rezultatele unei sub-
interogări situate în partea dreaptă
 ALL – Compară partea stângă a sa cu toate rezultatele sub-interogării
 EXISTS – se comportă ca un operator după clauza WHERE care
evaluează dacă sub-interogarea returnează cel puțin o înregistrare
 IN – poate fi utilizat când se compară rezultatele a două mulțimi, dintre
care cea din dreapta este returnată de sub-interogare

Cătălin Tudor 32
Suport de curs – Gestiunea bazelor de date

Exemple de interogări cu sub-interogări


1. Lista furnizorilor care nu au emis facturi în anul 2012
SELECT DenumireFurnizor FROM Furnizori
WHERE Furnizori.CodFiscal NOT IN
(Select Facturi.CodFiscal FROM Facturi
WHEREYear(DataFactura)=2012)

2. Lista produselor cu categoria de calitate I care au prețul mai mic


decât oricare dintre prețurile produselor de calitate II:

SELECT DenumireProdus FROM Produse


WHERE CategorieCalitate=1 AND Pret >
ANY (Select [Pret] From Produse
Where CategorieCalitate=2)

i g h t
y r
C op
Exemple de interogări cu sub-interogări
3. Furnizorul care a emis cele mai multe facturi.

SELECT DenumireFurnizor
FROM Furnizori, Facturi
WHERE Furnizori.CodFiscal = Facturi.CodFiscal
Group By DenumireFurnizor
Having Count(NrFactură)>=
ALL (Select Count(NrFactură)
FROM Furnizori, Facturi
WHERE Furnizori.CodFiscal = Facturi.CodFiscal
Group By DenumireFurnizor)

Cătălin Tudor 33
Suport de curs – Gestiunea bazelor de date

Exemple de interogări cu sub-interogări


4. Furnizorii care au emis cel puțin o factură după data de 20
septembrie 2012.

SELECT Furnizori.DenumireFZ FROM Furnizori


WHERE EXISTS
(Select DataFactura FROM Facturi WHERE DataFactura>#09/20/2012#
AND Facturi.CodFiscal=Furnizori.CodFiscal)

SELECT Furnizori.DenumireFz
FROM Furnizori
WHERE Furnizori.CodFiscal IN
(Select Facturi.CodFiscal FROM Facturi

t
WHERE DataFactura>#09/20/2012#)

r i g h
op y
C
Interogări SQL pentru adăugarea de noi înregistrări
Varianta 1: Adăugarea pe baza unor valori noi
INSERT INTO nume-tabela (nume-atribut1, nume-atribut2,…)
VALUES (valoare1, valoare2,…)

Exemplu: Să se adauge un nou client în baza de date cu codul fiscal R101221


și denumirea SC GAMA SA
INSERT INTO Clienti (CodFiscal, Denumire) VALUES (‘R101221’, ‘SC GAMA SA’)

Varianta 2: Adăugarea pe baza valorilor preluate dintr-un tabel


INSERT INTO nume-tabela SELECT nume-atribut1, nume-atribut2, …
FROM nume-tabela-sursa [WHERE Conditii …]
Exemplu: Să se adauge în tabela Parteneri toți Furnizorii din localitatea
București
INSERT INTO Parteneri SELECT * FROM Furnizori WHERE Localitate=‘București’

Cătălin Tudor 34
Suport de curs – Gestiunea bazelor de date

Interogări SQL pentru modificarea valorilor câmpurilor

UPDATE nume-tabel
SET nume-atribut1=valoare1, nume-atribut2=valoare2, …
WHERE Condiții

Exemplul 1: Să se transforme în KG toate unitățile de măsură ale produselor


cu codul mai mare decât 3.

UPDATE Produse SET UnitateMasura=‘KG’ WHERE CodProdus:3

Exemplul 2: Să se majoreze cu 5% toate prețurile din facturile emise după


data de 12.09.2012.
UPDATE ProduseFacturate
SET PretFacturat=[PretFacturat]+[PretFacturat]*5/100
WHERE IDFactura IN

t
(Select IDFactura FROM Facturi WHERE DataFactura>#12.09.2012#)

r i g h
op y
DELETE * C
Interogări SQL pentru ștergerea înregistrărilor

FROM nume-tabel
WHERE Condiție

Exemplu: Să se șteargă toți clienții din localitatea Brăila

DELETE *
FROM Clienti
WHERE Localitate=‘Braila’

Cătălin Tudor 35
Suport de curs – Gestiunea bazelor de date

Obiecte de tip vedere (View)


 Categorie aparte de obiecte ale unei baze de date SQL Server

 Un obiect View: o reprezentare virtuală a unuia sau mai multor tabele


afişând datele din cadrul acestora dintr-o anumită perspectivă asociată,
cel mai adesea, unui rol al unui utilizator.

 View = tabelă virtuală, afişând câmpuri şi înregistrări din


tabelul/tabelele sursă, fără a stoca aceste date.

 Utilizată pentru a simplifica şi personaliza percepţia pe care fiecare


utilizator o va avea asupra bazei de date.

 Poate fi consultată prin interogarea ei cu ajutorul limbajului SQL.

i g h t
y r
Roluri
utilizatori
C op
Server

Câmp T1 Câmp R1 Câmp R2 Câmp T3

Tabel 1

Vedere user 1

Câmp R1 Câmp R2 Câmp R3

Câmp T2 Câmp T3 Câmp R2

Tabel 2

Vedere user 2

Cătălin Tudor 36
Suport de curs – Gestiunea bazelor de date

Motivaţii în utilizarea obiectelor VIEW


 Distribuirea informaţiei pe roluri de utilizatori:
 Mecanism de securitate pentru restricţionarea accesului utilizatorilor la
datele incompatibile rolului ce le-a fost alocat.
 Utilizatorii vor vedea doar datele care îi interesează şi pe care le pot
manipula pentru realizarea sarcinilor asociate rolului fiecăruia.
 Simplificarea procesului de manipulare a datelor:
 O vedere deja regrupează date din mai multe tabele
 Interogarea unei vederi este mai simplă decât interogarea tuturor tabelelor
sursă ale acesteia.
 Personalizarea datelor:
 Utilizatorii vor vedea aceleaşi date, dar prezentate din perspective diferite.

 Combinarea datelor din baze de date distribuite:

t
 Tabele partiţionate prin distribuirea bazelor de date pot fi regrupate printr-

h
o vedere ce poate fi ulterior interogată cu mai mare uşurinţă.

y r i g
C op
Crearea şi manipularea vederilor
 Două moduri de definire a unei vederi:
 Grafic, prin interfaţa SSMS: definirea câmpurilor şi a condiţiilor de
filtrare a datelor se poate realiza vizual;
 Utilizând limbajul SQL în gestionarea obiectelor de tip View
(CREATE | ALTER | DROPView …)

 Manipularea unei vederi:


 Datele dintr-un View pot fi invocate cu uşurinţă prin aceleaşi metode
prin care sunt manipulate tabelele bazei de date (SELECT, UPDATE,
DELETE, INSERT)
 La interogarea unei vederi atât datele cât şi câmpurile (structura)
acesteia sunt obţinute în mod DINAMIC prin execuţia interogării care
stă la baza ei.

Cătălin Tudor 37
Suport de curs – Gestiunea bazelor de date

Crearea unei vederi prin interfaţa SSMS

Selectare
tabele sursă

i g h t
y r
C op
Panoul surselor de date

Grila de câmpuri

Transpunerea în limbajul SQL

Cătălin Tudor 38
Suport de curs – Gestiunea bazelor de date

Selectarea câmpurilor ce
formează vederea

i g h t
y r
C op
Denumirea câmpurilor afişată în
Opţiuni privind sortarea
cadrul vederii

Câmp calculat introdus suplimentar:


Cantitate*PretVanzare

Criteriu de filtrare a datelor afişate

Cătălin Tudor 39
Suport de curs – Gestiunea bazelor de date

Agregarea datelor - exemplu


Să se creeze o vedere a tabelelor care să afişeze pentru fiecare bon de casă emis în
anul 2011 valoarea totală şi numărul de produse din cadrul acestuia.

Pasul 1: Selectarea
tabelelor sursă

i g h t
y r
C op
Agregarea datelor - exemplu
Să se creeze o vedere a tabelelor care să afişeze pentru fiecare bon de casă emis în
anul 2011 valoarea totală şi numărul de produse din cadrul acestuia.

Pasul 2: Selectarea
câmpurilor necesare,
definirea formulelor de
calcul şi stabilirea
condiţiilor de filtrare

Cătălin Tudor 40
Suport de curs – Gestiunea bazelor de date

Agregarea datelor - exemplu


Să se creeze o vedere a tabelelor care să afişeze pentru fiecare bon de casă emis în
anul 2011 valoarea totală şi numărul de produse din cadrul acestuia.

Pasul 3: Precizarea
grupărilor de date şi
aplicarea funcţiilor de
grupare specifice

i g h t
y r
C op
Definiţie: O procedură stocată este un obiect al
bazei de date SQL Server conţinând una sau mai
multe clauze SQL care permit efectuarea de
modificări asupra bazei de date sau extragerea
informaţiilor din cadrul ei.
Procedurile stocate:
Pot conţine instrucţiuni privind modificarea structurală a
bazei de date;
Pot conţine parametri de intrare şi pot returna valori
multiple prin definirea unor parametri de ieşire;
Pot returna o valoare care să indice starea executării
procedurii în ansamblul ei.
Pot conţine structuri de control de diverse feluri.

Cătălin Tudor 41
Suport de curs – Gestiunea bazelor de date

Flexibilitate sporită în programarea structurilor


SQL de selectare sau actualizare a datelor;
O procedură poate fi executată de oricâte ori şi
în paralel de mai mulţi utilizatori, permiţând
reutilizarea ei în funcţie de necesităţi;
Elimină o mare parte din codul redundant la
nivelul unei aplicaţii;
Reduce traficul în reţeaua de calculatoare la
apelarea datelor stocate pe server;

t
Pot deţine, asemănător obiectelor de tip

h
Vedere, atribute de securitate ce pot îmbunătăţi

i g
politicile de acces la datele senzitive.

y r
C op
Crearea unei proceduri stocate:
Vizual, prin interfaţa SSMS;
Prin comanda SQL:
CREATE PROC | Procedure <<NumeProcedură>>
[ListăParametri]
AS
Instrucţiuni SQL
Modificarea unei proceduri stocate:
Prin comanda SQL: ALTER PROC | Procedure …
Ştergerea unei proceduri stocate:
Prin comanda SQL: DROP PROC | Procedure …

Cătălin Tudor 42
Suport de curs – Gestiunea bazelor de date

Procedura parametrizată: 
prezintă abilitatea de a transmite valoarea unei 
condiţii prin intermediul unui parametru;
Permite printr‐o singură definiţie acoperirea nevoilor 
informaţionale ale mai multor utilizatori.
Mod de definire:
CREATE PROC <nume_procedura>
@<Nume_parametru> <tip_de_date> [OUTPUT] 

AS

t
<instrucţiuni SQL>

r i g h
op y
C
Să se creeze o procedură stocată prin care să se afişeze  toţi 
vânzătorii angajaţi într‐un an precizat ca parametru:

CREATE PROC usp_VanzatoriParametru
@AnAngajare smallint
AS
BEGIN
Select Nume, Prenume, DataAngajarii
FROM Vanzatori
WHERE
YEAR(DataAngajarii)=@AnAngajare

END

Cătălin Tudor 43
Suport de curs – Gestiunea bazelor de date

Declarare:
Declare @NumeVariabilă as TipDeDate

Atribuire valori variabilă:

Set @NumeVariabilă = Valoare

sau
Select @NumeVariabilă=Valoare

i g h t
y r
C op
EXEC nume_procedură

EXEC nume_procedură [val_param1, 
val_param2, …..]

Exec usp_ListaVanzari

Exec usp_VanzatoriParametru 2007

Exec usp_VanzatoriParametru 2005


Identic cu
Exec usp_VanzatoriParametru @AnAngajare= 2005

Cătălin Tudor 44
Suport de curs – Gestiunea bazelor de date

Reguli:
Enumerarea parametrilor de intrare se va face prin 
separarea acestora prin virgulă;
Definirea parametrilor de intrare se poate realiza prin 
imbricarea parametrilor obligatorii cu cei opţionali;
La executarea procedurii stocate se va ţine cont de 
ordinea în care parametrii au fost precizaţi doar dacă 
nu se va specifica în mod explicit numele parametrului.
Când un parametru opţional apare înaintea altor 
parametri obligatorii, nespecificarea unei valori pentru 
acesta determină utilizarea numelor celorlalţi 

t
parametri în precizarea valorilor acestora sub forma:

g h
@NumeParametru=Valoare.

y r i
C op
Funcţia utilizator: defineşte un set de instrucţiuni
şi secvenţe de control SQL aplicat pentru
prelucrarea datelor din tabele sau alte obiecte
interogabile returnând o valoare.
Se constituie într-un obiect SQL de sine stătător
ce poate fi apelat prin precizarea numelui şi
parametrilor săi ori de câte ori este nevoie în
cadrul altor obiecte SQL Server.
Poate fi utilizată în cadrul obiectelor de tip View sau al
procedurilor stocate diminuând considerabil
dimensiunea codului SQL şi facilitând o mai bună
structurare a acestuia.
Poate fi utilizată pentru simularea unor tabele virtuale ce
pot fi interogate asemănător tabelelor bazei de date.

Cătălin Tudor 45
Suport de curs – Gestiunea bazelor de date

Funcţii de tip scalar (scalar functions)
Realizează o prelucrare conform unui algoritm 
conceput de utilizator ţinând cont de valorile 
parametrilor specifici. 
Returnează o singură valoare prezentând un tip de 
dată scalar (predefinit sau definit de utilizator)
Funcţii de tip tabelar (table valued functions)
returnează un set de înregistrări ce poate fi asimilat 
unui tabel virtual.
În funcţie de tipul în care sunt definite pot fi:

t
Funcţii de tip tabel în linie (inline): returnează un tabel ca rezultat al 

h
unei instrucţiuni SQL fără a fi nevoie definirea acestuia.

g
Funcţii tabel de tip multi‐instrucţiune: necesită definirea explicită a 

i
tabelului rezultat.

y r
C op
Acceptă zero sau mai mulţi parametri 
Returnează o singură valoare
Constă în două părţi: 
Antetul funcţiei în care se definesc numele funcţiei, lista parametrilor şi 
tipul de dată returnat de funcţie.
Corpul funcţiei în care este definit algoritmul de calcul al valorii rezultat 
care se termină cu clauza RETURN.
Apelarea funcţiei poate fi făcută în cadrul 
instrucţiunilor SQL în clauze precum SELECT, 
WHERE , GROUP BY, HAVING sau ORDER BY.
Se recomandă atunci când un anumit cod sau 
secvenţă SQL este utilizat/ă în mai multe 
proceduri.
Pentru apelarea ei se va utiliza inclusiv numele 
proprietarului.

Cătălin Tudor 46
Suport de curs – Gestiunea bazelor de date

CREATE FUNCTION [numeproprietar.] nume_funcţie ([ @parametru_1 AS


tip_de_date], …. [ @parametrul_n AS tip_de_date] )

RETURNS tip_de date


AS
BEGIN
INSTRUCŢIUNI SQL
RETURN valoare de returnat
END

Pentru modificare:
ALTER FUNCTION .....
Pentru ştergere:
DROP FUNCTION .....

i g h t
y r
C op
A. Varianta INLINE. 
se returnează un tabel ca rezultat, fără a fi 
nevoie să se definească structura acestuia
nu sunt permise BEGIN ….END
este permisă o singură frază SQL de tip SELECT
fiecare câmp din interogarea sursă trebuie să 
aibă un nume
clauza ORDER BY este permisă numai dacă se 
utilizează împreună cu TOP
nu sunt permise prelucrări complexe
Coloanele pe care funcţia de tip tabel le va 
returna sunt dictate de instrucţiunea SELECT 
care stă la baza ei,

Cătălin Tudor 47
Suport de curs – Gestiunea bazelor de date

A. Varianta INLINE. 

CREATE FUNCTION [numeproprietar.] nume_funcţie ([ @parametru_1 AS tip_de_date], 
… [ @parametrul_n AS tip_de_date] )

RETURNS TABLE
As
RETURN (fraza_SQL_SELECT)

i g h t
y r
C op
B. varianta MULTI‐INSTRUCŢIUNE

se returnează un tabel rezultat
este necesar să se definească explicit structura 
tabelului rezultat
poate include prelucrări complexe

Cătălin Tudor 48
Suport de curs – Gestiunea bazelor de date

B. varianta MULTI‐INSTRUCŢIUNE

CREATE FUNCTION [numeproprietar.] nume_funcţie 
([ @parametru_1 AS tip_de_date], …. [ @parametrul_n AS tip_de_date] )

RETURNS @variabila_ieşireTABLE
(câmp_1 tip de date, …câmp_N tip de date)

AS
BEGIN 
INSTRUCŢIUNI SQL
RETURN 
END

i g h t
y r
C op

Cătălin Tudor 49

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