Sunteți pe pagina 1din 62

Note de curs Baze de date

t
h
g
i
r
py

Co
Fr calculator

Cu calculator,
fr baze de date

Cu baze de date

Ctlin Tudor

Note de curs Baze de date

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 funcional, memorate pe
suporturi adresabile, ce pot fi accesate simultan de mai
muli utilizatori, n mod selectiv i n timp real.

Scop: regsirea rapid a informaiei 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 aplicaii
Utilizatorii finali

t
h
g
i
r
py

Co

Structuri de date:

O structur de date corespunde unei clase


(grupri) 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 mulime de
realizri (nregistrri).
Gestiunea datelor se focalizeaz pe precizarea
structurilor de date i a relaiilor care exist
ntre realizrile acestora.

Ctlin Tudor

Note de curs Baze de date

BAZE DE DATE generaliti

Cerine pentru gestiunea corect a


datelor
Independena datelor fa de programele de
aplicaii:
Baza de date trebuie s aib o structur de sinestttoare, a crei existen s nu depind de alte
programe care o utilizeaz.

Asigurarea unei structuri ct mai puin redundante:


Informaiile 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 restricii i corelaii
logice ntre ele, restricii ce mpiedic apariia erorilor
logice sau structurale la nivelul bazei de date.

t
h
g
i
r
py

Co

Considerente n alegerea unei soluii pentru


managementul datelor:

volumul de date ce urmeaz a fi stocat i procesat


gradul de expunere la riscuri
tipul de aplicaii care vor exploata datele (aplicaii
web, aplicaii de tip business intelligence, sisteme
informatice clasice, etc)
previziunile de extindere pe termen mediu n
privina volumului de date din cadrul organizaiei
costurile de liceniere i politica de liceniere a
productorului

Ctlin Tudor

Note de curs Baze de date

Sisteme de gestiune a bazelor de date (S.G.B.D.)


Conceptul de SGBD
SGBD = pachet de programe constituind o interfa ntre
utilizatori i bazele de date, ce permite crearea, actualizarea
i consultarea acestora.
SGBD-urile pun la dispoziia utilizatorilor limbaje distincte pentru:
descrierea bazei de date
(Limbaj de Descriere a Datelor DDL)
utilizarea bazelor de date
(Limbaj de Manipulare a Datelor DML)
controlul datelor
(Limbaj de Control al Datelor DCL)
Limbajele de manipulare a bazelor de date pot fi:
- declarative - permit utilizatorului s declare de ce
informaii are nevoie.
- procedurale - oblig utilizatorul s descrie procedura
pentru obinerea informaiilor.

t
h
g
i
r
py

Co

Sisteme de gestiune a bazelor de date (S.G.B.D.)


Funciile ndeplinite de un SGBD:
descrierea bazei de date (prin LDD)
coerena datelor (meninerea unor relaii logice ntre
date);
securitatea datelor (confidenialitatea i remedierea
daunelor);
partajarea datelor (tratare acces concurent);
controlul i administrarea datelor prin drepturi diferite
acordate utilizatorilor;
repararea bazei de date;
salvarea i restaurarea datelor etc.

Ctlin Tudor

Note de curs Baze de date

t
h
g
i
r
py

Co

Server de date: un SGBD avansat instalat, de


regul, pe o staie de lucru mai puternic, cu rolul
de a furniza informaii ntr-o organizaie.
Pentru volum mare de date (server database)
Microsoft SQL Server
Oracle
IBM DB2
Sybase

Ctlin Tudor

Flexibilitate
Performate crescute in procesarea datelor
Facilitati complexe de administrare
Instrumente specifice pentru analiza datelor
(implementarea tehnologiilor Datawarehouse si
Dataminining)
Securitate sporita a datelor
Scalabilitate

Note de curs Baze de date

Desemneaz

relaia dintre dou entiti


software care partajeaz sarcini comune
ntr-o reea de calculatoare.
Un program care poart denumirea de
client, iniiaz o cerere informaional ctre
un alt program, denumit server, capabil s
furnizeze rspunsul la cererea clientului .
Avantajul principal:
accesul permanent la date din orice locaie a unei

instituii sau organizaii, prin conectarea tuturor


aplicaiilor client la o singur baz de date.

t
h
g
i
r
py

Co

Clientul

este entitatea care


asigur interfaa cu utilizatorul,
lanseaz cereri de executare a unor operaii ctre o
entitate server
afieaz datele primite de la server ntr-un format
inteligibil pentru utilizator.

Serverul

Ctlin Tudor

este entitatea care


Recepioneaz cererile lansate de clieni,
interpreteaz comenzile,
execut operaiile necesare
furnizeaz rspunsul ctre client.

Note de curs Baze de date

Exemplificarea generic a relaiei


Client-Server

t
h
g
i
r
py

Co

Exemplu de utilizare a tehnologiei


Client Server ntr-o organizaie

Ctlin Tudor

Note de curs Baze de date

Client-Server

se bazeaz pe trei componente:

logica prezentrii (responsabil cu interfaa grafic expus

utilizatorilor);
logica procesrii (responsabil cu gestionarea i aplicarea
tuturor regulilor legate de managementul i prelucrarea datelor);
logica stocrii datelor (ce va gestiona pstrarea i extragerea
datelor).
n

funcie 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)

t
h
g
i
r
py

Co

Tipologia sistemelor Client-Server

Arhitectura client-server pe dou nivele (two tiers)

Logica prezentrii: Calculatorul Client


Logica datelor: Calculatorul Server
Logica procesrii: mprit ntre Client i Server

Ctlin Tudor

Note de curs Baze de date

