Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
Ozten CHELAI 1
CUPRINS
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.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.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.
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.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.
adresa
nume oras nota disciplina
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.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.
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
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:
b.
Ozten CHELAI 10
2. CURS 2. SQL - TIPURI DE DATE
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
-...
Ozten CHELAI 11
2.3.Tipuri de date
O expresie, pentru un tip de dată, este formatǎ din variabile, constante, operatori, funcţii şi
întoarce un rezultat.
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ă
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ǎ.
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ǎ
Ozten CHELAI 14
Val(string) – converteşte sirul dat ca argument în valoare numericǎ
Str(number) – converteşte în şir numarul specificat ca argument
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.
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:
Exemplu:
SELECT nume AS angajat, profesie FROM personal
Ozten CHELAI 16
LABORATOR 2. Interogarea datelor dintr-un tabel
10. Afişaţi salariul anual brut (salariu*%spor lunar) pentru toţi angajaţii.
12. Afişaţi numele şi salariul anual al personalului facultatii 1 cu salariul anual mai mare
decât 50000000, în ordine alfabetica.
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.
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.
23. Afisati numele, salariul, data angajarii pentru anagajatii dupa 1998 care sunt lector si
au litera A in nume.
25. Afisati toti angajatii facultatii 2 care sunt ‘lector’ sau ‘conferentiar’.
27. Afisati salariile marite cu 20% pentru conferentiari si profesori, 15% lectori şi 10%
pentru ceilalţi.
30. Afisati ziua din saptamana in urmatorul an dupa angajare pentru intregul personal.
33. Afisati angajatii care au spor de salariu, angajati dupa 1990 din facultatea 1.
35. Afisati pentru sefi urmatoarea propozitie. Atenţie numele incepe cu majuscula.
Ozten CHELAI 18
3. CURS 3 BD - SQL. INTEROGARI DIN MAI MULTE TABELE
3.1.OPERATORI PE MULŢIMI
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).
sau
SELECT nume,functie,salariu FROM personal WHERE id_facultate=1
UNION ALL
SELECT nume,functie,salariu FROM personal WHERE id_facultate=2
Ozten CHELAI 20
3. joncţiuni externe - OUTER-JOIN
4. autojoncţiuni - SELF-JOIN.
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.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.
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
4. Afisati numele, denumirea specializarii si facultatea studentilor cu taxa mai mare decat
400.
8. Afisati numele angajatilor, functia, salariul, gradatia si numele facultatii pentru toti
angajatii care nu apartin departamentului “Auxiliari”, ordonati dupa salariu in ordine
descrescatoare.
11. Afisati toti angajatii (nume si id) impreuna cu numele si id-ul sefului.
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.
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
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
Ozten CHELAI 27
4. CURS 4 BD - SQL. FUNCŢII DE GRUP ŞI INTEROGǍRI
4.1.AGREGAREA DATELOR FOLOSIND FUNCŢII DE GRUP
Funcţiile de grup mai utilizate sunt: AVG, MIN, MAX, COUNT, SUM.
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.
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.
4.2.SQL. SUBINTEROGĂRI
Subinterogările din clauzele WHERE, FROM sunt utilizate în operaţii de comparaţie astfel:
WHERE <expresie> <operator> (SELECT ……)
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)
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 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);
Ozten CHELAI 32
LABORATOR 4 – Functii de grup
3. Afişaţi, în ordine descrescǎtoare dupǎ salariu, angajatii care câştiga cel mai mare
salariu pentru fiecare tip de functie.
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.
10. Afişaţi numele şi salariul primilor trei angajati, în functie de salariul cistigat.
Ozten CHELAI 33
SOLUTII LABORATOR 4
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
5. SELECT nume,functie,salariu
FROM personal
WHERE salariu > ANY (SELECT AVG(salariu) FROM personal GROUP BY
functie)
ORDER BY salariu
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;
9. SELECT id_facultate,COUNT(*)
FROM personal GROUP BY id_facultate
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