0% found this document useful (0 votes)
21 views9 pages

SQL 2

The document contains multiple SQL queries that are selecting, joining, filtering, grouping, and aggregating data from various tables in an employees database. The queries are retrieving employee data like names, titles, departments, locations, and calculating values like counts, sums, averages, rankings. Some queries are using window functions, CTEs, and hierarchical queries to analyze and summarize the employee data in different ways.

Uploaded by

Rafał Maniera
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
21 views9 pages

SQL 2

The document contains multiple SQL queries that are selecting, joining, filtering, grouping, and aggregating data from various tables in an employees database. The queries are retrieving employee data like names, titles, departments, locations, and calculating values like counts, sums, averages, rankings. Some queries are using window functions, CTEs, and hierarchical queries to analyze and summarize the employee data in different ways.

Uploaded by

Rafał Maniera
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 9

SELECT last_name,job_title,department_name,city,country_name,region_name

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 ;

SELECT count(employee_id) liczba_pracownikow,department_id


FROM employees
GROUP BY department_id;

SELECT count(employee_id) liczba_pracownikow,manager_id,department_id


FROM employees
GROUP BY manager_id,department_id;

SELECT count(employee_id) liczba_pracownikow,manager_id,department_id


FROM employees
WHERE manager_id=100
GROUP BY manager_id,department_id;

SELECT count(employee_id) liczba_pracownikow,manager_id,department_id


FROM employees
WHERE department_id=50
GROUP BY manager_id,department_id;

SELECT count(employee_id) liczba_pracownikow,manager_id,department_id


FROM employees
GROUP BY ROLLUP(manager_id,department_id)
ORDER BY manager_id ;

SELECT count(employee_id) liczba_pracownikow,manager_id,department_id


FROM employees
GROUP BY ROLLUP(department_id,manager_id)
ORDER BY department_id ;

SELECT count(employee_id) liczba_pracownikow,manager_id,department_id


FROM employees
GROUP BY CUBE(department_id,manager_id)
ORDER BY department_id ;

SELECT count(employee_id) liczba_pracownikow,manager_id,department_id,


grouping(manager_id) podsumowanie_dep,
grouping(department_id) podsumowanie_man
FROM employees
GROUP BY CUBE(department_id,manager_id)
ORDER BY department_id ;

SELECT extract(year from hire_date) rok,


to_char(hire_Date,'YYYY') ROK
FROM employees;

/*
Wyswietl liczbe pracownikow, rok zatrudnienia, nazwe departmantu.
Wyswietl podsumowania zarowno dla lat, jak i departamentow.
*/

SELECT count(employee_id),extract(year from hire_date) rok,department_name


FROM employees
JOIN departments using(department_id)
GROUP BY CUBE(extract(year from hire_date),department_name)
ORDER BY 2,3;

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 ;

SELECT sum(salary) suma_zarobkow,level


FROM employees
START WITH manager_id is null
CONNECT BY prior employee_id = manager_id
GROUP BY level
ORDER BY level ;

SELECT lpad(last_name,10,' ')


FROM employees;

SELECT lpad(' ',(level-1)*4)||last_name,first_name,employee_id,manager_id,level


FROM employees e
START WITH e.manager_id is null
CONNECT BY prior employee_id = e.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 sum(salary) suma, round(avg(salary)) srednia, level, city


FROM employees e
JOIN departments USING(department_id)
JOIN locations USING(location_id)
WHERE hire_date<to_Date('01-01-2007','dd-mm-yyyy')
START WITH e.manager_id is null
CONNECT BY prior employee_id = e.manager_id
GROUP BY level, city ;

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)-(SELECT sum(salary)


FROM employees
START WITH manager_id =102
CONNECT BY prior employee_id = manager_id )
FROM employees
GROUP BY 2 ;

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;

SELECT employee_id, salary,


(SELECT round(avg(salary)) FROM employees )
FROM employees;

SELECT employee_id, salary,


(SELECT round(avg(salary)) FROM employees )
FROM employees;

SELECT employee_id, salary,


(SELECT round(avg(salary)) FROM employees ) srednia ,
(SELECT sum(salary) FROM employees ) suma
FROM employees;

SELECT employee_id, salary,


round(avg(salary) over ()) srednia,
sum(salary) over () suma
FROM employees;

SELECT employee_id, salary,


(SELECT round(avg(salary)) FROM employees ) srednia_w_calej_firmie
FROM employees
WHERE department_id=60;

SELECT employee_id, salary,


round(avg(salary) over ()) srednia_w_dep60
FROM employees
WHERE department_id=60;

/*
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;

CREATE TABLE employees2 AS


SELECT *
FROM employees;

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;

You might also like