Documente Academic
Documente Profesional
Documente Cultură
4
2. Afişaţi data ultimei angajări, salariul minim şi salariul maxim pentru fiecare
departament.
select count(employee_id),max(hire_date),max(salary)as"salariu maxim",min (salary)as"salariu
minim",department_id
from employees
group by department_id
3. Afişaţi numărul de departamente pentru fiecare locaţie. (Departments)
select location_id,count(department_id)
from departments
group by location_id
4. Afişaţi numărul de orașe distincte care sunt înregistrate pentru fiecare
țară.(Locations) Ordonați datele în funcție de numărul de orașe.
select country_id,count(city)
from locations
group by country_id
order by count(city)
5. Afişaţi departamentele în care salariul maxim este mai mare dacât 10000.
select department_id ,max(salary)
from employees
group by department_id
having max(salary)>10000;
6. Afişaţi numărul de angajati cu comision pentru fiecare job.
select job_id,count(commission_pct)as"numar angajati"
from employees
group by job_id
having min(commission_pct)>0
7. Afişaţi numărul de departamente care au manager.
select count(manager_id)as"Nr dep care au manager"
from employees
8. Afişaţi media rotunjită a salariului minim pentru fiecare tip de job.
select round(avg(min(salary)))
from employees
group by job_id
9. Afişaţi salariul maxim și data primei angajări pentru fiecare departament și fiecare
job. Ordonați datele după data afișată.
select department_id,job_id,max(salary),min(hire_date)
from employees
group by department_id,job_id
order by min(hire_date)
10. Afişaţi numărul de angajaţi si salariul maxim pentru fiecare an in parte.
select count(employee_id),max(salary),to_char(hire_date,'yyyy')as"ANUL"
FROM EMPLOYEES
group by to_char(hire_date,'yyyy')
11. Afişaţi numărul de angajaţi si salariul maxim pentru fiecare an in parte, pentru
anii în care acest număr (numarul de angajati) a fost mai mare decât 10.
select count(employee_id),max(salary),to_char(hire_date,'yyyy')as"ANUL"
FROM EMPLOYEES
group by to_char(hire_date,'yyyy')
having count(employee_id)>10
12. Afişaţi numărul de angajaţi si salariul maxim pentru fiecare an in parte, pentru
anii 1993-1998.
select to_char(hire_date,'yyyy'),max(salary),count(employee_id)
from employees
where to_char(hire_date,'yyyy') between 1993 and 1998
group by to_char(hire_date,'yyyy')
13. Afișați salariul minim și maxim pentru angajatii de tip funcționar din fiecare
departament.
SELECT MAX(salary),MIN(salary),job_id
FROM Employees
group by job_id
having job_id like '%clerk';
14. Eliminați din rezultatele de la punctul anterior job-urile cu salariul maxim sub
4000.
SELECT MAX(salary),MIN(salary),job_id
FROM Employees
group by job_id
having job_id like '%clerk' and max(salary)>4000
15. Afisati numarul de angajati pentru fiecare an si luna in parte.
select to_char(hire_date,'yyyy'),to_char(hire_date,'month'),count(employee_id)
from employees
group by to_char(hire_date,'yyyy'),to_char(hire_date,'month')
Lab.5
1. Afișați numele, numărul și numele job-ului pentru toti angajații.
select last_name , employee_id, job_title
from employees e , jobs j
where e.job_id=j.job_id
2. Afișați numele, numărul și numele job-ului pentru toti angajații cu job-ul
Programmer.
select last_name , employee_id, job_title
from employees e , jobs j
where e.job_id=j.job_id and job_title like'%Programmer'
3. Afișați numele angajaților, numele departamentului în care lucrează și numele job-
ului.
select first_name,last_name ,department_name ,job_title
from employees e, departments d, jobs j
where e.job_id=j.job_id and e.department_id=d.department_id
4. Scrieti o cerere care sa intoarca numele, numarul și numele departamentului și job-
ul tuturor celor care lucreaza în Seattle.
select first_name , department_name , job_title
from employees e, departments d, jobs j , locations l
where e.job_id=j.job_id and e.department_id=d.department_id and
d.location_id=l.location_id and city in'Seattle'
5. Afișați toate locațiile (orașul și țara) din Europa.
select l.country_id,l.city,c.country_name
from countries c, locations l
where c.region_id='1'and c.country_id=l.country_id
6. Afișați numele departamentelor din Canada.
select department_name
from departments d, locations l
where d.location_id=l.location_id and l.country_id='CA'
7. Afișați numele departamentelor, numărul de angajați și salariul mediu pentru
fiecare departament.
select department_name ,count(employee_id), round(avg(salary))
from employees e, departments d
where e.department_id=d.department_id
group by department_name ,e.department_id
8. Gasiti care sunt numele acelor departamente în care salariul maxim este mai mare
dacat 10000.
select department_name , max(salary)
from employees e, departments d
where e.department_id=d.department_id
group by department_name
having max(salary)>10000
9. Afisati numarul de tari care sunt inregistrate pentru fiecare regiune.
select count(country_name), region_id
from countries c, locations l
where c.country_id=l.country_id
group by region_id
10. Afisati numele job-urilor, salariul mediu pentru fiecare si nr de angajati pentru
job-urile de vanzari (Sales).
select job_title,round(avg(salary)),count(employee_id)
from employees e , jobs j
where e.job_id=j.job_id and job_title like 'Sales%'
group by job_title
11. Scrieți o interogare care afișează numele și job-ul angajaților care lucrează în
același departament cu angajatul cu numele Luis Popp.
select e1.first_name,e1.last_name , j.job_title , e1.department_id
from employees e, employees e1,jobs j
where e.first_name='Luis' and e.last_name='Popp' and
e.department_id=e1.department_id
12. Scrieti o interogare care sa afiseze numele și identificatorii angajatilor precum și
numele și identificatorul managerului caruia ii este subordonat fiecare. Etichetati
coloanele astfel: "Angajat"," Marca_ang"," Manager", " Marca_man". Salvati
interogarea intr-un script.
select concat(concat(e.first_name,' '),e.last_name)as"Angajat",e.employee_id as
"Marca_ang",concat(concat(e1.first_name ,'
'),e1.last_name)as"Manager",e.manager_id as"Marca_man"
from employees e , employees e1
where e.employee_id=e1.employee_id
order by e1.manager_id
13. Gasiti numele și salariul fiecarui angajat care este subordonat managerului cu
numele King.
select concat(concat (e.first_name , ' '),e.last_name)as"Angajat" ,e.salary
from employees e, employees e1
where e1.employee_id=e.manager_id and e1.last_name like 'King%'
14. Creaţi o interogare care are ca rezultat afişarea locației (id și oraș) şi a numelui
departamentelor. Includeţi toate locațiile, chiar dacă nu există niciun departament
corespunzător.
select l.location_id,l.city, d.department_name
from locations l , departments d
where d.location_id(+)=l.location_id
15. Creaţi o interogare care afişează numele țărilor și orașelor. Includeţi toate țările,
chiar dacă nu există niciun oraș corespunzător în tabelul locations.
select l.city,c.country_name
from locations l , countries c
where l.country_id(+)=c.country_id
Lab6.
1. Afișați angajații care au același job cu Luis Popp.
SELECT last_name, first_name, job_id
FROM Employees
WHERE job_id in
(SELECT job_id
FROM Employees
WHERE first_name='Luis' and last_name='Popp')
2. Afișați angajații care s-au angajat la aceeași dată cu Luis Popp sau după acesta.
SELECT concat(concat(last_name,' '), first_name)as "Nume angajat",
job_id,hire_date
FROM Employees
WHERE hire_date>=(select hire_date from employees where first_name='Luis'
and last_name='Popp')
3. Afișați angajații care câștigă mai mult decât oricare funcționar (CLERK).
SELECT last_name, first_name , employee_id, salary
FROM Employees
WHERE salary>ALL
(SELECT salary
FROM Employees
WHERE job_id LIKE ‘%CLERK’)
4. Afișați numele departamentelor din Seattle.
select department_name
from departments
where location_id=(select location_id from locations where city ='Seattle')
5. Afișați numele departamentelor aflate în aceeași locație cu departamentul
Finance.
select department_name
from departments
where location_id=(select location_id from departments where
department_name='Finance')
6. Afișați angajații care lucrează într-un departament cu măcar un angajat al cărui
nume începe cu litera A.
select*
from employees
where department_id in(select department_id from departments where
first_name like '%A')
7. Afișați angajații care au subordonați (sunt manageri).
select *
from employees
where employee_id in (select manager_id from employees where
manager_id=employees.employee_id);
8. Afișați angajații care nu au subordonați (nu sunt manageri).
select *
from employees
where employee_id not in(select manager_id from employees where
manager_id is not null)
9. Afișați locațiile în care nu există niciun departament.
select *
from locations
where location_id not in (select location_id from departments where location_id
is not null )
10. Afișați numele, data angajarii (hire_date) si salariul pentru toti angajatii care au
acelasi salariu si comision precum Kochhar.
select first_name,last_name,hire_date , salary
from employees
where salary = (select salary from employees where last_name='Kochhar') and
nvl(commission_pct,0)=(select nvl(commission_pct,0)from employees where
last_name in 'Kochhar')
11.Găsiţi numele pentru toţi angajaţii ale căror salarii sunt aceleaşi cu salariul
minim din oricare departament.
select last_name ,salary
from employees
where salary=(select min(salary) from employees )
Lab7.
Scrieţi un script care să permită crearea tabelelor corespunzătoare următoarei scheme
relaţionale:
Masini_id (IdMasina, datafabric, IdCompanie, IdCuloare, model, pret,
capacCilindrica, consum, IdCombustibil)
COMPANII_id (IdCompanie, numecomp, email, telefon, adresa)
CULORI_id (IdCuloare, cod, denumire, metalizat)
COMBUSTIBILI_id( IdCombustibil, nume)
OBSERVATIE: Sufixul id adăugat numelor de tabele va fi un şir de caractere
care să identifice obiectul creat de fiecare dintre dumneavoastră.
???? De ce este necesară această identificare????
Pentru siguranţă începeţi scriptul prin comenzi de ştergere a tabelelor.
Rezolvare
--COMPANII_Id (IdCompanie, numecomp, email, telefon, adresa)
create table Companii_Id
(
IdCompanie number(10) not null primary key,
numecomp varchar2(20) unique,
email varchar2(20),
telefon number(12)
constraint ck_telefon123 check(telefon>0),
adresa varchar2(50)
);
--CULORI_Id (IdCuloare, cod, denumire, metalizat)
create table Culori_Id
(
IdCuloare number(10) not null primary key,
cod varchar2(10) not null unique,
denumire varchar2(20)
);
--COMBUSTIBILI_Id (IdCombustibil, nume)
create table Combustibili_Id
(
IdCombustibil number(10,2) not null primary key,
nume varchar(2) not null
);
--MASINI_Id (IdMasina, datafabric, IdCompanie, IdCuloare, model, pret,capacCilindrica,
consum, IdCombustibil)
create table Masini_Id
(
IdMasina number(10) not null primary key,
datafabric date default sysdate,
IdCompanie number(10)
constraint nn_masini_id_comp not null
constraint fk_masini_id_comp references Companii_Id(IdCompanie),
IdCuloare number(10)
constraint nn_masini_id_culoareid not null
constraint fk_masini_id1_culoareid references Culori_Id(IdCuloare),
model varchar2(10),
pret number(4)
constraint ck_pret123 check(pret>0),
capacCilindrica number(5),
consum number(5,2),
IdCombustibil number(10,2)
constraint nn_masini_id_combid not null
constraint fk_masini_id_combid references Combustibili_Id(IdCombustibil)
);
Scripturi inserare date in tabelul Companii_Id.
CREATE SEQUENCE companii_Id_seq; -- se executa o singura data odata cu crearea tabelelor
INSERT INTO Companii_Id (idComp, nume, email, telefon, adresa)
VALUES (companii_Id_seq.NEXTVAL, 'Sony', 'sales@sony.com', 123456, 'US')
--cand sunt specificate valori pentru toate coloanele din tabel, lista de coloane nu este
obligatorie
INSERT INTO Companii_Id
VALUES (companii_Id_id_seq.NEXTVAL, 'BMW', 'sales@bmw.com', 123456, 'DE')