Sunteți pe pagina 1din 178

Curs SGBD

Disciplina: SGBD
Tematica i repartizarea orientativ a orelor la curs/prelegeri. Specialitile IA, MnI
1.

Tehnologia client/server n arhitectura sistemelor de baz de date.


Caracteristicele i funciile prilor client i server. Baze de date distribuite. Sisteme
client-server. Tehnologii de acces la serverul bazei de date. Interfaa aplicaiilor cu baze de
date

2. Servere contemporane a bazelor de date. Caracteristicele i arhitectura de reea.


Arhitectura bazei de date
3. Iniiere general n limbajul bazelor de date relaionale SQL. Standardul
limbajul SQL i ediiile lui. Categoriile de comenzi n standardul SQL.
Versiunile limbajului SQL.
4. Bazele limbajului SQL. Tipuri de date i funcii predefinite prevzute de
standardul SQL. Instruciuni de control n limbajul SQL.
5. Obiectele de structur a bazei de date prevzute de standardul SQL. Gestionarea
obiectelor. Sublimbajul de definire a datelor (DDL).
6. Crearea bazei de date. Structura bazei de date pe fiiere. Instruciunile
CREATE/ALTER/DROP. Baze de date de sistem. Securitatea i protecia
bazelor de date.
7. Crearea tabelelor n SQL. Manipularea datelor n tabele (sublimbajul DML).
Interogarea datelor. Instruciunea SELECT. Actualizarea datelor. Instruciunile
INSERT, UPDATE, DELETE
8. Indexarea bazei de date. Creare indecilor n SQL. Vederi. Crearea i utilizarea
vederilor
9. Prelucrarea datelor n SQL. Operaii de prelucrare. Interogri de totalizare i
grupare a datelor

10. Forme complexe a instruciunii SELECT. Legturi dintre tabele. Operatorul


SELECT n instruciunile de modificare a datelor. Subinterogri
11. Gestiunea bazei de date. Controlul accesului la baz de date. Instruciunile
Grant, Revoke. Copierea de rezerv
12. Proceduri stocate. Crearea, modificarea i executarea unei proceduri stocate.
Funcii utilizator. Crearea i utilizarea funciilor utilizator. Funcii utilizator
scalare i tabelare
13. Funciile utilizatorului n limbajul SQL
14. Gestiunea tranzaciilor n limbajul SQL
15. Triggere. Crearea, modificarea i tergerea unui trigger. Tranzacii n SQL
16. Utilizarea cursoarelor?
17. Aplicaii Windows. Utilizare API ODBC i ADO
18. Aplicaii Web. Utilizare ASP i ADO
19. Extragerea informaiei din baza de date sub form de documente XML

Bibliogrfie
Connolly Thomas, Beg C. Databases System, Addison Wesly 2003.
C.J.Date Baze de date, Editura E+ 2005.
Fotache Marin, Strmbei C., Creu L. Oracle 9i2. Ghidul dezvoltrii aplicaiilor
profesionale. Iai: Polirom, 2003.
.. SQL. http://www.intuit.ru/department/database/sql/
. SQL Server:
, XML, HTML.
1.

1. TEHNOLOGIA CLIENT/SERVER N ARHITECTURA SISTEMELOR


