Sunteți pe pagina 1din 40

UNIVERSITATEA “OVIDIUS” CONSTANTA

SISTEME INFORMATICE DE ASISTARE A DECIZIILOR

CIG, ANUL III, SEMESTRUL II

Ozten CHELAI 1
CUPRINS

UNIVERSITATEA “OVIDIUS” CONSTANTA .............................................................. 1


SISTEME INFORMATICE DE ASISTARE A DECIZIILOR ......................................... 1
CIG, ANUL III, SEMESTRUL II ...................................................................................... 1
1. CURS 1. Baze de date. Concepte. ...................................................................................... 4
1.1. Baze de date. Consideraţii generale ........................................................................... 4
1.1.1. Definiţie .............................................................................................................. 4
1.1.2. Obiecte ............................................................................................................... 4
1.2. SGBD (Sisteme pentru Gestiunea Bazelor de Date) .................................................. 4
1.2.1. Definitie .............................................................................................................. 4
1.2.2. Nivele de abstractizare a datelor ........................................................................ 4
1.2.3. Arhitectură .......................................................................................................... 5
1.2.4. Servicii ............................................................................................................... 5
1.2.5. Instrumente de prelucrare ................................................................................... 5
1.2.6. Avantaje ............................................................................................................. 5
1.2.7. Exemple .............................................................................................................. 5
1.3. Modele de date ........................................................................................................... 6
1.3.1. Definiţie .............................................................................................................. 6
1.3.2. Modelul Entitate-Relatie. Modelul E-R ............................................................. 6
1.3.3. Modelul relational .............................................................................................. 6
1.4. SQL (structured Query Language) ............................................................................. 7
1.4.1. Terminologie: ..................................................................................................... 7
1.4.2. Proprietăţi tabel .................................................................................................. 7
1.4.3. Limbaje............................................................................................................... 8
DML ................................................................................................................................... 8
2. CURS 2. SQL - TIPURI DE DATE ................................................................................ 11
2.1. SQL. Contextul în care se utilizează tipurile de date ............................................... 11
2.2. Terminologia SQL.................................................................................................... 11
2.3. Tipuri de date ........................................................................................................... 12
2.4. Studiu de caz: ACCESS ........................................................................................... 12
2.4.1. Tipul numeric de date (Number) ...................................................................... 12
2.4.2. Tipul şir de caractere (text la Access) .............................................................. 13
2.4.3. Tipul data calendaristică. .................................................................................. 13
2.4.4. Tipul “logic” ..................................................................................................... 14
2.4.5. Tipul NULL...................................................................................................... 14
2.4.6. Funcţii pentru conversii între tipurile de date .................................................. 14
2.5. Comenzi SQL ........................................................................................................... 15
2.6. DML. ........................................................................................................................ 15
2.6.1. Comanda SELECT ........................................................................................... 15
2.6.2. Alias-uri de coloane ......................................................................................... 16
2.6.3. Expresii calculate ............................................................................................. 16
LABORATOR 2. Interogarea datelor dintr-un tabel .............................................................. 17
3. CURS 3 BD - SQL. INTEROGARI DIN MAI MULTE TABELE................................. 19
3.1. OPERATORI PE MULŢIMI ................................................................................... 19
3.1.1. Operatori din algebra relaţională ...................................................................... 19
3.1.2. Operaţii şi operatori SQL ................................................................................. 19
3.1.3. Interogǎri compatibile ...................................................................................... 20
3.1.4. Operatorul UNION ........................................................................................... 20
3.1.5. Operatorul INTERSECT .................................................................................. 20

Ozten CHELAI 2
3.1.6. Operatorul MINUS ........................................................................................... 20
3.2. SQL. Implementarea operatorului JOIN .................................................................. 20
3.2.1. Specificarea joncţiunii ...................................................................................... 21
3.2.2. Produsul cartezian ............................................................................................ 21
3.3. SQL. Joncţiuni echivalente - EQUI-JOIN................................................................ 21
3.3.1. Specificarea joncţiunii în clauza WHERE ....................................................... 21
3.3.2. Utilizarea alias-urilor pentru denumirea tabelelor............................................ 21
3.3.3. Operatorul INNER JOIN .................................................................................. 22
3.4. Joncţiuni neechivalente - THETA-JOIN .................................................................. 22
3.4.1. Implementare SQL ........................................................................................... 22
3.5. Condiţii adiţionale .................................................................................................... 22
3.6. Joncţiuni externe - OUTER-JOIN ............................................................................ 22
3.7. Autojoncţiuni - SELF-JOIN. .................................................................................... 23
LABORATOR 3. JONCŢIUNI................................................................................................ 24
4. CURS 4 BD - SQL. FUNCŢII DE GRUP ŞI INTEROGǍRI ......................................... 28
4.1. AGREGAREA DATELOR FOLOSIND FUNCŢII DE GRUP .............................. 28
4.1.1. Funcţii de grup ................................................................................................. 28
4.1.2. Comanda SQL .................................................................................................. 28
4.1.3. Descrierea funcţiilor de grup ............................................................................ 28
4.1.4. Clauza GROUP BY .......................................................................................... 29
4.1.5. Filtrarea liniilor pentru funcţiile de grup .......................................................... 30
4.2. SQL. SUBINTEROGĂRI ........................................................................................ 30
4.2.1. Operatori de comparaţie ................................................................................... 30
4.2.2. Operatori pe mulţimi ........................................................................................ 31
4.2.3. Subinterogări corelate ...................................................................................... 32
4.2.4. Subinterogări în clauza FROM ........................................................................ 32
LABORATOR 4 – Functii de grup .......................................................................................... 33
5. SUBIECTE ....................................................................................................................... 37
5.1. TEORIE .................................................................................................................... 37
5.2. INTEROGARI SIMPLE .......................................................................................... 38
5.3. INTEROGARI COMPLEXE ................................................................................... 39

Ozten CHELAI 3
1. CURS 1. Baze de date. Concepte.

1.1.Baze de date. Consideraţii generale

1.1.1. Definiţie
Colecţie de date structurate si obiecte asociate acestora ce oferă o organizare ce
facilitează extragerea de informaţii şi prelucrarea acestora.

1.1.2. Obiecte
Obiectele bazelor de date sunt reprezentate în principal de tabele cu o structură
riguroasă şi restricţii ce definesc corelarea datelor din tabele şi între tabele. In
unele medii de operare bazele de date mai includ şi obiecte asociate tabelelor,
facilitând operaţiile de prelucrare a datelor din tabele. Exemple

1.2.SGBD (Sisteme pentru Gestiunea Bazelor de Date)

1.2.1. Definitie
Un SGDB este un mediu de dezvoltare (framework) care oferă un context eficient
pentru memorarea şi extragerea de informaţii din bazele de date.
Un SGBD
• ascunde detaliile referitoare la memorarea şi gestionarea datelor. Asigură
proiectarea unor structuri de date complexe prin care se vor reprezenta
informaţiile în baza de date. Complexitatea este ascunsă de SGBD
• asigură un extragerea informatiilor în mod eficient.

1.2.2. Nivele de abstractizare a datelor


• nivelul fizic – descrie cum sunt memorate datele
• nivelul conceptual:
- descrie în detaliu structurile de date low-level, printr-un număr mic de
structuri relativ simple
- ce date sunt memorate în BD
- relaţiile care există între ele
- este utilizat de administratorul BD care decide ce informaţii se păstrează în
BD.
• nivelul vizualizărilor - simplifică interacţiunea cu utilizatorii care necesită doar
o parte a BD. Într-un sistem se pot furniza mai multe vizualizări pentru aceeaşi
BD.

Ozten CHELAI 4
vizualizare 1 vizualizare 2 vizualizare n

nivel conceptual

Interactiunea nivelelor

nivel fizic

1.2.3. Arhitectură
Arhitectura SGBD şi a aplicaţiilor cu BD este “client-server”

1.2.4. Servicii
Serviciile se pot împărţii în
- funcţii de prelucrare a datelor
o definire a structurii
o manipulare informaţii
▪ extragere şi prelucrare
o control al datelor (tranzacţii, gestiunea utilizatorilor)
- servicii de calitate
o persistenţa datelor
o integritatea datelor
o consistenţa datelor
o acces concurent la date

1.2.5. Instrumente de prelucrare


i. Procedurale – limbaje de programare procedurale care oferă suport
prelucrărilor algoritmice
ii. Declarative – limbaje de programare neprocedurale ce oferă suport
interogărilor

1.2.6. Avantaje
- corespunzătoare serviciilor de calitate

1.2.7. Exemple
Access
Oracle
MySQL
SQL-Server
SyBase
Visual FoxPro

Ozten CHELAI 5
1.3.Modele de date

1.3.1. Definiţie
O colecţie de instrumente (tools) conceptuale pentru descrierea de:
• date
• relaţii între date
• semantici ale datelor (semnificaţii)
• restricţii asupra datelor (constrains).
Modelul de baza: Modelul relaţional al datelor.

1.3.2. Modelul Entitate-Relatie. Modelul E-R


Lumea reală este o colecţie de entităţi (obiecte de bază) şi relaţii (între aceste
obiecte de bază).
O entitate este un obiect care există şi este distinct de alte obiecte. Distinct pentru
că este definit de un set de atribute care descriu obiectul.
O relatie este o asociere între mai multe entităţi ( de exemplu unui student i se
asociază toate notele pe care le obţine într-o sesiune).
Un set de entităţi este totalitatea entităţilor de acelaşi tip.
Un set de relaţii este totalitatea relaţiilor de acelaşi tip.
Modelul reprezintă şi o serie de restricţii(chei) cărora trebuie să li se conformeze
conţinutul. Sunt folosite pentru a păstra calităţile de integritate a bazei de date.

Mapping cardinalities exprimă numărul de entităţi cu care se poate asocia o anume


entitate via un set de relaţii (one to one, etc.)
Diagrama E-R este o reprezentare grafică a structurii unei BD. Ea are următoarele
componente:
- dreptunghi – pentru reprezentarea setului de entităţi
- elipse – pentru reprezentarea atributelor
- romburi – pentru reprezentarea relaţiilor între seturi de entitaăţi
- linii – pentru reprezentarea legăturii între atribute-seturi de entităti-
seturi de relaţii.

adresa
nume oras nota disciplina

student relatie sesiune


e