Tipologia sistemelor Client-Server


Arhitectura client-server pe trei nivele (three tiers)

Logica prezentrii: Calculatorul Client


Logica datelor: Calculatorul Server
Logica procesrii: Serverul de aplicaie

t
h
g
i
r
py

Co

Tipologia sistemelor Client-Server

Arhitectura client-server multi-nivel (n tiers)

Logica prezentrii: Calculatorul Client


Logica datelor: Calculatorul Server
Logica procesrii: Server de aplicaie i Server Web

Ctlin Tudor

Note de curs Baze de date

SQL SERVER 2012 Prezentare general


SQL Server 2012:
o suit software oferind posibilitatea gestionrii bazelor
de date de foarte mari dimensiuni.
compatibil cu cele mai recente tehnologii existente.

SQL Server 2012 este disponibil n mai multe ediii ce


difer prin:
facilitile oferite,
resursele hardware capabile s le exploateze (numr de
procesoare, memorie RAM, etc.)
politica de liceniere (numr de utilizatori, costuri
licene, etc)

t
h
g
i
r
py

Co

SQL SERVER 2012 Versiuni (I)


Enterprise

toate instrumentele necesare privind administrarea i


securitatea datelor precum i un set complet de instrumente
pentru dezvoltarea aplicaiilor business intelligence.

Standard
toate instrumentele pentru administrarea bazelor de date i
pentru programare

Developer
dedicat dezvoltatorilor de aplicaii. Prezint toate facilitile
disponibile n varianta Enterprise dar nu este destinat
utilizrii ca server productiv, ci doar pentru teste i
programare.

SQL Server 2012 Business Intelligence Edition

destinat n special pentru a deservi aplicaiile pentru asistarea


deciziei n cadrul unei companii.

Ctlin Tudor

10

Note de curs Baze de date

SQL SERVER 2012 Versiuni(II)


Web
indicat pentru administrarea bazelor de date ce
urmeaz a fi exploatate n mediul online.

SQL Server Express


soluie oferit gratuit pentru utilizatorii ce doresc s
realizeze aplicaii client pentru sisteme de mici
dimensiuni sau pentru a nva

Compact
soluie gratuit pentru gestionarea bazelor de date
destinate aplicaiilor de tip desktop, a aplicaiilor
pentru dispozitive mobile sau de tip client web pe
platforme Windows.

t
h
g
i
r
py

Co

SQL Server 2012 Componente

SQL Server Database Engine


este componenta nucleu
responsabil cu memorarea, procesarea datelor stocate
i asigurarea securitii acestora
Analysis Services
Suit de instrumente software pentru analiza datelor i
interpretarea rezultatelor
Reporting Services
componentele necesare pentru crearea i gestionarea
rapoartelor
Integration Services
set de aplicaii i obiecte programabile ce pot fi utilizate
n copierea, mutarea sau transformarea datelor ntre
diferite destinaii

Ctlin Tudor

11

Note de curs Baze de date

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

t
h
g
i
r
py

Co

Tipuri de date n SQL Server


Numere exacte
Numere ntregi
bigint
int
smallint
tinyint
bit

Numere cu

zecimale
Decimal
Numeric
Money

Smallmoney

Numere aproximative
Float
Real

iruri de caractere non-

Unicode
char
varchar
text

iruri de caractere

Unicode
nchar
nvarchar
ntext

Ctlin Tudor

12

Note de curs Baze de date

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

t
h
g
i
r
py

Co

Crearea tabelelor n SQL Server


2012

Tabel: obiect din cadrul bazei de date utilizat

pentru a stoca informaii structurate conform


definiiei cmpurilor 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: - cmpuri (columns), chei
(primare, externe), restricii (constraints),
declanatori (triggers), indeci (indexes).

Ctlin Tudor

13

Note de curs Baze de date

Crearea tabelelor n SQL Server 2012


(II)
Instruciuni pentru crearea tabelelor SQL Server:
Forma minimalist:

CREATE TABLE Nume_tabel


(
nume_cmp1 tip_data(dimensiune) [restricie cmp],
nume_cmp2 tip_data(dimensiune) [restricie cmp],
nume_cmp3 tip_data(dimensiune) [restricie cmp],
....,
Nume_camp_cheie_externa
CONSTRAINT cheie_externa REFERENCES
nume_tabel_extern (cheie primar tabel extern)
);

t
h
g
i
r
py

Co

Crearea tabelelor n SQL Server 2012


(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),
CONSTRAINT FK_Categorie FOREIGN KEY
(CodCategorie),
REFERENCES dbo.CategoriiProduse
(CodCategorie)

Ctlin Tudor

14

Note de curs Baze de date

Instruciuni pentru modificarea i


tergerea tabelelor din baza de date
Instruciunea ALTER TABLE modificarea

structurii sau definiiei tabelului:


ALTER TABLE [dbo].[Produse] WITH CHECK ADD
CONSTRAINT [Produse_FK] FOREIGN KEY([CodCategorie])
REFERENCES [dbo].[CategoriiProduse] ([CodCategorie])
ON DELETE CASCADE
GO

Intruciunea DROP TABLE elimin definitiv o tabel

din cadrul bazei de date


DROP TABLE dbo.Produse;

t
h
g
i
r
py

Co

Tipuri de tabele n SQL Server 2012


Tabele permanente ale bazei de date sunt cele

obinute n urma definirii modelului relaional formnd


baza de stocare pentru datele reinute 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 regsesc n baza de date cu numele tempdb implicit

definit pe server

Tipuri de tabele temporare:


globale (disponibile tuturor utilizatorilor i tuturor sesiunilor de
lucru)
locale (disponibile doar utilizatorului curent i sesiunii n care
acesta lucreaz)