DE BAZE DE DATE. MODELE DE ARHITECTUR
1.1. Tehnologia client/server n arhitectura SGBD
1.2. Arhitectura sistemelor de baze de date
1.3. Componentele sistemelor de baze de date. Serverul de baze de date
1.4. Prelucrarea distribuit a datelor
Sistemele de gestiune a bazelor de date (n limba englez "Database Management
System" DBMS) SGDB reprezint totalitatea programelor utilizate pentru
crearea, interogarea i ntreinerea (asigurarea securitii, siguranei, integritii i
consistenei datelor) unei baze de date. Include dou categorii de module: module
care sunt comune cu cele ale sistemelor de operare ale calculatoarelor i module cu
funcii specifice bazei de date.
n cursul nostru vorbind despre SGBD, vom avea n vedere totalitatea tehnologiilor,
metodelor i instrumentelor, algoritmilor i programelor utilizate pentru crearea,
interogarea i ntreinerea unei baze de date.
1.1. Tehnologia client/server n arhitectura SGBD (de refcut mai succint,
mai concret alea Landau)
Una din funciile de baz al SGBD asigurarea accesului comun i centralizat la
datele structurate al aplicaiei. Realizarea acestei problem n deplina msur este
posibil numai pe baza arhitecturii de reea i tehnologiei client/server.

(Partajabilitatea resurselor (datelor)
presupune utilizarea datelor de mai multe aplicaii ce efectueaz operaii asupra
bazelor de date.).
,
. Partagarea resurselor presupune divizarea sistemului
pe componente, care ndeplinesc funcii diferite i care sunt amplasate pe noduri
(calculatoare) diferite n reea (Fig. 1.1).

U1

U5

U6

U4

Server
BD1

Server
BD2

U2
U12
U3
Server
BD3
U11

U7

U9

U8
U10

Fig. 1.1. Topologia reelei de calcul cu componentele de


client i server de baz de date amplasate n n noduri.

Arhitectura sistemului de baz de date din punct de vedere a amplasarei spaiale a


componentelor poate fi de dou tipuri:
baze de date centralizate (baza de date n reea amplasat pe un server
centralizat reea local);
baze de date distribuite o reea de baze de date amplasate pe mai multe
servere.
Aici deja un se mai vorbete despre baze de date locale cu partea client i partea
server instalate pe acelai calculator.
Pot fi evedeniate urmtoarele componente hard i soft:
staii terminale (staii de lucru);
maine servere;
partea client al SGBD;
partea server al SGBD;
baza de date fizic.
Tehnologia client/server n sisteme de baze de date
Din punct de vedere logic componentele sistemului de baze de date se afl n relaii
de tip client/server. Client/server este o tehnologie care a schimbat fundamental
modul de abordare a aplicaiilor cu baze de date. Aceast tehnologie se bazeaz pe
4

modelul fundamental de interaciune dintre componentele constituiente a unui sistem


modelul client/server. Clientul i serverul nu neaparat s fie careva componente
fizice ele pot fi tratate n general ca componente logice. n acest model clientul este
definit ca un solicitant de servicii, iar server-ul este definit ca un furnizor de servicii.
Clientul i server-ul comunic prin schimb de mesaje, care se transmit prin liniile de
reea (liniile de comunicaii). Funciile care le ndeplinesc clientul i serverul trebuie
se nu depind de aceea unde este amplasat clientul pe aceeai main sau pe alta,
fie din reeaua local sau din fundurile (adncurile) Internet-ului. Transmiterea
mesajelor este funcia softului de sistem, anume a componentului de
telecomunicaie.
In arhitectura client/server fac parte clientul, serverul i baza de date fizic.

Client

Server

Baza de date

n arhitectura client/server clientul se caracterizeaz prin faptul c:


Prezint o interfa utilizator, de obicei grafic (GUI);
formuleaz interogri sau comenzi pe care le adreseaz server-ului;
transmite interogrile/comenzile respective server-ului prin intermediu unei
tehnologii de comunicaie;
analizeaz datele din rezultatele interogrilor/comenzilor primite de la server.
La rndul su serverul se caracterizeaz prin faptul c:
furnizeaz un serviciu clientului;
rspunde la interogrile/comenzile clientului;
ascunde detaliile sistemului client/server, fcnd transparent dialogul dintre
client i server.
Avantajele principale al arhitecturei client/server sunt:
minimizarea volumelor de date, care circul prin reelile de comunicaie;
prelucrarea paralel al datelor de mai multe procesoare;
maina server poate fi o main specializat cu o productivitate deosebit;
maina client poate fi mai bine adaptat la cerinele utilizatorului asigurndul
cu o interfa grafic mai avansat;
corespunde structurei de organizare ale multor ntrepinderi.
Serverele pot fi calculatoare personale sau sisteme de calcul specializate
(minicalculatoare, mainframe-uri) n vederea asigurrii legturii dintre clieni i
5

bazele de date din care se extrag informaiile dorite. Scopul principal este autonomia
utilizatorului (angajatului).
"-"
,

. ,
"-",
, , ,

.
Se poate spune c arhitectura sistemului de baz de date se proiecteaz pe structura
(topologia) reelei de calcul.
Istoric vorbind, evoluia tehnologic de la sisteme de baze de date centralizate spre
client/server a trecut printr-o etap intermediar numit arhitectura file/server.
Aceast arhitectur const n schimb cu fiiere prin liniile de reea (exemplu
FoxPro). Dezavantajul ei principal circulaia volumelor mari de date prin liniile de
comunicaie. (De revizuit)
n tehnologia client/server sistemul (informaional, de calcul) se divizeaz n dou
pri... ,
, - .
,
.
.
" " ,
"-", ,
.
.
,

,
.


.

SQL. SQL
.
(
).
SQL
. SQL-
, SQL.
,
, SQL-.

( ).
2.1. Prelucrarea distribuit a datelor
Cum s-a spus mai sus, arhitectura sistemului de baze de date distribuit se bazeaz pe
structura sistemului distribuit de calcul folosind tehnologia client/server de
interaciune ntre componentele constituiente. Cu privire la baze de date arhitectura
client/server poate fi realizat n trei structuri care determin trei categorii de
prelucrare al datelor:
o baz de date centralizat n arhitectura client/server. Mai muli clieni
sunt deservii de un server;
prelucrare cooperativ. Datele unei aplicaie sunt mprtiate pe diferite
sisteme (servere). Clientul are acces la oricare server (Fig. 1.1) dar n unul i
acelai moment de timp poate se adreseze interogarea numai la un server. n
aceast modalitate el nu poate obine combinaii de date din mai multe tabele.
Plus la aceasta el trebuie s tie pe care server se gsesc datele cerute;
prelucrare distribuit. Aplicaia (datele i componentele de gestiune) este
mprtiat pe mai multe sisteme care ruleaz simultan. Fiecare main poate
se joace rolul ct al clientului, att i al serverului. Cu alte cuvinte fiecare
main asigur funcionarea unui sistem de baze de date deplin. Clientul are
acces la oricare server simultan i n unul i acelai moment de timp poate se
adreseze interogri la oricare server. Poate se obin combinaii de date din
mai multe tabele i nu trebuie neaprat s tie unde se gsesc acestea date.

Ultimul din enumerate mai sus sisteme este un adevrat sistem de baze de date
distribuite. n acest sistem datele sunt transparente fa de aplicaii i pot fi memorate
pe diferite platforme cu diferite sisteme de operare. Din acest punct de vedere sunt
posibile sisteme de baze de date distribuite omogene i eterogene.
(omogene i eterogene)
.
.
.
- , .
, ,
(Fig. 1.2) .
, SQL- . ,
SQL
.

Lecia 2. Modele client-server n tehnologia bazelor de date


Baze de date distribuite. Sisteme client-server. Caracteristicele i funciile
prilor client i server. Tehnologii de acces la serverul bazei de date. Interfaa
aplicaiilor cu baze de date
2.1. Modele client-server referitor la tehnologia bazelor de date
n funcie de structur i de complexitate o aplicaie de baz de date poate fi de
trei tipuri:
Local, plasat pe o singur main. Regim monopol de utilizare;
Centralizat avnd un server central. Realizeaz acces centralizat i comun la
baza de date centralizat;
Distribuit fiind plasat pe mai multe noduri n reeaua de calculatoare. Sistem
de baz de date distribuit

Baza de date reprezint modelul informaional al domeniului concret din lumea


real. Complexitatea structural i funcional a domeniului univoc determin
structura i complexitatea bazei de date. Este evident c actualizarea datelor n
ultimul caz prezint o problem cea mai acut i complex de meninere a integritii
i consistenei datelor. Rolul principal n rezolvarea ei o joac tehnologia clientserver. Paradigma client-server este principal n prezentarea proceselor
informaionale.
Tehnologia client-server a fost conceput i actual este o tehnologie de baz n
arhitectura sistemelor de program complexe. Procesele de client i server sunt dou
pri interlegate a unui proces de program n care clientul cere iar serverul i ofer un
anumit serviciu. Din acest punct de vedere nu import dac client sau server sunt
entiti fizice sau logice.
De asemenea nu import dac clientul sau serverul se afl pe una i aceeai
main de calcul sau sunt plasate pe diferite calculatoare n reeaua local sau
global. n cazul reelei de calculatoare tehnologia asigur partagarea resurselor soft
i hard de calcul.
Dat fiind faptul c aplicaiile de baze de date ca sisteme informaionale
actualmente sunt preponderent aplicaii de reea utilizarea tehnologiei client server n
acest caz asigur acces centralizat i comun la informaie. Referitor la baze de date
este important cum sunt amplasate prile client i server pe diferite calculatoare n
reea. Aceasta amplasare determin arhitectura modelului client-server. O
arhitectur optimal i corect are ca obiective principale asigurarea integritii i
consistenii datelor aplicaiei de reea.
Modelul client-server referitor la baze de date. Cinci clase (grupe) de funcii
tipice a aplicaiei de baz de date:
Funcii de ntroducere i vizualizare a datelor funcii de prezentare a datelor
(Presentation Logic logica de prezentare a datelor);
Funcii aplicative care determin algoritmii principali n procesul de business
(Business Logic);
Funcii de manipulare cu datele n nteriorul aplicaiei (Database Logic);
Funcii de gestiune a resurselor informaionale (Database Manager System).
Funcii de serviciu care ndeplinesc legturile ntre funciile primelor patru
grupe.
2.2. Modele client-server pe dou nivele
Modelul de gestiune de la distan a datelor modelul serverului de fiiere
(File Server, FS);
Modelul de acces de la distan la date (Remote Data Access, RDA). De
accentuat: permite prelucrarea datelor prin SQL extins incorporat;
9

Modelul serverului bazei de date.


2.3. Modele client-server pe trei niveluri.
Modelul serverului de aplicaii;
Modelul serverul de tranzacii.
De accentuat: nu pe de plin permite prelucrarea datelor prin SQL extins incorporat
proceduri de prelucrare a proceselor de business pot fi scrise n limbajele de tip C,
C++.


,
90- . -
,

, , .
,
. ,
.
( ) ,
.
. ,
, .
, main-,
, ,
.
,
, .
,
- ,
,
.
,
,
.

.

5 , :
.(Presentation Logic);

10

,
(Business Logic);
(Database Logic);
(Database Manager System);
, .
, . 10.2.

(Presentation Logic) ,
, ,
,
, ,
.
:
;
;
;
.

- ,
11

CICS (Customer Control Information System ) IMS/DC IBM TSO (Time


Sharing Option) main- . GUI ,
Microsoft's Windows, Windows NT, OS/2 Presentation Manager, X-Windows OSF/Motif.
-, (Business processing Logic), -
,
.
, , C++, Cobol, SmallTalk, Visual-Basic.
(Data manipulation Logic) ,
,
(DBMS).
SQL. SQL
3- 4- (3GL, 4GL),
. (Database Manager System
Processing) ,
. - ,

.
(Host-based processing)
.
-
.
(. , 10.3);
(Distribution presentation, DP);
(Remote Presentation, RP);
- (Remote business logic, RBL);
(Distributed data management, DDM);
(Remote data management, RDA).
,
.-
-. , ,
. , ,
- ,
() .



, :

12

. ,
.

.

(File
Server, FS). -
. .
.
. 10.4.
,
, ,
-, . ,
.
( ) ,
.
.
?
.
.
, ,

13

,
. .
, .
:

, , ;

,
' ;

( ).


(Remote Data Access, RDA) .
.
- . SQL.
. 10,5,

:

,
;
;
, .
( , ,
, , ,
);
,
- , SQL,
14

. ,
, ,, FS-.
RDA- -,
- SQL.
;
Q - SQL
;
. , ,
-
. ;
Q ,
. ,
,
, , ,
,
, , ,
,
. , ,

.


,
:
1. ,
, ,
. , ,
.
2. , ,
(business rules). , ^
, (
) ,
,
, . .
3. ,
: ,

,

.

15

4.

, .
.
5. ,
-
, , DDL (data definition language)
, SQL.
,
, , ,

.
, : Informix, Ingres, Sybase,
Oracle, MS SQL Server.
SQL-,

,
. . 10.6.

- . - ,
.
,
, .
, ,
, -,
. .

. .

16


, .
,
. ,
,
.
, .
.
,
, .
,
.
, , ,
, .
, ,
,
.

SQL, SQL. SQL 12.
. ,
;
, ;

;
;
;
;
;
: ,
, ,
.
- ,
.
, ,
. .
.


17


0 .
. 10.7.
.

. :
,
, ;
, ,
-. front-end
, .

,
,
,
.
.

,
, ,
, ,
.
:
,
, (warehouse services).
,
,
() (legacy application).
, , .
,
,
OLAP-. (On-line analytical processing.) 18

SQL,
, ,
, C++, SmallTalk, CoboL ,
.

- (X/Open transaction interface
protocol), .


- .

*.

.
.
,
.
, , ,
( ) .
: ,
- ,
- (. 10.8),
(),
.
,
, , ,

19

, ,

.

,
, ira , ,
,
,
, .
.
, .
, -*,

, .

(. 10.9).
(thread), , .
(multi-threaded).
,
(trashing).
,
(
),
. , - 100 ,
,
.

20

.
,
. , , " ,
, .
.
(virtual server) (.
10.10).

,
, ,
.
.
.
,
, ,
(load balancing)
*. -,
,
-,
.
-
, ,
()
() ( ). ,
( ),
, ,
.
,
.

21


, -
. " .
,
, , 10,11.
.

.

.
,
,
.
,
(. 10.12).
, ,
. (treads),
,

.

22

2.4. Tehnologia RPC (Remote Procedure Call) de acces la date. Idea, diferena
dintre procedur stocat (local?) i RPC.
2.5. Web tehnologii de acces la date. Tehnologii Intranet

23

Lecia 3. Iniiere n stndardul limbajului bazelor de date relaionale


SQL
3.1. Versiunile standardului limbajului SQL
1. SQL (Structured Query Language) ,

. - .
Standardul ANSI
SQL.
standardului SQL :
acelai limbaj de baz n majoritatea de SGBD-uri
relaionale. uurine de trecere de la un SGBD la
altul;
Standardul este deschis, cea ce permite implicarea diferitor productori n
dezvoltarea lui. Diferite realizri n diferite produse comerciale de SGBD
prezint de fapt diferite versiuni a SQL-ului care pot se difere mult una de
alta;
Multe realizri duc la dezvoltarea n continu a limbajului i a standardului.
2. SQL. Odat cu modelul relaional de date propus de
E.F.Codd n 1970 au aprut i diferite limbaje de manipulare al datelor.
Standardul ANSI SQL i realizrile lui:
SEQUEL IBM, 1974-1979. Prima apariie imediat dup publicarea teoriei
modelului relaional de date a lui E. Codd
;
SQL (SQL-86 SQL89). ISO ( )
SQL/89.
. Oracle, Informics, Sybase, Ingres ;
SQL/92 , . A cptat
trsturi de limbaj procedurial.
SQL:1999 SQL3 SQL-92 .
SQL3 "- SQL"
-
(, ORACLE8 Oracle, Universal Server
Informix, DB2 Universal Database IBM Cloudscape
Cloudscape). SQL:1999 ,
24

SQL-92 .
,


.
SQL:2003


SQL.

3.2. SQL:2003
, , SQL:1999,
SQL:1999. , SQL:2003
.
, .
SQL:2003 :

9075-1, SQL/Framework;
9075-2, SQL/Foundation;
9075-3, SQL/CLI;
9075-4, SQL/PSM;
9075-9, SQL/MED;
9075-10, SQL/OLB;
9075-11, SQL/Schemata;
9075-13, SQL/JRT;
9075-14, SQL/XML.

1-4 9-10 , SQL:1999.


5 (SQL/Bindings) ;
2. 2 SQL:1999, ,
11. 13 14. 13 SQL
Routines and Types Using the Java Programming Language (
SQL Java).
Java SQL . , SQL:2003
, XML- SQL.
,
SQL 2.
[2], SQL,
2 SQL:2003, :

;
, SQL;
CREATE TABLE;
;
25

(identity column)
(generated column);
MERGE;

1 .


SQL:2003 , .
;
.
, XML
SQL:2003 BIT BIT VARYING.
, SQL-
, -
. SQL
( SQL:1999).
BIGINT. BIGINT
SQL INTEGER SMALLINT, (,
) .
INTEGER ( , ),
32- .
64- BIGINT.
.
14 SQL:2003 XML (XML type),
, , XML-.
, XML,
..

SQL:1999
SQL ,
. ARRAY.
SQL:2003
. -, MULTISET.
-,
SQL , .
SQL-
.

26

3. SQL ,
.
.


. .
:
;
,
(SELECT, PROJECT, JOIN).
12 .
SQL ,
() .
SQL-
.
4. SQL ,

SQL. (
Oracle, MS SQL Server, Interbase, MySQL
FoxPro, Access, ...
Standardul SQL
Modelul relaional de date a lui E.Codd
Teoria mulimelor. Algebra relaional i calculul relaional
Fig. 1.3. SQL- .


)
Pe ziua de azi exist mai multe realizri comerciale a limbajului SQL (Transact SQL
sau T-SQL n MS SQL Server, PL/SQL n Oracle, pgPLSQL n PostgreSQL, etc.).
De aici mai departe noi nu ne vom preocupa de studierea limbajului SQL propriu zis,
ci vom da o iniiere n standardul limbajului SQL, oprindu-se mai concret la
mijloacele de creare, actualizare a bazelor relaionale de date i prelucrarea
datelor din ele, prevzute de standardul SQL.
3.3. Obiectele de structur a bazelor de date susinute de SQL
27

Structura logic a bazei de date n cadrul unui SGBD concret este constituit dintr-un
set de entiti numite obiecte precum i legturi dintre acesteea. De nu confundat
obiectele de structur a bazei de date cu obiectele din domeniul concret al lumii
reale.
3.3.1. Obiectele bazei de date conform standardului SQL. Noiune de obiect
Obiectele bazei de date prezint elemente de baz care constituie structura bazei de
date. Aceste obiecte reprezint uniti logic integre care se folosesc pentru
memorarea informaiei sau pentru referirea altor obiecte de memorare a informaiei.
,
,
.
Deci:
Obiectul bazei de date este o entitate integr definit prin mojloacele limbajului i
care se folosete pentru memorarea informaiei sau pentru referirea altor obiecte
de memorare a informaiei.
: , ,
, , , , , .


, , , ,
CREATE.

Obiectele bazei de date prevzute de standardul SQL sau folosite de diferite realizri
a limbajului SQL:
1. Tabele, coloane, restricii (TABLE, COLUMN, CONSTRAINT). Tabelele
constituie mecanismul principal de stocare a datelor specific unei baze de date.
TABLE () ;
COLUMN coloane. Caracteristicele unei coloane se refer la tipul de date
memorate n coloan i lungimea coloanei;
CONSTRAINT restricii (constrngeri). Sunt de tip PRIMARY KEY,
FOREGN KEY, UNIQUE, NOT NULL, DEFAULT.
2. Tabele virtuale VIEW viziuni. S definesc prin tabele de baz sau alte viewuri. S stocheaz numai definiia view-ului.
(relaii virtuale, tabele calculate n memoria RAM).

28

SQL-,
.

3. Indeci (INDEX) o structur utilizat de serverul bazei de date pentru regsirea


rapid a nregistrrilor din tabele. Conin o list ordonat de chei mpreun cu
identificatorii (indecii) nregistrrilor cuvenite. Indexare dup cmpuri.
4. Proceduri stocate (STORED PROCEDURES) blocuri cu cod surs pstrate n
dicionarul bazei de date, apelate din aplicaiile implementate. Determin logica
proceselor de business a aplicaiei.
5. Declanatoare (triggere TRIGGERS) proceduri care se execut n mod
automat la momentul apariiei unui eveniment specific bazei de date, care
afecteaz nregistrrile unui anumit tabel.
6. Funcii (USER DEFINED FUNCTION) se aseamn cu procedurile, ns, spre
deosebire sunt obligate s returnez anumite valori programelor care le apeleaz.
7. Pachete (n Oracle?) package. Sunt structuri mai complexe folosite pentru a
organiza sau a reuni procedurile i funciile n grupuri logice. Conin elemente
publice sau private (variabile, proceduri, funcii, etc.).
8. Clustere tabele care sun accesate frecvent mpreun, n general cele aflate n
relaie de tip una la mai multe. Se stocheaz fizic mpreun ntr-o structur
special, numit cluster.
9. Tipuri abstracte de date (USER DEFINED DATA TYPES) tipuri de date
definite de utilizator.
10. Reguli (RULES) ?
11. Scheme (SCHEMA) . Schema o colecie cu denumire a obiectelor
bazei de date interlegai ntre ei dup anumit criteriu. Prezint submulimi de
obiecte a bazei de date utilizate n gestiunea unei pri constituiente a aplicaiei de
baz de date. n sistemele anterioare schemele erau seturi de obiecte individuale a
utilizatorului concret.
. De exemplu: USER1.EMPLOYEE_TBL,
USER2.EMPLOYEE_TBL.
. : CONNECT
<USER_NAME>@<DATABASE_NAME>
12. Domenii DOMAIN . ;
13. Sinonime SYNONIM (ALIAS) . Denumiri prescurtate a
tabelelor.
3.3.2. SQL
.

29

, ,
, , ,
.
SQL Server .
SQL Server , 2.4.
2.4.
Tables

Views

( )

Stored Procedures

Triggers

User Defined
function
Indexes

User Defined Data


Types
Keys

Constraints

Users

Roles

Rules

Defaults

SQL , .
- , ,
. ,
. SQL ,
:

c; ( )
() ;
c; ()
. .
, .

30

() ,
. ,
.
, ,
, . ,
,
.


SQL,
. .

,
, .

,
. -
.

,
.
, .

.
.
,
.


,
,
; ,
, NULL.


,
( ).
, .
: NULL,
, ( ),

31

.
.

,
.
, .

.

, ,
,
.

3.4. Structura limbajului SQL


Categorii de instruciuni a limbajului SQL
() SQL.
sublimbaje:
DDL (Data Definition Language) sublimbaj de definire a datelor;
DML (Data Manipulation Language) sublimbaj de manipulare a datelor;
DQL (Data Query Language) sublimbaj de interogare a datelor;
DCL (Data Control Language) sublimbaj de gestiune a datelor;
Instruciuni de adninistrare a datelor;
Instruciuni de gestiune a tranzaciilor.
DDL ( ).
CREATE/ALTER/DROP a crea/a modifica/a terge:
CREATE/ALTER/DROP TABLE crearea/modificarea/suprimarea tabelelor;
CREATE/ALTER/DROP INDEX crearea/modificarea/suprimarea indexului;
CREATE/ALTER/DROP SCHEMA crearea/modificarea/suprimarea schemei;
CREATE/ALTER/DROP DOMAIN a domenului;
CREATE/ALTER/DROP SYNONIM a sinonimului (ALIAS);
CREATE/ALTER/DROP VIEW a viziunii (relaie virtual);
CREATE/ALTER/DROP PROCEDURE

32

DML (
):
INSERT
UPDATE
DELETE
DQL ( ,
):
SELECT
Numai una singur dar foarte puternic comand. Categoriile DML i DQL ca de
obicei se unesc n una singur cu denumire DML
DCL (comenzile de protecie i gestiune a datelor
crearea i eliminarea obiectelor, care determin (regleaz) drepturile de acces la
baza de date, precum i acordarea privilegiilor de niveluri cuvenite pentru utilizatori:
CREATE/ALTER/DROP PASSWORD
GRANT (acordarea privilegiilor de acces);
REVOKE () (anularea
(revocarea, abrogarea) privilegiilor);
DENY (?)
:
START AUDIT revizia conturilor;
STOP AUDIT
:
SET TRANZACTION a stabili tranzacia;
COMMIT a salva fizic modificrile prevzute de tranzacie;
ROLLBACK a abandona modificrile prevzute de tranzacie, a derula napoi
la starea care era nainte de tranzacie;
SAVEPOINT a stabili puncte de derulare napoi n interiorul tranzaciei.
Noiuni de field cmp/coloan, record nregistrare, cheie primare, cheie
alternativ, cheie extern.
Valoarea de tip NULL un marcer.

33

Seansul SQL perioada de timp n care utilizatorul este n conexiune cu baza


relaional de date stabilit prin comenzile SQL CONNECT
DISCONNECT/EXIT.

Lecia 4. Structura pe fiiere a bazei de date. Crearea bazei de date


4.1. Crearea bazei de date. Structura bazei de date
4.2. Tabele. Crearea tabelelor
4.3. Indeci (INDEX). Indexare dup cmpuri
4.4. Tabele virtuale VIEW viziuni
4.5. Proceduri stocate
4.6. Declanatoare (triggere)
4.7. Funcii
4.1. Structura pe fiiere a bazei de date

SQL Server (colecii
de fiiere cu care opereaz sistemul de operare).
(grupuri de fiiere), ,
.

(fiier de date),
(fiier de jurnalizare). ,
, , (vederi VIEW), (triggere)
(proceduri stocate). : (primare)
(secundare).
(registre de tranzacii). ,
, ,
.

; ..,
( ).
, :
Fiiere primare de date. .

. , .
, ,

34

. .
.mdf.
Fiiere secundare de date. .
. ,
.
( ).
, .
,
. ( RAID- ,
). .ndf.
Fiiere jurnal (fiierele de jurnalizare, fiierele registrelor de tranzacii).
.
, (restabilirea, refacerea)
. ,
.
.ldf.

. SQL Server 32
4 .
, ,
.
,
(registru de jurnalizare).

O baz de date compus conine mai multe fiiere de date i unul sai mai multe
fiiere de registre de jurnalizare. n acest caz, reieind din anumite considerente,
fiierele se unesc n grupuri.
?
.

Grupuri de fiiere se creaz pentru amplasarea datelor pe mai multe discuri i ca


urmare pentru manipulare i administrare a datelor mai eficiente.
Grupuri de fiiere

,
. ( Microsoft SQL Server 6.5
.)
, .. ,
, RAID-. ( RAID- . 5.)
,
, .
.
35

RAID este acronimul pentru "Redundant Array of Inexpensive Disks" sau


"Redundant Array of Independent Disks", care descrie o configuraie (matrice) cu
discuri multiple menit s ofere toleran la erori i o mbuntire a timpilor de
acces la date.
:
Grupuri primare de fiiere. .
, .
,
, . SQL Server
,
.
Grupuri de fiiere a utilizatorului. .
, (
) . , ,
.
Grupul curent (standard) de fiiere. .
,
. , (grupul curent de
fiiere) . db_owner
, .
- ,
, , ,
.
, Transact SQL (T-SQL):
ALTER DATABASE __ MODIFY FILEGROUP __ DEFAULT

,
, ,
, ,
.
, ,
. , ,
, (,
10 ), , ,
, , (,
4 ). , ,
, ,
-. RAID
, . ,
,
.
( ),
.

36

, SQL Server
.
, ,
. ( . 32.)


,
.
SQL Server:
.
.

.
-.
.
, ,
. ,
.
,
, .
, :
,
.
, . -
, , ,
,
, -.
, ,
(. 5).
,
,
.
,
-
.

,
.
- .
, ,
,
- .

37

,
RAID .
, ,
,
-,
.

Creterea automat a volumului fiierelor



SQL Server ,
. , , SQL
Server . ,
, , , ,
.
.
, SQL Server ,
(growth increment).
, SQL Server . ,
,
(
).
.
. SQL Server
, .
SQL Server ,
, .
,
. ,
Enterprise Manager ALTER DATABASE.
, SQL Server
, . (
SQL Server),
. ,
ALTER DATABASE .
( ) .
,
. , ,
, .
, .
, ,
, .
,
, , .
, , ;
, ,

38

, , .
, , , ,
, , .
,

.

4.2. Baze de date de sistem



La instalarea serverului MS SQL Server n mod automat se creaz patru baze de date
de sistem: SQL Server : master
(), tempdb (), model () msdb.

master. , SQL
Server SQL Server.
,

. master .
tempdb. .
,
SQL Server, . SQL
Server tempdb. , ,
.
, ,
ALTER DATABASE.
model. () ,
, tempdb.
model,
. model ,
tempdb
SQL Server. model,
( ) , ..
model,
.
msdb. , SQL Server Agent
( ,
).
, .


. ,
SQL Server.

39

4.3. Crearea bazei de date




.

. SQL ,
, SQL
. SQL,
. ,
, .
,
( ).
, , , ,
, .
, .
SQL
,
CREATE SCHEMA DROP SCHEMA.
,
,
.
.
CREATE SCHEMA DROP SCHEMA
. , , MS SQL Server,
CREATE DATABASE.

MS SQL Server
SQL Server :
Create Database Wizard,
SQL Server Enterprise Manager
CREATE DATABASE,
.
, . ,
Create Database Wizard . ,
, .

( , ).
,
, , , .
,
. - Create Database Wizard
,

40

. ( ,
, .)
Enterprise Manager T-SQL ,
,
, ,
, ,
.
SQL- :
, .
, *.mdf (
) *.ldf. ( ).
(, , ..),
( ,
).
SQL- CREATE DATABASE.
, SQL-
.
<__> ::=
CREATE DATABASE __
[ON [PRIMARY]
[ <_> [,...n] ]
[,<_> [,...n] ] ]
[ LOG ON {<_>[,...n] } ]
[ FOR LOAD | FOR ATTACH ]
.

.
, (
).
128 .
,
, , .
,
*.ndf.
(PRIMARY) ,

. , SQL-,
.
ON ,
.

41

PRIMARY . ,
.
LOG ON
.
, _log.
,
. :
<_>::=
([ NAME=__,]
FILENAME='__'
[,SIZE=_ ]
[,MAXSIZE={max__ |UNLIMITED } ]
[, FILEGROWTH=_ ] )[,...n]
(denumirea logic a fiierului) ,
SQL-.
(denumirea fizic a fiierului)
,
. .
SIZE ;
512 , , 1 .
MAXSIZE .
UNLIMITED
.

( FILEGROWTH)
.
:
<_>::=FILEGROUP __
<_>[,...n]
3.1. , C,
C.
CREATE DATABASE Archive
ON PRIMARY ( NAME=Arch1,
FILENAME=c:\user\data\archdat1.mdf,
SIZE=100MB, MAXSIZE=200, FILEGROWTH=20),
(NAME=Arch2,
FILENAME=c:\user\data\archdat2.mdf,
SIZE=100MB, MAXSIZE=200, FILEGROWTH=20),
(NAME=Arch3,

42

FILENAME=c:\user\data\archdat3.mdf,
SIZE=100MB, MAXSIZE=200, FILEGROWTH=20)
LOG ON
(NAME=Archlog1,
FILENAME=c:\user\data\archlog1.ldf,
SIZE=100MB, MAXSIZE=200, FILEGROWTH=20),
(NAME=Archlog2,
FILENAME=c:\user\data\archlog2.ldf,
SIZE=100MB, MAXSIZE=200, FILEGROWTH=20)
3.1. .

1. Baza de date simpl



MyDB, :
(MyDB_root); (MyDB_data1),

(Log_data1). SQL, MyDB:
CREATE DATABASE MyDB
ON
(NAME = MyDBroot, --
FILENAME = 'c:\mssql2k\MSSQL\data\mydbroot.mdf',
SIZE = 8MB,
MAXSIZE = 9MB,
FILEGROWTH = 100KB),
(NAME = MyDBdata1,
--
FILENAME = 'c:\mssql2k\MSSQL\data\mydbdata1.ndf',
SIZE = 1000MB,
MAXSIZE = 1500MB,
FILEGROWTH = 100MB)
LOG ON
(NAME = Logdata1, --
FILENAME = 'e:\log_files\logdata1.ldf',
SIZE = 1000MB,
MAXSIZE = 1500MB,
FILEGROWTH = 100MB)

,
C, E.
,
, -
. , ,
.mdf, .ndf, .ldf. SIZE (), MAXSIZE
( ) FILEGROWTH ( )
( ).
. CREATE DATABASE
Books Online, "Create Database" ( ).

2. Baza de date pe mai multe discuri


43


RAID-. "",
,
, RAID. ,
. .
Sales :
, Sales_root.mdf;
customer_data1.ndf, customer_data2.ndf
customer_data3.ndf, customers_group;
product_data1.ndf product_data2.ndf,
products_group;
, log_data1.ldf.
, Sales (Vinzari).
, CREATE DATABASE
FILEGROUP.
CREATE DATABASE Sales
ON PRIMARY

--
-- ( )
(NAME = Sales_root,
--
FILENAME = 'c:\mssql2k\MSSQL\data\salesroot.mdf',
SIZE = 8MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB),
FILEGROUP customers_group
--
(NAME = customerdata1,
--
FILENAME = 'd:\mssql2k\MSSQL\data\customerdata1.ndf',
SIZE = 800MB,
MAXSIZE = 1000MB,
FILEGROWTH = 100MB),
(NAME = customerdata2,
--
FILENAME = 'e:\mssql2k\MSSQL\data\customerdata2.ndf',
SIZE = 800MB,
MAXSIZE = 1000MB,
FILEGROWTH = 100MB),
(NAME = customerdata3,
--
FILENAME = 'f:\mssql2k\MSSQL\data\customerdata3.ndf',
SIZE = 800MB,
MAXSIZE = 1000MB,
FILEGROWTH = 100MB),
FILEGROUP products_group
--
(NAME = productdata1,
--
FILENAME = 'g:\mssql2k\MSSQL\data\productdata1.ndf',
SIZE = 500MB,
MAXSIZE = 700MB,
FILEGROWTH = 100MB),
(NAME = productdata2,
--
FILENAME = 'h:\mssql2k\MSSQL\data\productdata2.ndf',
SIZE = 500MB,
MAXSIZE = 700MB,
FILEGROWTH = 100MB)

44

LOG ON
(NAME = logdata1,
--
FILENAME = 'i:\log_files\logdata1.ldf',
SIZE = 800MB,
MAXSIZE = 1000MB,
FILEGROWTH = 200MB)

,
. , ..
, .
, customers_group products_group,
. ,
, ,
LOG ON.
.
,
. , ,
customers_group ,
customer_data1.ndf, customer_data2.ndf customer_data3.ndf.
,
,
- (
).
, SQL Server ,
FILEGROWTH=0,
. ,
, .. , .
MAXSIZE,
SIZE.
4.4.

:
<__> ::=
ALTER DATABASE __
{ ADD FILE <_>[,...n]
[TO FILEGROUP __ ]
| ADD LOG FILE <_>[,...n]
| REMOVE FILE __
| ADD FILEGROUP __
| REMOVE FILEGROUP __
| MODIFY FILE <_>
| MODIFY FILEGROUP __
<__>}
,
.
, .

45

(ADD) (
, ) .
(MODIFY).
REMOVE.
.
.
:
READONLY ; READWRITE
; DEFAULT .

Eliminarea bazei de date


:
DROP DATABASE __ [,...n]
, ,
.
.

Lecia 5. Administrarea bazei de date. Autentificarea conexiunii


5.1. Securitatea i protecia bazelor de date. Acordarea drepturilor de acces
O descriere completa a problemelor de securitate n cadrul sistemelor de calcul si
a bazelor de date este n afara scopului acestui ndrumar, dar exista numeroase alte
carti dedicate acestor probleme, care pot fi consultate de cititorii interesati. nsa,
exista cteva aspecte fundamentale privind protectia si securitatea bazelor de date
care trebuie sa fie cunoscute de orice proiectant sau programator de baze de date si
acestea vor fi prezentate pe scurt n continuare.
Cu problemele de protecie si securitate este responsabil administratorul bazei de
date, care are un cont privilegiat n sistemul de gestiune (numit n general cont de
sistem -system account) care prevede capabilitati foarte puternice, pe care alte
conturi sau utilizatori nu le au. Prin intermediul contului de sistem administratorul
bazei de date poate efectua mai multe operatii: crearea conturilor, acordarea sau
retragere privilegiilor, etc.
Orice persoana care doreste sa se conecteze (log in) la o baza de date trebuie sa
detina un cont (account, user) si o parola (password). Sistemul de gestiune verifica
contul si parola si autentifica acel utilizator, daca acestea sunt corecte. Programele de
46

aplicatii sunt considerate de asemenea utilizatori si se conecteaza pe un anumit cont


si trebuie sa furnizeze parola acestuia.
Conectarea unui utilizator al unei baze de date (printr-un cont si o parola) nu este
suficienta pentru ca acel utilizator sa beneficieze de toate functionalitatile oferite de
SGBD, ci el poate beneficia numai de acelea pentru care a primit drepturi
(autorizari). n cele mai multe sisteme SGBD exista doua niveluri de autorizare:
nivelul contului si nivelul relatiilor si fiecarei relatii i se asigneaza un cont proprietar
(owner account), care este, n general, contul care a fost folosit atunci cnd a fost
creata relatia respectiva.
n limbajul SQL2 (care va fi prezentat n capitolul urmator) sunt prevazute
instructiuni de acordare (GRANT) si de revocare (REVOKE) a drepturilor de acces
ale utilizatorilor (conturi) la diferite obiecte ale bazei de date. Cteva exemple de
astfel de instructiuni vor fi date n sectiunile urmatoare. n plus, n sistemele SGBD
performante, pot exista numeroase alte posibilitati de organizare a drepturilor
utilizatorilor (grupuri, roluri, etc.). Controlul acestor drepturi face parte din
activitatea de administrare a bazei de date, care reprezinta n sine un domeniu foarte
vast, n care activeaza numerosi specialisti (administratori de baze de date).
5.2. Sistemul de gestiune SQL Server 2005
Dintre sistemele de gestiune a bazelor de date relationale existente la ora actuala
vom studia Microsoft SQL Server, in laborator fiind instalata varianta Microsoft SQL
Server 2005 Express Edition.
Un server SQL gestioneaza mai multe baze de date, care pot fi accesate partajat
de mai multi utilizatori aflati n retea.
Instalarea serverului SQL Server 2005 (Server and Client Tools) se face pe o
singura statie din retea, iar pe celelalte statii se instaleaza programele client. La
instalare trebuie sa fie selectat modul de autentificare Mixed (Windows and SQL
Server).
Dupa instalarea serverului SQL Server, utilizatorul are la dispozitie mai multe
facilitati de creare, administrare si lucru cu bazele de date, precum si cteva exemple
de baze de date preinstalate (pubs, Nortwind), care pot fi folosite pentru studiu.
Pornirea si oprirea serverului se face folosind programul Service Manager
(selectnd Start ->Programs->Microsoft SQL Server 2005->Service Manager), care
permite selectarea unui server din retea (daca sunt mai multe servere instalate),
oprirea serverului, introducerea unei pauze de functionare, sau continuarea
functionarii dupa o pauza.
Exista mai multe programe utilitare (instrumente) care permit administrarea
sistemului si executarea diferitelor operatii: crearea unor noi baze de date, crearea
tabelelor si a altor obiecte (triggere, indecsi, vederi), crearea utilizatorilor, salvarea si
47

refacerea bazelor de date, etc. Dintre aceste programe, unele pot fi executate la nivel
de linie de comanda (osql, isql), iar altele prezinta interfata grafica si sunt mai usor
de folosit (SQL Server Enterprise Manager, SQL Query Analizer).
5.3 Utilizarea programului Enterprise Manager (SQL Server 2000 ???)
Programul utilitar Enterprise Manager se lanseaz selectnd Start->Programs>Microsoft SQL Server->Enterprise Manager. Acest program este foarte puternic i
permite att administrarea sistemului (crearea utilizatorilor, refacerea bazelor de date,
etc.) ct i proiectarea bazelor de date (crearea bazelor de date i a tabelelor,
asocierea ntre tabele, etc.). n continuare vor fi prezentate numai noiunile strict
necesare pentru a ncepe lucrul cu SQL Server, restul informaiilor sunt destul de
uor de gasit n manualul Books Online al sistemului SQL Server.
Lansarea programului Enterprise Manager se poate face att de pe statia pe care a
fost instalat serverul, ct si de pe orice statie pe care s-a instalat un client.
Pentru statia serverului se poate nregistra serverul local (al carui nume este, de
regula, numele calculatorului pe care este instalat, de exemplu Server125a, n
laborator) pentru contul (login) de administrare (sa), creeat implicit la instalare.
Acest cont are toate drepturile, att la nivelul sistemului (adminstrare, securitate, etc)
ct si la nivelul fiecarei baze de date. De regula, noii utilizatori se creeaza din contul
sa si acestora li se acorda mai putine drepturi, attea cte sunt necesare pentru ca sa
realizeze sarcinile dorite, fara sa afecteze administrarea sistemului de gestiune, care
trebuie sa ramna numai n atributiile administratorului (contul sa).
n panoul din stnga al ferestrei Enterprise Manager, elementul Console Root
reprezinta radacina unui arbore care contine n primul nivel toate instalarile SQL
Server disponibile n reteaua respectiva, organizate n mai multe grupuri de servere.
Initial n grupul implicit SQL Server Group nu exista nici un server nregistrat si
nregistrarea se face cu comanda New SQL Server Registration selectata din meniul
de context care se deschide la apasarea butonului dreapta al mouse-ului atunci cnd
este selectat directorul SQL Server Group.
Dupa nregistrare, se poate rula Enterprise Manager cu conectare pe contul sa n mod
de autentificare Windows. n acest mod este bine sa fie stabilita (sau modificata)
parola contului sa si sa fie editata nregistrarea serverului cu comanda Edit SQL
Server Registratuion Properties din meniul de context care se deschide la apasarea
butonului dreapta al mouse-ului atunci cnd este selectat numle instantei serverului
(n laborator, Server125a). n fereastra care se deschide (cu titlul Registered SQL
Server Properies) se selecteaza optiunile Use SQL Server Authentication si Always
48

propmt for login name and password.


Din contul sa se creeaza conturile de conectare login cu comanda New Login din
meniul de context care se deschide la apasarea butonului dreapta al mouse-ului aunci
cnd este selectat subdirectorul Logins din directorul Security . n laborator aceste
conturi sunt denumite user1, user2, ..., etc. Fiecare cont utilizator are setat rolul de
sistem Database Creators (care se seteaza n pagina Server Roles a ferestrei care se
deschide la crearea unui nou cont) si dreptul public asupra bazei de date Northwind
(care se seteaza n pagina Database Access).
Pe orice statie pe care este instalat un client SQL, se poate lansa programul
Enterprise Manager, si prima operatie care trebuie sa fie facuta este nregistrarea
serverul dorit din retea. n cursul nregistrarii (cu comanda New SQL Server
Registration din meniul de context) se aleg optiunile SQL Server Authentication si
Always prompt for user name and password. Dupa aceasta se poate face conectarea
pe contul propriu (login) si parola acestuia, cont care trebuie sa fi fost creeat mai
nainte pe server.Fereastra principala a programului SQL Server Enterprise Manager
contine un meniu, o bara de instrumente si doua panouri. n panoul din stnga se
afiseaza numele serverului, mpreuna cu sapte subdirectoare ale acestuia, iar n
panoul din dreapta al ferestrei sunt prezentate informatii privind directorul selectat.
Dintre directoarele afisate, cele mai utile sunt directorul Databases, care contine
bazele de date gestionate de serverul respectiv, si directorul Security , care permite
administrarea utilizatorilor si a drepturilor de acces la bazele de date.
n directorul Databases se afla mai multe directoare care contin bazele de date ale
sistemului (care reprezinta catalogul sistemului de gestiune: Master, Model, Msdb),
bazele de date preinstalate ca exemple (Northwind, pubs) si toate bazele de date
create de utilizatori.
n fiecare baza de date sunt memorate mai multe categorii de obiecte: diagrame
referentiale (Diagrams), tabele (Tables), vederi (Views), proceduri stocate (Stored
Procedures), utilizatorii care au acces la baza de date reaspectiva (Users), roluri
(grupari de privilegii) (Roles) si altele.
Din fiecare categorie de obiecte se poate selecta unul dintre acestea pentru a fi
accesat, editat sau executat (n functie de obiect si de dreptuile utilizatrorului) si se
pot crea obiecte noi cu comanda New, care se poate actiona din bara de instrumente
sau dintr-un meniu de context (care se obtine prin apasarea butonului dreapta al
mouse-ului atunci cnd este selectat un obiect din acea categorie).
49

n directorul Security se pot inspecta si modifica conturile de conectare (logins) si


rolurile definite pentru serverul SQL la care s-a realizat conexiunea.
Lista tuturor conturilor de conectare existente (logins) se afiseaza n panoul din
dreapta atunci cnd se selecteaza optiunea Logins n arborele de selectie si pentru
fiecare cont se poate selecta o optiune din cele existente n meniul contextual. La
optiunea Properties se pot inspecta si modifica diferite proprietati ale contului
respectiv (parola, baza de date implicita la deschidere, rolul contului n sistemul
SQL server,etc.). Fiecarui cont de conectare i se pot atribui unul sau mai multe roluri
n sistemul de gestiune: System Administrators, care permite orice operatii n
sistemul SQL Server, Security Administrators, care permite administrarea
utilizatorilor, Database Creators, care permite creareade noi baze de date etc.
Pentru ca un cont de conectare sa poata accesa o baza de date, trebuie sa se i se
acorde drepturi asupra acelei baze de date (public , db_owner, etc.). Atunci cnd se
acorda drepturile, se creaza un utilizator (user) al acelei baze de date corespunzator
contului respectiv si acest utilizator are drepturile setate.
Contul de conectare sa (System Administrator) are o comportare speciala. El este
creat automat la instalarea serverului SQL cu rolul de adminstrator de sistem si
primeste drepturi de acces la orice baza de date existenta sau nou creata, atribuindu-ise rolul public si rolul de proprietar (dbo_owner) al bazei de date.
Pentru fiecare baza de date sistemul creeaza automat un tip de utilizator special (dbo)
care are drepturi de proprietate asupra bazei de date respective. Acest utilizator este
atribuit contului de conectare n momentul creerii bazei de date precum si oricarui
utilizator al baze de date corespunzator unui cont de conectare cu rol de System
Administrators.
Pentru lucrul n siguranta cu SQL server se recomanda crearea unor conturi care sa
aiba toate drepturile asupra baze lor de date proprii, si numai drepturi de citire
(dreptul public) asupra bazelor de date preinstalate.
Dupa conectarea unui utilizator cu rolul Database Creators, acesta poate sa creeze
una sau mai multe baze de datem asupra carora are drept de detinator (dbo). Pentru
conturile user1, user2, ... s-au creat deja bazele de date proprii , carora li s-au dat
acelasi nume cu al contului ( user1, user2 etc).

50

Conectarea pe un cont care nu are drepturi de administrare ofera drepturi limitate de


acces la obiectele bazei de date. Utilizaorul poate sa deschida fereastra de proprietati
ale contului propriu (cu comanda Properties din meniul de context) si poate sa
modifice baza de date implicita. De asemenea, se pot vedea tabelele, functiile etc ale
bazei de date Northwind, la care are accees, dar nu le poatemodifica. n baza de date
proprie utilizatorul are toate drepturile (creare, modifcare si stergere tabele, creare
proceduri, etc.). Dupa crearea bazei de date proprii, este recomandabil ca sa se
setezee aceasta baza de date ca baza de date implicita a contului respectiv (prin
comanda Properties n meniul de contex al contului). De asemenea se poate anula
(din conul sa) rolul Database Creators al contului.
n general, atunci cnd se modifica elementele unui director (Databases, Logins, etc),
ele vor fi actualizate n panoul din Enterprise Manager numai daca se da comanda
Refresh (din meniul de context corespunzator).
Pentru acomodarea cu sistemul SQL Server se selecteaza baza de date preinstalata
Northwind si se inspecteaza tabelul Employees (prin comanda dublu clic atunci cnd
este selectat tabelul respectiv sau prin selectarea optiunii Properties din meniul de
context). La aceasta comanda se deschide o ferestra n care pentru fiecare atribut al
relatiei (tabelului) sunt afisate numele, tipul de date, valoarea implicita, marcajul de
cheie primara, etc. (Fig. 1.1).
Auditul grupurilor de utilizatori Windows in SQL Server
Categorie: Security | SQL Server | Windows | DBA Catalin Dumitru @ 08:49
Asigurarea securitii este o parte din treaba fiecrui DBA. Cu SQL Server avei posibilitata s
utilizai att autentificare SQL Server, Windows ct i mixt. Avantajul utilizrrii autentificrii
Windows pentru SQL Server este acela c se poate beneficia de avantajele modelului de securitate
Windows si a politicilor de securitate configurate pe domeniu. Un alt avantaj este acela c se poate
confugura securitatea la nivel de domeniu in loc de nivelul de instan al SQL Server. Bazndu-ne
pe grupurile de utilizatori care sunt configurate n Windows, se pot acorda acces grpurilor in SQL
Server fr a crea login pentru fiecare utilizator.
Dezavantajul este c utilizatorii care aparin grupurilor de utilizatori din Windows sunt mascai la
nivelul SQL server-ului. In logins se pot vedea grupurile care au acces dar nu se poate vedea care
utilizatori fac parte din respectivele grupuri. Cum se poate obine aceast informaie in SQL
Server?
SQL Server ofer o procedur stocat extins (xp_logininfo) care permite o privire n aceast
problem. Aceast procedur se regsete att n SQL Server 2000 ct i n SQL Server 2005.
Procedura are urmtorii parametrii:
@acctname numele utilizatorului windows sau a grupului
@option - informaia de afiat
o all afieaz informaii pentru permisiuni
o members afieaz lista de membrii a grupului
@privelege variabil de ieire i ntoarce admin,'user sau null
51

Exemple:
EXEC

xp_logininfo BUILTIN\Administrators Afieaz informaii despre grup (permission path)

EXEC xp_logininfo BUILTIN\Administrators, members - Afieaz lista de membrii din grupul Windows

Etichete: SQL Server, Windows, Security, DBA

Lecia 6. Bazele limbajului SQL. Definiia i manipularea


datelor n SQL
6.1.
6.2.

6.3.
6.4.

Scrierea propoziiilor n limbajul SQL. Notaii SQL


Tipuri de date n limbajul SQL.
Tipuri de date prevzute de standardul SQL. Tipuri de date n realizaia TSQL (MS SQL Server). Tipuri de date n realizaia PL/SQL (Oracle).
Tipuri definite de utilizatori. Convertirea tipurilor de date).
Expresii SQL. Identificatori, variabile. Structuri de control
Obiectele principale de structur a bazei de date n SQL
3.1 Identificatori SQL
3.2 Restrictii de integritate;domeniu,entitate,referentiale
3.3 Instructiuni de creare, modificare si stergere a structurilor de date
3.4 Operatiile de manipulare si interogare
3.5 Scheme(catlog), Vederi

6.1. Scrierea propoziiilor n limbajul SQL. Notaii SQL


(Alfabetul limbajului, cuvinte predefinite, cuvinte definite de utilizator,
identificatori, sisteme de notaii)
Scrierea operatorilor SQL
SQL
SQL- ,
. SQL , ,
.
SQL . ,
, .
, , (
)
.
.

52

(identificatorii) SQL
, ,
. ,
SQL, .
SQL (iruri de caractere, litere),
, (A-Z, a-z),
(0-9) (_).
:

128 ;

(liter);

(spaii).

<>::=<>
{<>|<>}[...n]
. SQL
, SQL-
.
, SQL, .

, - ().

, .
, .
.
1.1.

(notaie)

::=

(egal dup definiie)

<>

(necesitatea
alegerii ..., alternativa alegerii din mai multe elemente)

{}

(construcie obligatorie)

[]

[,n]

Descrierea bazei de date DEPOZIT


DEPOZIT

DEPOZIT.

Exemplul bazei de date DEPOZIT. Diagrama ER, Explicaii


..
53

4.2. Tipuri de date n limbajul SQL


4.2.1. Tipuri de date definite de standardul SQL
,
.
, ,
.
SQL , .
.
2.1.

(caracterial)

CHAR | VARCHAR

(binar)

BIT | BIT VARYING

(numeric cu precizie fixat) NUMERIC | DECIMAL | INTEGER | SMALLINT


(numeric cu precizie FLOAT | REAL | DOUBLE PRECISION
Aproximativ, cu virgul flotant)
/ (date calendaristice)

DATE | TIME | TIMESTAMP


INTERVAL

(date carecteriale, de tip litere)


(iruri de caractere),
.
SQL,
, ,
. ASCII
EBCDIC. :
<_>::=
{ CHARACTER [ VARYING][] | [CHAR |
VARCHAR][]}

,
( 1).
(VARYING) .
,
, .
,
,
.

(date binare)

54

, ..
(),
0, 1. :
<_>::=
BIT [VARYING][]

(date numerice cu precizie fix)


,
(prezentare precis), .. ,
.
(precizie) (parte zecimal).
,
, , .
.
<_>::=
{NUMERIC[[,]|{DECIMAL|DEC}
[[, ]
| {INTEGER |INT}| SMALLINT}
NUMERIC DECIMAL .
,
. INTEGER (INT)
. SMALLINT
;
.

(date numerice cu precizie aproximativ sau cu


virgul flotant)
,
(nu permite lungimea registrelor al CPU real),
.
,
, (), : 103,
+5.26, -0.2-4. :
<_>::=
{ FLOAT []| REAL |
DOUBLE PRECISION}
. REAL
DOUBLE PRECISION .

(date calendaristice)
"/"
. SQL :

55

<_/>::=
{DATE | TIME[][WITH TIME ZONE]|
TIMESTAMP[][WITH TIME ZONE]}
DATE , YEAR
(), MONTH () DAY (). TIME ,
HOUR (), MINUTE () SECOND ().
TIMESTAMP .
,
SECOND. ,
TIME (.. ),
TIMESTAMP 6 (..
). WITH TIME ZONE
TIMEZONE HOUR TIMEZONE MINUTE,

( ).
INTERVAL .

(noiune de domen)
.
,
,
,
. ,
.
SQL :
<_>::=
CREATE DOMAIN _ [AS]
_
[ DEFAULT ]
[ CHECK (_)]
, ,
. ,
.
.
:
DROP DOMAIN _ [ RESTRICT |
CASCADE]
CASCADE ,
,
, .
SQL Server .

56

5.2.2. Tipuri de date folosite n MS SQL Server


(tipuri de sistem, tipuri predefinite)

. ,
. SQL Server
. SQL-
: , ,
(. 2.2).
2.2.
image
smalldatetime bit
text
real
decimal
uniqueidentifier money
numeric
tinyint
datetime
smallmoney
smallint
float
varbinary
int
ntext
varchar

binary
char
timestamp
nvarchar
nchar
sysname

SQL Server.

O descriere succint a tipurilor de date n MS SQL Server 2005 (Tranzact SQL,


T-SQL)
http://technet.microsoft.com/ru-ru/library/ms187752%28SQL.90%29.aspx
SQL Server 2005 ( 2008 .)

(Transact-SQL) Tipuri de date n Transact-SQL


SQL Server 2005 , ,
. , ,
: , , ,
, .
SQL Server , ,
.
Transact-SQL Microsoft .NET Framework.
. .
.
, ,
, .NET Framework.
.
CLR.

57

,
, , ,
.

. .
(Transact-SQL);

, char, varchar, text, nchar,
nvarchar ntext. .
(Transact-SQL);
, ,
. . ,
(Transact-SQL).
SQL Server 2005
SQL-92. . (Transact-SQL).

SQL Server 2005 .






, SQL Server 2005
:
: varchar(max), nvarchar(max) varbinary(max);
: text, ntext, image, varchar(max), nvarchar(max),
varbinary(max) xml.
.
sp_help -1
xml.


bigint
int
smallint
tinyint
bit

decimal
numeric
money
smallmoney


float real


58

datetime smalldatetime


char
text
varchar


nchar
ntext
nvarchar


binary
image
varbinary


cursor
timestamp
sql_variant uniqueidentifier
table
xml
.

CREATE PROCEDURE (Transact-SQL)


CREATE TABLE (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
EXECUTE (Transact-SQL)
(Transact-SQL)
(Transact-SQL)
LIKE (Transact-SQL)
SET (Transact-SQL)
sp_bindefault (Transact-SQL)
sp_bindrule (Transact-SQL)
sp_droptype (Transact-SQL)
sp_help (Transact-SQL)
sp_rename (Transact-SQL)
sp_unbindefault (Transact-SQL)
sp_unbindrule (Transact-SQL)


CLR

59


SQL Server 2005
http://sqlserver.ro/forums/thread/428.aspx

Tipul de date TABLE

Tipul de date CURSOR

Alte tipuri neordinare de date

Tipul de Date XML


Un tip nou de date suportat de SQL Server 2005 este tipul de date xml. Tipul de date
xml permite stocarea de documente in format xml sau fragmente de documente xml
avand o dimensiune de pana la 2GB. Se pot declara variabile de tip xml, se pot defini
tabele cu coloane de acest tip sau se pot folosi parametrii de tip xml. Optional se
poate asocia o schema pentru a valida o instanta a tipului xml, schema putand fi
stocata in baza de date.
Pentru stocarea tipului de date xml se foloseste modelul InfoSet (in care ordinea
atributelor, spatiile nesemnificative, prefixele spatiilor de nume si declaratia XML nu
este pastrata). Astfel in urmatorul exemplu variabilele x si y sunt echivalente din
punct de vedere al modelului InfoSet insa distincte lexical.
Exemplu:
declare @x xml
declare @y xml
set @x = '<document nume="document xml"></document>'
set @y = '<document nume="document xml"/>'
select @x,@y

Doua instante xml nu pot fi comparate direct (insa poate fi convertit la un alt tip de
date ca de exemplu varchar pentru a putea fi comparate). Din acest motiv nu putem
defini o cheie primara sau unica pe o coloana de tip xml, nu putem defini o
constrangere clasica sau folosi un index clasic pentru acest tip de date.
Pentru a interoga eficient tipul de date xml se foloseste limbajul integrat XQUERY si
se pot defini indecsi XML (diferiti de cei clasici permitand o interogare eficienta in
cadrul unei instante si nu a unui set).
Pentru modificarea datelor se foloseste instructiunea modify - o extensie a limbajului
XQUERY.
60

Observatii:
desi se pot stoca fragmente de documente xml acestea trebuie sa fie bine
formate
se pot defini constrangeri pe o coloana tip xml folosind functii
se poate defini un index full-text pe o coloana tip xml
se pot asocia o valoare implicita pentru o coloana de tip xml
Cristian Andrei Lefter, SQL Server MVP
MCT, MCSA, MCDBA, MCAD, MCSD .NET,
MCTS, MCITP - Database Administrator SQL Server 2005
http://sqlserver.ro

O descrieree mai ampl


Date de tip iruri de caractere
,
CHAR (), VARCHAR (), NCHAR (), NVARCHAR ().
Unicode.
8000 (4000 Unicode).
( 2 )
TEXT NTEXT.

Date de tip numere ntregi


INT (INTEGER), SMALLINT, TINYINT, BIGINT.
, , 4 (
-231 231-1), 2 ( -215 215-1), 1 ( 0 255) 8
( -263 263-1).
.

Date numerice cu precizie fix


, , .
.
DECIMAL [([,])] (precizie,
scala), NUMERIC [([,])]. DECIMAL NUMERIC
.
(
), ,
.
28 , DECIMAL NUMERIC ( 2 17 ).

61

Date numerice cu precizie aproximativ (cu virgul flotant)


FLOAT ( 15 , 8 ) REAL
( 7 , 4 ).
, .. (mantisa i ),
,
.

Date calendaristice
,
DATETIME SMALLDATETIME, 8 4
.
MONEY SMALLMONEY
; 4 8 4
.
BIT , 0 1.

Tipuri speciale de date


SQL Server :
TIMESTAMP
.
UNIQUEIDENTIFIER
.
SYSNAME .
SQL_VARIANT SQL
Server TEXT, NTEXT, IMAGE TIMESTAMP.
TABLE, , ,
. TABLE

. TABLE ,
.
CURSOR , ,
. SQL
Server .
,
. CURSOR
, .

62

Tipul de Date XML


Un tip nou de date suportat de SQL Server 2005 este tipul de date xml. Tipul de date
xml permite stocarea de documente in format xml sau fragmente de documente xml
avand o dimensiune de pana la 2GB. Se pot declara variabile de tip xml, se pot defini
tabele cu coloane de acest tip sau se pot folosi parametrii de tip xml. Optional se
poate asocia o schema pentru a valida o instanta a tipului xml, schema putand fi
stocata in baza de date.


Craearea tipurilor definite de utilizator
SQL- .
-
.

(procedur de sistem sp_addtype):
sp_addtype [@typename=]type,[@phystype=]
system_data_type
[,[@nulltype=]null_type]
system_data_type .

image
text
uniqueidentifier
smallint
int

2.3.
smalldatetime decimal
real
decimal[(p[,s])]
datetime
numeric
float
numeric[(p[,s])]
float(n)
varbinary(n)

bit
binary(n)
char(n)
nvarchar(n)

ntext

nchar(n)

varchar(n)

EXEC sp_addtype bir, DATETIME, 'NULL'

EXEC sp_addtype bir, DATETIME, NOT NULL

2.1. bir.

CREATE TABLE tab


(id_n
INT IDENTITY(1,1) PRIMARY KEY,
names
VARCHAR(40),
birthday
BIR)
2.2. bir .


sp_droptype type: EXEC sp_droptype 'bir'

63


, ,
systypes:
SELECT * FROM

systypes


Convertirea tipurilor de date
.
,
STR.
SQL Server CONVERT CAST,
,
. CONVERT CAST
.
CAST( AS _)
CONVERT(_[()],
[,])

: /, .
DECLARE @d DATETIME
DECLARE @s CHAR(8)
SET @s=29.10.01
SET @d=CAST(@s AS DATETIME)

2.3. /.

SQL
MS SQL Server , , , .

5.2.3. Tipuri de date folosite n Oracle (PL/SQL)

5.2.4. Expresii
, ,
, .
, .

64

( ) ( ,
). ,
, , , .
(operatori)
.
(operatori unari), (operatori de setare, asignare),
(aritmetici), (literari),
(de comparaie), (logici), (binari).

Variabile
SQL Server .
.
- , .
DECLARE, :
DECLARE {@_ _ }
[,...n]
SET SELECT.
SELECT ,
.
DECLARE @a INT
SET @a=10
2.4. SET .

DECLARE @k INT
SELECT @k=SUM() FROM

2.5. SELECT .

5.2.5. SQL
Structuri de control n SQL (instruciuni de control)
SQL , SQL Server
(structuri de control),
.
(bloc
BEGIN END:

de operatori)

<_>::=
BEGIN
{ sql_ | _ }
END

65

SQL .
(construcii
de ramificri polivariante), (ramificri condiionate)
(bucle). BEGIN...END .
SQL (
, ,
), BEGIN...END
.

. :
<_>::=
IF _
{ sql_ | _ }
[ ELSE
{sql_ | _ } ]
:
<_>::=
WHILE _
{ sql_ | _ }
[ BREAK ]
{ sql_ | _ }
[ CONTINUE ]
, BREAK.
, ,
CONTINUE.

:
<__>::=
CASE _
WHEN {__ |
_ } THEN
_ [,...n]
[ ELSE __ ]
END
,
.
WHEN...THEN, ,
ELSE.

66

6. Crearea tabelelor
6.1.
,
, .
(tabel de baz)
. (linii) (coloane),

.
(cmp), ,
, .
. (nregistrare, record)
, ,
.
, :

?
() ?
?
?
?
?
?
?

:
<_> ::=
CREATE TABLE _
(_ _
[NULL | NOT NULL ] [,...n])
MS
SQL Server.

, . ,
.
NULL ,
NULL. NULL
, , ,
. NOT NULL,
NULL . NULL,
NULL . SQL
NULL.

67

CREATE TABLE SQL.


.

6.2. Crearea tabelelor n MS SQL. Sintaxa general


Sintaxa general prevede specificarea datelor de dou tipuri: descrierea cmpurilor i
descrierea restriciilor.
CREATE TABLE <tabel_name>
(field_definition_comma_list [, constraint_definition_comma_list]);
field_definition_comma_list:
<caimp_nume> <tip_date_lungimea> [NULL NOT NULL] [<constraint>],
constraint_definition_comma_list specificarea constrngerilor (restriciilor), care
asigur integritatea i consistena (integritatea referenial n primul rnd) datelor
( ,
).
Remarc: Ordinea nu import
constraint_definition_comma_list:
Exist dou tipuri de restricii n tabele de baz:
definiie restricii de cmp (cheie primar, valori de cmp unice, cheie extern);
definiie condiii de control.
Pentru formularea acestor restricii n comanda CREATE TABLE sunt susinute
urmtoarele opiuni (opiuni de constrngeri) PRIMARY KEY, UNIQUE,
FOREIGN KEY, REFERENCES, NOT NULL, DEFAULT, CHECK.
Sintaxa general
Restricii de cmp:
PRIMARY KEY (colomn-commalist)
UNIQUE (colomn-commalist)
FOREIGN KEY (colomn-commalist) REFERENCES <base_table_name>
[(colomn-commalist)]
[ON DELETE <option>]
[ON UPDATE <option>]
68

Opiunea <option> poate fi: NO ACTION, CASCADE, SET DEFAULT sau SET
NULL. Opiunea NO ACTION este identic strategiei RESTRICTED analizat n
teorie.
Restricii la date (reguli de validare, definiie condiii de control):
NOT NULL
DEFAULT
CHECK
Exemple:
DEFAULT (FurnDate = GetDate()),
DEFAULT (City = Chiinu),
CHECK (Colors in (white, black, red, green))
CHECK (WareType in (unu, doi, trei));
6.3. Crearea tabelei n baza altor tabele, folosind propoziia SELECT
CREATE TABEL DeliveryNew AS
SELECT Delivery.OrdNum, Supplier.SupplName, Wares.WareName,
Delivery.Volume, Delivery.Price
FROM Supplier, Delivery, Wares
WHERE (Supplier.SupplId = Delivery.Supplier) AND (Delivery.Ware =
Wares.WareId);
n mod identic se creaz tabelele virtuale View:
CREATE VIEW Delivery AS
SELECT Delivery.OrdNum, Supplier.SupplName, Wares.WareName,
Delivery.Volume, Delivery.Price
FROM Supplier, Delivery, Wares
WHERE (Supplier.SupplId
Wares.WareId);

Delivery.Supplier)

AND

(Delivery.Ware

.
CREATE TABLE SELECT
:
69

CREATE TABLE <__> AS


SELECT [* | <1>,<2>, ]
FROM <_>
[WHERE <>];

CREATE TABLE Delivery2 AS


SELECT Delivery.OrdNum, Supplier.SupplName, Wares.WareName,
Delivery.Volume, Delivery.Price
FROM Supplier, Delivery, Wares
WHERE (Supplier.SupplId = Delivery.Supplier) AND (Delivery.Ware =
Wares.WareId);
Crearea i utilizarea tabelelor virtuale, indecilor, domenelor, tipurilor proprii
de date, etc.
Crearea i utilizarea tabelelor virtuale - view
CREATE VIEW <view_nume> [<field_comma_list>]
AS
SELECT * | < field_comma_list >
FROM <table_comma_list>
WHERE <conditii de selectie>

CREATE VIEW Delivery AS

70

SELECT Delivery.OrdNum, Supplier.SupplName, Wares.WareName,


Delivery.Volume, Delivery.Price
FROM Supplier, Delivery, Wares
WHERE (Supplier.SupplId = Delivery.Supplier) AND (Delivery.Ware =
Wares.WareId);
Delivery (View).
. ,
() .
() .
CREATE SCHEMA Ivanov
(Suppliers, Deliveries, Wares);
6.4. Exemple:
CREATE TABLE Supplier
(SupplId CHAR(6) NOT NULL PRIMARY KEY,
SupplName CHAR(30) NOT NULL,
SupplCity CHAR(25),
DEFAULT (SupplCity = Chiinu);
CREATE TABLE Ware
(WareId CHAR(6) NOT NULL PRIMARY KEY,
WareName CHAR(30) NOT NULL,
WareType CHAR(25)),
CHECK (WareType in (unu, doi, trei));
CREATE TABLE InvoiceSuppl
(InvSupplId CHAR(6) NOT NULL PRIMARY KEY,
InvSupplDate DATE NOT NULL,
InvSupplier CHAR(6) NOT NULL FOREIGN KEY
REFERENCES Supplier (SupplId) ON DELETE CASCADE
ON UPDATE CASCADE,
InvSupplSum DECIMAL(18,6) NOT NULL,
InvSupplDepozit CHAR(6) NOT NULL,
FOREIGN KEY (InvSupplDepozit)

71

REFERENCES Depozit (DepId) ON DELETE CASCADE


ON UPDATE CASCADE,
DEFAULT (InvSupplDate = Date()));
CREATE TABLE Delivery
(OrdNum INTEGER NOT NULL UNIQUE,
InvoiceSuppl CHAR(6) NOT NULL,
Ware CHAR(6) NOT NULL,
Volume INTEGER NULL,
Price DECIMAL(18,6) NULL,
CONSTRAINT Delivery1 FOREIGN KEY (InvoiceSuppl)
REFERENCES InvoiceSuppl (InvSupplId),
CONSTRAINT Delivery2 FOREIGN KEY (Ware)
REFERENCES Wares (WareId),
CHECK (Volume >5));
ER-
3.2. ,
. ,
, , , .
CREATE TABLE
(
VARCHAR(50) NOT NULL,

MONEY NOT
NULL,

VARCHAR(50) NOT NULL,

VARCHAR(50),
VARCHAR(50))

3.2. ,
.

3.3.
, , ,
.
CREATE TABLE
(
VARCHAR(50) NOT NULL,

VARCHAR(50) NOT NULL,

VARCHAR(50) NOT NULL,

VARCHAR(50),
VARCHAR(50),

CHAR(10) NOT NULL)

3.3. .

Modificarea tabelelor

72



ALTER TABLE, :
ALTER TABLE _
{[ADD [COLUMN] _ _ [
NULL | NOT NULL ]]
| [DROP [COLUMN] _]}
MS SQL Server :
ALTER TABLE _
{[ALTER COLUMN _
{__ [([,])]
[ NULL | NOT NULL ]}]
| ADD { [_ _]
| _ AS } [,...n]
| DROP {COLUMN _}[,...n]
}
, .
:
,
NOT NULL. ,
,
NOT NULL
.

. :

, NULL (..
- );
- ;
,
, , NOT NULL.

,
;
,
;
;

,
,
;

73


;
, , .


ALTER TABLE. ,
. ,

. .
, ,
.
, .
3.4. .
ALTER TABLE ADD _ CHAR(20)

3.4. .

Eliminarea tabelelor

: ,
:
DROP TABLE _ [RESTRICT | CASCADE]
, ,
. ,
, DELETE.
DROP TABLE ,
. RESTRICT,
,
, DROP TABLE .
CASCADE, ,
, ,
. DROP TABLE
CASCADE ,
.
DROP TABLE ,
. ,
DROP TABLE ,
.

4.7. Crearea altor obiecte

74

CREATE TABLE Delivery2 AS


SELECT Delivery.OrdNum, Supplier.SupplName, Wares.WareName,
Delivery.Volume, Delivery.Price
FROM Supplier, Delivery, Wares
WHERE (Supplier.SupplId = Delivery.Supplier) AND (Delivery.Ware =
Wares.WareId);
CREATE VIEW Delivery AS
SELECT Delivery.OrdNum, Supplier.SupplName, Wares.WareName,
Delivery.Volume, Delivery.Price
FROM Supplier, Delivery, Wares
WHERE (Supplier.SupplId
Wares.WareId);

Delivery.Supplier)

AND

(Delivery.Ware

CREATE SCHEMA Ivanov


(Suppliers, Deliveries, Wares);

75

3. MANIPULAREA DATELOR N TABELE


3.1.Tabele. Manipularea (actualizarea) datelor n tabele
3.2. Prelucrarea datelor. Interogarea datelor n tabele
3.3.
3.3 Instructiuni de creare, modificare si stergere a structurilor de date
3.4 Operatiile de manipulare si interogare
3.5 Scheme(catlog), Vederi

5.1. Manipularea datelor n tabele. Operaii generale


5.1.1. Consultarea datelor din tabele. Propoziia SELECT
Manipularea datelor din tabele presupune consultarea (extragerea pentru analiz
direct) i actualizarea lor (introducerea datelor noi, modificarea i tergerea lor).
Acestor operaii corespund respectiv operatorii:

SELECT

INSERT

UPDATE

DELETE
Manipularea necesit n primul rnd regsirea datelor. Pentru regsire trebuie de
specificat denumirea tabelelor, lista cmpurilor i condiia de selecie a nregistrrilor
n care se afl datele cerute. Tabelele i cmpurile n operaiile de regsire se
specific implicit (necondiionat). nregistrrile se specific prin opiunea WHERE
<predicat>, care este o parte component a operatorilor de manipulare. Opiunea
<predicat> este o expresie logic care descrie condiia de selecie a nregistrrilor.
Ct pentru consultarea datelor propriu zis, att i pentru regsirea lor cu scopul
modificrii frecvent se folosete varianta simpl a operatorului SELECT.
Sintaxa general ( )
n limb natural ():
SELECT < , >
FROM < , >
[WHERE <, >];
n mod formal ():
SELECT <* | field_name1, field_name2, ..., field_nameN>
76

FROM <table_name1, table_name2, ..., table_nameN>


[WHERE <condition>];
Aici: <field_name> <schema_name.field_name>
Exemple ()
SELECT *
FROM Delivery
WHERE Volume > 20 AND Price > 2999.00;
SELECT Delivery.OrdNum, Supplier.SupplName, Wares.WareName,
Delivery.Volume, Delivery.Price
FROM Supplier, Delivery, Wares
WHERE (Supplier.SupplId = Delivery.Supplier) AND (Delivery.Ware =
Wares.WareId);
Sortarea datelor de ieire (opiunea ORDER BY)
( ORDER BY)
SELECT <* | field_name1, field_name2, ..., field_nameN>
FROM <table_name1, table_name1, ..., table_nameN>
[WHERE <condition>];
ORDER BY < field_name1', field_name2', ...>
, ,
(prin numerele de poziie n SELECT).

77

Exemplu
SELECT Delivery.OrdNum, Supplier.SupplName, Wares.WareName,
Delivery.Volume, Delivery.Price
FROM Supplier, Delivery, Wares
WHERE (Supplier.SupplId = Delivery.Supplier) AND (Delivery.Ware =
Wares.WareId);
ORDER BY 2, 4;
Operatorul SELECT are o mulime de opiuni cu ajutorul crora pot fi ndeplinite
urmtoarele operaii:

Selectarea datelor,

Prelucrarea datelor,

Formatarea datelor.
El este folosit i in legtur cu operatorii CREATE, INSERT, UPDATE, DELETE.
5.1.2. Introducerea datelor n tabele
nserarea datelor:
INSERT INTO <_._>
VALUES ( 1, 2, , [NULL], );
INSERT INTO <_._>
(1, 2, )
VALUES (1, 2, );
nserarea datelor extrase din alt tabel:
INSERT INTO <_._>
[(1, 2, )]
SELECT [ * | (1, 2, )]
FROM <_._>
[WHERE < >];

78

INSERT INTO <_._>


VALUES ( 1, 2, , [NULL], );

INSERT INTO Delivery


VALUES (109, ORH023, TEL072, 15, 2499.99);
1 record inserted

INSERT INTO <_._>


(1, 2, )
VALUES (1, 2, );

INSERT INTO Delivery (OrdNum, Supplier, Ware)


VALUES (109, ORH023, TEL072);
1 record inserted

INSERT INTO <_._>


[(1, 2, )]
SELECT [ * | (1, 2, )]
FROM <_._>
[WHERE < >];
( WHERE)
, ,
.
INSERT INTO ORDERS_TMP
SELECT * FROM ORDERS_TBL
20 records inserted
INSERT INTO ORDERS_TMP

79

SELECT * FROM ORDERS_TBL


WHERE COST >= 49.99;
7 records inserted
, , ,
.
INSERT INTO ORDERS_TMP (ORD_NUM, CUST_ID, PROD_ID, QTY, COST)
SELECT (ORD_NUM, CUST_ID, PROD_ID, QTY, COST)
FROM ORDERS_TBL
WHERE COST>=49.99;
7 records inserted
, , .
5.1.3. Modificarea datelor n tabele
Modificarea datelor ntr-un cmp:

UPDATE <_._>
SET <_ = >
[WHERE <>];

UPDATE <table_name >


SET <field_name> = <valuie >
[WHERE <condition>];
<table_name> <schema_name.table_name>


UPDATE Delivery
SET Volume = 5
WHERE OrdNum = 109;
80

1 record updated

UPDATE Delivery
SET Volume = 5;
109 records updated
nnoirea datelor n mai multe cmpuri:

UPDATE <_._>
SET <C1 = 1>
[, 2 = 2,
3 = 3, ]
[WHERE <>];

UPDATE <table_name >


SET <field_name1> = <valuie1 >,
<field_name2> = <valuie2 >,
...,
<field_nameN> = <valuieN >
[WHERE <condition>];

UPDATE Delivery
SET Supplier = BEL007,
Price = 2599.99
WHERE Ware = TEL072;
7 records updated
5.1.4. tergerea datelor din tabele


DELETE FROM < , >
81

[WHERE <, >];



DELETE FROM <table_name>
[WHERE <condition>];
DELETE , .

DELETE FROM Delivery


WHERE ORD_NUM = 109;
1 record deleted
DELETE FROM Delivery;
109 records deleted
Operaii de selecie n opiunea WHERE

82

4.6. Indeci


,
.


. ,
, .
( ) ,
.


.
, .

Indexul este o list de referine la nregistrrile tabelului dat ordonat dup un cmp
anumit, numit cmp indexat.
,
, .

,
. SQL,
:
CREATE [ UNIQUE ] INDEX _
ON _(_[ASC|DESC][,...n])
.
, .
UNIQUE,
.
, (,
). ,
,
. ,
( , )
.
.
,

DROP INDEX _

83

Indecii n mediul MS SQL Server


Microsoft SQL Server B+tree ,
, ( )
.
, (clustered) .
,
, . ,

( , ).
.

. ,
RID,
.
, , ,
, RID ,
.
.
: , , ,
( ) ).
.
.
.
:
1. , where,
, , (
).
2. ,
, .
3. IDENTITY , ,
.

Index clustered si non-clustered


Categorie: Clustered | Index | Nonclustered | SQL Server | DBA Catalin Dumitru @ 08:48
SQL Server este un domeniu foarte vast i majoritatea sunt grabii n a parcurge ct mai mult din
documentaii astfel uneori pot trece peste cteva lucruri de baz cum ar fi indecii clustered sau
non-clustered. SQL Server 2005 ofer dou tipuri de indeci clustered si non-clustered. Din
definiie se poate spune ca un index clustered este un index care stocheaz datele ce formeaz
indexul iar un index non-clustered reine doar un pointeri (adrese de memorie la care se gsesc
datele).

84

O tabel poate conine doar un index clustered i pn la 249 de indeci non-clustered. Principalul
motiv pentru care se utilizeaz un index este acela de a se putea accesa mai rapid datele pe care o
interogare ncearc s le acceseze. Acest index poate s fie att clustered ct i non-clustered. Fr
un index, SQL Server ar trebui s parcurg ntreaga tabel pn ajunge la rndul care trebuie
accesat sau chiar s parcurg ntreaga tabel. Acest lucru se poate evidenia cu ajutorul planului de
interogare (execution plan) care va utiliza Index Seek (dac exist index) sau Table Scan (dac nu
exist).
Ca metod de practic ar fi s utilizez index clustered dar numai acolo unde indexul este o coloan
ce conine date, totui sunt limitat la un singur astfel de index n fiecare tabel. O a doua metod ar
fi indexarea tuturor coloanelor dar ar conduce la supraindexare i ar fi greu de ntreinut toi indeci
mai ales cnd se lucreaz cu multe instruciuni de actualizare (insert, update, delete).
Ca sfat, se poate spune c este mai bine s se creeze index non-clustered acolo unde coloana intr
n setul de rezultate pentru c accesarea paginilor de date este mai nceat.
Ca instrumente de depistare a cazurilor n care indexarea nu este corespunztoare (prea puin
indexat sau supraindexat), se poate utiliza Database engine Tuning Advisor
Etichete: SQL Server, Index, Clustered, Nonclustered, DBA

MS SQL Server
,
.
, ,
. -
.
SQL,
. SQL Server
.
, (
, ,
).

.
B-
.


, ,
.
.
,
, ..
, , .
SQL Server :

85

;
;
.

Index tipic (neclasterizat)



.
, ,
.

, :

, ;
;
;
.

4-5 .

Index clasterizat

,

.
, .
, .

.
.
, ,
.
.
,
.
, .
.

.
.
.
,

86

, ,
. .
(PRIMARY KEY)
,
.
,
,
, ,
,
.

Index unic

.

,
.

, .
.
,
.
UNIQUE PRIMARY KEY,
.
. ,
.
SQL :

;

UNIQUE;
CREATE INDEX.

:
<_>::=
CREATE [ UNIQUE ]
[ CLUSTERED | NONCLUSTERED ]
INDEX _ ON _(_
[ASC|DESC][,...n])
[WITH [PAD_INDEX]
[[,] FILLFACTOR=_]
[[,] IGNORE_DUP_KEY]
[[,] DROP_EXISTING]
[[,] STATISTICS_NORECOMPUTE] ]

87

[ON __ ]
.
,
.
UNIQUE
.
. NULL,
, .
, INSERT UPDATE,
.
CLUSTERED
,
,
.
.
NONCLASTERED .
FILLFACTOR
SQL-. FILLFACTOR
.
FILLFACTOR.
PAD_INDEX
FILLFACTOR.
DROP_EXISTING
,
.
STATISTICS_NORECOMPUTE
.
__ ,
.

/ .



DROP INDEX '_'[,...n]
3.5.
.

88

CREATE UNIQUE CLUSTERED INDEX index_klient1


ON ()
WITH DROP_EXISTING
ON PRIMARY
3.5. .

3.6.
. ,
.

30%.
CREATE UNIQUE NONCLUSTERED INDEX index_klient2
ON ( DESC, DESC)
WITH FILLFACTOR=30,
STATISTICS_NORECOMPUTE
ON PRIMARY
3.6. .

7. INTEROGAREA DATELOR

Extragerea datelor din baz de date se ndeplinete prin operaii de interogare.


O interogare este o adresare ctre baza de date (ca de obicei, ctre anumite tabele)
pentru a extrage o poriune de date ntr-o form convenabil pentru utilizator.
n interogare datele nu numai se extrag n forma n care se gsesc n baza de date, dar
i se prelucreaz i se formateaz.
SELECT ,
, .
, ,
(, , )
( ).

7.1. Extrajerea (selectarea) datelor din tabele. Interogri simple (


)

:
SELECT < , >
FROM < , >
89

[WHERE <, >];


:
SELECT <* | field_name1, field_name2, ..., field_nameN>
FROM <table_name1, table_name2, ..., table_nameN>
[WHERE <condition>];

SELECT *
FROM Delivery
WHERE Volume > 20 AND Price > 2999.00;
SELECT Delivery.OrdNum, Supplier.SupplName, Wares.WareName,
Delivery.Volume, Delivery.Price
FROM Supplier, Delivery, Wares
WHERE (Supplier.SupplId = Delivery.Supplier) AND (Delivery.Ware =
Wares.WareId);
( ORDER BY)
SELECT <* | field_name1, field_name2, ..., field_nameN>
FROM <table_name1, table_name1, ..., table_nameN>
[WHERE <condition>];
ORDER BY < field_name1', field_name2', ...>
, ,
.

90


SELECT Delivery.OrdNum, Supplier.SupplName, Wares.WareName,
Delivery.Volume, Delivery.Price
FROM Supplier, Delivery, Wares
WHERE (Supplier.SupplId = Delivery.Supplier) AND (Delivery.Ware =
Wares.WareId);
ORDER BY 2, 4;

SELECT
, :
SELECT, FROM, WHERE, ODER BY. .

SELECT [* I [ALL I DISTINCT] <1>, [ALL I DISTINCT] <2>. ]


FROM <1> [, <2>, ];
SQL .

SELECT * FROM PRODUCTS_TBL;


PROD_ID

PROD_DESCR

11235
11235

222
90
1234
15
13
13
119
455

COST
7.75
6.20
12.50
59.99
8.27
29.99
6.87
7.35
35.40
14.30

8 records selected.
SELECT PROD_ID
FROM PRODUCTS_TBL;
91

SELECT ALL PROD_ID


FROM PRODUCTS_TBL;
SELECT DISTINCT PROD_ID
FROM PRODUCTS_TBL;
SELECT DISTINCT (PROD_ID)
FROM PRODUCTS_TBL;
SQL (
PL/SQL (Oracle) ;).
SQL . FROM
SELECT.

Condiii de selectare a datelor opiunea WHERE



(expresie logic - predicat),
. WHERE ,
AND OR.
SQL,
SQL. De exemplu: operaia de comparaie =

SELECT [* | [ALL | DISTINCT] <1>, [ALL | DISTINCT] <2>. ]


FROM <1> [, <2>, ];
WHERE [<1 | 1> [AND
| OR
<2
2>];

SELECT *
FROM PRODUCTS_TBL
WHERE COST > 20 AND COST < 40;
SELECT *
FROM PRODUCTS_TBL
WHERE COST < 20 AND COST > 40;
SELECT *
FROM PRODUCTS_TBL
WHERE PROD_ID =11235 AND PROD_ID =13;

92

SELECT *
FROM PRODUCTS_TBL
WHERE PROD_ID <>11235 AND PROD_ID <>13;
SELECT *
FROM PRODUCTS_TBL
WHERE PROD_ID !=11235 AND PROD_ID !=13;

Sortarea datelor (opiunea ORDER BY)


ASC ascending ( )
DESC descending.

SELECT [* | [ALL | DISTINCT] <1>, [ALL | DISTINCT] <2>. ]


FROM <1> [, <2>, ];
WHERE [<1 | 1> [AND
| OR
<2
2>]
ORDER BY <1 | 1 [ASC | DESC]> [,<2 |
2 [ASC | DESC], >];
< > -
SELECT. .

SELECT *
FROM PRODUCTS_TBL
WHERE COST < 20
ORDER BY PROD_ID DESC;
SELECT *
FROM PRODUCTS_TBL
WHERE COST < 20
ORDER BY PROD_ID DESC;
SELECT PROD_ID, PROD_DESCR, COST
FROM PRODUCTS_TBL
WHERE COST < 20
ORDER BY PROD_ID DESC;

93

SELECT PROD_ID, PROD_DESCR, COST


FROM PRODUCTS_TBL
WHERE COST < 20
ORDER BY 2;

Sortarea dup mai multe cmpuri


, ORDER
BY 1,2,3. ORDER BY 1,2,3

SELECT. ORDER BY 1,2,3 ,
.

SALARY_TBL
LAST_NAME

FIRST_NAME

SALARY

670
375
670
430
670

SELECT LAST_NAME, FIRST_NAME, SALARY


FROM SALARY_TBL
ORDER BY 3,1,2;
SALARY.
SALARY LAST_NAME. ,
LAST_NAME
FIRST_NAME
.
,
.
, .
, , ,
.

Obinerea numrului de nregistrri


94

( COUNT(*))

SELECT COUNT(* | <_>)


FROM <_ >;
,
, NOT NULL.

Pseudonime (prescurtri de denumiri) la cmpuri



.

SELECT <_1 [1], >


FROM <_>;

SELECT LAST_NAME , FIRST_NAME , SALARY


FROM SALARY_TBL
ORDER BY 3,1,2;

Tipuri de operaii n operatorul SQL SELECT


SQL ( WHERE)
.


, (AND, OR, NOT)

95

(operaii de comparaie)
SQL
=, <, >, <>, <=, >=.
<=, >= ,
.

WHERE SALARY = 2000;


WHERE SALARY = 2000;
WHERE SALARY <> 2000;
WHERE COST >20;
WHERE COST >= 24.99;
(operaii de conjuncie i desjuncie)
AND OR.
WHERE.

WHERE COST >10 AND COST <50;


WHERE PROD_ID = 7725 OR PROD_ID = 2345;
WHERE COST > 10
AND (PROD_ID = 222 OR PROD_ID = 90 OR PROD_ID =11235);
(operaii logice)
SQL , .
:
IS NULL
BETWEEN
IN
LIKE

EXISTS
UNIQUE
ALL
ANY

IS NULL NULL.
SELECT *
FROM EMPLOYEE_TBL
WHERE PAGER IS NULL;
( WHERE PAGER = NULL !)

96

BETWEEN , ,
( ).
SELECT *
FROM PRODUCTS_TBL
WHERE COST BETWEEN 10.0 AND 29.99;
IN .
WHERE SALARY IN (20000, 30000, 40000).
LIKE , .
% _.
WHERE SALARY LIKE 200%;
WHERE SALARY LIKE %200%;
WHERE SALARY LIKE _00%;
WHERE SALARY LIKE 2_%_%;
WHERE SALARY LIKE %2;
WHERE SALARY LIKE _2%3%;
WHERE SALARY LIKE 2___3%;
EXISTS, UNIQUE, ALL ANY .
, .
EXISTS, UNIQUE, ALL ANY.
EXISTS , .
( )
SELECT COST
FROM PRODUCTS_TBL
WHERE EXISTS (SELECT COST
FROM PRODUCTS_TBL
WHERE COST > 100);
UNIQUE (..
).
SELECT *
FROM SALARY_TBL
WHERE UNIQUE (SELECT SALARY
FROM SALARY_TBL
WHERE LAST_NAME = );
ALL
.

97

ANY
.

SELECT *
FROM PRODUCTS_TBL
WHERE COST > ALL ( SELECT COST
FROM PRODUCTS_TBL
WHERE COST < 10);
SELECT *
FROM PRODUCTS_TBL
WHERE COST > ANY ( SELECT COST
FROM PRODUCTS_TBL
WHERE COST < 10);

(negarea condiiilor) (operaii de


negare)
.
NOT, , ,
.
NOT :

NOT BETWEEN
NOT IN
NOT LIKE
IS NOT NULL
NOT EXISTS
NOT UNIQUE

98


WHERE SALARY <>20000;
WHERE SALARY != 20000;
WHERE COST NOT BETWEEN 5.95 AND 14.5;
WHERE PROD_ID NOT IN (13, 9, 87, 119);
WHERE SALARY NOT LIKE 200%;
WHERE SALARY NOT LIKE %200%;
WHERE SALARY NOT LIKE _00%;
WHERE SALARY NOT LIKE 2_%_%;
WHERE PAGER IS NOT NULL;
WHERE NOT EXISTS (SELECT EMP_ID
FROM EMPLOYEE_TBL
WHERE EMP_ID = 333333;
WHERE NOT UNIQUE (SELECT SALARY
FROM EMPLOYEE_TBL);

(operaii aritmetice)
: + (), - (), * (), / ().
.

SELECT SALARY + BONUS TOTAL


FROM EMPLOYEE_TBL;
SELECT SALARY FROM EMPLOYEE_TBL
WHERE SALARY + BONUS > 40000;
SELECT SALARY - BONUS TOTAL
FROM EMPLOYEE_TBL;
SELECT SALARY FROM EMPLOYEE_TBL
WHERE SALARY - BONUS > 40000;
SELECT SALARY * 10 TOTAL
FROM EMPLOYEE_TBL;
SELECT SALARY FROM EMPLOYEE_TBL
WHERE SALARY *10 > 40000;

SELECT SALARY / 10 TOTAL


FROM EMPLOYEE_TBL;
SELECT SALARY FROM EMPLOYEE_TBL
WHERE SALARY /10 > 40000;

(prioritarea)

()

NOT

/
AND

()

Shl

shr

+
OR
=
<

XOR
<>
>

IN

SELECT SALARY * 10 +1000


FROM EMPLOYEE_TBL
WHERE SALARY > 20000;
SELECT (SALARY 1000 + BONUS) / 52 * 1.1 TOTAL
FROM EMPLOYEE_TBL

100

Totalizarea datelor. Funcii de totalizare (agregare)


( )
Funcii de totalizare (agregare) al datelor sunt folosite n operatorii SQL pentru
obinerea informaiei (datelor) sumative n cmpurile tabelilor: sumelor, valorilor medii,
valorilor minimale i maximale, numerilor totale de nregistrri.
, SQL
, , ,
.

COUNT, SUM, AVG, MAX, MIN.

Formatul funciilor

COUNT (*) | [([DISTINCT | ALL] <_>)];

Contorizeaz valorile nenule ale unei coloane sau numrul de linii dintr-un tabel
DISTINCT ().
,
ALL , NULL,
(*) .

SUM ([DISTINCT] <nume_cimp>);


Calculeaz suma valorilor numerice dintr-un cmp,
DISTINCT ia n considerare numai valorile distincte. n acest caz rezultatul nu va fi
egal cu suma total a valorilor din cmp.
AVG ([DISTINCT] <nume_cimp>);
Calculeaz valoarea medie a valorilor numerice dintr-un cmp,
DISTINCT ia n considerare numai valorile distincte. n acest caz rezultatul nu va fi
egal cu valoarea medie a valorilor din cmp.
MAX ([DISTINCT] <nume_cimp>);
Determin valoarea maximal dintr-un cmp,
DISTINCT ia n considerare numai valorile distincte.
MIN ([DISTINCT] <nume_cimp>);
Determin valoarea minimal dintr-un cmp,
DISTINCT ia n considerare numai valorile distincte.
Exemple
SELECT COUNT(*)
FROM EMPLOYEE_TBL;
101

SELECT COUNT(DISTINCT(PROD_ID))
FROM ORDERS_TBL;
SELECT SUM(SALARY)
FROM EMPLOYEE_TBL;
SELECT SUM(DISTINCT SALARY)
FROM EMPLOYEE_TBL;
SELECT AVG(SALARY)
FROM EMPLOYEE_TBL;
SELECT AVG(DISTINCT SALARY)
FROM EMPLOYEE_TBL;
SUM, AVG .
COUNT, SUM, AVG DISTINCT
,
.
SELECT MAX(SALARY)
FROM EMPLOYEE_TBL;
SELECT MAX(DISTINCT SALARY)
FROM EMPLOYEE_TBL;
SELECT MIN(SALARY)
FROM EMPLOYEE_TBL;
SELECT MIN(DISTINCT SALARY)
FROM EMPLOYEE_TBL;
MAX, MIN DISTINCT ,
.

SELECT COUNT (ORD_NUM), SUM(QTY),
SUM(QTY) / COUNT(ORD_NUM) AVEREGE_QUOLITY
FROM ORDERS_TBL;

SORTAREA I GRUPAREA DATELOR




GROUP BY


GROUP BY ORDER BY
102

HAVING

Gruparea datelor unirea datelor cu valori egale a unui atribut n grupe i calcularea
funciilor de totalizare pe acestea grupe.

.
(gruparea datelor se realizeaz)
GROUP BY SELECT. GROUP BY
, (pentru a uni valori repetate n
grupuri). WHERE
ORDER BY (opiunea trebuie s fie dup WHERE i nainte de ORDER BY).

Ordinea cuvintelor cheie


SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
Sintaxa
SELECT 1, 2,
FROM 1, 1,
WHERE <predicat>
GROUP BY 1, 2,
HAVING <conditie>
ORDER BY 1, 2,
n opiunea GROUP BY pot fi folosite numai cmpuri selectate n opiunea SELECT.
Dac cmpul este n lista SELECT atunci el trebuie s fie i n GROUP BY. Aceast
condiie nu se refer la cmpurile aflate n expresiile de totalizare a opiunii SELECT.
GROUP BY
SELECT . , ,
GROUP BY ,
.

Crearea grupurilor i aplicarea funciilor de totalizare



Exemple

103

Furnizori
FurnId
FurnNume
FurnOras

1
Facture

FactId
DataEliber
Furnizor
SumaTotala
Depozit

Livrari
OrdNum
Factura
Marfa
Cantitate
Pret

Marfuri
MarfaId
MarfaNume
UnitateMasura

Fig. 10. Baza de date LIVRARI

1. De aflat sumele totale pentru mrfurile livrate pe fiecare ora


SELECT Frn.FurnOras AS Ora, SUM(Fct.SumaTotala) AS Suma livrat
FROM Furnizori Frn, Facture Fct
WHERE Frn.FurnId = Fct.Furnizor AND Frn.FurnOras <> Chiinu
GROUP BY Frn.FurnOras
HAVING SUM(Fct.SumaTotala) > 50000.00
ORDER BY 2 DESC
2. De aflat sumele totale pentru fiecare marf livrat
SELECT M.MarfaNume AS Marfa, SUM(L.Cantitate*L.Pret) AS Suma livrat
FROM Marfuri M, Livrari L
WHERE M.MarfaId = L.Marfa
GROUP BY Frn.FurnOras
ORDER BY 2 DESC
3. De aflat sumele totale pentru fiecare marf livrat pe fiecare ora
SELECT Frn.FurnOras AS Ora, M.MarfaNume AS Marfa, SUM(L.Cantitate*L.Pret)
AS Suma livrat
FROM Furnizori Frn, Marfuri M, Livrari L
WHERE Frn.FurnId = Fct.Furnizor AND FctFactId = L.Factura AND M.MarfaId =
L.Marfa
GROUP BY Frn.FurnOras, M.MarfaNume
ORDER BY 3 DESC

104

SELECT EMP_ID, CITY


FROM EMPLOYEE_TBL
GROUP BY CITY, EMP_ID

CITY, EMP_ID.
SELECT EMP_ID, SUM(SALARY)
FROM EMPLOYEE_PAY_TBL
GROUP BY EMP_ID

SELECT CITY, COUNT(*)


FROM EMPLOYEE_TBL
GROUP BY CITY

, GROUP BY ORDER BY
, GROUP BY
, ORDER BY
.
ORDER BY GROUP BY
.

SELECT CITY, AVG(PAY_RATE), AVG(SALARY)


FROM EMPLOYEE_PAY_TBL
WHERE CITY IN (INDIANAPOLIS, GREENWOOD)
GROUP BY CITY
ODER BY 2,3;

Opiunea HAVING
HAVING

Opiunea HAVING se folosete pentru selectarea grupurilor n rezultatul final. Joac


acelai rol pentru selectarea grupurilor n opiunea GROUP BY care l joac opiune
WHERE pentru selecia nregistrrilor.
HAVING SELECT
GROUP BY, .
GROUP BY HAVING , WHERE
. HAVING SELECT
GROUP BY ORDER BY,
.

SELECT 1, 2,
FROM 1, 1,
WHERE <>
GROUP BY 1, 2,
105

HAVING <>
ORDER BY 1, 2,

SELECT CITY, AVG(PAY_RATE), AVG(SALARY)


FROM EMPLOYEE_PAY_TBL
WHERE CITY <> GREENWOOD
GROUP BY CITY
HAVING AVG(SALARY) > 20000
ODER BY 3;

FUNCII DE LUCRU CU DATE LITERARE


( )
SQL
, , .
:
,
ANSI: CONCATENATION, SUBSTRING,
TRANSLATE, REPLACE, UPPER, LOWER;
, SQL.
.
(substring) , , ..
.
.
ANSI

SQL .
Oracle I I . SQL Server +.

SELECT I I ,
SELECT + .
:
Oracle
SELECT _ I I [ I I ] _ [ I I _];
SQL Server
SELECT _ + [ + ] _ [ + _].

SELECT CITY + STATE


FROM EMPLOYEE_TBL;

106

SELECT CITY I I , I I STATE


FROM EMPLOYEE_TBL;
SELECT CITY + + STATE
FROM EMPLOYEE_TBL;
SELECT LAST_NAME I I , I I FIRST_NAME NAME
FROM EMPLOYEE_TBL;

NAME
SMITH, JHONSON
..

( )
TRANSLATE
TRANSLATE
. ?
TRANSLATE !
:
SELECT TRANSLATE(_, 1, 2)
_ ,
1 ,
2 , ,
.
_
.
:
SELECT TRANSLATE(CITY, IND, ABC)
FROM EMPLOYEE_TBL;
SELECT CITY, TRANSLATE(CITY, IND, ABC) NEWSITY
FROM EMPLOYEE_TBL;

CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INDIANAPOLIS
.

NEWCITY
GREEBWOOC
ABCAABAPOLAS
WHATELABC
ABCAABAPOLAS
ABCAABAPOLAS
ABCAABAPOLAS

107

REPLACE

.
:
SELECT REPLACE(_, 1, [NULL] 2)
:
SELECT REPLACE(TELEPHONE, PHONE, VIZION)
SELECT CITY, REPLACE(CITY, IND, ABC) NEWSITY
FROM EMPLOYEE_TBL;

CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INDIANAPOLIS
.

NEWCITY
GREENWOOD
ABCIANAPOLIS
WHITELAND
ABCIANAPOLIS
ABCIANAPOLIS
ABCIANAPOLIS

UPPER
.
:
UPPER(_)
:
SELECT CITY, UPPER(CITY) NEWSITY
FROM EMPLOYEE_TBL;

CITY
GReenwOOD
INDIAnaPOLIS
WHitelanD
INdianapolis
INdianaPOLIS
INDIANapolIS
.

NEWCITY
GREENWOOD
ABCIANAPOLIS
WHITELAND
ABCIANAPOLIS
ABCIANAPOLIS
ABCIANAPOLIS

LOWER
.
:
LOWER(_)
:
SELECT CITY, LOWER(CITY) NEWSITY
108

FROM EMPLOYEE_TBL;

CITY
GReenwOOD
INDIAnaPOLIS
WHitelanD
INdianapolis
INdianaPOLIS
INDIANapolIS
.

NEWCITY
greenwood
abcianapolis
whiteland
abcianapolis
abcianapolis
abcianapolis

SUBSTR (SUBSTRING)
. SQL,
( Oracle SUBSTR, SQL Server - SUBSTRING).
:
SUBSTR(_, _, ); (Oracle)
SUBSTRING(_, _, ); (SQL Server)
:
Oracle
SELECT CITY, SUBSTR(CITY,3,5) NEWSITY
FROM EMPLOYEE_TBL;

CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INDIANAPOLIS
6 rowes affected.

NEWCITY
EENWO
DIANA
ITELA
DIANA
DIANA
DIANA

SQL Server
SELECT CITY, SUBSTRING(CITY,8,3) NEWSITY
FROM EMPLOYEE_TBL;

CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INDIANAPOLIS
6 rowes selected.

NEWCITY
OD
POLI
ND
POLI
POLI
POLI

.
LTRIM
109

.
. LEFT.
:
LTRIM(_ [, _]);
:
SELECT CITY, LTRIM(CITY, INDIA) NEWSITY
FROM EMPLOYEE_TBL;

CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INSBRUC
ILLINOIS
7 rowes selected.
.

NEWCITY
GREENWOOD
NAPOLIS
WHITELAND
NAPOLIS
NAPOLIS
SBRUC
LLINOIS

RTRIM
.
. RIGHT.
:
RTRIM(_ [, _]);
:
SELECT CITY, RTRIM(CITY, IS) NEWSITY
FROM EMPLOYEE_TBL;

CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INSBRUC
ILLINOIS
7 rowes selected.
.

NEWCITY
GREENWOOD
INDIANAPOL
WHITELAND
INDIANAPOL
INDIANAPOL
INSBRUC
ILLINO

INSTR
,
.
110

:
INSTR(_, _
[, ]]);

:
SELECT CITY, INSTR(CITY,DIA,1,1) NR_POZ
FROM EMPLOYEE_TBL;

CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INDIANAPOLIS
6 rowes selected.

NR_POZ
0
3
0
3
3
3

DECODE
ANSI ,
. SQL Base, Oracle .
,
.
:
DECODE(_, 1, 1
2 [, ]]);

[,

2,

:
SELECT CITY, DECODE (CITY, INDIANAPOLIS, INDY, GREENWOOD, GREEN,
OTHER) SHORT_NAME FROM EMPLOYEE_TBL;

CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INSBRUC
ILLINOIS
7 rowes selected.
.

SHORT_NAME
GREEN
INDY
OTHER
INDY
INDY
OTHER
OTHER


SQL.
( LENGTH)
111

:
LENGTH(_);
:
SELECT CITY, LENGTH(CITY) LENGTH
FROM EMPLOYEE_TBL;

CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INSBRUC
ILLINOIS
7 rowes selected.
.

LENGTH
9
12
9
12
12
7
8

NVL ( NULL)
,
NULL.
, .
:
NVL(<>, < >);
:
SELECT PAGER, NVL(PAGER, 99999999) NEW_PAGER
FROM EMPLOYEE_TBL;

PAGER
86483527
86483527
86483527

NEW_PAGER
86324972
86483527
99999999
86483527
86483527
99999999
99999999

7 rowes selected.
.
LPAD RPAD

.
:
LPAD(_, , );
RPAD(_, , );
112

:
SELECT LPAD(CITY, 20, .)
FROM EMPLOYEE_TBL;

CITY
..INDIANAPOLIS
...WHITELAND
..INDIANAPOLIS
..INDIANAPOLIS
.INSBRUC
ILLINOIS
7 rowes selected.
SELECT RPAD(CITY, 20, .)
FROM EMPLOYEE_TBL;

CITY
GREENWOOD..
INDIANAPOLIS..
WHITELAND..
INDIANAPOLIS..
INDIANAPOLIS..
INSBRUC.
ILLINOIS
7 rowes selected.
ASCII (American Standart Code for Information Interchange)
ASCII .
:
ASCII(_);
:
ASCII(A) 65,
ASCII(B) 66,
ASCII(C) 67.


ABS
ROUND
SQRT
SIGN
POWER
EXP
SIN, COS, TAN


113

:
_()


.
:
;
;
;
.

1. ;
2.
;
3.
;
4. ,
.

.

LUCRU CU DATE CALENDARISTICE


( )
, SQL .
:




SQL Oracle, Oracle
.


, .

DATETIME,
SQL, Oracle, Sybase Microsoft SQL Server.

114

SQL
DATETIME.

-------------------------------------------------------------------------------------------DATE

TIME

TIMESTAMP

:
DATE
: --
: 0001-01-01 9999-12-31
TIME
::.nnn
: 00:00:00.000 23:59:61.999
TIMESTAMP
-- ::.nnn
: 0001-01-01 00:00:00.000 9999-12-31 23:59:61.999
DATETIME
DATETIME ,
. DATETIME
.

YEAR
MONTH
DAY
HOUR
MINUTE
SECOND


0001 9999
01 12
01 31
00 23
00 59
00.000 61.999

, , ..
,
.

Oracle, Sybase Micrisoft SQL Server:

Oracle
Sybase


DATE
DATETIME
SMALLDATETIME



,
, DATETIME
115

Micriosoft SQL

DATETIME
TIMESTAMP
DATE
TIME



, , .
, ,
, , ..
()
()
.

.
:
SYSDATE Oracle;
GETDATE() Sybase Microsoft SQL Server.
:
Oracle
SELECT SYSDATE FROM <_>;
31-DEC-99
Sybase Microsoft SQL Server
SELECT GETDATE();
Dec 31,1999
(ora zonal)
SQL (ora zonal).
, ,
.
:

ASD, ADT
BST, BDT
CST, CDT
EST, EDT
GMT
HST, HDT
NST
PST, PDT
YST, YDT

(-) ,
,
,
,
( )
,
-
,
,
116


, .
DATETIME.
Oracle:
DATE 1999-12-31 + INTERVAL 1 DAY;
2000-01-01
DATE 1999-12-31 + INTERVAL 1 MONTH;
2000-01-31
ADD_MONTH Oracle:
SELECT DATE_HIRE, ADD_MONTH(DATE_HIRE, 1)
FROM EMPLOYEE_PAY_TBL;

DATE_HIRE
ADD_MONTH
23-MAY-89
23-JUN-89
17-JUN-90
17-JUL-90
14-AUG-94
14-SEP-94
28-JUN-97
28-JUL-97
22-JUL-96
22-AUG-96
14-JAN-91
14-FEB-91
6 rows selected.
Oracle,
SELECT DATE_HIRE, DATE_HIRE + 1
FROM EMPLOYEE_PAY_TBL
WHERE EMP_ID = 311549902;

DATE_HIRE
ADD_MONTH
23-MAY-89
24-MAY-89
1 row selected.
DATEADD SQL Server:
SELECT DATE_HIRE, DATEADD(MONTH, 1, DATE_HIRE)
FROM EMPLOYEE_PAY_TBL;

DATE_HIRE
ADD_MONTH
23-MAY-89
23-JUN-89
17-JUN-90
17-JUL-90
14-AUG-94
14-SEP-94
28-JUN-97
28-JUL-97
22-JUL-96
22-AUG-96
14-JAN-91
14-FEB-91
6 rows affected.
117

Oracle SQL Server


ANSI, , SQL.

SQL DATETIME
OVERLAPS,
TRUE FALSE, , .
:
(TIME 01:00:00, TIME 05:59:00)
OVERLAPS
(TIME 05:00:00, TIME 07:00:00);
: TRUE.
(TIME 01:00:00, TIME 05:59:00)
OVERLAPS
(TIME 06:00:00, TIME 07:00:00);
: FALSE.

SQL Server
DATEPART
DATENAME
TIMEPART
TIMENAME
GETDATE()
DATEDIFF

Oracle
NEXT_DAY
MONTH_BETWEEN

() DATEPART
DATEPART
() TIMEPART
TIMEPART

,
, ,


(, )


,
DATETIME. :



ANSI
CAST.
118


CAST ( AS )
CAST .

(date picture)
.

,
1999-12-31
31-DEC-99
1999-12-31 23:59:01.11

, , , ?
December 31, 1999
(: CAST( DATA 1999-12-31 AS Month dd, yyyy) ?)
Sybase SQL Server
yy

qq

mm

dd

dw

hh

mi

ss

Oracle
AM

D

DD

DDD

DAY
(MONDAY)
Day
(Monday)
Day
(monday)


SQL Server:
SELECT DATE_HIRE = DATENAME(MONTH,DATE_HIRE)
FROM EMPLOYEE_PAY_TBL;
:
119

DATE_HIRE
May
June
August
June
July
January
6 rows affected
TO_CHAR Oracle
SELECT DATE_HIRE, TO_CHAR(DATE_HIRE, Month dd, yyyy) HIRE
FROM EMPLOYEE_PAY_TBL;
:
DATE_HIRE
HIRE
23-MAY-89
May
23, 1989
17-JUN-90
June
17, 1990
14-AUG-94
August 14, 1994
28-JUN-97
June
28, 1997
22-JUL-96
July
22, 1996
14-JAN-91
January 14, 1991
6 rows selected.

Oracle:
SELECT HIRE, TO_DATE(HIRE, DD-MON-YY)
FROM EMPLOYEE_PAY_TBL;
:
HIRE
TO_DATE(
May
23, 1989
23-MAY-89
June
17, 1990
17-JUN-90
August 14, 1994
14-AUG-94
June
28, 1997
28-JUN-97
July
22, 1996
22-JUL-96
January 14, 1991
14-JAN-91
6 rows selected.


Jonciunea tabelelor n interogrile SQL
:
(jonciune) ;
;
;
120

;
;
(aliaselor) .


.
.
,
.
,
, .
(tipuri de jonciune)
:
(EQUIJOINS);
(NATURAL JOINS);
(NON-EQUIJOINS);
(OUTER JOINS);
(SELF JOINS).


SELECT FROM SQL,
. WHERE.
=, <, >, <>, <=, >=, !=, BETWEEN, LIKE NOT.
.

(jonciune dup egalitate joinul natural)


.
(INNER JOINT).
:
SELECT 1.1, 2.2,
FROM 1, 2 [, 3]
WHERE 1._ = 2._
121

[ AND 1._ = 3._ ];

SELECT EMPLOYEE_TBL.EMP_ID,
EMPLOYEE_PAY_TBL.DATE_HIRE
FROM EMPLOYEE_TBL,
EMPLOYEE_PAY_TBL
WHERE EMPLOYEE_TBL.EMP_ID = EMPLOYEE_PAY_TBL.EMP_ID;
SELECT EMPLOYEE_TBL.EMP_ID, EMPLOYEE_TBL.LAST_NAME,
EMPLOYEE_PAY_TBL.POSITION
FROM EMPLOYEE_TBL, EMPLOYEE_PAY_TBL
WHERE EMPLOYEE_TBL.EMP_ID = EMPLOYEE_PAY_TBL.EMP_ID;

.


SQL.
.
. SQL
.
.
:
SELECT E.EMP_ID, EP.SALARY, EP.DATE_HIRE, E.LAST_NAME
FROM EMPLOYEE_TBL E,
EMPLOYEE_PAY_TBL EP
WHERE E.EMP_ID = EP.EMP_ID
AND EP.SALARY > 20000;
.
(joinul natural)
,
.

SELECT 1.*, 2._


[ , 3._ ]
FROM 1, 2 [, 3]
122

WHERE 1._ = 2._


[ AND 1._ = 3._ ];

SELECT EMPLOYEE_TBL.*, EMPLOYEE_PAY_TBL.SALARY


FROM EMPLOYEE_TBL,
EMPLOYEE_PAY_TBL
WHERE EMPLOYEE_TBL.EMP_ID = EMPLOYEE_PAY_TBL.EMP_ID;
SELECT EMPLOYEE_TBL.*, EMPLOYEE_PAY_TBL.POSITION
FROM EMPLOYEE_TBL, EMPLOYEE_PAY_TBL
WHERE EMPLOYEE_TBL.EMP_ID = EMPLOYEE_PAY_TBL.EMP_ID;
.
,
.

(jonciune dup inegalitate)


(NON-EQUIJOINS)
.

SELECT 1.1, 2.2,


FROM 1, 2 [, 3]
WHERE 1._ != 2._
[ AND 1._ != 3._ ];

SELECT EMPLOYEE_TBL.EMP_ID,
EMPLOYEE_PAY_TBL.DATE_HIRE
FROM EMPLOYEE_TBL,
EMPLOYEE_PAY_TBL
WHERE EMPLOYEE_TBL.EMP_ID != EMPLOYEE_PAY_TBL.EMP_ID;
SELECT E.EMP_ID, E.LAST_NAME, EP.POSITION
FROM EMPLOYEE_TBL E,
EMPLOYEE_PAY_TBL EP
WHERE E.EMP_ID != EP.EMP_ID;
,
.
123

.
, .
, ,
.


(OUTER JOIN) ,
,
. ,
, ,
. ,
(+) WHERE.
(Oracle)
FROM 1, 2 [,3]
WHERE 1._ [(+)] = 2._[(+)]
[ AND 1._ [(+)] = 3._[(+)] ]
,
.

SELECT P.PROD_DESC PRODUCTS, O.QTY QUANTITY


FROM PRODUCTS_TBL P,
ORDER_TBL O
WHERE P.PROD_ID (+) = O.PROD_ID;

PRODUCTS

QUANTITY
.


(SELF JOIN) ,
.
SQL .

124

SELECT A._, B._ [ ,C._ ]


FROM A, B [, C]
WHERE A._ = B._
[ AND A._ = C._];
, EMP_TBL,

ID
1
2
3
4
5

NAME
JOHN
MARY
STEVE
JACK
SUE

MNGR_ID
0
1
1
2
2

, .

SELECT E1.NAME, E2.NAME MANAJER
FROM EMP_TBL E1, EMP_TBL E2
WHERE E1.MNGR_ID = E2.ID;

NAME
MARY
STEVE
JACK
SUE

MANAJER
JHON
JHON
MARY
MARY

,
, .


.
PROD_TBL

ORD_TBL

SERIAL_NUMBER
VENDOR_NUMBER
PRODUCT_NAME
COST

ORD_NO
SERIAL_NUMBER
VENDOR_NUMBER
QUANTITY
ORD_DATE

(PROD_TBL ORD_TBL)
:
SELECT P.PRODUCT_NAME, O.ORD_DATE, O.QUANTITY
FROM PROD_TBL P, ORD_TBL O
125

WHERE P.SERIAL_NUMBER = O.SERIAL_NUMBER


AND P.VENDOR_NUMBER = O.VENDOR_NUMBER;

,
, , .
.

CUSTOMER_TBL

ORDERS_TBL

PRODUCTS_TBL

CUST_ID
CUST_NAME

ORD_NUM
CUST_ID
PROD_ID
QTY
ORD_DATE

PROD_ID
PROD_DESC
COST

:
SELECT C.CUST_NAME, P.PROD_DESC
FROM CUSTOMER_TBL C,
PRODUCTS_TBL P
ORDER_TBL O
WHERE C.CUST_ID = O.CUST_ID
AND P.PROD_ID = O.PROD_ID;
(produsul cartezian)
(CARTESIAN JOIN)
.
- (CROSS JOIN).

FROM 1, 2 [,3]
WHERE 1, 2 [,3]

SELECT E.EMP_ID, E.LAST_NAME, P.POSITION


FROM EMPLOYEE_TBL E
EMPLOYEE_PAY_TBL P;

126

,
,
.
.
.
- ( ),
.

Jonciune tabelelor n compartimentele WHERE i FROM. Opiune INNER JOIN

SUBINTEROGRI N SQL

.
:
;
;
;
;
.
(subinterogare)
, WHERE
.
.
, ,
.

Subinterogare este o interogare care se conine n clauza WHERE a altei interogri. Cu


alte cuvinte este o interogare inclus. Se folosete pentru a formula restricii adiionale,
adesea ori mai compuse, n interogarea principal. La executarea interogrii cu
subinterogare n primul rnd se ndeplinete subinterogarea, apoi interogarea
principal. Rezultatele returnate de subinterogare se folosesc n predicatul interogrii
principale.
:
SELECT _
127

FROM
WHERE _ <> (SELECT _
FROM
WHERE );
WHERE,
HAVING .
=, <, >, >=, <=, <>, IN, NOT IN, AND, OR .. ,
WHERE HAVING.
SELECT, INSERT, UPDATE DELETE.
, , . ,
, .
:
;

SELECT, ,
;
ORDER BY ,
ORDER BY . ORDER BY
GROUP BY;
, ,
, , IN;
,
;
BETWEEN ,
.
BETWEEN
.
:
SELECT _
FROM
WHERE _ (SELECT _
FROM
WHERE _ BETWEEN );
:
SELECT _
FROM
WHERE _ BETWEEN AND
(SELECT _
FROM
WHERE _ BETWEEN );

Subinterogri n operatorul SELECT


SELECT
128

SELECT, , ,
.
:
SELECT _ [, _]
FROM 1 [, 2]
WHERE _ (SELECT _ [, _]
FROM 1 [, 2]
WHERE );
:
SELECT E.EMP_ID, E.LAST_NAME, E.FIRST_NAME, EP.PAY_RATE
FROM EMPLOYEE_TBL E, EMPLOYEE_PAY_TBL EP
WHERE E.EMP_ID = EP.EMP_ID
AND EP.PAY_RATE > (SELECT PAY_RATE
FROM EMPLOYEE_PAY_TBL
WHERE E.EMP_ID = 3137782439);
.

SELECT PAY_RATE
FROM EMPLOYEE_PAY_TBL E
WHERE E.EMP_ID = 3137782439);

PAY_RATE
11
:
AND EP.PAY_RATE > 11.
, ,
.

Subinterogri n operatorul INSERT


INSERT
INSERT , ,
.
, .
, INSERT INTO SELECT :
INSERT INTO _ [ (1 [, 2]) ]
SELECT [ * | 1 [ , 2 ] ]
FROM 1 [ ,2 ]
[ WHERE ];
INSERT :
129

INSERT INTO RICH_EMPLOYEES_TBL


SELECT E.EMP_ID, E.LAST_NAME, E.FIRST_NAME, EP.PAY_RATE
FROM EMPLOYEE_TBL E, EMPLOYEE_PAY_TBL EP
WHERE E.EMP_ID = EP.EMP_ID
AND EP.PAY_RATE > (SELECT PAY_RATE
FROM EMPLOYEE_PAY_TBL
WHERE E.EMP_ID = 220984332);
.
DML INSERT
COMMIT ROLLBACK.

Subinterogri n operatorul UPDATE


UPDATE
UPDATE ,
.
UPDATE :
UPDATE
SET _ [, _ ] =
(SELECT _ [, _]
FROM
[ WHERE ]);
, UPDATE .
:
SELECT EMP_ID
FROM EMPLOYEE_TBL
WHERE CITY = INDIANAPOLIS;
:
EMP_ID
442346889
313782439
220984332
443679012
4 rows selected.
UPDATE:
UPDATE EMPLOYEE_PAY_TBL
SET PAY_RATE = PAY_RATE * 1.1
WHERE EMP_ID IN (SELECT EMP_ID
FROM EMPLOYEE_TBL
WHERE CITY = INDIANAPOLIS);
130

:
4 rows updated.
IN,
!
. ,
, ,
, .

Subinterogri n operatorul DELETE


DELETE
DELETE
, .
:
DELETE FROM _
[ WHERE _ ]
( SELECT _
FROM _
[ WHERE ] );
:
DELETE FROM EMPLOYEE_PAY_TBL
WHERE EMP_ID = (SELECT EMP_ID
FROM EMPLOYEE_PAY_TBL
WHERE LAST_NAME = SMITH
AND FIRST_NAME = JOHN);
UPDATE DELETE WHERE.
, !

.

Subinterogri n opiunea FROM

131

FUNCII DE UTILIZATOR
11. :
, .
. SQL.

(De dat dup tema Proceduri??? Logica: Sintaxa funciei este puin mai complicat. n comparaie
cu proceduri funciile permit apel direct nu prin parametru intermediar)


SQL ,
,
. ,
, ..
,
.
Exemplu cu procedur:
12.6. .
, .
CREATE PROC my_proc6
@m INT,
@s FLOAT OUTPUT
AS
SELECT @s=Sum(.*.)
FROM INNER JOIN
ON .=.
GROUP BY Month(.)
HAVING Month(.)=@m

12.6. .
, .

:
DECLARE @st FLOAT
EXEC my_proc6 1,@st OUTPUT
SELECT @st
, (
1).
, .

.
MS SQL
Server 2000. SQL
,
: .
, ,
, .
.
SQL Server :

132

Scalar ,
, BEGIN...END;
Inline SELECT
TABLE;
Multi-statement
TABLE, ,
SQL (INSERT, UPDATE ..).
, .

(proceduri stocate), ,
, ,
. , ,
. SELECT,
,
.

Scalar
Funcii de tip Scalar
:
<__>::=
{CREATE | ALTER } FUNCTION [.]
_
( [ { @_ __
[=default]}[,...n]])
RETURNS __
[WITH {ENCRYPTION | SCHEMABINDING}
[,...n] ]
[AS]
BEGIN
<_>
RETURN _
END
.

.
"@". .
, (DEFAULT),

.
RETURNS __ ,
. ,
.
, ,
WITH. ENCRYPTION ,
, ,
. . ,
,
.
, ,
SCHEMABINDING.

133

BEGIN...END ,
.
RETURN,
,
RETURN. ,
RETURN, .
,
.
, RETURNS.
11.1.
, .
user1.
CREATE FUNCTION
user1.sales(@data DATETIME)
RETURNS INT
AS
BEGIN
DECLARE @c INT
SET @c=(SELECT SUM()
FROM
WHERE =@data)
RETURN (@c)
END

11.1. ,
.

.
, SELECT
.
.
: ,
02.11.01:
DECLARE @kol INT
SET @kol=user1.sales ('02.11.01')
SELECT @kol
(???)
SELECT user1.sales ('02.11.01')

Inline
Funcia Inline de tip TABLE
:
<__>::=
{CREATE | ALTER } FUNCTION [.]
_
( [ { @_ __
[=default]}[,...n]])
RETURNS TABLE
[ WITH {ENCRYPTION | SCHEMABINDING}
[,...n] ]
[AS]

134

RETURN [(] SELECT_ [)]


, ,
.
.
RETURNS TABLE.
, TABLE.
TABLE
.
TABLE , SELECT,
.
, TABLE
,
RETURNS.
TABLE
, .. FROM.
11.2.
.
CREATE FUNCTION user1.itog()
RETURNS TABLE
AS
RETURN (SELECT TOP 2 .
FROM INNER JOIN
ON .=.
ORDER BY . DESC)
11.2.
.


:
SELECT
FROM user1.itog()

Multi-statement
Funcii Multi-statement de tip TABLE
Multi-statement
:
<__>::=
{CREATE | ALTER }FUNCTION [.]
_
( [ { @_ __
[=default]}[,...n]])
RETURNS @_ TABLE
<_>
[WITH {ENCRYPTION | SCHEMABINDING}
[,...n] ]
[AS]
BEGIN
<_>
RETURN

135

END

.
, , , TABLE.
, , Multi-statement
.
TABLE , ,
. <_>
,
CREATE TABLE.
INSERT,
. ,
SQL, ,
. INSERT
, . Multi-statement,
, - TABLE
.
:
RETURN.
, RETURN .
TABLE,
RETURNS.
RETURN.
, RETURN.
,
RETURN.
11.3.
Exemplu 11.3. De creat funcia care ne returneaz dou tabele (dac permite permite aa ceva
versiunea SQL???) cu informaii despre furnizorii unui ora i despre mrfurile de un tip dat.
CREATE FUNCTION User1.FurnizoriMarfuri
(@Oras CHAR(30) = Chiinu, @MarfaTip CHR(25) = Cri)
RETURNS Rurnizor1 TABLE (Furn_id CHAR(6) NOT NULL PRIMARY KEY, Furn_nume CHR(30) NOT
NULL), Marfa1 TABLE (Marfa_id CHAR(5) NOT NULL Primary KEY, Marfa_nume CHAR(25) NOT
NULL)
AS
BEGIN
INSERT INTO Furnizor1
(Furn_id, Furn_nume)
SELECT FurnId, FurnName
FROM Furnizor
WHERE FurnCity = @Oras
INSERT INTO Marfa1
(Marfa_id, Marfa_nume)
SELECT MarfaId, MarfaNume
From Marfa
WHERE MarfaName = @Marfa
RETURN
END

136

Exemplu de apelare a acestei funcie:


User1.FurnizoriMarfuri(Cahul, Calculatoare)
11.4. ( multi-statement),
( ,
).
emp_mgr
:
CREATE TABLE emp_mgr
(emp CHAR(2) PRIMARY KEY,--
mgr CHAR(2))
--
emp_mgr .
.
(NULL).
emp
mgr
--------a
NULL
b
a
c
a
d
a
e
f
f
b
g
b
i
c
k
d
CREATE FUNCTION fn_findReports(@id_emp
CHAR(2))
RETURNS @report TABLE(empid CHAR(2)
PRIMARY KEY,
mgrid CHAR(2))
AS
BEGIN
DECLARE @r INT
DECLARE @t TABLE(empid CHAR(2)
PRIMARY KEY,
mgrid CHAR(2),
pr
INT DEFAULT 0)
INSERT @t SELECT emp,mgr,0
FROM emp_mgr
WHERE emp=@id_emp
SET @r=@@ROWCOUNT
WHILE @r>0
BEGIN
UPDATE @t
SET pr=1
WHERE pr=0
INSERT @t SELECT e.emp, e.mgr,0
FROM emp_mgr e, @t t
WHERE e.mgr=t.empid
AND t.pr=1
SET @r=@@ROWCOUNT
UPDATE @t SET pr=2 WHERE pr=1
END
INSERT @report SELECT empid, mgrid
FROM @t
RETURN
END

11.3. , .

137

b:
SELECT * FROM fn_findReports('b')
:
emp
mgr
----------b
a
e
f
f
b
g
b
a
SELECT * FROM fn_findReports('a')
emp
mgr
--------a
NULL
b
a
c
a
d
a
e
f
f
b
g
b
i
c
k
d
e:
SELECT * FROM fn_findReports('e')
emp
mgr
-------e
f
c :
SELECT * FROM fn_findReports('c')
emp
mgr
-------c
a
i
c
:
DROP FUNCTION {[ .] _ }
[,...n]


, SQL,
:

;
;
;

138

;
;
;
.


.
11.1.
ABS

ACOS

ASIN

ATAN


CEILING
COS

ATN2


DEGREES
EXP

COT

FLOOR

LOG

LOG10

PI

""


RADIANS
RAND

POWER

ROUND

SIGN

SIN

SQUARE

SQRT

TAN

SELECT ., .,
Round(.*.
*0.05,1)
AS
FROM INNER JOIN
ON .=
.
11.4. .


.
11.2.
ASCII

ASCII

CHAR

ASCII

CHARINDEX

139

DIFFERENCE
LEFT

LEN

LOWER

LTRIM

NCHAR

Unicode

PATINDEX

REPLACE

QUOTENAME

Unicode

REPLICATE

REVERSE

RIGHT

RTRIM

SOUNDEX

SPACE

STR

STUFF

SUBSTRING

Unicode-
UPPER

SELECT , []+""
+Left([],1)+"."
+Left([],1)
+"." AS
FROM
UNICODE

11.5. LEFT .


.
11.3.
, , ..
DATEDIFF
DATENAME
DATEPART
DATEADD

DAY

GETDATE

ISDATE

MONTH

YEAR

SELECT Year() AS , Month(])
AS ,
Sum() AS _
FROM
GROUP BY Year(), Month()

11.6. YEAR MONTH ,


.

DECLARE @d DATETIME
DECLARE @y INT
SET @d=29.10.03
SET @y=DATEPART(yy,@d)

140

SELECT @y

11.7. .

PROCEDURI STOCATE (MEMORATE)


12. : (proceduri stocate)
. ,
. .
.

Noiune de procedur stocat



SQL, ,
,
SQL. ,
SQL
.
SQL :

;
;
SQL Server
, ;
,
,
;
;
;
, ,
;
:
,
. ,
, , .

, ,
.

.

, .
, ,

.
,
,
:
.
, ,
.
, .

141

-
. ,
. ,
.
.
.

MS SQL Server
SQL Server ,
.
, .
,
, .

(tipuri de proceduri stocate)


SQL Server .

(proceduri stocate de sistem)


.
. ,
,
, , , ,
, ,
. sp_,

.

(proceduri stocate de utilizator)


. .

, .

(proceduri stocate temporale)


, .
(locale

i globale).
(din acea conexiune),
. ,
# (diez). ,
(automat se elimin de server)
, .
,
. ,
## (dublu diez).
, ,
.

,
(crearea, modificarea i eliminarea procedurilor stocate)
:

(definirea tipului) :
. ,

142

, sp_
.
;

(planificarea drepturilor de acces).


,
, ;

(definirea

parametrelor de ntrare i

ieire). ,

,
;

(elaborarea codului de program).


SQL,
.


:
<_>::=
{CREATE | ALTER } PROC[EDURE] _
[;]
[{@_ _ } [VARYING ]
[=default][OUTPUT] ][,...n]
[WITH { RECOMPILE | ENCRYPTION | RECOMPILE,
ENCRYPTION }]
[FOR REPLICATION]
AS
sql_ [...n]
.
sp_, #, ##,
. ,
, , ,
. ,
, CREATE PROCEDURE
.
, . .
. , ,
.
,
.
, ,
.

Pentru transmiterea parametrilor de ntrare i ieire n procedur


,
, , @
(aron). ,
. ,
.
,
, SQL, .
CURSOR
, .. OUTPUT.

143

OUTPUT ,
. ,
.
OUTPUT
,
. , OUTPUT

. ,
.
VARYING OUTPUT, CURSOR.
, .
DEFAULT ,
. ,
.
,
.
.
RECOMPILE
.
FOR REPLICATION
.
ENCRYPTION
, ,
.
AS , ..
SQL, .
SQL, ,
.
RETURN.
:
DROP PROCEDURE {_} [,...n]


:
[[ EXEC [ UTE] _ [;]
[[@_=]{ | @_}
[OUTPUT ]|[DEFAULT ]][,...n]
,
EXECUTE . ,
.
OUTPUT
, OUTPUT.

144

DEFAULT,
. , DEFAULT
, .
EXECUTE ,
.
, .
,
. ,
, .
,
.
, ,
. .
12.1. .
, .
CREATE PROC my_proc1
AS
SELECT .,
.*.
AS , .
FROM INNER JOIN
( INNER JOIN
ON .=.)
ON .=.
WHERE .=

12.1. , .

:
EXEC my_proc1 my_proc1
.
12.2. .
10%.
CREATE PROC my_proc2
AS
UPDATE SET =*0.9
WHERE =

12.2. 10%.

:
EXEC my_proc2 my_proc2
.
12.3. .
, .
CREATE PROC my_proc3
@k VARCHAR(20)
AS
SELECT .,

145

.*.
AS , .
FROM INNER JOIN
( INNER JOIN
ON .=.)
ON .=.
WHERE .=@k

12.3. , .

:
EXEC my_proc3 ''
my_proc3 @k=''
12.4. .
%.
CREATE PROC my_proc4
@t VARCHAR(20), @p FLOAT
AS
UPDATE SET =*(1-@p)
WHERE =@t
12.4. %.

:
EXEC my_proc4 '',0.05
EXEC my_proc4 @t='', @p=0.05
12.5. .
%.
CREATE PROC my_proc5
@t VARCHAR(20)=',
@p FLOAT=0.1
AS
UPDATE SET =*(1-@p)
WHERE =@t
12.5. .
%.

:
EXEC my_proc5 '',0.05
EXEC my_proc5 @t='', @p=0.05
EXEC my_proc5 @p=0.05
(
).
EXEC my_proc5
( , ) ,
.
12.6. .
, .
CREATE PROC my_proc6
@m INT,

146

@s FLOAT OUTPUT
AS
SELECT @s=Sum(.*.)
FROM INNER JOIN
ON .=.
GROUP BY Month(.)
HAVING Month(.)=@m

12.6. .
, .

:
DECLARE @st FLOAT
EXEC my_proc6 1,@st OUTPUT
SELECT @st
, (
1).
, ,
.
, .
CREATE PROC my_proc7
@n VARCHAR(20),
@f VARCHAR(20) OUTPUT
AS
SELECT @f=
FROM
WHERE =@n
12.7. .
, ,
.
, ,
.
CREATE PROC my_proc8
@fam VARCHAR(20),
@kol INT OUTPUT
AS
DECLARE @firm VARCHAR(20)
EXEC my_proc7 @fam,@firm OUTPUT
SELECT @kol=Sum(.)
FROM INNER JOIN
ON .=.
GROUP BY .
HAVING .=@firm

12.7. , ,
.

:
DECLARE @k INT
EXEC my_proc8 ,@k OUTPUT
SELECT @k

147

Gestiunea tranzaciilor

Introducere
,
.
,
. DML (INSERT, UPDATE,
DELETE).
DML .

.
,
, .
, :
;
, ;
,
.
- .

(, , ,
), :
, ,
, .
. ,
.

.
.
,

. , ..
, ,
. .
.
.

148

,
.

, . ,
, ACID,
.

ACID-
Proprietile ACID a tranzaciilor
ACID atomicitate (indivizibilitate), consisten (concordan logic),
izolare (independen de alte tranzacii), durabilitate (modificrile
generate de tranzacie corect devin durabile)
ACID (Atomicity, Consistency, Isolation,
Durability , , , ).

(este atomic) ,
. , .
. , .

(este consistent),
- .
- ,
.
,
.

(este izolat),
.
,
.

(este durabil).
, ( )
, .. , ,
.
.

.
, -.

. , ,
.
, ..
.

.

1.1.

Gestiunea tranzaciilor ( )


, . ,

149

INSERT, UPDATE DELETE. ,


( CREATE TABLE) :
.
DROP TABLE .
, ,
.
,
, ,
.
, :

COMMIT (salvarea fizica a modificrilor);


ROLLBACK (abandonarea modificrilor, derularea napoi la

starea care era la nceputul tranzacei);

SAVEPOINT (setarea punctelor intermediare

de derulare napoi, punctelor de salvare).



,
, .
, ,
.
COMMIT (salvarea) ,
. ,
COMMIT ROLLBACK.
ROLLBACK (abandonarea),
. ,
COMMIT ROLLBACK.
SAVEPOINT ( punctul de salvare)
, (
). :

SAVEPOINT <punct_salvare_nume> (__)


,
.
.
, ,
ROLLBACK :

ROLLBACK TO <punct_salvare_nume> (__)


SAVEPOINT
,
.

..
150

Instruciunile de gestiune a tranzaciilor se folosesc numai cu comenzile DML INSERT,


UPDATE DELETE.
DML INSERT, UPDATE
DELETE. , ,
,
.
,
,
.

() ,
.
, .

, , .

.

ROLLBACK
K
COMMIT

. 2. .

Instruciunea COMMIT
151

(salveaz toate modificrile prevzute de tranzacie ) ,


COMMIT,
ROLLBACK.

COMMIT [WORK];
WORK
.
:
PRODUCTS_TMP.
.
SELECT * FROM PRODUCTS_TMP;
PROD_ID

PROD_DESCR

COST

11235
222
90
1234
15
13
119
455

7.75
12.50
59.99
8.27
29.99
6.87
35.40
14.30

8 records selected.
DELETE FROM PRODUCTS_TMP
WHERE COST < 15;
5 records deleted.
COMMIT;
SELECT * FROM PRODUCTS_TMP;
PROD_ID

PROD_DESCR

COST

90
15
119

59.99
29.99
35.40

3 records selected.

COMMIT ,
.

Instruciunea ROLLBACK
152

Instruciunea de derulare napoi. Abandoneaz toate modificrile prevzute de


tranzacie i deruleaz napoi starea bazei de date la acea care era la nceputul
tranzaciei.
,
COMMIT ROLLBACK.
Sintaxa
ROLLBACK [WORK];
COMMIT, WORK (opiunea WORK
nu este obligatorie).
:
SELECT * FROM PRODUCTS_TMP;
PROD_ID

PROD_DESCR

COST

90
15
119

59.99
29.99
35.40

3 records selected.
UPDATE PRODUCTS_TMP
SET COST = 39.99
WHERE PROD_ID = 15;
1 record updated.
, :
SELECT * FROM PRODUCTS_TMP;
PROD_ID

PROD_DESCR

COST

90
15
119

59.99
39.99
35.40

3 records selected.

ROLLBACK;

SELECT * FROM PRODUCTS_TMP;
PROD_ID

PROD_DESCR

COST
153

90
15
119

59.99
29.99
35.40

3 records selected.
.
6.2. Puncte de ntoarcere (salvare) SAVEPOINT SAVEPOINT
, ,
. ROLLBACK.

SAVEPOINT <__ >;


.
ROLLBACK TO SAVEPOINT
.

ROLLBACK TO < __ >;


__

SELECT * FROM PRODUCTS_TMP;


PROD_ID

PROD_DESCR

COST

90
15
119

59.99
29.99
35.40

3 records selected.
SAVEPOINT SP1;
DELETE FROM PRODUCTS_TMP WHERE PROD_ID = 119;
1 record deleted.
SAVEPOINT SP2;
DELETE FROM PRODUCTS_TMP WHERE PROD_ID = 90;
1 record deleted.
154

SAVEPOINT SP3;
DELETE FROM PRODUCTS_TMP WHERE PROD_ID = 15;
1record deleted.
:
ROLLBACK SP2;
SELECT * FROM PRODUCTS_TMP;
PROD_ID

PROD_DESCR

COST

90
15

59.99
29.99

2 records selected.
( COMMIT)
( ROLLBACK):
ROLLBACK;
SELECT * FROM PRODUCT_TMP;
PROD_ID

PROD_DESCR

COST

90
15
119

59.99
29.99
35.40

3 records selected.

RELEASE SAVEPOINT
.

RELEASE SAVEPOINT < __>;



. ,
155

.
, ,
COMMIT ROLLBACK.
, 5000
10000 , ,
.
, ,
.

156

TRIGGERE (DECLANATOARE) N SQL


http://www.intuit.ru/department/database/sql/14/
14. : :
, ,
. . ,
, .
.

SQL
.
- (DML).
, .
SQL-,
.
.
/. ,
( )
,
.
SQL-,
. ,
.
, .
, ,
. ,
,
..
,
, .
.
.
.
. , .
.
, ..
. ,
,
.
,
, .
.
:

, , ,
, ;
,
, ;

157


, ;
.

CREATE TRIGGER :
<_>::=
CREATE TRIGGER _
BEFORE | AFTER <_>
ON <_>
[REFERENCING
<____>]
[FOR EACH { ROW | STATEMENT}]
[WHEN(_)]
<_>

, .
.
BEFORE (
) AFTER ( ).
(FOR EACH ROW),
, (FOR EACH STATEMENT).
<____> ,
(OLD / NEW) (OLD TABLE / NEW
TABLE). , ,
.
.
,
.
.
:
:
, ;
:

.
, , , ,
,
, ;
:

.
,
. ,
, .
, , ,
"" .
,
.

MS SQL Server
MS SQL Server
:
158

<_>::=
{CREATE | ALTER} TRIGGER _
ON {_ | _ }
[WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF }
{ [ DELETE] [,] [ INSERT] [,] [ UPDATE] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
sql_[...n]
} |
{ {FOR | AFTER | INSTEAD OF } { [INSERT] [,]
[UPDATE] }
[ WITH APPEND]
[ NOT FOR REPLICATION]
AS
{ IF UPDATE(_)
[ {AND | OR} UPDATE(_)] [...n]
|
IF (COLUMNS_UPDATES(){__}
__)
{__ }_ [...n]}
sql_ [...n]
}
}

,
, .
CREATE | ALTER TRIGGER.
.
.
WITH ENCRYPTION ,
, , .
,
.


SQL Server , :
AFTER. .
- ,
. ,
:
, .
AFTER- (INSERT, UPDATE,
DELETE). AFTER-,
sp_settriggerorder ,
, . SQL Server
AFTER-.
INSTEAD OF. . AFTER INSTEAD OF- ,
. INSERT, UPDATE, DELETE
INSTEAD OF-.
, .
:
INSERT TRIGGER
INSERT.
159

UPDATE TRIGGER
UPDATE.
DELETE TRIGGER
DELETE.

[ DELETE] [,] [ INSERT] [,] [ UPDATE] FOR | AFTER | INSTEAD OF }


{ [INSERT] [,] [UPDATE] , .
. ,
.
WITH APPEND .
NOT FOR REPLICATION
.
AS sql_[...n] SQL- ,
.
, , , , :
, ;
.
,
, . -
. , ,
,
.


,
: inserted deleted. ,
. inserted deleted
, .
inserted deleted,
. , ,
inserted deleted :
INSERT inserted ,
; deleted ;
inserted ;
DELETE deleted ,
;
, ; inserted ;
UPDATE deleted
, .
inserted.
.
,
, @@ROWCOUNT;
, . ,
,
. ,
.
, 100 ,
, ,
160

.
, .
,
. ,

, ,
ROLLBACK TRANSACTION.
, INSERT UPDATE,
, COLUMNS_UPDATED().
, , ,
( ).
"1", . ,
UPDATE (_).

DROP TRIGGER {_} [,...n]

.
Exemplu 14.1. .
(Afaceri)
, (Depozit).
Fie schema tebelelor Afaceri, Depozit i Marfa sunt:
Afaceri(AfacereNumar, MarfaId, Cantitate, Data),
Depozit(OrdNum, MarfaId, FurnId, CantitateRest, Pret),
Marfa(MarfaId, MarfaNume, UnitMasura, Producator).
Cantitatea n coloana Cantitate a tabelului Afaceri se ea cu semnu + pentru operaii de cumprare i
cu semnul -pentru operaii de vnzare
O instrucie de nserare a unei nregistrri n tabela Afaceri poate fi n form:
INSERT INTO Afaceri
VALUES (1,3,-299,'01/08/2002')

:
,
( =3).
"+", ,
"-", .
.
CREATE TRIGGER Trig_Ins
ON Afaceri FOR INSERT
AS
IF @@ROWCOUNT=1 - s-a nserat o nregistrare
BEGIN
IF NOT EXISTS(SELECT *
FROM inserted
WHERE -inserted.<=ALL(SELECT
Depozit.CantitateRest
FROM Depozit,Afaceri
WHERE Depozit.MarfaId = Afaceri.MarfaId))
BEGIN
ROLLBACK TRAN
PRINT
'Afacere abandonat: marfa n depozit nu este'
END
END

161

Exemplu 14.2. Afaceri,


, :
DELETE FROM Afaceri WHERE AfacereNumar=4

, ,
. .
CREATE TRIGGER Trig_del
ON Afacere FOR DELETE
AS
IF @@ROWCOUNT=1 s-a eliminat o nregistrare
BEGIN
DECLARE @y INT,@x INT
--se determin codul i cantitatea mrfii eliminat din tabela Afaceri
SELECT @y=MarfaId, @x=Cantitate
FROM deleted
--n tabela Depozit se corecteaz cantitatea de marf rmas
UPDATE Depozit
SET CantitateRest = CantitateRest-@x
WHERE MarfaId=@y
END

Exemplu 14.3. .
, ,
:
INSERT INTO
VALUES (3,1,200,'01/08/2002')

3 1 200 .

. ,
.
.
ALTER TRIGGER _ins
ON FOR INSERT
AS
DECLARE @x INT, @y INT
IF @@ROWCOUNT=1
--
--
BEGIN
--
--,
IF NOT EXISTS(SELECT *
FROM inserted
WHERE -inserted.<
=ALL(SELECT .
FROM ,
WHERE .=
.))
BEGIN
ROLLBACK TRAN
PRINT ' '
END
-- ,
--
--
IF NOT EXISTS ( SELECT *

162

FROM , inserted i
WHERE .=i. )
INSERT INTO (,)

ELSE
--
--,
--
BEGIN
SELECT @y=i., @x=i.
FROM , inserted i
WHERE .=i.
--
--
UPDATE
SET =+@x
WHERE =@y
END
END

14.2. . (html, txt)


14.4. ,
, :
UPDATE SET =-10
WHERE =3

, , 3, 10
.
.
, , .
( )
( ) (
) ( )
. , ,
( deleted) ( inserted).
CREATE TRIGGER _upd
ON FOR UPDATE
AS
DECLARE @x INT, @x_old INT, @y INT, @y_old INT
--
DECLARE CUR1 CURSOR FOR
SELECT ,
FROM inserted
--
DECLARE CUR2 CURSOR FOR
SELECT ,
FROM deleted
OPEN CUR1
OPEN CUR2
--
FETCH NEXT FROM CUR1 INTO @x, @y
FETCH NEXT FROM CUR2 INTO @x_old, @y_old
WHILE @@FETCH_STATUS=0
BEGIN
--
--
UPDATE
SET =-@y_old
WHERE =@x_old
-- ,
-- ,
IF NOT EXISTS (SELECT * FROM
WHERE =@x)
INSERT INTO (,)

163

VALUES (@x,@y)
ELSE
--
--
UPDATE
SET =+@y
WHERE =@x
FETCH NEXT FROM CUR1 INTO @x, @y
FETCH NEXT FROM CUR2 INTO @x_old, @y_old
END
CLOSE CUR1
CLOSE CUR2
DEALLOCATE CUR1
DEALLOCATE CUR2

14.4. (html, txt)



.
14.5. .
MS SQL Server RAISERROR,
, .
ALTER TRIGGER _upd
ON FOR UPDATE
AS
DECLARE @x INT, @x_old INT, @y INT,
@y_old INT ,@o INT
DECLARE CUR1 CURSOR FOR
SELECT ,
FROM inserted
DECLARE CUR2 CURSOR FOR
SELECT ,
FROM deleted
OPEN CUR1
OPEN CUR2
FETCH NEXT FROM CUR1 INTO @x, @y
FETCH NEXT FROM CUR2 INTO @x_old, @y_old
WHILE @@FETCH_STATUS=0
BEGIN
SELECT @o=
FROM
WHERE =@x
IF @o<-@y
BEGIN
RAISERROR('',16,10)
CLOSE CUR1
CLOSE CUR2
DEALLOCATE CUR1
DEALLOCATE CUR22
ROLLBACK TRAN
RETURN
END
UPDATE
SET =-@y_old
WHERE =@x_old
IF NOT EXISTS (SELECT * FROM
WHERE =@x)
INSERT INTO (,)
VALUES (@x,@y)
ELSE
UPDATE
SET =+@y
WHERE =@x
FETCH NEXT FROM CUR1 INTO @x, @y

164

FETCH NEXT FROM CUR2 INTO @x_old, @y_old


END
CLOSE CUR1
CLOSE CUR2
DEALLOCATE CUR1
DEALLOCATE CUR2

14.5.
(html, txt)
14.6. 14.5
. ,
.
, .
ALTER TRIGGER _upd
ON INSTEAD OF UPDATE
AS
DECLARE @k INT, @k_old INT
DECLARE @x INT, @x_old INT, @y INT
DECLARE @y_old INT ,@o INT
DECLARE CUR1 CURSOR FOR
SELECT , ,
FROM inserted
DECLARE CUR2 CURSOR FOR
SELECT , ,
FROM deleted
OPEN CUR1
OPEN CUR2
FETCH NEXT FROM CUR1 INTO @k,@x, @y
FETCH NEXT FROM CUR2 INTO @k_old,@x_old,
@y_old
WHILE @@FETCH_STATUS=0
BEGIN
SELECT @o=
FROM
WHERE =@x
IF @o>=-@y
BEGIN
RAISERROR('',16,10)
UPDATE SET =@y,
=@x
WHERE =@k
UPDATE
SET =-@y_old
WHERE =@x_old
IF NOT EXISTS (SELECT * FROM
WHERE =@x)
INSERT INTO (, )
VALUES (@x,@y)
ELSE
UPDATE
SET =+@y
WHERE =@x
END
ELSE
RAISERROR(' ',16,10)
FETCH NEXT FROM CUR1 INTO @k,@x, @y
FETCH NEXT FROM CUR2 INTO @k_old,@x_old,
@y_old

END
CLOSE CUR1
CLOSE CUR2

165

DEALLOCATE CUR1
DEALLOCATE CUR2

14.6. ,
. (html, txt)

166


:
, -
?
:
create trigger tr on tbl
for update
as
set nocount on
--
update t set col_n = 'Qu!'
from tbl t join
inserted i on t.id = i.id join
--,
id tbl -
deleted d on t.id = d.id
and i.CheckColumn <> d.CheckColumn --

-- col_n - tbl,
" "
GO
:
, , Null ,
.
: ,
, .. ?
1:
, , rowversion (
timestamp),
( /).
2:
UPDATE(column_name)
COLUMNS_UPDATED().

update TBL set Col1 = Col1
UPDATE(Col1) , , , ,
UPDATE.
1024 .
83

CREATE FUNCTION fn_colupd(@tblname sysname, @idx varbinary(128) )


RETURNS @RS TABLE (name sysname)
BEGIN
declare @tbl table (colid int)

167

declare @ln int, @b binary(1), @i int, @j int, @shift int


set @ln = LEN(@idx)
set @i = 1
while (@ln >= @i)
begin
set @b = substring(@idx,@i,1)
set @j = 1
while( @j <= 8 )
begin
set @shift = power(2, @j-1)
if ( @b & @shift ) = @shift
begin
insert into @tbl (colid) values ((@i-1) * 8 + @j)
end
set @j = @j + 1
end
set @i = @i+1
end
insert into @RS
select name from syscolumns b where b.id= object_id(@tblname) and b.colid in
(select colid from @tbl)
RETURN
END
GO
--
declare @idx varbinary(128)
set @idx = 0x2000220040000000010101
select * from fn_colupd('userconfig', @idx )

--
CREATE TRIGGER dbo.ttt ON UserConfig FOR UPDATE
AS
BEGIN
declare @idx varbinary(128)
set @idx = columns_updated()
select * from fn_colupd('userconfig', @idx)
END

168


1.2.

ARHITECTURA SISTEMELOR DE BAZE DE DATE.


BAZE DE DATE DISTRIBUITE

1.1. Tehnologia client/server n arhitectura SGBD


1.2. Arhitectura sistemelor de baze de date
1.3. Componentele sistemelor de baze de date. Serverul de baze de date
1.4. Prelucrarea distribuit a datelor
Sistemele de gestiune a bazelor de date (n limba englez "Database Management
System" DBMS) SGDB reprezint totalitatea programelor utilizate pentru crearea,
interogarea i ntreinerea unei baze de date. Include dou categorii de module: module
care sunt comune cu cele ale sistemelor de operare ale calculatoarelor i module cu
funcii specifice bazei de date.
1.3. Tehnologia client/server n arhitectura SGBD (de refcut mai succint, mai
concret alea Landau)

(acces comun i centralizat) .

/. (Realizarea acestei problem n deplina msur este posibil numai pe
baza arhitecturii de reea i tehnologiei client/server)

(Partajabilitatea datelor presupune utilizarea
datelor de mai multe aplicaii ce efectueaz operaii asupra bazelor de date.).

, . Partagarea
resurselor presupune divizarea sistemului pe componente, care ndeplinesc funcii
diferite i care sunt amplasate pe noduri (calculatoare) diferite n reea (Fig. 1.1).
Arhitectura sistemului de baz de date din punct de vedere a amplasarei spaiale a
componentelor poate fi de dou tipuri:
baze de date centralizate (de birou, amplasate pe o main);
baze de date distribuite o reea de baze de date.
Pot fi evedeniate urmtoarele componente fizice:
staii terminale (staii de lucru);
partea client al SGBD;
partea server al SGBD;
baza de date fizic.
169

Tehnologia client/server n sisteme de baze de date


Din punct de vedere logic componentele sistemului de baze de date se afl n relaii de
U1

U5

U6

U4

Server
BD1

Server
BD2

U2
U12
U3
Server
BD3
U11

U7

U9

U8
U10

Fig. 1.1. Topologia reelei de calcul cu componentele de


client i server de baz de date amplasate n n noduri.

tip client/server. Client/server este o tehnologie care a schimbat fundamental modul de


abordare a aplicaiilor cu baze de date. Aceast tehnologie se bazeaz pe modelul
fundamental de interaciune dintre componentele constituiente a unui sistem modelul
client/server. Clientul i serverul nu neaparat s fie careva componente fizice ele pot
fi tratate n general ca componente logice. n acest model clientul este definit ca un
solicitant de servicii, iar server-ul este definit ca un furnizor de servicii. Clientul i
server-ul comunic prin schimb de mesaje, care se transmit prin liniile de reea.
Funciile care le ndeplinesc clientul i serverul trebuie se nu depind de aceea unde este
amplasat clientul pe aceeai main sau pe alta, fie din reeaua local sau din fundurile
Internet-ului. Transmiterea mesajelor este funcia softului de sistem, anume a
componentului de telecomunicaie.
n arhitectura client/server clientul se caracterizeaz prin faptul c:
Prezint o interfa utilizator, de obicei grafic (GUI);
formuleaz interogri sau comenzi pe care le adreseaz server-ului;
transmite interogrile/comenzile respective server-ului prin intermediu unei
tehnologii de comunicaie;
analizeaz datele din rezultatele interogrilor/comenzilor primite de la server.
La rndul su serverul se caracterizeaz prin faptul c:
furnizeaz un serviciu clientului;
rspunde la interogrile/comenzile clientului;
170

ascunde detaliile sistemului client/server, fcnd transparent dialogul dintre client


i server.
Avantajele principale al arhitecturei client/server sunt:
minimizarea volumelor de date, care circul prin reelile de comunicaie;
prelucrarea paralel al datelor de mai multe procesoare;
maina server poate fi o main specializat cu o productivitate deosebit;
maina client poate fi mai bine adaptat la cerinele utilizatorului asigurndul cu o
interfa grafic mai avansat;
corespunde structurei de organizare ale multor ntrepinderi.
Serverele pot fi calculatoare personale sau sisteme de calcul specializate
(minicalculatoare, mainframe-uri) n vederea asigurrii legturii dintre clieni i bazele
de date din care se extrag informaiile dorite. Scopul principal este autonomia
utilizatorului (angajatului).
"-"
,

. , "", ,
, ,
.
Se poate spune c arhitectura sistemului de baz de date se proiecteaz pe structura
(topologia) reelei de calcul.
Istoric vorbind, evoluia tehnologic de la sisteme de baze de date centralizate spre
client/server a trecut printr-o etap intermediar numit arhitectura file/server.
Aceast arhitectur const n schimb cu fiiere prin liniile de reea (exemplu FoxPro).
Dezavantajul ei principal circulaia volumelor mari de date prin liniile de comunicaie.
n tehnologia client/server sistemul (informaional, de calcul) se divizeaz n dou
pri... ,
, - .
,
.
.
" " ,
"-", ,
.
.
,
171

,
.

.

SQL. SQL
.
( ).
SQL
. SQL-
, SQL.
, ,
SQL-.

( ).
1.4. Prelucrarea distribuit a datelor
Cum s-a spus mai sus, arhitectura sistemului de baze de date distribuit se bazeaz pe
structura sistemului distribuit de calcul folosind tehnologia client/server de interaciune
ntre componentele constituiente. Cu privire la baze de date arhitectura client/server
poate fi realizat n trei structuri care determin trei categorii de prelucrare al datelor:
o baz de date centralizat n arhitectura client/server. Mai muli clieni sunt
deservii de un server;
prelucrare cooperativ. Datele unei aplicaie sunt mprtiate pe diferite sisteme
(servere). Clientul are acces la oricare server (Fig. 1.1) dar n unul i acelai
moment de timp poate se adreseze interogarea numai la un server. n aceast
modalitate el nu poate obine combinaii de date din mai multe tabele. Plus la
aceasta el trebuie s tie pe care server se gsesc datele cerute;
prelucrare distribuit. Aplicaia (datele i componentele de gestiune) este
mprtiat pe mai multe sisteme care ruleaz simultan. Fiecare main poate se
joace rolul ct al clientului, att i al serverului. Cu alte cuvinte fiecare main
asigur funcionarea unui sistem de baze de date deplin. Clientul are acces la
oricare server simultan i n unul i acelai moment de timp poate se adreseze
interogri la oricare server. Poate se obin combinaii de date din mai multe
tabele i nu trebuie neaprat s tie unde se gsesc acestea date.
Ultimul din enumerate mai sus sisteme este un adevrat sistem de baze de date
distribuite. n acest sistem datele sunt transparente fa de aplicaii i pot fi memorate pe

172

Server BD1

U1
U2

Un

Server
de
aplicaii

Server BD2

Server BDm

Fig. 1.2. Arhitectura distribuit cu server de aplicaii.

diferite platforme cu diferite sisteme de operare. Din acest punct de vedere sunt posibile
sisteme de baze de date distribuite omogene i eterogene.
(omogene i eterogene)
.
.
.
- , .
, ,
(Fig. 1.2) .
, SQL- . ,
SQL
.
Din acest punct de vedere o baz de date distribuit este o baz de date controlat de
un SGBD cu arhitectura distribuit, n care dispozitivele de stocare a datelor sunt ataate
n mod distribuit la mai multe calculatoare. Aceste calculatoare pot ori s se afle fizic n
aceeai locaie (sal, cldire etc.), ori s fie dipersate ntr-o reea de calculatoare
interconectate.
Poriunea unei baze de date distribuite ataat la unul singur dintre calculatoarele
involvate este numit partiie sau fragment. Fiecare partiie a unei baze de date
distribuite se poate replica (duplica) identic ntr-o alt locaie, deci n alt calculator din
reea, cu scopul mririi siguranei n funcionare (fiabilitii). Pe baza acestei structuri
redundante, eventualele greeli/defecte n funcionare se pot de multe ori repara "n
zbor", deci fr ntreruperea funcionrii, similar ntr-o oarecare msur cu principiul
matricilor cu discuri hard multiple de tip RAID.
n afar de fragmentare i replicare, pentru bazele de date distribuite exist multe alte
modele. Aa de exemplu, autonomia local, de asemenea tehnologiile sincrone i
asincrone. Alegerea unei anumite baze de date distribuite i implementarea ei concret
depind de:
173

nevoile ntreprinderii,
confidenialitatea care trebuie garantat datelor din baza de date,
gradul necesar de securitate, consisten i integritate a datelor,
precum i de suma pe care compania este dispus s o investeasc.

Arhitectura de baz
Un server de baze de date este software-ul care administreaz baza de date; un client de
baze de date este o aplicaie care cere servicii de la server, de exemplu transmite date la,
sau cere date de la baza de date. De obicei pentru un server i baza de date
corespunztoare exist concomitent mai muli clieni. Fiecare calculator din reeaua de
calculatoare a bazei de date distribuite se numete un nod. Un nod al sistemului unei
baze de date distribuite se poate comporta drept server, drept client, sau chiar drept
ambele, n funcie de situaie.
Un tip important de baze de date distribuite sunt bazele de date distribuite relationale,
conduse de un Relational Data Base Management System (RDBMS). n cadrul acestor
baze de date avem:
Fragmente orizontale subseturi de tupluri (nregistrri) dintr-o relaie (tabel).
Fragmente verticale subseturi de atribute (coloane) dintr-o relaie (tabel).
Fragmente mixte un fragment care este fragmentat att orizontal, ct i vertical.
Baz de date ditribuit omogen folosete un SGBD (exemplu: Oracle).
Baz de date distribuit eterogen folosete mai multe SGBD (exemple: Oracle ; MySql; PostgreSQL).
Utilizatorii acceseaz baza de date distribuit prin:
Aplicaii locale (aplicaii care nu necesit date de pe alte situri), sau
Aplicaii globale (aplicaii care au nevoie de date de pe alte situri).

Lecia ?. Modele de date Entitate-Asociere i Entitate-Relaie


Dou tehnologii de proiectare a BD
Proiectare bottom-up proiectare de jos n sus. Iniial se pornete de la o colecie
de scheme de relaii independente i de dependene funcionale i multivalente. Prin
algoritmi de normalizare consecutiv aceste scheme se aduc la o schem unic
normalizat a bazei de date. Pot fi utilizate axiomele de deduci lui Armstrong.
ntrunete dificulti n cazul bazelor de date complexe.

174

Proiectare top-down proiectare de sus n jos. Se pornete de la sensul datelor. n


baza unei analize detaliat a domeniului din lumea real se realizeaz proiectarea
conceptual a bazei de date care se rezult n modelul Entitate-Relaie. Modelul
Entitate-Relaie poate fi realizat (i este recomandabil) folosind instrumente de
modelare susinut de calculator CASE.

1. Modelare Entitate-Asociere (EA)*)


2. Modelare Entitate-Relaie (ER)
3. Exemplu de proiectare. Baza de date DEPOZIT
*)

Radulescu Florin Modelul Entitate-Asociere clasic


http://scad.cs.pub.ro/pc1/erclasic.pdf
Odat ce este creat proiectul bazei de date s trece la proiectarea fizic se creaz baza
de date fizic folosind mediul unui SGBD concret. Aici se creaz obiectele de
structur a bazei de date i se elaboreaz codul de program pentru prelucrarea
datelor i meninerea integritii i consistenei datelor.

175

Dou probleme:
Am un "nepotel" care n-a prea data la scoala si acum tb sa faca aceste teme ca sa treaca un examen.
As dori sa stiu cat ar costa realizarea lor. Nu prea e educativ ceea ce fac, dar ca sa am liniste in familie
a trebuit sa promit ca ma implic in salvarea naravasului.
Multumesc
Tema 1 (pentru cei care nu au avut punctaj sufficient la laborator):
Sa se creeze o aplicatie windows forms care sa permita gestiunea cd-urilor.
1. fiecare CD se presupune a avea o eticheta unica, dupa care se face identificarea
2. se pot crea categorii care contin: fisiere, directoare sau alte subcategorii (figurativ, ele trebuie sa se
deosebeasca)
3. Daca se asociaza un director cu o categorie, atunci numele tuturor fisierelor cu o extensii specificate
(ex: pdf, chm, doc) vor fi trecute in baza de date (continutul va fi scanat recursiv)
4. Sa permita: alegerea unui cd din BD (CD-ul nu trebuie sa fie introdus in unitate), afisarea
categoriilor corespunzatoare acelui cd, afisarea continutului pentru fiecare categorie, modificarea
acestor asocieri
5. Aditional pt punctual 4: daca cd-ul corespunzator este in unitate (fapt confirmat de catre utilizator),
atunci se poate completa lista de categorii si fisiere (se poate continua editarea continutului din BD)
6. Sa se poata face vizualizarea continutului CD-urilor salvat in BD (fara cd in unitate): categorii,
directoare asociate, fisiere, etc, sub forma arborescenta.
7. Cautare (fara ca in unitate sa avem CD) dupa urmatoarele criterii:
a. nume de categorie: sa apara in forma arborescenta cd-urile pe care am definite aceste categorii,
directoarele/fisierele cu calea si numele complet
b. nume de fisier sau director, sau doar parte din numele sau (ex: curs*.pdf sau *security*.*)
c. nume de categorie + nume de fisier si director; ex categoria = securitate iar nume de fisier =
*java*.*
Baza de date va fi Microsoft SQL Server 2005. Se puncteaza realizarea unei interfete utilizator
intuitive.

Tema 2 biblioteca
Sa se creeze o aplicatie de tip Windows Forms in C# care sa permita gestionarea activitatii unei
biblioteci. Trebuie sa se permita urmatoarele:
1. Adaugarea de carti (1 sau mai multe exemplare) impreuna cu autorii lor, stabilirea statutului cartilor
imprumutabile sau doar la sala de lectura; o carte poate avea mai multi autori, un autor poate scrie
mai multe carti
2. Adaugarea cititorilor, modificarea datelor acestora
3. Efectuarea de imprumuturi si returnari de carti; un cititor poate sa posede la un mom dat nu mai
mult de 3 carti, perioada lor de detinere nu mai mare de 1 luna
4. Lista cu: cititorii restantieri (impreuna cu cartile datorate), cartile cele mai imprumutate, lista cartilor
imprumutate vreodata de un cititor, lista cartilor cu un anumit autor
Baza de date va fi creata sub MS SQL Server 2005. Constantele aplicatiei (numar de carti maxim,
durata maxima, stringurile de conexiune, etc) nu vor fi hard-codate in program, ci in tabele sau fisiere
de configurare (dupa caz). Nu este permis ca in clasele de tip Form sa se lucreze cu parte de logica a
aplicatiei sau conexiuni la baza de date. Toate prelucrarile/slectiile pe baza de date se vor face prin
proceduri stocate. Se pot folosi triggere sau tranzactii. Tabelele vor fi in FN3.
La prezentare nu se admite recompilarea codului. Baza de date va avea numele format astfel:
numestudent_grupa_biblioteca.

176

177

Observaii aspirate de lucrrile studenilor


1. Test 3, subiectul 1 Obiectele principale de nlocuit cu: Descriei obiectele
principale de structur a bazei de date n SQL
2. Baza de date este nucleul de date a sistemului informaional
3. Centralizarea datelor permite suprimarea redundanei, controlul centralizat .
4. INSERT, UPDATE, DELETE ca interogri de inserie,modificare, tergere
5. Exerciiu 3: toate exemple s fie in limba romn, altfel studenii nu neleg i nu

pot lmuri coninutul semantic a fragmentului dat de cod SQL. n Nr. 2, 3, 25,
sunt greeli. Formularea mai bun a itemului: Ce prezint acest fragment de cod.
Ce se va produce ca rezultatul executrii lui. Explicai coninutul semantic a
rezultatului.
6. Contorizeaz
7. Se imbric, sconteaz, pertinent, compromite, comparare, iteme, tipuri de itemi
8. Testare formativ prin sistemul Moodle
9.

178