1.3.3. Modelul relational


Model elaborat de Edgar F. Codd în 1970. MR separă aspectele fizice de cele
logice ale bazei de date.
MR are la bază modelul conceptual Entitate-Relaţie.
Are la baza algebra relaţională care oferă următoarele instrumente
• o colectie de obiecte cunoscute sub numele de relaţii
• o multime de operatori ce actioneza asupra relatiilor pentru a produce noi
relatii.

Ozten CHELAI 6
Operatorii relationali sunt:
Relatia Descrierea
Restrictia (selecţia) este o operatie care preia si afiseaza datele din relatie.Este
posibil sa se afiseze toate randurile sau doar randurile care indeplinesc o conditie
sau mai multe conditii .Aceasta este de multe ori numita 'submultime orizontala'
Proiectia este operatia care afiseaza anumite coloane din relatie si de aceea este
numita 'submultime verticala'.
Produs este rezultatul obtinut cand randurile a doua multimi de date sunt
concatenate conform conditiilor specificate.
Join este rezultatul obtinut cand randurile a doua multimi de date sunt concatenate
conform conditiilor specificate.
Reuniunea afiseaza toate randurile care apar in una ,in cealalta sau in ambele din
cele doua relatii.
Intersectia afiseaza toate randurile care apar in ambele din cele doua relatii.
Diferenta afiseaza randurile care apar numai intr-o singura relatie (SQL utilizeaza
operatorul minus ).

1.4.SQL (structured Query Language)


Limbaj de interogare declarativ pentru bazele de date. Standard implementat de toate
SGBD moderne.

1.4.1. Terminologie:
Tabel = entitate (MER), relaţie (MR)
Coloana = atribut (MER, MR)
Linii = tuplu (MR)
Câmp (intersecţia dintre o linie şi o coloană) = valoare atribut
Relaţie = relaţie (MER)
Restricţii: (pentru început vom prezenta doar restricţii de bază)
- cheie primară – identifică în mod unic fiecare coloană din tabel
- not NULL*
- cheie străină – utilizată pentru a relaţiona tabelul cu un altul.
• NULL = valoare neintrodusă într-un câmp.

1.4.2. Proprietăţi tabel


Un singur tabel are urmatoarele proprietati:
• Nu exista randuri duplicate
• Nu exista nume de coloana duplicate
• Ordinea randurilor este neimportanta
• Ordinea coloanalor este neimportanta
• Valorile sunt atomice(nedecompozabile).
SQL conţine comenzi pentru realizarea funcţiilor asociate bazelor de date:
- creare
- modificare
- stergere

Ozten CHELAI 7
- interogare
- prelucrare (calcule, filtrare, ordonare, etc.)
- protecţie.

1.4.3. Limbaje
Comenzile sunt grupate în următoarele limbaje:
b. DML (Data Manipulation Language) – comenzi pentru introducerea,
modificarea şi stergerea datelor din BD.
c. DDL (Data Definition Language) – comenzi pentru crearea, modificarea
structurilor de date (tabele, relaţii)
d. DCL (Data Control Language) – comenzi pentru gestiunea operaţiilor realizate
şi a drepturilor de acces la date.

DML
SELECT [DISTINCT] *|listaColoane FROM listăTabele WHERE condiţie…
Liste = succesiuni de elemente de acelaşi fel, despărţite prin virgulă
listaColoane cuprinde denumirile coloanelor sau nume alternative date acestora
(ALIAS-uri).
listaTabele cuprinde denumirile tabelelor sau nume alternative date acestora (ALIAS-
uri).

Comanda afişează valorile din coloanele specificate în lista, din tabelele specificate,
care îndeplinesc condiţia specificată.

Ozten CHELAI 8
LABORATOR 1
Studiu de caz: MS Access. Crearea unei BD
1. Crearea unei baze de date
a. Structurǎ tabele
i. tipuri de coloane
ii. restricţii elementare: cheie primarǎ, not null, cheie unică, cheie străină
(restricţie de integritate referenţială) şi alte restricţii
iii. linii
b. Relaţii de integritate între tabele
2. Creaţi BD „Universitate” cu urmǎtoarele tabele şi structurǎ:
a. Facultǎţi
id_facultate – AutoNumber, cheie primarǎ
nume_facultate – text, not null, cheie unică
b. Specializǎri
id_spec – AutoNumber, cheie primarǎ
nume_spec – text, not null, cheie unică
id_facultate – number, cheie străină ce specifică legarea cu tabelul Facultăţi
c. Personal
id_personal – AutoNumber, cheie primarǎ
nume – text, not null
cnp - number
sex – text(1), valori „M” sau „F”, not null
casatorit – logic
data_angajare – data
salariu – number
profesie – text, not null
id_sef – number
id_facultate - number, cheie străină ce specifică legarea cu tabelul Facultăţi
d. Studenti
id_student – AutoNumber, cheie primarǎ
nume – text, not null
id_spec - number, cheie străină ce specifică legarea cu tabelul Specializari
grupa –number
an – Number
Valoare_taxa - Number
e. BaremSalariu
sal_min – Number
sal_max – Number
impozitFix – Number
procent – Number
grad - Number

Legǎturile între tabele sunt specificate dupǎ cum urmeazǎ

Ozten CHELAI 9
3. Introduceţi date în tabele
- 4 linii in tabelul „facultati”
- Specializarile corespunzatoare in tabelul „specializari”
- >10 linii in Personal
OBS. Conţinutul tabelului BaremSalariu va fi:

SAL_MIN SAL_MAX IMPOZITFIX PROCENT GRAD


0 2400000 0 18 1
2400001 5800000 432000 23 2
5800001 9300000 1214000 28 3
9300001 13000000 2194000 34 4
13000001 99999999 3452000 40 5

b.

Ozten CHELAI 10
2. CURS 2. SQL - TIPURI DE DATE

2.1. SQL. Contextul în care se utilizează tipurile de date

Limbajul SQL este un limbaj de programare declarativ (neprocedural) “implementat” în


toate SGBD moderne. Implementarea se referă la suportul de execuţie (interpretor) oferit de
SGBD.
Limbajele de programare declarative sunt limbaje în care se specificǎ explicit “ce” se doreşte
şi nu algoritmul de soluţionare a problemelor (deci “cum” se obţine soluţia),
Limbajul SQL este eficient dacă organizarea datelor este realizată după modelul relaţional. In
consecinţă SGBD-urile care au interpretoare SQL se numesc SGBD relaţionale (SGBDR).

SGBDR oferă interfeţe grafice cu utilizatorul pentru introducerea comenzilor SQL, mai mult
(Access) sau mai puţin automatizate.

2.2.Terminologia SQL
Modelul Entitate-Relatie stǎ la baza modelului relaţional. Corespunzǎtor acestuia, lumea reală
este o colecţie de entităţi (obiecte de bază) şi relaţii (între aceste obiecte de bază).
Un tabel este o structurǎ de bazǎ de memorare şi reprezintǎ un set de entitǎţi de acelaşi tip.
Tabelul pǎstreazǎ toate datele setului de entitǎţi.
Tabelul este format din coloane sau atribute ce reprezintǎ caracteristicile entitǎţilor. Fiecare
atribut ia valori într-un domeniu de valori.
Coloanele sunt caracterizate prin tipul de datǎ ce specificǎ valorile care se pot introduce în
tabel, lǎţimea coloanei ce reprezintǎ numǎrul de caractere care se pot introduce în coloanǎ şi
restricţiile care se definesc pe coloana respectivǎ referitoare la valorile care se introduc în
coloanǎ.
O linie în tabel reprezintǎ o entitate sau obiect şi este format din valorile coloanelor pe linia
respectivǎ.
O cheie primarǎ reprezintǎ coloana (atributul) sau combinaţia de atribute care identificǎ în
mod unic o entitate (linie) în tabel. Se pot astfel referi entitǎţile prin valorile cheii primare.
Un câmp specificǎ o valoare a unui atribut. Se aflǎ, deci la intersecţia dintre o coloanǎ şi o
linie. Un câmp poate conţine o valoare sau o valoare null (nici o valoare).
Exemplu: Fie tabelul “studenti”. Caracteristicile studentului sunt:
- cod_student (numar matricol)
- nume
- prenume
- data_nasterii coloana
- cod_specializare Cheie primara camp
-...

Cod_student Nume Prenume Data_nasterii Cod_specializare


1234 Ionescu Ion 12.05.1984 5 linie
256 Popescu Gheorghe 10.02.1983 4
879 Andrei Ilie 05.07.1980 5

Ozten CHELAI 11
2.3.Tipuri de date

In toate mediile de programare existǎ o structurare a datelor în funcţie de reprezentarea lor în


memorie. O structurǎ elementarǎ (primitivǎ) reprezintǎ un tip de datǎ.
Tipul de date specificǎ domeniul de valori pentru o coloana. Deoarece valoarea coloanei se
schimbǎ pentru fiecare linie, ea reprezintǎ o variabilǎ a limbajului de programare.
Pentru fiecare tip de data existǎ definite valori constante care se pot utiliza în construcţia
expresiilor.
Mediul de programare oferǎ utilizatorului posibilitatea de a specifica tipul datelor manipulate
şi instrumente primare de manipulare a lor: operatori şi funcţii.
Operatorii se aplică operanzilor, iar funcţiile au argumente (sau nu) şi întorc un rezultat.
Utilizarea operatorilor:
<Operand> <operator> - operator monadic (cu un operand)
<Operand1> <operator> <operand2> - operator diadic (cu doi operanzi)
Utilizarea funcţiilor:
Funcţie() – funcţie fără argumente
Funcţie(arg1, arg2,…) – funcţie cu argumente

O expresie, pentru un tip de dată, este formatǎ din variabile, constante, operatori, funcţii şi
întoarce un rezultat.

In SGBD-uri tipurile de date se utilizeazǎ pentru a specifica:


- coloane
- constante
SGBD-urile oferă, în funcţie de numărul şi calitatea serviciilor, o multitudine de tipuri de date
pentru utilizare. Tipurile de date prezente în toate mediile şi de uz general sunt:
- numeric
- sir de caractere
- data calendaristica
- logic
- valori speciale: NULL (valoare a unui câmp în care nu s-a introdus informaţie)
Ele se asociază coloanelor şi pentru ele sunt definite constante, operatori şi funcţii.

