Sunteți pe pagina 1din 5

UTILIZAREA LIMBAJULUI TRANSACT SQL(T-SQL) DE INTEROGARE A

BAZELOR DE DATE MICROSOFT SQL SERVER

Se presupune c ntr-o instan Microsoft SQL Server 2005/2008 avem creat baza de date
angajat, cu tabelele emp care conine angajaii unei firme i dept---care descrie departamentele
din care fac parte angajaii (cu diagrama de relaii i structura date mai jos), populate cu date
care s respecte structura propus:
emp
empno
ename
job
mgr
hiredate
sal
comm
deptno

dept
deptno
dname
loc

Structura tabelelor:
Tabelul emp
Coloan Allow Nulls Data Type
NOT NULL numeric(4,0)
empno
ename
job
mgr
hiredate
sal
comm

NULL
NULL
NULL
NULL
NULL
NULL

Semnificaie coloan
Codul angajatului (cheie
primar)
varchar(50)
Numele angajatului
varchar(9)
Job-ul angajatului
numeric(4,0) Codul managerului
datetime
Data angajrii
numeric(7, 2) Salariul angajatului
numeric(7, 2) Comisionul angajatului

deptno

NOT NULL numeric(2,0)

Nr. departamentului
angajatului(cheie strin)

Tabelul dept
Coloan Allow Nulls Data Type
NOT NULL numeric(2,0)
deptno
dname
loc

NULL
NULL

varchar(14)
varchar(13)

Semnificaie coloan
Numrul departamentului (cheie
primar)
Numele departamentului
Locaia departamentului

Exerciii rezolvate- Utiliznd limbajul de interogare a datelor Microsoft Transact


SQL
S se scrie instruciunile Microsoft Transact-SQL care s rspund la urmtoarele cerine:
Utilizarea instruciunii SELECT i a diferitelor clauze ale acesteia:

I.

1. S se afieze numele angajailor, concatenat cu jobul, separat de o virgul i un spaiu,


sub aliasul Angajat si titlu.
SELECT ename+, +job AS [Angajat si titlu] FROM emp
2. S se afieze coninutul tabelei emp i apoi numrul de nregistrri.
SELECT * FROM emp
SELECT Tabela emp: , COUNT(*) AS [Nr. De inregistrari]
FROM emp
3. S se afieze numele angajailor a cror a treia liter a numelor este A.
SELECT ename FROM emp WHERE ename COLLATE Latin1_General_Cs_As
LIKE __A
4. S se afieze angajaii din departamentul 30, folosind alias-uri adecvate.
SELECT In departamentul +STR(deptno)+ sunt ,
STR(COUNT(*))+ angajati! FROM emp
WHERE deptno = 30
GROUP BY deptno
5. Afiai numrul de manageri existeni n tabela de angajai.
SELECT COUNT(DISTINCT(mgr)) [Nr. de manageri]
FROM emp

II.

Utilizarea instruciunii SELECT n subinterogri:


1. S se afieze numele i data angajrii pentru toi angajaii din acelai departament
cu Blake (excludei Blake)
SELECT ename, hiredate
FROM emp
WHERE deptno IN
(SELECT deptno FROM emp
WHERE ename = Blake)
AND ename < > Blake
2. S se afieze codul i numele angajailor care ctig mai mult dect media
salariilor din firm; sortai rezultatul n ordinea descendent a salariilor.
SELECT empno [Codul angajat], ename [Numele]
FROM emp
WHERE sal > (SELECT AVG(sal) FROM emp)
ORDER BY sal DESC
3. Afiai codul i numele tuturor angajailor care lucreaz ntr-un departament care
are i angajai al cror nume conine pe T sau t.
SELECT empno [Codul angajat], ename [Numele]
FROM emp
WHERE deptno IN (SELECT deptno FROM emp WHERE ename LIKE %T%)
4. Afiai numele, numrul departamentului i jobul tuturor angajailor a cror
locaie de departament este Dallas:
SELECT ename, deptno, job
FROM emp
WHERE deptno IN
(SELECT deptno FROM emp
WHERE loc = Dallas)
5. Afiai numele i salariul angajailor subordonai lui King.
SELECT ename, sal
FROM emp
WHERE mgr IN
(SELECT empno FROM emp WHERE ename=King)
6. Afiai numrul departamentului, numele i jobul angajailor din departamentul
Sales.
SELECT dept, ename, job
FROM emp
WHERE deptno IN

(SELECT deptno FROM dept WHERE dname=Sales)


7. Afiai codul, numele i salariul angajailor care ctig mai mult dect salariul
mediu din firm i care lucreaz n departamentele care au cel puin un angajat
care are litera T n nume.
SELECT empno, ename, sal
FROM emp
WHERE sa l>
(SELECT AVG(sal) FROM emp )
AND deptno IN
(SELECT deptno FROM emp WHERE ename LIKE %T%)
III.

Utilizarea instruciunii SELECT n gruparea datelor(funcii de grup)


1. Salariul maxim, minim, suma i media acestuia pentru toi angajaii; rotunjii
rezultatul la prima poziie zecimal .
SELECT ROUND(MAX(sal), 0) Maxim,
ROUND(MIN(sal), 0) Minim,
ROUND(SUM(sal), 0) Suma,
ROUND(AVG(sal), 0) Media,
FROM emp
2. Afiai maximul, minimul i suma salariilor pentru fiecare tip de job.
SELECT job, ROUND(MAX(sal),0) [Maximul],
MIN(sal) Minimul,
SUM(sal) Suma,
AVG(sal) [Media salariului]
FROM emp
GROUP BY job
3. Afiai numrul de persoane cu acelai job.
SELECT job, COUNT(*) [Nr. de persoane]
FROM emp
GROUP BY job
4. Afiai codul managerului i cel mai mic salariu al angajailor care-l au ca
manager ; excludei angajaii care nu au manager i grupurile de angajai care au
salariul minim mai mic dect 1000; sortai rezultatul n ordinea descresctoare a
salariului.
SELECT mgr, MIN(sal)
FROM emp
WHERE mgr IS NOT NULL
GROUP BY mgr
HAVING MIN(sal) > 1000
ORDER BY MIN(sal) DESC
Verificare (pentru un manager):

SELECT MIN(sal) FROM emp


WHERE mgr = 7566
5. Afiai numele i locaia departamentului, nr. de angajai i salariul mediu pentru
toi angajaii din acel departament.
SELECT d.dname, d.loc,
COUNT(*) [Nr. de angajati],
ROUND(AVG(sal), 2) [Salariul mediu]
FROM emp e, dept d
WHERE d.deptno = e.deptno
GROUP BY d.dname, d.loc
6. S se afieze numrul de angajai din fiecare an calendaristic.
SELECT YEAR(hiredate) [Anul angajarii],
COUNT(hiredate) [Nr. de angajati]
FROM emp
GROUP BY YEAR(hiredate)
Verificare:
SELECT YEAR(hiredate) [Anul angajarii],
COUNT(hiredate) [Nr. de angajati]
FROM emp
WHERE YEAR(hiredate) = 1981
GROUP BY YEAR(hiredate)
7. S se afieze numrul departamentului, joburile din departament (tipurile) i
suma salariilor pentru joburile respective.
SELECT deptno, job, SUM(sal) [Suma salariilor pe job]
FROM emp
GROUP BY job, deptno --(executie de la dreapta la stanga)
Verificare:
SELECT deptno, ename, job,sal
FROM emp
ORDER BY deptno, job
--faceti suma pe joburi in fiecare departament si comparati

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