Ctlin Tudor

15

Note de curs Baze de date

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
)

t
h
g
i
r
py

Co

Asocieri ntre tabele

Obiecte care grupeaz totalitatea legturilor ce se

creeaz ntre entitile (tuplurile) a dou tabele


(asocieri binare) sau aparinnd unei singure tabele
(asocieri unare).
Au rolul de a permite accesarea mai multor tabele n
acelai timp.
Asocierile pot avea:
caracter permanent: completeaz structura bazei de

date i sunt ataate tabelelor existente, introducnd


restricia de integritate referenial.
caracter temporar: utilizate n extragerea datelor din
baza de date, fiind prezente doar n obiectele de tip
cerere (interogare).

Ctlin Tudor

16

Note de curs Baze de date

Implementarea restriciilor asupra datelor


Restricii privind integritatea referenial
Definesc constrngerile legate de relaia dintre cheia

primar i cheia extern


Restricii de domeniu
Definesc reguli impuse asupra datelor prin intermediul

cmpurilor din tabele.


Declanatori (proceduri de tip Trigger)
Pot fi utilizate pentru implementarea de restricii

complexe care privesc date din mai multe tabele.

t
h
g
i
r
py

Co

Specificarea vizual a restriciilor de domeniu


la nivelul tabelelor

Ctlin Tudor

17

Note de curs Baze de date

Exemplu: Implementarea restriciei privind


datele din factur

t
h
g
i
r
py

Co

Restricii privind integritatea referenial

In fereastra de proprieti ale asocierii


se pot configura restriciile de integritate

Ctlin Tudor

18

Note de curs Baze de date

Limbajul Transact-SQL (T-SQL)

t
h
g
i
r
py

Co

un limbaj standardizat de interogare a bazelor de date


relaionale (ANSI SQL-89)
Este un limbaj declarativ:
utilizatorul trebuie s descrie informaiile pe care vrea s le
obin, fr a preciza algoritmii necesari pentru obinerea
rezultatelor.
nu sunt necesare cunotine de programare.

Poate fi utilizat prin apelarea unui vocabular specific,


recunoscut de toate bazele de date relaionale: Oracle,
Access, SQL Server, Informix, Ingres, DB2, Sybase, etc.
T-SQL: dialect al limbajului SQL pentru bazele de date
SQL Server

Ctlin Tudor

19

Note de curs Baze de date

Vocabularul SQL:
Instruciuni permit execuia anumitor aciuni (CREATE,
ALTER, SELECT, UPDATE, DELETE, etc.)
Clauze specific argumentele unei instruciuni (FROM,
WHERE, ORDER BY, etc.)
Funcii efectueaz prelucrri asupra datelor (care devin
argumente sau parametrii) n scopul afirii unor rezultate
specifice (SUM, ROUND, UPPER, LEFT, GETDATE, ISNULL
etc.).
Operatori acioneaz asupra datelor (care devin operanzi),
permind definirea unor expresii, calcule, etc. (aritmetici, de
comparare, logici, de concatenare, etc.).

t
h
g
i
r
py

Co

instruciuni de definire a datelor (permit descrierea

structurii bazei de date):


CREATE, ALTER, DROP
instruciuni de selecie a datelor (permit consultarea
bazei de date):
SELECT
instruciuni de manipulare a datelor (permit
adugarea, modificarea i tergerea nregistrrilor):
INSERT, UPDATE, DELETE
instruciuni privind controlul accesului la date
(permit acordarea sau revocarea drepturilor de acces
pe utilizatori):
GRANT, REVOKE

Ctlin Tudor

20

Note de curs Baze de date

Formatul general al frazei SQL de selecie:


SELECT [ALL / DISTINCT / TOP N] <list_selecie>
FROM <list tabele>
[WHERE <criteriu de filtrare>]
[GROUP BY <list cmpuri de grupare>]
[HAVING <criteriu de grupare>]
[ORDER BY <list cmpuri de ordonare> [ASC|DESC]];
unde:

Lista de selecie precizeaz atributele sau expresiile ale cror valori


vor fi returnate;

list-tabele specific tabelele din care se vor extrage datele nlnuite


prin condiii de compunere;

WHERE permite exprimarea criteriului de selecie naintea efecturii


oricrei grupri n vederea sintetizrii informaiei;

GROUP BY folosit pentru a partiiona o tabel n grupuri dup cmpul


specificat;

HAVING specific criterii de selecie pentru date agregate;

ORDER BY precizeaz atributul/atributele dup care se va face


ordonarea.

t
h
g
i
r
py

Co

Precizarea domeniului de selecie

Predicatele ALL, DISTINCT i TOP:

ALL permite selectarea tuturor nregistrrilor, afind


valorile cmpurilor specificate din tabelul selectat;
DISTINCT permite excluderea valorilor dublur pentru
fiecare cmp selectat (doar nregistrri unice la nivelul
atributelor vizibile);
TOP n permite afiarea primelor n nregistrri din
lista rezultatului interogrii, ordonat dup valorile unor
cmpuri.

Ctlin Tudor

21

Note de curs Baze de date

Functii SQL uzuale

t
h
g
i
r
py

Co

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:

Ctlin Tudor

Cod

Format data/ora rezultat

101

mm/dd/yyyy

103

dd/mm/yyyy

108

hh:mi:sec

113

dd mon yyyy hh:mi:ss:mmm

22

Note de curs Baze de date

Functia CONVERT (exemple)

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.

t
h
g
i
r
py

Co

Functia CONVERT (exemple)

Ctlin Tudor

23