2.4. Studiu de caz: ACCESS

Se vor prezenta tipurile de date, modalitatea de definire a constantelor, operatorii asociaţi


tipurilor de date şi funcţiile pe care sistemul de gestiune Access le pune la dispoziţia
programatorilor.
Pentru a se păstra caracterul de generalitate şi pentru o mai uşoară înţelegere, nu se vor
prezenta toate tipurile de date, operatorii şi funcţiile asociate acestora.

2.4.1. Tipul numeric de date (Number)


Constante:
- numere întregi şi zecimale: reprezentate zecimal
- numere reale: reprezentate în mantisă şi exponent astfel:valMantisaEvalExponent.
Exemplu: 2.3*10^9 se scrie 2.3E+09, .0000003 se scrie 3E-7

Operatori:
- aritmetici sunt: +, -, *, /, ^ (ridicare la putere)
Ozten CHELAI 12
- de comparaţie: =, <>, <, >, <=, >= , BETWEEN valoareInf AND valoareSup. În urma
evaluării rezultă o valoare logică (true sau false).

Funcţii:
Sqr(n) - rădăcină pătrată din n.
Int(n) – aproximare la întreg a lui n.
Round(n,m) – rotunjire la m zecimale a numărului n.
Str(n) – conversie în şir de caractere
Val(sir) – conversie în valoare numerică

2.4.2. Tipul şir de caractere (text la Access)


Constante:
- constantele de tip şir de caractere sunt delimitate de ghilimele. Ex: “test”
- se pot utiliza caracterele de grup (wildcard) pentru a specifica orice caracter:
o * orice grup de caractere
o ? un caracter (oricare)
Operatori: &, Like, In
- & - concatenare şiruri
Concatenare: expresie1 & expresie2
unde operanzii sunt expresii oarecare, rezultatul este un şir de caractere cu cele două şiruri
alipite sau Null dacă unul din operanzi este Null.
- Like – comparaţie cu un şablon
Operatorul Like compară două şiruri cu observaţia că al doilea tremen este un
şablon. Prin urmare rezultatul este True dacă primul şir operand este format după şablon,
False în caz contrar. Atunci când un operand este Null, rezultatul este tot Null.
Construcţia şablonului poate cuprinde caractere de grup, liste de caractere, domenii de caractere:
o ? un caracter oarecare
o * un grup de caractere oarecare (chiar nici unul)
- In – comparaţie cu elementele unei mulţimi
Funcţii:
Cele mai utilizate pentru şiruri de caractere sunt:
Chr(n) – intoarce caracterul cu codul ASCII n
ASC(str) - întoarce codul ascii pentru str
Left(str,n) – extrage subşirul stng din str cu lungimea de n
Right(str,n) – extrage subşirul drept din str cu lungimea de n
Mid(str,n,m) – extrage subşirul din str ce începe din poziţia n cu lungimea m
Ucase(str) - converteşte în majuscule str
Trim(str) – extrage blancurile din marginile lui str
Len(str) - întoarce lungimea şirului str
Space(n) - întoarce un şir cu n spaţii
InStr(str1, str2) - întoarce poziţia str2 în str1

2.4.3. Tipul data calendaristică.


Constante:
- Format general la Access: #dd.mm.yyyy#

Operatori: +, -, Between…AND…., LIKE


- aritmetici: + sau – se utilizează pentru a aduna sau scădea zile dintr-o dată calendaristică
- comparaţie:
o Beetween dataInf And dataSup pentru a verifica dacă valoarea aparţine intervalului
specificat
Ozten CHELAI 13
o Like – comparaţie cu un şablon

Funcţii:
Date() – întoarce data curentă a sistemului
Day(d) – întoarce ziua, ca valoare numerică, pentru data (d) specificată ca argument
Month(d) – întoarce luna, ca valoare numerică, pentru data (d) specificată ca argument
WeekDay(d) - întoarce ziua din săptămână, ca valoare numerică, pentru data (d) specificată ca
argument
Year(d) - întoarce anul, ca valoare numerică, pentru data (d) specificată ca argument
Now() - întoarce ora curentă a sistemului
MonthName(d) - întoarce numele lunii, ca şir de caractere, pentru data (d) specificată ca
argument
DateAdd(interval, numar,d) – întoarce data corespunzătoare adăugării numărului specificat de
intervale din argumentul funcţiei:
Unde: pentru interval se pot folosi urmatoarele şabloane pentru a specifica - perioada:
“yyyy” – an
“q” – sfert de an
“m” – luna
“y” – zi a anului
“d “- zi
“ww” – saptamana
numar reprezinta numarul de perioade;
d reprezinta data calendaristicǎ.

2.4.4. Tipul “logic”


Constante: true, false, yes, no
Operatori logici:
- and (conjuncţia logică)
- or (disjuncţia logicǎ)
- Not (negaţia logicǎ)
- IS NULL
- IS NOT NULL

Funcţii:
IIf(expr, valAdev, valFals)
Unde:
expr = expresie logicǎ
valAdev = expresie care se evalueazǎ şi a cǎrei valoare se întoarce dacǎ expr este adevǎratǎ
valFals = expresie care se evalueazǎ şi a cǎrei valoare se întoarce dacǎ expr este falsǎ

2.4.5. Tipul NULL


Constantǎ: NULL
Operatori: IS NULL, IS NOT NULL
Funcţii: NZ(expr,val) – pentru valoarea NULL a expr intoarce valoarea val specificata.

2.4.6. Funcţii pentru conversii între tipurile de date


CVDate(sir) – converteşte in data calendaristica sirul dat ca argument
DateValue(d) - – converteşte in sir data calendaristica datǎ ca argument

Ozten CHELAI 14
Val(string) – converteşte sirul dat ca argument în valoare numericǎ
Str(number) – converteşte în şir numarul specificat ca argument

Funcţii de conversie a expresiei dată ca argument în tipul specificat de numele funcţiei:


CBool(expression)
CByte(expression)
CCur(expression)
CDate(expression)
CDbl(expression)
CDec(expression)
CInt(expression)
CLng(expression)
CSng(expression)
CStr(expression)
CVar(expression)

2.5.Comenzi SQL
SQL conţine comenzi pentru realizarea funcţiilor asociate bazelor de date:
- creare
- modificare
- stergere
- interogare
- prelucrare (calcule, filtrare, ordonare, etc.)
- protecţie.
Comenzile sunt grupate în următoarele limbaje:
e. DML (Data Manipulation Language) – comenzi pentru introducerea,
modificarea şi stergerea datelor din BD.
f. DDL (Data Definition Language) – comenzi pentru crearea, modificarea
structurilor de date (tabele, relaţii)
g. DCL (Data Control Language) – comenzi pentru gestiunea operaţiilor realizate
şi a drepturilor de acces la date.

2.6.DML.

2.6.1. Comanda SELECT


Comanda SELECT este utilizată pentru extragerea datelor din tabele.

Sintaxă
SELECT [DISTINCT] {*|listă_coloane} FROM tabel WHERE expresie_logica ORDER BY
listă_expresii

Unde:
*|listă_coloane * specifică coloanele care se vor afişa (*= toate coloanele)
FROM tabel = tabelul din care se extrag datele
WHERE expresie_logica = specifică condiţia de filtrare a liniilor afişate (se vor afişa doar
liniile care respectă condiţia)
ORDER BY listă_expresii = specifică criteriile de ordonare la afişare. Prima expresie din lista
este criteriul principal. La valori egale pe acest criteriu se utilizeaza al doilea criteriu din listă
ş.a.m.d. Pentru specificarea tipului de ordonare se utilizeaza ASC, DESC
Ozten CHELAI 15
DISTINCT – elimină liniile duplicat

Exemple:

SELECT * FROM personal;


SELECT nume, profesie FROM personal ORDER BY nume
SELECT nume, salariu FROM personal WHERE salariu BETWEEN 10000000 and
20000000
SELECT nume, salariu FROM personal WHERE id_sef IS NULL
SELECT nume FROM personal WHERE data_angajare=#01.01.2000#
SELECT nume FROM personal WHERE data_angajare BETWEEN #01.01.1989# AND
#01.01.2005#
SELECT nume& “ este “&profesie&”.” FROM personal;

2.6.2. Alias-uri de coloane


Alias-ul reprezintă un nume dat de utilizator cu care se afişează şi se poate utiliza o coloană,
expresie sau tabel pentru comanda respectivă.
Alias-ul se specifică cu clauza AS.

Exemplu:
SELECT nume AS angajat, profesie FROM personal

2.6.3. Expresii calculate


In lista de coloane sau în celelalte clauze ale comenzii SELECT se pot utiliza expresii care
sunt construite din coloane, constante, funcţii şi operatori.
Exemplu

SELECT nume, salariu*12 AS salariuAnual FROM personal


SELECT nume, (salariu+15%)*12) AS salariuAnual FROM personal where id_sef IS NULL
SELECT nume, salariu*12 AS salariuAnual FROM personal WHERE salariu*12>50000000
ORDER BY mid(nume,2,1)

Ozten CHELAI 16
LABORATOR 2. Interogarea datelor dintr-un tabel

SELECT [DISTINCT] *|listǎ_coloane FROM tabel WHERE condiţie ORDER BY


listǎ_expresii

Clauza DISTINCT – specificatǎ pentru eliminarea liniilor duplicat la afişare


FROM – specificǎ tabelul (tabelele – se vor detalia ulterior) din care se extrag datele
* - specificǎ toate coloanele tabelului specificat de FROM
WHERE condiţie – filtreazǎ valorile afişate a.î. acestea sǎ satisfacǎ condiţia specificatǎ.
Deci condiţie reprezintǎ o expresie logicǎ care valorile adevǎrat sau fals.
ORDER BY listǎ_expresii – specificǎ ordinea de afişare a rezultatelor

1. Afisati toate datele din tabelele: facultati, specilaizari, personal, BaremSalariu

2. Afişaţi numele, numarul facultǎţii şi salariul angajaţilor cu salariul între 4000000 şi


9000000. Realizati doua interogari diferite.

3. Afişaţi specializǎrile şi id_spec în ordinea facultǎţilor şi specializǎrilor pe facultate.

4. Afişaţi tipurile diferite de functii.

5. Afişaţi angajaţii facultǎţilor cu numǎrul 1 şi 2.

