SQL 2
SQL 2
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN locations l ON d.location_id = l.location_id
JOIN countries c ON l.country_id = c.country_id
JOIN regions r ON c.region_id = r.region_id
JOIN jobs j ON e.job_id = j.job_id;
SELECT last_name,job_title,department_name,city,country_name,region_name
FROM employees e
JOIN departments d using(department_id)
JOIN locations l using(location_id)
JOIN countries c using(country_id)
JOIN regions r using(region_id)
JOIN jobs j using(job_id);
SELECT last_name,department_name
FROM employees e
JOIN departments d using(department_id,manager_id);
SELECT last_name,department_name
FROM employees e
JOIN departments d using(department_id)
WHERE phone_number is not null ;
/*
Wyswietl liczbe pracownikow, rok zatrudnienia, nazwe departmantu.
Wyswietl podsumowania zarowno dla lat, jak i departamentow.
*/
SELECT *
FROM employees WHERE manager_id is null;
SELECT *
FROM employees WHERE manager_id=100;
SELECT *
FROM employees WHERE manager_id=101;
SELECT employee_id,first_name,last_name,manager_id,level
FROM employees
START WITH manager_id is null
CONNECT BY prior employee_id = manager_id ;
--10:25
SELECT employee_id,first_name,last_name,manager_id,level
FROM employees
WHERE level=4
START WITH manager_id is null
CONNECT BY prior employee_id = manager_id ;
/*
Wyswietl sume zarobkow,srednie zarobki, level, miasta.
Uwzglednij pracownikow zatrudnionych przed 01-01-2007.
*/
select to_Date('01-01-2007','dd-mm-yyyy') from dual;
SELECT *
FROM employees
WHERE salary>(
SELECT avg(salary)
FROM employees
WHERE level=3
START WITH manager_id is null
CONNECT BY prior employee_id = manager_id
);
SELECT *
FROM employees
WHERE manager_id=100;
SELECT employee_id,first_name,last_name,manager_id,level
FROM employees
START WITH employee_id =101
CONNECT BY prior employee_id = manager_id ;
SELECT employee_id,first_name,last_name,manager_id,level
FROM employees
START WITH manager_id=101
CONNECT BY prior employee_id = manager_id ;
/*
Wyswietl sume zarobkow w calej firmie.
Nie uwzglednij wszystkich podwladnych posrednich i bezposrednich Lex De Haan
*/
SELECT employee_id
FROM employees
START WITH manager_id =102
CONNECT BY prior employee_id = manager_id ;
SELECT sum(salary)
FROM employees
WHERE employee_id not in (
SELECT employee_id
FROM employees
START WITH manager_id =102
CONNECT BY prior employee_id = manager_id
);
select sum(salary)
from employees
start with manager_id is null
connect by prior employee_id = manager_id and manager_id <> 102
order by manager_id;
/*
Wyswielt numery pracownikow, imiona, nazwiska,zarobki,
sume zarobkow. Uwzglednij tylko pracownikow z panstwa United States of America.
*/
SELECT employee_id,first_name,last_name,salary,
sum(salary) over () suma
FROM employees
JOIN departments USING(department_id)
JOIN locations USING(location_id)
JOIN countries USING(country_id)
WHERE country_name='United States of America';
--11:49
WITH dane AS (
SELECT employee_id,department_id,salary,
round(avg(salary) over ()) srednia_w_firmie
FROM employees )
SELECT *
FROM dane
WHERE department_id=60;
SELECT employee_id,department_id,salary,
(SELECT avg(salary) FROM employees WHERE department_id =
zew.department_id ) srednia_w_dep
FROM employees zew
ORDER BY 2 ;
SELECT employee_id,department_id,salary,
avg(salary) over (partition by department_id) srednia_w_dep
FROM employees;
/*
Wyswietl numery pracownikow,miasto,maksymlane zarobki w miescie,
zarobki pracownika, roznice pomiedzy maksymlane zarobki w miescie,
a zarobkami pracownika
*/
WITH dane as (
SELECT employee_id,city,max(salary) over (partition by city)
maks_w_miescie,salary
FROM employees
JOIN departments USING(department_id)
JOIN locations USING(location_id)
)
SELECT employee_id,
city,
maks_w_miescie,
salary,
maks_w_miescie-salary
FROM dane;
SELECT employee_id,salary,
dense_rank() over (order by salary ) ranking_po_zarobkach
FROM employees;
SELECT employee_id,salary,
dense_rank() over (order by salary desc) ranking_po_zarobkach_malejaco
FROM employees;
SELECT employee_id,hire_date,
dense_rank() over (order by hire_date desc) ranking_po_datach_malejaco
FROM employees;
SELECT avg(salary),department_id,
dense_rank() over (order by avg(salary) desc) ranking_po_sredniej_malejaco
FROM employees
GROUP BY department_id ;
SELECT employee_id,salary,
rank() over (order by salary ) ranking_po_zarobkach
FROM employees;
/*
Wyswietl liczbe pracownikow, nazwy panstw, ranking po liczbie pracownikow malejaco.
*/
SELECT count(employee_id) liczba_pracownikow,
country_name,
dense_rank() over (order by count(employee_id) desc) ranking
FROM employees
JOIN departments USING(department_id)
JOIN locations USING(location_id)
JOIN countries USING(country_id)
GROUP BY country_name;
SELECT employee_id,salary,
row_number() over (order by salary ) ranking_po_zarobkach
FROM employees;
SELECT *
FROM (
SELECT employee_id,salary,
row_number() over (order by salary ) ranking_po_zarobkach
FROM employees
)
WHERE ranking_po_zarobkach<=10;
SELECT *
FROM (
SELECT employee_id,salary,
dense_rank() over (order by salary ) ranking_po_zarobkach
FROM employees
)
WHERE ranking_po_zarobkach<=3;
--row_number
--dense_rank
--rank
SELECT *
FROM (
SELECT employee_id,salary
FROM employees
ORDER BY salary
)
WHERE rownum<=10;
SELECT *
FROM (
SELECT employee_id,salary
FROM employees
ORDER BY salary
)
WHERE rownum<=20;
SELECT *
FROM (
SELECT employee_id,salary
FROM employees
ORDER BY salary
)
WHERE rownum between 20 and 30;
SELECT *
FROM (
SELECT employee_id,salary
FROM employees
ORDER BY salary
)
WHERE rownum>30;
SELECT *
FROM (
SELECT employee_id,salary,
row_number() over (order by salary ) ranking_po_zarobkach
FROM employees
)
WHERE ranking_po_zarobkach between 20 and 30;
/*
Wyswietl pracownikow o 4 najnizszych datach zatrudnienia z miasta Seattle
*/
SELECT *
FROM (
SELECT employee_id,
hire_date,
dense_rank() over (order by hire_date ) ranking
FROM employees
JOIN departments USING(department_id)
JOIN locations USING(location_id)
WHERE city='Seattle'
)
WHERE ranking<=4;
UPDATE employees2
SET salary = salary+100
WHERE employee_id=(
SELECT employee_id
FROM (
SELECT employee_id,salary,
row_number() over (order by salary ) ranking
FROM employees2
JOIN departments USING(department_id)
WHERE department_name='IT'
)
WHERE ranking=1
);
COMMIT;
SELECT employee_id,salary,department_id,
row_number() over (partition by department_id order by salary desc )
ranking_part_dep
FROM employees;
SELECT *
FROM (
SELECT employee_id,salary,department_id,
row_number() over (partition by department_id order by salary desc )
ranking_part_dep
FROM employees
)
WHERE ranking_part_dep=1;