Note de curs Baze de date

Functia GETDATE()
Exemplu: data si ora serverului
returneaza data si ora serverului

Exemplu: data serverului

Exemplu: ora serverului

t
h
g
i
r
py

Co

Functia NEWID()

returneaza o valoare de tip UNIQUEIDENTIFIER

Ctlin Tudor

24

Note de curs Baze de date

Functiile DAY, MONTH, YEAR


Sintaxa:

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

t
h
g
i
r
py

Co

Functia DATEPART
Sintaxa:

DATEPART (informatie_calendaristica, expresie_data/ora)


Extrage dintr-o data calendaristica/ora o anumita informatie calendaristica,
identificata printr-un cod

Ctlin Tudor

Informatie_calendaristic
(valori uzuale)

Rezultat

year

An

month

Luna

day

Zi

dayofyear

Numar zi din an

quarter

Trimestru

week

Numar saptamana din an

hour

Ora

minute

Minutele

second

Secundele

25

Note de curs Baze de date

Functia DATEPART (exemple)

t
h
g
i
r
py

Co

Functia DATEDIFF
Sintaxa:

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

Ctlin Tudor

26

Note de curs Baze de date

Functia DATEADD
Sintaxa:

DATEADD (informatie_calendaristica, n, data/ora start)


Calculeaz o data calendaristic, pornind de la o anumit dat de referin la care se adaug un numr n
de fraciuni ale datei (n format informaie calendaristic)

t
h
g
i
r
py

Co

Functiile LTRIM, RTRIM

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

Ctlin Tudor

27

Note de curs Baze de date

Functiile LEN, LOWER, UPPER


LEN(expresie) returneaz numrul 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

t
h
g
i
r
py

Co

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

Ctlin Tudor

28

Note de curs Baze de date

Agregarea datelor n limbajul T-SQL


Funcii 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 efecturii calculelor.
Simbolul * - numrarea tuturor valorilor domeniului pe
care se aplic funcia, inclusiv a valorilor nule (NULL).

t
h
g
i
r
py

Co

Considerente generale privind agregarea


datelor

Rezultatul unei interogri de agregare va afia doar

realizrile cmpului/cmpurilor de grupare i valorile


agregate ale cmpului/cmpurilor de sintetizat.

Funciile de agregare pot fi utilizate pentru unul sau mai

multe cmpuri din cadrul sursei de date, dar i pentru


cmpuri calculate.

Gruparea se poate realiza pentru mai multe cmpuri ale

sursei de date sau calculate. Ordinea de grupare este


cea a selectrii cmpurilor necesare pentru afiare.

n cazul n care intervin condiii de filtrare, mai nti are

loc filtrarea i apoi vor fi agregate datele rezultate n


urma acesteia.

Cmpurile folosite doar pentru a stabili condiii de filtrare

nu sunt niciodat afiate n rezultatul final.

Ctlin Tudor

29

Note de curs Baze de date

Considerente generale privind agregarea datelor


Exemplu de agregare cu condiii de filtrare:
Care este preul cel mai mic la care a fost achiziionat fiecare produs n parte, afind doar produsele
facturate ntr-o cantitate mai mic de 24?

Pasul 1: Filtrarea
nregistrrilor

Pasul 2: Gruparea i
agregarea datelor

t
h
g
i
r
py

Co

Grupri de date i funcii de grup

1. Funcii de agregare aplicate tuturor nregistrrilor, fr a fi


necesar gruparea:
S se afieze cte 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. Funcii de agregare aplicate pe grupuri de nregistrri:


S se afieze pentru fiecare denumire de furnizor cte 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

Ctlin Tudor

30

Note de curs Baze de date

Grupri de date i funcii de grup


3. Funcii de agregare aplicate grupurilor, cu criterii de filtrare:
S se afieze cte 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. Funcii de agregare aplicate pe grupuri cu filtrare pe expresii:
S se afieze 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
WHERE Month([DataFactura])=2 AND Year([DataFactura])=2012
GROUP BY DenumireFz
HAVING Count(*)>3

t
h
g
i
r
py

Co

Grupri de date i funcii de grup

Afiai numrul total de pli, numrul total de bonuri de cas i numrul distinct al bonurilor de
cas, tiind c anumite bonuri de cas sunt achitate prin mai multe tipuri de pli i alte bonuri de
cas nu sunt achitate nc.

Select
FROM
LEFT JOIN

Ctlin Tudor

Count(*) as NrTotalInregistrari,
COUNT( P.NrBonCasa ) as NrBonuriCasa,
COUNT(Distinct P.NrBonCasa ) as NrBonuriCasaDistincte
BonuriDeCasa BC
Plati P on P.NrBonCasa=BC.NrBonCasa

31

Note de curs Baze de date

Funciile de clasificare Row_Number(),


Rank(), NTile(NrGrupe)
Apelare:

<Nume_Funcie> OVER ([PARTITION BY


<cmp_partiionare>] ORDER BY
<cmp_ordonare> )
Row_Number()
Atribuie un numr de ordine fiecrei nregistrri n

funcie de un criteriu de ordonare specificat n


clauza OVER.

t
h
g
i
r
py

Co

Funciile de clasificare Row_Number(),


Rank(), NTile(NrGrupe)
RANK()
Atribuie un rang fiecrei nregistrri n funcie de un

criteriu de ordonare. nregistrrile cu aceleai valori pe


cmpul dup care se face ordonarea vor avea acelai
rang.

NTile(NrGrupe)
Permite

distribuirea nregistrrilor dintr-un set de


rezultate pe N intervale n funcie de un criteriu de
ordonare.

Clauza

PARTITION BY divide setul de