6. Afişaţi numele şi functiile personalului facultǎţii cu numǎrul 2.

7. Afisati personalul cu numele conţinând “ESCU” sau “GHE”.

8. Afişaţi toţi angajaţii care au şef.

9. Afişǎţi urmǎtoarea propoziţie pentru fiecare angajat:

***** este angajat la facultatea cu numarul ** si are salariul de ******.

10. Afişaţi salariul anual brut (salariu*%spor lunar) pentru toţi angajaţii.

11. Afişaţi angajaţii dupǎ anul 2000.

12. Afişaţi numele şi salariul anual al personalului facultatii 1 cu salariul anual mai mare
decât 50000000, în ordine alfabetica.

13. Afisati numele si data angajarii salariatilor angajati in 2000.

14. Afisati numele si functia tuturor angajatilor fara sef.

15. Afisati numele si salariul anual al angajatilor. Sefii au in plus un spor de 25%.

Ozten CHELAI 17
16. Afisati numele tuturor angajatilor cu a treia litera A.

17. Afişaţi angajaţii care sunt femei.

18. Afişaţi angajaţii casatoriţi.

19. Afisaţi salariile lunare în lei grei, rotunjite la o zecimala pentru tot personalul.

20. Afisati numele, functia si salariul angajatilor cu functia: LECTOR sau ASISTENT si
salariul diferit de 9000000, 5000000, 5500000.

21. Afisati numele si ocupatiile tuturor angajatilor facultatilor cu id_facultate 1 sau 2 care
nu sunt lector.

22. Afisati numele, functia si salariul marit cu 20% pentru sefi.

23. Afisati numele, salariul, data angajarii pentru anagajatii dupa 1998 care sunt lector si
au litera A in nume.

24. Afisati angajatii care au manager din facultatile cu id_facultate 1 si 2.

25. Afisati toti angajatii facultatii 2 care sunt ‘lector’ sau ‘conferentiar’.

26. Afisati salariile marite cu 20% pentru conferentiari si profesori.

27. Afisati salariile marite cu 20% pentru conferentiari si profesori, 15% lectori şi 10%
pentru ceilalţi.

28. Afisati numarul de zile de la angajare al intregului personal.

29. Afisati angajatii in luna martie.

30. Afisati ziua din saptamana in urmatorul an dupa angajare pentru intregul personal.

31. Afisati numarul de caractere al numelor angajatilor din personal.

32. Afisati angajaţii cu numele mai lung de 20 de caractere.

33. Afisati angajatii care au spor de salariu, angajati dupa 1990 din facultatea 1.

34. Afisati gradul salariului de 9000000.

35. Afisati pentru sefi urmatoarea propozitie. Atenţie numele incepe cu majuscula.

****** este SEF al facultatii cu numarul *.

Ozten CHELAI 18
3. CURS 3 BD - SQL. INTEROGARI DIN MAI MULTE TABELE

3.1.OPERATORI PE MULŢIMI

3.1.1. Operatori din algebra relaţională


În modelul relaţional relaţia reprezintă un tabel alcătuit din coloane şi linii.
O linie din tabel se numeşte tuplă, iar o coloană atribut.
La baza limbajului SQL stă algebra relaţională. Aceasta defineşte 8 operatori relaţionali care
operează pe relaţii.
Operatorii care acţionează pe o relaţie sunt unari, iar cei pe două relaţii sunt binari.
Operatorii se clasifică în funcţie de tipul operaţiilor în:
- operatori de bază: SELECT, PROJECT, UNION, DIFFERENCE, PRODUCT
- operatori derivaţi: INTERSECT, DIVIDE, JOIN.
Operaţiile realizate de operatori sunt:
SELECT – extrage tuplele (liniile) care îndeplinesc o condiţie
PROJECT – extrage atributele specificate
UNION – reuneşte tuplele a două relaţii
DIFFERENCE – elimină tuplele care sunt într-o relaţie, dar nu în alta
PRODUCT – realizează produsul cartezian al tuplelor din două relaţii (combina fiecare linie
dintr-un tabel cu fiecare din cel de-al doilea tabel)
INTERSECT – extrage tuplele care se găsesc în două relaţii
DIVIDE – extrage valorile atributelor dintr-o relaţie care are valorile celorlalte atribute în a
doua relaţie
JOIN – combină tuplele din două relaţii cu anumite condiţii specificate. În funcţie de
condiţiile specificate există mai multe tipuri de JOIN:
- NATURAL JOIN – combină tuplele din două relaţii cu condiţia ca atributele cu
acelaşi nume din cele două relaţii să aibă aceleaşi valori
- EQUI-JOIN – combină tuplele din două relaţii cu condiţia ca atributele specificate din
două relaţii să aibă aceleaşi valori
- THETA-JOIN – combină tuplele din două relaţii cu condiţia ca atributele specificate
din cele două relaţii să îndeplinească o condiţie
- SEMI-JOIN – selectează tuplele din prima relaţie care sunt corelate cu cele din a doua
relaţie după o condiţie
- OUTER-JOIN - combină tuplele din două relaţii după o condiţie specificată, afişând în
cazul care într-o relaţie nu există coresapondent valori NULL.
- SELF-JOIN - combină tuplele din aceeaşi relaţie exprimate ca fiind din două relaţii
după o condiţie specificată

3.1.2. Operaţii şi operatori SQL


Pentru extragerea datelor din mai multe tabele sunt implementaţi operatorii pe mulţimi
definiţi în algebra relaţională. Pentru relaţii compatibile (cu aceeaşi structură) sunt definite
operaţiile de: reuniune, intersecţie, scădere, iar pentru alte asocieri operaţiile de joncţiune
(compunere).

Ozten CHELAI 19
3.1.3. Interogǎri compatibile
Sunt considerate interogǎri compatibile, comenzile SELECT care îndeplinesc următoarele
condiţii:
- comenzile SELECT trebuie să aibă acelaşi număr de coloane şi de acelaşi tip
- numele coloanelor care se afişează sunt cele din prima comandă SELECT
- dimensiunea coloanei rezultat este aceea a celei mai mari
- opţiunea DISTINCT este implicită (excepţie operatorul UNION ALL).

3.1.4. Operatorul UNION


Implementează reuniunea a două interogări compatibile. Sunt eliminate liniile duplicat..
Operatorul UNION ALL realizează reuniunea cu linii duplicat.
Utilizare
SELECT nume,functie,salariu FROM personal WHERE id_facultate=1
UNION
SELECT nume,functie,salariu FROM personal WHERE id_facultate=2

sau
SELECT nume,functie,salariu FROM personal WHERE id_facultate=1
UNION ALL
SELECT nume,functie,salariu FROM personal WHERE id_facultate=2

3.1.5. Operatorul INTERSECT


(nu este implementat la Access)
Implementează intersecţia a două interogări compatibile. Sunt eliminate liniile duplicat..
Utilizare
SELECT functie,salariu FROM personal WHERE id_facultate=1
INTERSECT
SELECT functie,salariu FROM personal WHERE id_facultate=2

3.1.6. Operatorul MINUS


(nu este implementat la Access)
Implementează diferenţa a două interogări compatibile. Sunt eliminate liniile duplicat..
Utilizare
SELECT functie,salariu FROM personal WHERE id_facultate=1
MINUS
SELECT functie,salariu FROM personal WHERE id_facultate=2

Se poate utiliza clauza ORDER BY la sfârşitul interogării.

3.2.SQL. Implementarea operatorului JOIN


Operatorul JOIN specifică joncţiunea (relaţia, legătura) dintre tabele în extragerea datelor din
ele. În SQL sunt implementate operaţii pentru operatorii EQUI-JOIN, THETA-JOIN,
OUTER-JOIN, SELF-JOIN.
Joncţiunile implementate sunt:
1. joncţiuni echivalente - EQUI-JOIN
2. joncţiuni neechivalente - THETA-JOIN

Ozten CHELAI 20
3. joncţiuni externe - OUTER-JOIN
4. autojoncţiuni - SELF-JOIN.

3.2.1. Specificarea joncţiunii


Specificarea condiţiei de joncţiune se realizează în clauza WHERE. Tabelele din care se
extrag datele sunt specificate în clauza FROM, iar denumirile de coloane pot fi prefixate de
numele tabelulul astfel: tabel.coloană. În cazul în care denumirea de coloană este clară se
poate specifica doar coloana (adică se ştie cărui tabel aparţine).

3.2.2. Produsul cartezian


Produsul cartezian apare dacă se specifică coloane din mai multe tabele şi nu se specifică o
condiţie de joncţiune între tabele.
Exemplu:
SELECT personal.nume, facultate.nume_facultate
FROM personal, facultate
Interogarea va afisa toate combinaţiile dintre valorile celor două coloane.

3.3.SQL. Joncţiuni echivalente - EQUI-JOIN

3.3.1. Specificarea joncţiunii în clauza WHERE


In joncţiunile echivalente valorile dintr-o coloană a unui tabel sunt egale cu valorile unei
coloane din celălalt tabel. Se pot extrage date din cele două tabele care verifică condiţia.
Se pot adăuga condiţii adiţionale în clauza WHERE.
Sintaxă SQL:
SELECT [tabel1.]coloană, [tabel2.]coloană, ….
FROM tabel1, tabel2, …
WHERE tabel1.coloană1=tabel2.coloană2
Exemplu: Sa se afişeze numele şi denumirea specializării angajaţilor din tabelul personal:
SELECT personal.nume, facultati.nume_facultate
FROM personal, facultati
WHERE personal.id_facultate=facultati.id_facultate

Adăugarea condiţiilor adiţionale se realizează în clauza WHERE astfel:


Exemplu: Sa se afişeze numele şi denumirea specializării angajaţilor din tabelul personal
pentru facultatea de Matematică
SELECT personal.nume, facultati.nume_facultate
FROM personal, facultati
WHERE personal.id_facultate=facultati.id_facultate AND
UCASE(facultati.nume_facultate) LIKE “*MATEMATICA*”
Joncţiunile echivalente se mai numesc joncţiuni interne sau joncţiuni simple.

3.3.2. Utilizarea alias-urilor pentru denumirea tabelelor.


Alias-urile reprezintă nume alternative, mai convenabile in exprimare, date tabelelor cu
clauza AS si utilizabile in specificarea coloanelor. Alias-ul se poate utiliza doar pentru
comanda în care a fost definit.
Exemplu:

Ozten CHELAI 21
SELECT p.nume, f.nume_facultate
FROM personal AS p, facultati AS f
WHERE p.id_facultate=f.id_facultate AND UCASE(f.nume_facultate) LIKE
"*MATEMATICA*"

3.3.3. Operatorul INNER JOIN


La Access există implementat operatorul de joncţiune internă: INNER JOIN în clauza
FROM astfel:
FROM tabel1 INNER JOIN tabel2 ON tabel1.coloană1 operatorComparaţie
tabel2.coloană2
In acest caz nu mai este specificarea condiţiei de joncţiune în clauza WHERE.
Exemplu:
SELECT personal.nume, facultati.nume_facultate
FROM personal INNER JOIN facultati ON personal.id_facultate=facultati.id_facultate
WHERE UCASE(facultati.nume_facultate) LIKE “*MATEMATICA*”

3.4.Joncţiuni neechivalente - THETA-JOIN

3.4.1. Implementare SQL


In joncţiunile neechivalente valorile dintr-o coloană a unui tabel sunt într-o altfel de
relaţie, decât de egalitate, cu valorile unei coloane din celălalt tabel. Se pot extrage date
din cele două tabele care verifică condiţia specificată. Se pot adăuga condiţii adiţionale în
clauza WHERE.
Sintaxă SQL:
SELECT [tabel1.]coloană, [tabel2.]coloană, ….
FROM tabel1, tabel2, …
WHERE tabel1.coloană1 operator tabel2.coloană2
Operatorul trebuie să fie un operator de comparaţie sau logic care are ca rezultat o valoare
logică (true sau false).
Exemplu: Sa se afişeze numele şi gradul salariilor angajaţilor din tabelul personal:
SELECT personal.nume, personal.salariu, baremSalariu.grad
FROM personal, baremSalariu
WHERE personal.salariu BETWEEN baremSalariu.sal_min AND
baremSalariu.sal_max

3.5.Condiţii adiţionale
Se pot adăuga condiţii adiţionale în clauza WHERE pentru filtrarea liniilor răspuns.
Se pot utilizaalias-uri.

3.6.Joncţiuni externe - OUTER-JOIN


Joncţiunile externe afişează şi datele care nu au corespondent într-o relaţie, înlocuind
absenţa cu valori NULL.
In unele sisteme de gestiune (Oracle) există implementat operatorul de outer-join cu
simbolul (+) în partea deficitară de informaţie.
Exemplu:
SELECT personal.nume, facultati.nume_facultate

Ozten CHELAI 22
FROM personal, facultati
WHERE personal.id_faculatate (+) = facultati.id_facultate

La Access sunt implementaţi operatorii LEFT JOIN şi RIGHT JOIN în clauza FROM,
specificănd joncţiunea externă şi partea deficitară de informaţie astfel:
FROM tabel1 LEFT JOIN tabel2 ON tabel1.coloană1 operatorComparaţie
tabel2.coloană2
LEFT JOIN înseamnă afişarea informaţiei din tabelul din stânga chiar dacă în partea
dreaptă nu există informaţie asociată aceseia.
In acest caz nu mai este necesară specificarea condiţiei de joncţiune în clauza WHERE.
Exemplu:
SELECT personal.nume, facultati.nume_facultate
FROM personal RIGHT JOIN facultati ON personal.id_facultate=facultati.id_facultate

3.7.Autojoncţiuni - SELF-JOIN.
Autojoncţiunile extrag date dintr-un singur tabel, dar care este interpretat în mod diferit. Ele
sunt folosite când este necesară parcurgerea tabelelor de două ori pentru a obţine informaţia.
De exemplu dacă se cere afişarea numelui angajatului şi a numelui şefului fiecărui angajat din
tabelul personal. Se parcurge o dată tabelul pentru a obţine id_sef, iar a doua oară pentru a
identifica numele angajatului cu valoarea id_sef corespunzătoare.
SELECT p.nume,s.nume
FROM personal AS p, personal AS s
WHERE p.id_sef=s.id_personal
In interogare s-au simulat două tabele unul de angajaţi (p) şi unul pentru şefi (s). Condiţia de
joncţiune fiind ca id_sef din angajaţi să fie id_personal din şefi.

Ozten CHELAI 23
LABORATOR 3. JONCŢIUNI

1. Copiati baza de date suport2.mdb.Observati modificarile. Baza de date mai are


adaugat tabelul “studenti” in relatie cu tabelul “specializari”. Completati tabelul
studenti cu cateva randuri.

2. Afisati numele studentilor si denumirile specializarilor la care sunt studenti.

3. Afisati numele studentilor impreuna cu denumirile specializarilor si facultatilor in


ordine alfabetica dupa nume

4. Afisati numele, denumirea specializarii si facultatea studentilor cu taxa mai mare decat
400.

5. Afisati numele angajatilor, salariile si gradatiile corespunzatoare

6. Afisati angajatii cu gradatia 3.

7. Afisati toti studentii facultatii de Stiinte Economice.

8. Afisati numele angajatilor, functia, salariul, gradatia si numele facultatii pentru toti
angajatii care nu apartin departamentului “Auxiliari”, ordonati dupa salariu in ordine
descrescatoare.

9. Afisati numele, functia, facultatea, salariul si impozitul angajatilor din tabelul


personal, ordonati dupa facultate si nume.

10. Afisati denumirea facultatii care nu are angajati in tabelul personal.

11. Afisati toti angajatii (nume si id) impreuna cu numele si id-ul sefului.

12. Afisati la interogarea 11 si sefii.

13. Gasiti functia care a fost ocupata in prima jumatate a anului 1999 si aceeasi functie a
fost ocupata in timpul aceleiasi perioade in 2000.

14. Gasiti toti angajatii care s-au angajat inaintea sefilor lor.

15. Afisati studentii fara taxa impreuna cu denumirea facultatii, specializarii, anul de
studiu si grupa in ordinea facultatilor, specializarilor, anilor de studii, grupei si dupa
nume.

16. Afişaţi studenţii din anul 1 ai facultaţii de Ştiinţe Economice, ordonaţi alfabetic pe
grupe.

17. Afişaţi studenţii fǎrǎ taxǎ din anul 1 ai facultaţii de Ştiinţe Economice, ordonaţi
alfabetic pe grupe.

Ozten CHELAI 24
18. Afişaţi studenţii din anul 1 ai facultaţii de Ştiinţe Economice, ordonaţi alfabetic pe
grupe.

19. Afişaţi facultǎţile şi specializǎrile pentru care nu sunt studenţi în baza de date.

20. Afişaţi pentru fiecare angajat colegii di aceeaşi facultate.

21. Afişaţi numele sefilor şi denumirea facultǎţii.

22. Afişaţi numele angajaţilor, denumirea facultǎţii şi salariul angajaţilor cu gradul


salariului egal cu 1.

23. Afişaţi personalul facultǎţii de Matematica şi Informatica, casatoriţi, angajaţi dupa


anul 2000.

24. Afişaţi denumirile facultatilor şi funcţiile peronalului angajat.

25. Afişaţi denumirea facultǎţii, numele, funcţia, salariul mǎrit cu 20% şi gradul noului
salariu pentru toţi angajaţii.

26. Afişaţi numele, funcţia, salariul şi suma necesarǎ pentru fiecare angajat pentru a trece
la gradul urmǎtor de salariu.

Ozten CHELAI 25
SOLUTII LABORATOR 3

1.
2. SELECT s.nume,sp.nume_spec FROM studenti AS s, specializari AS sp WHERE
s.id_spec=sp.id_spec

3. SELECT s.nume,sp.nume_spec, f.nume_facultate FROM studenti AS s, specializari


AS sp, facultati AS f where s.id_spec=sp.id_spec AND sp.id_facultate=f.id_facultate
ORDER BY s.nume

4. SELECT s.nume,sp.nume_spec, f.nume_facultate FROM studenti AS s, specializari


AS sp, facultati AS f WHERE s.id_spec=sp.id_spec AND
sp.id_facultate=f.id_facultate AND s.valoaretaxa>400

5. SELECT p.nume,p.salariu, b.grad FROM personal AS p, BaremSalariu AS b WHERE


p.salariu BETWEEN b.sal_min AND b.sal_max

6. SELECT p.* FROM personal AS p, BaremSalariu AS b WHERE p.salariu


BETWEEN b.sal_min AND b.sal_max AND b.grad=3

7. SELECT s.* from studenti AS s, specializari AS sp, facultati AS f WHERE


s.id_spec=sp.id_spec AND sp.id_facultate=f.id_facultate AND
UCASE(f.nume_facultate)="STIINTE ECONOMICE"

8. SELECT p.nume,p.functie, p.salariu, b.grad, f.nume_facultate FROM personal AS p,


BaremSalariu AS b, facultati AS f WHERE p.salariu BETWEEN b.sal_min AND
b.sal_max AND p.id_facultate=f.id_facultate AND
UCASE(f.nume_facultate)<>"AUXILIARI" ORDER BY p.salariu DESC

9. SELECT p.nume,p.functie, p.salariu, f.nume_facultate,


b.impozitfix+b.procent/100*p.salariu AS impozit FROM personal AS p, BaremSalariu
AS b, facultati AS f WHERE p.salariu BETWEEN b.sal_min AND b.sal_max AND
p.id_facultate=f.id_facultate ORDER BY f.nume_facultate, p.nume

10. SELECT f.nume_facultate FROM personal AS p RIGHT JOIN facultati AS f ON


p.id_facultate=f.id_facultate WHERE p.nume IS NULL

11. SELECT p.nume, p.id_facultate FROM personal AS p RIGHT JOIN facultati AS f


ON p.id_facultate=f.id_facultate WHERE p.nume IS NULL

12. SELECT p.nume, p.id_personal, s.nume, s.id_personal FROM personal AS p,


personal AS s WHERE p.id_sef=s.id_personal

13. SELECT p.nume, p.id_personal, p.id_facultate,s.nume, s.id_personal FROM personal


AS p LEFT JOIN personal AS s ON p.id_sef=s.id_personal

14. SELECT p.functie FROM personal AS p INNER JOIN personal AS s ON