rezultate n partiii sau subseturi
asupra crora se va aplica mai departe
funcia de clasificare respectiv.

Ctlin Tudor

32

Note de curs Baze de date

Funciile 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

t
h
g
i
r
py

Co

Funciile 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)

Ctlin Tudor

33

Note de curs Baze de date

Alte funcii uzuale


ISNULL ( expresie , valoare de nlocuit )
evalueaz dac o expresie conine valoarea NULL i, n

cazul n care condiia este ndeplinit, nlocuiete


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 condiia 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 condiia este ndeplinit


returnez valoarea 1, n caz contrar 0.

t
h
g
i
r
py

Co

Cutarea n cadrul irurilor de caractere


pe baza abloanelor definite prin
operatorul de comparaie LIKE
Sintaxa:<expresie>[NOT]LIKE<sirdecaractere>
<expresie> nume de cmp 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 regsit n cadrul expresiei pe care

se efectueaz cutarea

Caractere speciale utilizabile la cutare:

% 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.

Ctlin Tudor

34

Note de curs Baze de date

Utilizare operator LIKE n expresii


S se afieze toi vnztorii al cror nume ncep cu litere

de la N la R.

SELECT * FROM Vanzatori


WHERE Nume LIKE '[N-R]%

S se selecteze doar vnztorii de sex masculin care sunt

nscui n luna ianuarie.

SELECT * FROM Vanzatori


WHERE CNPVanzator LIKE '1__01%

S se afle care sunt vnztorii care nu sunt nscui n anul

1978.
Select * from Vanzatori
WHERE CNPVanzator like '_[^7][^8]%'

t
h
g
i
r
py

Co

Structura alternativ CASE

Se folosete pentru a afia o valoare n funcie de

rezultatul evalurii unei condiii 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

Ctlin Tudor

35

Note de curs Baze 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
FROM Plati

t
h
g
i
r
py

Co

Utilizarea sub-interogrilor n limbajul T-SQL


Sub-interogare=structur SQL al crei rezultat ajut

n rezolvarea unei alte interogri (interogri imbricate)


Predicate utilizate pentru sub-interogri:
ANY compar partea stng a sa cu oricare dintre

rezultatele unei sub-interogri situate n partea dreapt


ALL Compar partea stng a sa cu toate rezultatele subinterogrii
EXISTS se comport ca un operator
dup clauza
WHERE care evalueaz dac sub-interogarea returneaz
cel puin o nregistrare
IN poate fi utilizat cnd se compar rezultatele a dou
mulimi, dintre care cea din dreapta este returnat de subinterogare

Ctlin Tudor

36

Note de curs Baze de date

Exemple de interogri cu sub-interogri


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
WHERE Year(DataFactura)=2012)

2. Lista produselor cu categoria de calitate I care au


preul mai mic dect oricare dintre preurile produselor
de calitate II:
SELECT DenumireProdus FROM Produse
WHERE CategorieCalitate=1 AND Pret >
ANY (Select [Pret] From Produse
Where CategorieCalitate=2)

t
h
g
i
r
py

Co

Exemple de interogri cu sub-interogri


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)

Ctlin Tudor

37

Note de curs Baze de date

Exemple de interogri cu sub-interogri


4. Furnizorii care au emis cel puin 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
WHERE DataFactura>#09/20/2012#)

t
h
g
i
r
py

Co

Interogri SQL pentru adugarea de noi nregistrri


Varianta 1: Adugarea 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: Adugarea pe baza valorilor preluate dintr-un tabel

INSERT INTO nume-tabela SELECT nume-atribut1, numeatribut2, FROM nume-tabela-sursa [WHERE Conditii ]
Exemplu: S se adauge n tabela Parteneri toi Furnizorii din localitatea
Bucureti
INSERT INTO Parteneri SELECT * FROM Furnizori WHERE Localitate=Bucureti

Ctlin Tudor

38

Note de curs Baze de date

Interogri SQL pentru modificarea valorilor cmpurilor