p.functie=s.functie WHERE (p.data_angajare BETWEEN #01/01/1999# AND
#30/06/1999#) AND (s.data_angajare BETWEEN #01/01/2000# AND #30/06/2000#)

Ozten CHELAI 26
15. SELECT p.nume, p.data_angajare, s.nume,s.data_angajare FROM personal AS p,
personal AS s WHERE p.id_sef=s.id_personal AND p.data_angajare <
s.data_angajare

16. SELECT f.nume_facultate, sp.nume_spec, s.an, s.grupa, s.nume FROM studenti AS


s, specializari AS sp, facultati AS f WHERE s.id_spec=sp.id_spec AND
sp.id_facultate=f.id_facultate AND s.valoaretaxa IS NULL ORDER BY
f.nume_facultate, sp.nume_spec, s.an, s.grupa, s.nume

Ozten CHELAI 27
4. CURS 4 BD - SQL. FUNCŢII DE GRUP ŞI INTEROGǍRI
4.1.AGREGAREA DATELOR FOLOSIND FUNCŢII DE GRUP

4.1.1. Funcţii de grup


Funcţiile de grup operează pe mai multe linii intorcând un rezultat. Se poate specifica un
criteriu de grupare a datelor cu clauza GROUP BY, pentru ca funcţiile de grup să întoarcă un
rezultat pentru fiecare grup de linii. Din acestă cauză,funcţiile de grup nu pot fi asociate în
lista de coloane cu coloane individuale. Coloanele au valori diferite pentru fiecare linie, iar
funcţiile de grup se referă la un grup de linii. Se poate utiliza, însă în lista de coloane, criteriul
de grupare deoarece liniile au aceeaşi valoare pentru acesta.

Funcţiile de grup mai utilizate sunt: AVG, MIN, MAX, COUNT, SUM.

Funcţiile de grup ignoră valorile NULL. Excepţie face funcţia COUNT(*).

4.1.2. Comanda SQL


Sintaxa generală a comenzii este:
SELECT [criteriu,] funcţieGrup(expresie1)
FROM tabel
[WHERE condiţie]
[GROUP BY criteriu]
[HAVING expresie2]
[ORDER BY expresie]
unde:
- expresie reprezintă o expresie ce cuprinde coloane, deci are valori pentru fiecare linie
a tabelului specificat;
- criteriu reprezintă o listă de expresii;
- condiţie, reprezintă o expresie logică.

4.1.3. Descrierea funcţiilor de grup


AVG(expr) calculeaza valoarea medie a expresiei specificate ca argument, ignorând valorile
null.
COUNT(expr) întoarce numărul de linii ce au valori diferite de null ale expresiei specificate
ca argument.
COUNT (*) întoarce numărul de linii din tabelul specificat, inclusiv cele cu valori NULL în
ele.
MAX(expr) calculeaza valoarea maximă a expresiei specificate ca argument, ignorând
valorile null.
MIN(expr) calculeaza valoarea minimă a expresiei specificate ca argument, ignorând valorile
null.
SUM(n) calculeaza suma valorilor expresiei specificate ca argument, ignorând valorile null.

Exemple:
1. Extragerea salariului minim, maxim şi mediu din tabelul “personal” se face cu
comanda:
SELECT MIN(salariu), MAX(salariu), AVG(salariu)

Ozten CHELAI 28
FROM personal
Atenţie valorile NULL sunt ignorate.
2. Extragerea salariilor anuale minim, maxim şi mediu care iau în consideraţie şi sporul
se face cu comanda:
SELECT MIN(salariu*(1+NZ(spor,0)),MAX(salariu*(1+NZ(spor,0)),
AVG(salariu*(1+NZ(spor,0)) FROM personal
Deoarece o expresie care are un operand NULL are ca rezultat o valoare NULL, se
utilizează funcţia NZ(expr,val) care asociază valoarea specificată de al doilea
argument valorilor NULL ale expresiei expr dată ca prim argument.

3. Afişarea numărului de angajaţi din tabelul personal se face cu comanda:


SELECT COUNT(*) FROM personal;

4.1.4. Clauza GROUP BY


Clauza GROUP BY este utilizată pentru a specifica un criteriu de grupare a liniilor.
Criteriul de grupare a liniilor se referă la valori egale pentru criteriul specificat pentru
liniile din acelaşi grup.
Criteriul se specifică printr-o listă de expresii care conţin coloane. O expresie este o
coloană sau o expresie care conţine coloane şi operatori şi funcţii asociate.
Exemple:
1. Sa se afişeze salariile minim, maxim, mediu pentru fiecare facultate:
SELECT id_facultate,MIN(salariu) AS Sal_minim, MAX(salariu) AS Sal_maxim,
AVG(salariu) AS Sal_mediu
FROM personal
GROUP BY id_facultate
2. Să se afişeze salariile maxime pentru fiecare funcţie:
SELECT functie,MAX(salariu)
FROM personal
GROUP BY functie
3. Sa se afişeze salariile maxime pentru fiecare funcţie pe facultate
SELECT id_facultate,functie,MAX(salariu)
FROM personal
GROUP BY id_facultate,functie

Imbricarea funcţiilor de grup


Funcţiile de grup se pot imbrica, adică se poate utiliza o funcţie de grup ca argument al
altei funcţii de grup.
Exemplu: Să se afişeze salariul mediul cel mai mare din tabelul personal:
SELECT MAX(AVG(salariu)) FROM personal
Din păcate nu toate sistemele de gestiune implementează acestă imbricare, iar în SGBD
Access nu este permisă imbricarea funcţiilor.

Greşeala cea mai frecventă la utilizarea funcţiilor de grup este aceea de asociere a unei
coloane (cu valori individuale pe fiecare linie) cu o funcţie de grup în clauza SELECT.
Exemplu:
SELECT nume, MAX(salariu) FROM personal;
Comanda este greşită deoarece coloana nume are valori diferite pentru fiecare linie, iar
funcţia MAX întoarce o valoare pentru toate liniile din tabel.

Ozten CHELAI 29
4.1.5. Filtrarea liniilor pentru funcţiile de grup
Filtrarea liniilor pentru funcţiile de grup se realizează cu clauza HAVING
<expresieLogică>.
Spre deosebire de clauza WHERE sunt filtrare ieşirile funcţiilor de grup.
Intr-o comandă SELECT se pot utiliza ambele clauze: WHERE filtrează liniile înainte de
aplicarea funcţiilor de grup, iar HAVING liniile rezultat.
Exemplu:
Afişăm salariile muinime pe facultăţi mai mici decât 5000000:
SELECT id_facultate, MIN(salariu) FROM personal GROUP BY id_facultate HAVING
MIN(salariu)<5000000
Observaţie: În clauza HAVING se utilizează doar expresii valide pentru funcţiile de grup.
Adică nu se pot utiliza coloane cu valori individuale dacă nu sunt specificate în clauza
GROUP BY.

Ordonarea liniilor întoarse se interogare se realizează cu clauza ORDER BY care poate


include ca criterii de ordonare funcţiile de grup şi criteriul de grupare.
Exemplu: Afişam salariile medii pe facultăţi în ordine descrescătoare a salariilor:
SELECT id_facultate, AVG(salariu)
FROM personal
GROUP BY id_facultate
ORDER BY AVG(salariu) DESC

4.2.SQL. SUBINTEROGĂRI

Subinterogările sunt interogări incluse în alte interogări. Rezultatul subinterogării, furnizat


dinamic la execuţie, este utilizat în interogare Subinterogarea se numeşte interogare
interioară, iar interogarea în care se utilizează interogare exterioară.
Clauzele în care se pot utiliza subinterogări sunt: WHERE, HAVING, FROM.

Subinterogările din clauzele WHERE, FROM sunt utilizate în operaţii de comparaţie astfel:
WHERE <expresie> <operator> (SELECT ……)

Subinterogarea este inclusă între paranteze.

4.2.1. Operatori de comparaţie


Subinterogările întorc valori. Acestea pot fi :
- o valoare pentru fiecare linie
- o mulţime de valori pentru fiecare linie
- o listă de valori corespunzătoare mai multor coloane.

Operatorii de comparaţie sunt:


- operatorii asociaţi tipurilor de date
- operatori pe mulţimi: IN, ANY(SOME), ALL
- operatorul EXIST de corelare a interogării exterioare cu cea interioară

Operatorii de comparaţie asociaţi tipurilor de date se utilizează pentru compararea cu o


valoare nu cu o mulţime de valori. În cazul utilizării lor, subinterogarea trebuie să întoarcă o
singură valoare. Operatorii sunt: >, <, >=, <=, <>, BETWEEN…AND…, LIKE

Ozten CHELAI 30
Exemple:
1. Afişaţi angajaţii cu salariul egal cu salariul minim din tabelul “personal”:
SELECT nume, salariu FROM personal WHERE salariu = (SELECT MIN(salariu)
FROM personal)
2. Afişaţi salariile minime pe facultăţi mai mari decât salariul minim al facultăţii 2:
SELECT id_facultate,MIN(salariu) FROM personal GROUP BY id_facultate HAVING
MIN(salariu) > (SELECT MIN(salariu) FROM personal WHERE id_facultate=2)
3. Afişaţi angajaţii cu salariul mai mare sau egal decât al angajatului cu codul 3 şi funcţia
egală cu cea a angajatului 8.
SELECT nume, salariu FROM personal
WHERE salariu > (SELECT salariu FROM personal WHERE id_personal=3)
AND functie = (SELECT functie FROM personal WHERE id_personal=8)

4.2.2. Operatori pe mulţimi


Operatorii pe mulţimi sunt IN, <opcomparaţie> ANY, <opcomparaţie> ALL

Operatorul IN
Operatorul IN este utilizat pentru a compara un operand cu elemente unei mulţimi. Valoarea
returnată este true dacă operandul este egal cu unul din elementele mulţimii. Altfel răspunsul
este false.
Exemplu: Afişaţi angajaţii cu salariul egal cu salariul minim din fiecare facultate:
SELECT nume, salariu, id_facultate
FROM personal
WHERE salariu IN (select MIN(salariu) FROM personal GROUP BY id_faculatate)

Operatorul <opcomparaţie> ANY


Operatorul ANY compară un operand cu fiecare element al unei mulţimi. Astfel:
• < ANY înseamnă < maxim
• ANY înseamnă > minim
• = ANY înseamnă IN
Exemplu: Afişaţi angajaţii din tabelul personal cu salariul mai mic decât al asisteţilor, care nu
sunt asistenţi:
SELECT nume, salariu, functie
FROM personal
WHERE salariu <ANY (select salariu FROM personal WHERE
UCASE(TRIM(functie))=”ASISTENT”)
AND UCASE(TRIM(functie))<>”ASISTENT”

Operatorul <opcomparaţie> ALL


Operatorul ALL compară un operand cu toate elementele unei mulţimi. Astfel:
• < ALL înseamnă < minim
• >ALL înseamnă > maxim
Exemplu: Afişaţi angajaţii din tabelul personal cu salariile mai mari decât salariile medii pe
facultati:
SELECT nume, salariu, functie
FROM personal
WHERE salariu >ALL (select AVG(salariu) FROM personal GROUP BY id_facultate)

Operatorul EXISTS

Ozten CHELAI 31
Operatorul EXISTS testeazǎ existenţa elementelor unei mulţimi şi întoarce FALSE pentru o
mulţime vidǎ şi TRUE dacǎ mulţimea are elemente.
Exemplu: Afişaţi facultǎţile fǎrǎ angajaţi :
SELECT id_facultate, nume_facultate
FROM facultati AS f
WHERE NOT EXISTS (SELECT 1
FROM personal
WHERE id_facultate = f.id_facultate);

4.2.3. Subinterogări corelate


Subinterogǎrile corelate sunt subinterogǎri în care se utilizeazǎ valori obţinute din interogarea
externǎ.
Exemplu : Afişaţi angajaţii cu salariul mai mare decât salariul mediu pe departament :
SELECT nume,salariu,id_facultate
FROM personal AS p
WHERE salariu > (SELECT AVG(salariu) FROM personal
WHERE id_facultate=p.id_facultate)

4.2.4. Subinterogări în clauza FROM


Subinterogǎrile se pot utiliza în clauza FROM, caz în care trebuie specificat alias-ul tabelului
corespunzǎtor subinterogǎrii:
Exemplu : Afişaţi angajaţii cu salariul mai mare decât salariul mediu pe departament :
SELECT p.nume, p.salariu, m.salmediu
FROM personal AS p, (SELECT id_facultate, AVG(salariu) AS salmediu
FROM personal GROUP BY id_facultate) AS m
WHERE p.id_facultate=m.id_facultate AND p.salariu>m.salmediu

Exemplu: Afişăţi funcţia cu cel mai mic salariu mediu


SELECT functie, AVG(salariu) FROM personal
GROUP BY functie
HAVING AVG(salariu) = (SELECT MIN(s.salmediu) FROM (select AVG(salariu) AS
salmediu FROM personal GROUP BY id_facultate) AS s)

Ozten CHELAI 32
LABORATOR 4 – Functii de grup

1. Afişaţi salariul maxim pe fiecare tip de functie in ordinea descrescǎtoare a


salariilor.

2. Afişaţi totalul salariilor pe facultăţi pentru fiecare tip de funcţie.

3. Afişaţi, în ordine descrescǎtoare dupǎ salariu, angajatii care câştiga cel mai mare
salariu pentru fiecare tip de functie.

4. Afişaţi salariul mediu anual pe fiecare tip de functie in ordinea crescǎtoare a


salariilor.

5. Afişaţi angajaţii cu salariul mai mare decât salariile medii pe fiecare tip de functie.

6. Afişaţi cei mai recenti angajati din fiecare facultate. Ordonati dupa data angajarii.

7. Afişaţi angajaţii cu salariul mai mare decât salariul mediu pe functia respectiva.

8. Listati, folosind o subinterogare, toate facultǎţile care nu au angajati.

9. Afişaţi numărul de angajaţi ai fiecărei facultăţi.

10. Afişaţi numele şi salariul primilor trei angajati, în functie de salariul cistigat.

11. Afişaţi totalul salariilor pe fiecare funcţie pentru facultatea de “Stiinte


Economice”.

12. Afişaţi totalul taxelor pe fiecare facultate.

13. Afişaţi facultatea cu totalul cel mai mare al taxelor.

14. Afişaţi numarul de studenti ai fiecărei facultăţi.

15. Afişaţi numarul de studenţi fără taxă pe fiecare specializare.

Ozten CHELAI 33
SOLUTII LABORATOR 4

1. SELECT functie, MAX(salariu)


FROM personal
GROUP BY functie
ORDER BY MAX(salariu) DESC

2. SELECT id_facultate,functie, SUM(salariu)


FROM personal
GROUP BY id_facultate,functie
ORDER BY id_facultate,functie

3. SELECT personal.nume,personal.functie,personal.salariu
FROM (SELECT functie,MAX(salariu) AS sal FROM personal
GROUP BY functie) AS t INNER JOIN personal ON
t.functie=personal.functie AND t.sal=personal.salariu
ORDER BY personal.salariu DESC

Comparati cu interogarea urmatoare:


SELECT nume, functie, salariu
FROM personal
WHERE salariu IN (SELECT MAX(salariu) FROM personal
GROUP BY functie)
ORDER BY salariu DESC
Obsevati diferenta! In prima interogare sunt afisati angajatii care au salariu maxim
al functiei, iar in a doua interogare angajatii cu salarii egale cu salariile maxime pe
functii.

4. SELECT functie, AVG(salariu*(1+NZ(spor,0))*12)


FROM personal
GROUP BY functie
ORDER BY AVG(salariu*(1+NZ(spor,0))*12)

5. SELECT nume,functie,salariu
FROM personal
WHERE salariu > ANY (SELECT AVG(salariu) FROM personal GROUP BY
functie)
ORDER BY salariu

6. SELECT nume, id_facultate, data_angajare


FROM personal
WHERE data_angajare IN (SELECT MAX(data_angajare)
FROM personal
GROUP BY id_facultate)
ORDER BY id_facultate;

Ozten CHELAI 34
7. SELECT nume, salariu, id_facultate
FROM personal AS p
WHERE salariu > (SELECT AVG(salariu)
FROM personal
WHERE id_facultate = p.id_facultate)
ORDER BY id_facultate;

8. SELECT id_facultate, nume_facultate


FROM facultati AS f
WHERE NOT EXISTS (SELECT 1
FROM personal
WHERE id_facultate = f.id_facultate);

9. SELECT id_facultate,COUNT(*)
FROM personal GROUP BY id_facultate

10. SELECT nume, salariu


FROM personal p
WHERE 3 > (SELECT COUNT(*)
FROM personal
WHERE p.salariu < salariu);

11. SELECT functie, SUM(salariu)


FROM personal
GROUP BY id_facultate,functie
HAVING id_facultate = (SELECT id_facultate FROM facultati WHERE
UCASE(TRIM(nume_facultate))="STIINTE ECONOMICE")
ORDER BY id_facultate,functie

12. SELECT f.nume_facultate, sp.nume_spec,SUM(s.valoareTaxa)


FROM studenti as s, specializari AS sp, facultati AS f
WHERE s.id_spec=sp.id_spec AND sp.id_facultate=f.id_facultate
GROUP BY f.nume_facultate, sp.nume_spec

13. SELECT t.nume_facultate, MAX(totaltaxa)


FROM (SELECT f.nume_facultate, sp.nume_spec,SUM(s.valoareTaxa) AS
totalTaxa
FROM studenti as s, specializari AS sp, facultati AS f
WHERE s.id_spec=sp.id_spec AND sp.id_facultate=f.id_facultate
GROUP BY f.nume_facultate, sp.nume_spec) AS t
GROUP BY t.nume_facultate

14. SELECT f.nume_facultate,COUNT(s.id_student)


FROM studenti as s, specializari AS sp, facultati AS f
WHERE s.id_spec=sp.id_spec AND sp.id_facultate=f.id_facultate
GROUP BY f.nume_facultate

15. SELECT f.nume_facultate,COUNT(s.id_student)


FROM studenti as s, specializari AS sp, facultati AS f

Ozten CHELAI 35
WHERE s.id_spec=sp.id_spec AND sp.id_facultate=f.id_facultate AND
s.valoaretaxa IS NULL
GROUP BY f.nume_facultate

Ozten CHELAI 36
5. SUBIECTE

5.1.TEORIE
1. Ce este o baza de date?
2. Care sunt obiectele unei baze de date?
3. Ce este un SGBD?
4. Care sunt nivelurile de abstractizare a datelor într-un SGBD?
5. Ce arhitecturǎ au aplicaţiile cu BD?
6. Ce funcţii de prelucrare a datelor sunt implementate în SGBD?
7. Ce servicii de calitate sunt oferite de SGBD?
8. Ce instrumente de prelucrare sunt implementate In SGBD?
9. Ce reprezintǎ un model de date?
10. Ce reprezintǎ Modelul Entitate-Relaţie?
11. Ce reprezintǎ Modelul relaţional al datelor?
12. Care sunt operatorii relaţionali?
13. Ce reprezintǎ restricţia?
14. Ce reprezintǎ proiecţia?
15. Ce reprezintǎ reuniunea?
16. Ce reprezintǎ Join?
17. Ce reprezintǎ intersecţia?
18. Ce sublimbaje sunt incluse în SQL?
19. Care este sintaxa generalǎ a comenzii SELECT?
20. Ce reprezintǎ un ALIAS?
21. Ce este un limbaj neprocedural (declarativ)?
22. Ce înţelegeţi prin „structura” unui tabel?
23. Ce reprezintǎ un tabel în SQL?
24. Ce reprezintǎ o restricţie?
25. Ce reprezintǎ o linie într-un tabel?
26. Ce este „cheia primarǎ”?
27. Ce este un câmp?
28. Ce reprezintǎ un tip de datǎ?
29. Care sunt cele mai utilizate tipuri de date în SGBD-uri?
30. Operatorii asociaţi tipului numeric de date.
31. Funcţii implementate pentru tipul numeric de date.
32. Operatorii asociaţi tipului „sir de caractere”.
33. Funcţii implementate pentru tipul de date „sir de caractere”.
34. Operatorii asociaţi tipului de date „datǎ calendaristicǎ”.
35. Funcţii implementate pentrui tipul de date „datǎ calendaristicǎ”.
36. Operatorii asociaţi tipului logic de date.
37. Tipul „NULL” de date.
38. Care sunt funcţiile pentru conversii între tipurile de date.
39. Ce cuprinde o expresie?
40. Ce specificǎ clauza DISTINCT ?
41. Tipuri de JOIN.
42. Ce operaţie realizeazǎ SELF-JOIN?

Ozten CHELAI 37
43. Ce operaţie realizeazǎ EQUI-JOIN?
44. Ce operaţie realizeazǎ THETA-JOIN?
45. Ce operaţie realizeazǎ OUTER-JOIN?
46. Ce operaţie realizeazǎ operatorul UNION?
47. Cum se specificǎ o operaţie de joncţiune în SQL?
48. Cum se obţine un produs cartezian în SQL?
49. Cum se specificǎ o joncţiune echivalentǎ în SQL?
50. Operatorul INNER JOIN.
51. Cum se specificǎ o joncţiune ne-echivalentǎ în SQL?
52. Cum se specificǎ joncţiunile externe la Access?
53. Specificaţi analogiile pentru terminologiile SQL-modelul relaţional-MER.
54. Ce sunt funcţiile de grup?
55. Care sunt funcţiile de grup?
56. La ce se foloseşte clauza GROUP BY?
57. La ce se foloseşte clauza HAVING?
58. Ce sunt subinterogǎrile?
59. Ce operatori de comparaţie pentru mulţimi?
60. Când se utilizeazǎ operatorul IN?
61. Când se utilizeazǎ operatorul ANY?
62. Când se utilizeazǎ operatorul ALL?
63. Când se utilizeazǎ operatorul EXISTS?
64. Ce sunt subinterogǎrile corelate?

5.2.INTEROGARI SIMPLE
65. Sǎ se afişeze numele, funcţia şi salariul angajaţilor în ordinea descrescǎtoare a
salariilor pe fiecare funcţie.
66. Sǎ se afişeze numele şi funcţia angajaţilor facultǎţii cu codul 2.
67. Sǎ se afişeze angajaţii cu salariul 10 milioane şi 20 de milioane lei ordonaţi dupǎ codul
facultǎţii.
68. Sǎ se afişeze personalul angajat în anul 1999.
69. Sǎ se afişeze angajaţii care sunt femei.
70. Sǎ se afişeze angajaţii care sunt bǎrbaţi.
71. Sǎ se afişeze angajaţii care au spor de salariu.
72. Sǎ se afişeze angajaţii care nu au spor de salariu.
73. Sǎ se afişeze angajaţii care au funcţia lector în ordine alfabeticǎ a numelor.
74. Sǎ se afişeze angajaţii care au funcţia asistent în ordine descrescǎtoare a salariilor.
75. Sǎ se afişeze angajaţii care au funcţia conferenţiar în ordine alfabeticǎ a numelor.
76. Sǎ se afişeze angajaţii care au funcţia profesor în ordine descrescǎtoare a salariilor.
77. Sǎ se afişeze numele, funcţia şi salariul anual.
78. Sǎ se afişeze numele, funcţia şi salariul anual pentru angajaţii cu salariul anual mai
mare decât 60 milioane lei.
79. Sǎ se afişeze salariul mǎrit cu 6% pentru toţi angajaţii.
80. Afişaţi angajaţii cu salariul între 6 milioane şi 12 milioane.
81. Sǎ se afişeze salariul mǎrit cu 10% pentru toţi angajaţii.
82. Afişaţi angajaţii cu salariul între 7 milioane şi 15 milioane.
83. Afişaţi angajaţii facultǎţilor cu numǎrul 2 şi 3.
84. Afisati personalul cu numele conţinând “ESCU” sau “GHE”.
85. Afisati personalul cu numele începând litera “A” sau “C”.
86. Afişaţi toţi angajaţii care au şef.
87. Afişaţi toţi angajaţii care nu au şef.

Ozten CHELAI 38
88. Afişǎţi urmǎtoarea propoziţie pentru fiecare angajat:
***** este angajat la facultatea cu numarul ** si are salariul de ******.
89. Afişǎţi urmǎtoarea propoziţie pentru fiecare angajat:
***** este angajat in anul ***** si are functia de ******.
90. Afişaţi salariul anual brut (salariu*%spor lunar) pentru toţi angajaţii.
91. Afişaţi angajaţii dupǎ anul 1999.
92. Afişaţi numele şi salariul anual al personalului facultatii 1 cu salariul anual mai mare
decât 50000000, în ordine alfabetica.
93. Afisati numele si data angajarii salariatilor angajati in 1999.
94. Afişaţi salariul mǎrit cu 20% pentru şefi.
95. Afisati numele tuturor angajatilor cu a treia litera N.
96. Afisaţi salariile lunare în lei grei, rotunjite la o zecimala pentru tot personalul.
97. Afisati numele tuturor angajatilor cu a treia litera A.
98. Afisaţi salariile lunare în lei grei, rotunjite la douǎ zecimale pentru tot personalul.
99. Afisati numele, functia si salariul angajatilor cu functia: LECTOR sau ASISTENT si
salariul diferit de 9000000, 5000000, 5500000.
100. Afisati numele, salariul, data angajarii pentru anagajatii dupa 1998 care sunt lector
si au litera A in nume.
101. Afisati angajatii care au manager din facultatile cu id_facultate 1 si 2.
102. Afisati numarul de zile de la angajare al intregului personal.
103. Afisati angajatii in luna ianuarie.
104. Afisati ziua din saptamana in urmatorul an dupa angajare pentru intregul personal.
105. Afisati numarul de caractere al numelor angajatilor din personal.
106. Afisati angajaţii cu numele mai lung de 22 de caractere.
107. Afisati angajatii care au spor de salariu, angajati dupa 1990 din facultatea 1.
108. Afisati gradul salariului de 9000000.
109. Afisati pentru sefi urmatoarea propozitie. Atenţie numele incepe cu majuscula.
****** este SEF al facultatii cu numarul *.

5.3.INTEROGARI COMPLEXE
110. Sǎ se afişeze numele angajaţilor şi denumirea facultǎţii la care sunt angajaţi.
111. Sǎ se afişeze numele studenţilor şi denumirile specializǎrilor la care sunt studenţi.
112. Sǎ se afişeze numele studenţilor şi denumirea facultǎţii la care sunt studenţi.
113. Sǎ se afişeze studenţii facultǎţii de « Stiinţe economice ».
114. Sǎ se afişeze studenţii facultǎţii de « Stiinţe economice » in ordinea anilor de studiu
si a grupelor.
115. Sǎ se afişeze numele şi gradul salariilor angajaţilor din tabelul personal.
116. Afisati numele studentilor si denumirile specializarilor la care sunt studenti.
117. Afisati numele studentilor impreuna cu denumirile specializarilor si facultatilor in
ordine alfabetica dupa nume
118. Afisati numele, denumirea specializarii si facultatea studentilor cu taxa mai mare
decat 300.
119. Afisati numele angajatilor, salariile si gradele salariilor in ordinea descrescatoare a
salariilor.
120. Afisati angajatii cu gradul 4 al salariului.
121. Afisati numele angajatilor, functia, salariul, gradul salariunlui si numele
specializarii pentru toti angajatii care apartin facultǎţii de « Stiinţe Economice »,
ordonati alfabetic dupa nume.

Ozten CHELAI 39
122. Afisati numele, functia, facultatea, salariul si impozitul angajatilor din tabelul
personal, ordonati dupa facultate si nume.
123. Afisati denumirea facultatii care nu are angajati in tabelul personal.
124. Afisati toti angajatii (nume si id) impreuna cu numele si id-ul sefului.
125. Gasiti functia care a fost ocupata in prima jumatate a anului 1999 si aceeasi functie
a fost ocupata in timpul aceleiasi perioade in 2000.
126. Gasiti toti angajatii care s-au angajat inaintea sefilor lor.
127. Afisati studentii fara taxa impreuna cu denumirea facultatii, specializarii, anul de
studiu si grupa in ordinea facultatilor, specializarilor, anilor de studii, grupei si dupa
nume.
128. Afişaţi studenţii din anul 1 ai facultaţii de Ştiinţe Economice, ordonaţi alfabetic pe
grupe.
129. Afişaţi facultǎţile şi specializǎrile pentru care nu sunt studenţi în baza de date.
130. Afişaţi pentru fiecare angajat colegii din aceeaşi facultate.
131. Afişaţi numele sefilor şi denumirea facultǎţii.
132. Afişaţi numele angajaţilor, denumirea facultǎţii şi salariul angajaţilor cu gradul
salariului egal cu 2.
133. Afişaţi personalul casatorit al facultǎţii de Matematica şi Informatica angajat dupǎ
anul 1999.
134. Afişaţi denumirile facultatilor şi funcţiile angajaţilor din tabelul »personal ».
135. Afişaţi denumirea facultǎţii, numele, funcţia, salariul mǎrit cu 20% şi gradul noului
salariu pentru toţi angajaţii.
136. Afişaţi numele, funcţia, salariul şi suma necesarǎ pentru fiecare angajat pentru a
trece la gradul urmǎtor de salariu.
137. Afişaţi salariul maxim pe fiecare tip de facultate in ordinea descrescǎtoare a
salariilor.
138. Afişaţi totalul salariilor pe facultăţi pentru fiecare tip de funcţie.
139. Afişaţi, în ordine descrescǎtoare dupǎ salariu, angajatii care câştiga cel mai mare
salariu pe fiecare facultate.
140. Afişaţi salariul mediu anual pe fiecare tip de facultate in ordinea crescǎtoare a
salariilor.
141. Afişaţi angajaţii cu salariul mai mare decât salariile medii pe fiecare facultate.
142. Afişaţi cei mai recenti angajati din fiecare facultate. Ordonati dupa data angajarii.
143. Afişaţi angajaţii cu salariul mai mare decât salariul mediu pe functia respectiva.
144. Listati, folosind o subinterogare, toate facultǎţile care nu au angajati.
145. Afişaţi numărul de angajaţi ai fiecărei facultăţi.
146. Afişaţi numele şi salariul primilor trei angajati, în functie de salariul cistigat.
147. Afişaţi totalul salariilor pe fiecare funcţie pentru facultatea de “Stiinte Economice”.
148. Afişaţi totalul taxelor pe fiecare facultate.
149. Afişaţi facultatea cu totalul cel mai mare al taxelor.
150. Afişaţi numarul de studenti ai fiecărei facultăţi.
151. Afişaţi numarul de studenţi fără taxă pe fiecare specializare.

Ozten CHELAI 40

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