UPDATE nume-tabel
SET nume-atribut1=valoare1, nume-atribut2=valoare2,
WHERE Condiii
Exemplul 1: S se transforme n KG toate unitile de msur ale produselor
cu codul mai mare dect 3.
UPDATE Produse SET UnitateMasura=KG WHERE CodProdus:3
Exemplul 2: S se majoreze cu 5% toate preurile din facturile emise dup
data de 12.09.2012.
UPDATE ProduseFacturate
SET PretFacturat=[PretFacturat]+[PretFacturat]*5/100
WHERE IDFactura IN
(Select IDFactura FROM Facturi WHERE DataFactura>#12.09.2012#)

t
h
g
i
r
py

Co

Interogri SQL pentru tergerea nregistrrilor


DELETE *
FROM nume-tabel
WHERE Condiie

Exemplu: S se tearg toi clienii din localitatea Brila


DELETE *
FROM Clienti
WHERE Localitate=Braila

Ctlin Tudor

39

Note de curs Baze de date

tergerea tuturor nregistrrilor unui tabel


TRUNCATE TABLE NumeTabel
Exemplu: S se tearg toate nregistrrile tabelului Parteneri
Varianta 1:
TRUNCATE TABLE Parteneri
Varianta 2:
DELETE FROM Parteneri

Diferene ntre cele dou comenzi:


Instruciunea DELETE nregistreaz n jurnalul de tranzacii al bazei de date
starea fiecrei nregistrri, TRUNCATE doar specific numrul de nregistrri
terse
Comanda DELETE este mult mai lent din punctul de vedere al execuiei

t
h
g
i
r
py

Important: Ambele comenzi in cont de restriciile legate de integritatea


bazei de date (chei externe) sau restricii definite de utilizator privind
tergerea nregistrrilor

Co

Interogri SQL pentru crearea de tabele rezultat


SELECT nume-atribut1, nume-atribut2,
INTO nume-tabel-rezultat
FROM list-tabele-surs
[WHERE Condiii ]

Exemplu: S se creeze un nou tabel denumit ProduseFacturateOctombrie


care s afieze denumirile de produse facturate n luna curent
SELECT DenumireProdus
INTO ProduseFacturateOctombrie
FROM Produse, ProduseFacturate, Facturi
WHERE Produse.CodProdus=ProduseFacturate.CodProdus AND
ProduseFacturate.IDFactura=Facturi.IDFactura AND
Month(DataFactura)=Month(Date())

Ctlin Tudor

40

Note de curs Baze de date

Conceptul de tranzacie
O tranzacie este o singur operaiune sau set de

operaiuni care se comport ca un ntreg,


executndu-se fie toate, fie niciuna, asigurnd
astfel coerena datelor.

Rolul tranzaciilor: ar trebui s previn apariia

unor circumstane neprevzute la nivelul datelor.


Operaiile cuprinse ntr-o tranzacie nu pot

fi executate parial: dac una dintre ele


eueaz atunci toate celelalte sunt anulate.

t
h
g
i
r
py

Co

Conceptul de tranzacie
O tranzacie poate fi:

(commited) cnd toate


operaiile
tranzaciei
au
fost
ncheiate cu succes, iar baza de
date
este
actualizat
cu
noile
modificri.

Salvat

napoi (rollback) toate


operaiile
tranzacionate
sunt
anulate, iar baza de date revine la
starea dinaintea tranzaciei.

Derulat

Ctlin Tudor

41

Note de curs Baze de date

Tranzacii - Exemplificare

S se efectueze tergerea unei categorii de

produse prin mutarea produselor ei ntr-o alt


categorie:

t
h
g
i
r
py

Co

Comenzi SQL uzuale n cadrul


tranzaciilor

@@ROWCOUNT - numrul de nregistrri afectate de o interogare


Exemplu:

ROLLBACK TRANSACTION anuleaz o tranzacie (care include i


operaia de actualizare).

RAISERROR (mesaj de afiat, nivel de severitate al


erorii, cod de identificare)
Se afieaz un mesaj de eroare
Nivelul de severitate poate fi specificat ntre 0 si 25 (>20 erori fatale)
Codul de identificare poate fi atribuit de utilizator ntre 0 i 255 i e folosit

pentru depanarea procedurilor

Ctlin Tudor

42

Note de curs Baze 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 afind datele din cadrul acestora dintr-o anumit


perspectiv asociat, cel mai adesea, unui rol al unui utilizator.

View = tabel virtual, afind cmpuri i nregistrri din

tabelul/tabelele surs, fr a stoca aceste date.

Utilizat pentru a simplifica i personaliza percepia pe care

fiecare utilizator o va avea asupra bazei de date.

Poate fi consultat prin interogarea ei cu ajutorul limbajului

SQL.

Roluri
utilizatori

t
h
g
i
r
py

Co

Server

CmpT1 CmpR1 CmpR2 CmpT3

Tabel 1
Vedere user 1

CmpR1

CmpR2

CmpR3

CmpT2 CmpT3 CmpR2

Tabel 2
Vedere user 2

Ctlin Tudor

43

Note de curs Baze de date

Motivaii n utilizarea obiectelor VIEW


Distribuirea informaiei pe roluri de utilizatori:
Mecanism de securitate pentru restricionarea 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 fiecruia.

Simplificarea procesului de manipulare a datelor:


O vedere deja regrupeaz date din mai multe tabele
Interogarea unei vederi este mai simpl dect interogarea

tuturor tabelelor surs ale acesteia.

Personalizarea datelor:
Utilizatorii vor vedea aceleai date, dar prezentate din

perspective diferite.

Combinarea datelor din baze de date distribuite:

t
h
g
i
r
py

Tabele partiionate prin distribuirea bazelor de date pot fi

regrupate printr-o vedere ce poate fi ulterior interogat cu mai


mare uurin.

Co

Tipuri de vederi:

Vederi de tip sistem: utilizate pentru a fi interogate n

vederea obinerii informaiilor privind structura bazei de date.

Vederi Information Schema


o Exemplu:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS Where
TABLE_NAME=Angajati'

Vederi tip Catalog


o Exemplu:
SELECT * FROM sys.tables
Vederi pentru managementul dinamicii datelor (Data Management
View):
o Exemplu:
SELECT session_id, client_net_address
FROM sys.dm_exec_connections

Vederi definite de utilizator: utilizate potrivit scenariilor enunate

anterior.

Ctlin Tudor

44

Note de curs Baze de date

Crearea i manipularea vederilor


Dou moduri de definire a unei vederi:
Grafic, prin interfaa SSMS: definirea cmpurilor i a

condiiilor de filtrare a datelor se poate realiza vizual;


Utiliznd limbajul SQL n gestionarea obiectelor de tip
View
(CREATE | ALTER | DROP View )
Manipularea unei vederi:
Datele dintr-un View pot fi invocate cu uurin prin

aceleai metode prin care sunt manipulate tabelele bazei


de date (SELECT, UPDATE, DELETE, INSERT)
La interogarea unei vederi att datele ct i cmpurile
(structura) acesteia sunt obinute n mod DINAMIC prin
execuia interogrii care st la baza ei.

t
h
g
i
r
py

Co

Crearea unei vederi prin interfaa SSMS

Selectare
tabele surs

Ctlin Tudor

45

Note de curs Baze de date

Panoul surselor de date

Grila de cmpuri

Transpunerea n limbajul SQL

t
h
g
i
r
py

Co

Selectarea cmpurilor ce
formeaz vederea

Ctlin Tudor

46

Note de curs Baze de date

Denumirea cmpurilor afiat


n cadrul vederii

Opiuni privind sortarea

Cmp calculat introdus


suplimentar:
Cantitate*PretVanzare

Criteriu de filtrare a datelor


afiate

t
h
g
i
r
py

Co

Agregarea datelor - exemplu

S se creeze o vedere a tabelelor care s afieze pentru fiecare bon de cas emis n
anul 2011 valoarea total i numrul de produse din cadrul acestuia.
Pasul 1:
Selectarea
tabelelor surs

Ctlin Tudor

47

Note de curs Baze de date

Agregarea datelor - exemplu


S se creeze o vedere a tabelelor care s afieze pentru fiecare bon de cas emis n
anul 2011 valoarea total i numrul de produse din cadrul acestuia.
Pasul 2: Selectarea
cmpurilor necesare,
definirea formulelor
de calcul i stabilirea
condiiilor de filtrare

t
h
g
i
r
py

Co

Agregarea datelor - exemplu

S se creeze o vedere a tabelelor care s afieze pentru fiecare bon de cas emis n
anul 2011 valoarea total i numrul de produse din cadrul acestuia.
Pasul 3: Precizarea
gruprilor de date i
aplicarea funciilor de
grupare specifice

Ctlin Tudor

48

Note de curs Baze de date

Definiie: O procedur stocat este un obiect al


bazei de date SQL Server coninnd una sau mai
multe clauze SQL care permit efectuarea de
modificri asupra bazei de date sau extragerea
informaiilor din cadrul ei.
Procedurile stocate:
Pot conine instruciuni privind modificarea structural a
bazei de date;
Pot conine parametri de intrare i pot returna valori
multiple prin definirea unor parametri de ieire;
Pot returna o valoare care s indice starea executrii
procedurii n ansamblul ei.
Pot conine structuri de control de diverse feluri.

t
h
g
i
r
py

Co

Flexibilitate sporit n programarea structurilor


SQL de selectare sau actualizare a datelor;
O procedur poate fi executat de oricte ori i
n paralel de mai muli utilizatori, permind
reutilizarea ei n funcie de necesiti;
Elimin o mare parte din codul redundant la
nivelul unei aplicaii;
Reduce traficul n reeaua de calculatoare la
apelarea datelor stocate pe server;
Pot deine, asemntor obiectelor de tip
Vedere, atribute de securitate ce pot mbunti
politicile de acces la datele senzitive.

Ctlin Tudor

49

Note de curs Baze de date

Proceduridesistem:aucaracteradministrativi
informaionalnlegturcuobiectelebazeide
date,fiindstocatedebazadedategeneric
numitMaster.
Proceduridefinitedeutilizator:suntcreaten
scopuldearealizadiverseoperaiincadrul
bazeidedatecanecesitateaunuigrupde
utilizatori:
SELECT,INSERT,UPDATE,DELETE;
Prelucrriasupradatelordindiferitetabelei
afiarearezultatului;
Introducereaderestriciidevalidaresuplimentare;
Trimitereademesajeprinemail,etc.

t
h
g
i
r
py

Co

Creareauneiproceduristocate:
Vizual,prininterfaaSSMS;
PrincomandaSQL:
CREATEPROC |Procedure<<NumeProcedur>>
[ListParametri]
AS
InstruciuniSQL

Modificareauneiproceduristocate:
PrincomandaSQL:ALTERPROC| Procedure

tergereauneiproceduristocate:
PrincomandaSQL:DROPPROC| Procedure

Ctlin Tudor

50

Note de curs Baze de date

Pasul1:Generareauneinoi
proceduristocate
CTRL+SHIFT+M

t
h
g
i
r
py

Co

Ctlin Tudor

Pasul2:Precizarea
instruciunilorSQLaferente
proceduriistocate

51

Note de curs Baze de date

Selectareatabelelorsurs

t
h
g
i
r
py

Co

Construireainterogriideselecie
aferenteproceduriistocate

Ctlin Tudor

52

Note de curs Baze de date

Executareacoduluidecrearea
proceduriistocatepeserver

t
h
g
i
r
py

Co

Procedura parametrizat:
prezintabilitateadeatransmitevaloareaunei
condiiiprinintermediulunuiparametru;
Permiteprintrosingurdefiniieacoperireanevoilor
informaionalealemaimultorutilizatori.

Moddedefinire:
CREATEPROC<nume_procedura>
@<Nume_parametru> <tip_de_date> [OUTPUT]

AS
<instruciuniSQL>

Ctlin Tudor

53

Note de curs Baze de date

Ssecreezeoprocedurstocatprincaresseafiezetoi
vnztoriiangajaintrunanprecizatcaparametru:

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

t
h
g
i
r
py

END

Co
Declarare:

Declare @NumeVariabil as TipDeDate

Atribuirevalorivariabil:
Set @NumeVariabil = Valoare
sau
Select @NumeVariabil=Valoare

Ctlin Tudor

54

Note de curs Baze de date

Sserealizezeoprocedurstocatcaresafiezesumacomisioanelor
totalecuveniteunuivnztoracruimarcsevaprecizaprinparametru.

t
h
g
i
r
py

Co

Sserealizezeoprocedurstocatcaresafiezentrovariabilde
ieireprocentulcomisionuluiunuivnztorspecificatnprealabil

Ctlin Tudor

55

Note de curs Baze de date

EXECnume_procedur
EXECnume_procedur [val_param1,
val_param2,..]
Exec usp_ListaVanzari
Exec usp_VanzatoriParametru 2007
Exec usp_VanzatoriParametru 2005
Identiccu
Exec usp_VanzatoriParametru @AnAngajare= 2005

t
h
g
i
r
py

Co

Reguli:

Enumerareaparametrilordeintraresevafaceprin
separareaacestoraprinvirgul;
Definireaparametrilordeintraresepoaterealizaprin
imbricareaparametrilorobligatoriicuceiopionali;
Laexecutareaproceduriistocatesevainecontde
ordineancareparametriiaufostprecizaidoardac
nusevaspecificanmodexplicitnumeleparametrului.
Cndunparametruopionalaparenainteaaltor
parametriobligatorii,nespecificareauneivaloripentru
acestadeterminutilizareanumelorcelorlali
parametrinprecizareavaloriloracestorasubforma:
@NumeParametru=Valoare.

Ctlin Tudor

56

Note de curs Baze de date

Utilizareamaimultorparametrisimultan
Definire:

Apelare:

t
h
g
i
r
py

Co

Funcia utilizator: definete un set de instruciuni


i secvene de control SQL aplicat pentru
prelucrarea datelor din tabele sau alte obiecte
interogabile returnnd o valoare.
Se constituie ntr-un obiect SQL de sine stttor
ce poate fi apelat prin precizarea numelui i
parametrilor si ori de cte ori este nevoie n
cadrul altor obiecte SQL Server.
Poate fi utilizat n cadrul obiectelor de tip View sau al
procedurilor
stocate
diminund
considerabil
dimensiunea codului SQL i facilitnd o mai bun
structurare a acestuia.
Poate fi utilizat pentru simularea unor tabele virtuale ce
pot fi interogate asemntor tabelelor bazei de date.

Ctlin Tudor

57

Note de curs Baze de date

Funciidetipscalar(scalarfunctions)
Realizeazoprelucrareconformunuialgoritm
conceputdeutilizatorinndcontdevalorile
parametrilorspecifici.
Returneazosingurvaloareprezentnduntipde
datscalar(predefinitsaudefinitdeutilizator)

Funcii detiptabelar (tablevaluedfunctions)


returneazunsetdenregistrricepoatefiasimilat
unuitabelvirtual.
nfunciedetipulncaresuntdefinitepotfi:
Funciidetiptabelnlinie(inline):returneazuntabelcarezultatal
uneiinstruciuniSQLfrafinevoiedefinireaacestuia.
Funciitabeldetipmultiinstruciune:necesitdefinireaexplicita
tabeluluirezultat.

t
h
g
i
r
py

Co

Acceptzerosaumaimuliparametri
Returneazosingurvaloare
Constndoupri:

Antetulfuncieincaresedefinescnumelefunciei,listaparametrilori
tipuldedatreturnatdefuncie.
Corpulfuncieincareestedefinitalgoritmuldecalculalvaloriirezultat
caresetermincuclauzaRETURN.

Apelareafuncieipoatefifcutncadrul
instruciunilorSQLnclauzeprecumSELECT,
WHERE,GROUPBY,HAVINGsauORDERBY.
Serecomandatuncicndunanumitcodsau
secvenSQLesteutilizat/nmaimulte
proceduri.
Pentruapelareaeisevautilizainclusivnumele
proprietarului.

Ctlin Tudor

58

Note de curs Baze de date

CREATE FUNCTION [numeproprietar.] nume_funcie ([ @parametru_1 AS


tip_de_date], . [ @parametrul_n AS tip_de_date] )

RETURNS tip_de date


AS
BEGIN
INSTRUCIUNI SQL
RETURN valoare de returnat
END

Pentrumodificare:
ALTERFUNCTION.....
Pentrutergere:
DROPFUNCTION.....

t
h
g
i
r
py

Co

Funcii de tip scalar - Exemplu

Ctlin Tudor

59

Note de curs Baze de date

A.VariantaINLINE.
sereturneazuntabelcarezultat,frafi
nevoies sedefineascstructuraacestuia
nusuntpermiseBEGIN.END
estepermisosingurfrazSQLdetipSELECT
fiecarecmpdininterogareasurstrebuies
aibunnume
clauzaORDERBYestepermisnumaidacse
utilizeazmpreuncuTOP
nusuntpermiseprelucrricomplexe
Coloanelepecarefunciadetiptabelleva
returnasuntdictatedeinstruciuneaSELECT
carestlabazaei,

t
h
g
i
r
py

Co

A.VariantaINLINE.
CREATEFUNCTION [numeproprietar.]nume_funcie([@parametru_1AStip_de_date],
[@parametrul_nAStip_de_date])
RETURNS TABLE
As
RETURN (fraza_SQL_SELECT)

Ctlin Tudor

60

Note de curs Baze de date

t
h
g
i
r
py

Co

B.variantaMULTIINSTRUCIUNE
sereturneazuntabelrezultat
estenecesarssedefineascexplicitstructura
tabeluluirezultat
poateincludeprelucrricomplexe

Ctlin Tudor

61

Note de curs Baze de date

B.variantaMULTIINSTRUCIUNE
CREATEFUNCTION [numeproprietar.]nume_funcie
([@parametru_1AStip_de_date],.[@parametrul_nAStip_de_date])

RETURNS @variabila_ieireTABLE
(cmp_1tipdedate,cmp_Ntipdedate)
AS
BEGIN
INSTRUCIUNISQL
RETURN
END

t
h
g
i
r
py

Co

Ctlin Tudor

62