1.
select * from countries;
2.
SELECT first_name, last_name
FROM employees
WHERE commission_pct IS NULL;
3.
select last_name,first_name, department_id
from employees
where department_id=30;
4.
select last_name||' '||first_name as "Nom et prénom", department_id as "numéro
département"
from employees
where department_id=30;
5.
select * from departments;
a.
select department_id as "id dept",substr(department_name,1,3)||'.' as "nom
dept",location_id as location from departments
where department_id<60;
6.
SELECT first_name, last_name,
EXTRACT(YEAR FROM hire_date) AS year,
TO_CHAR(hire_date, 'Month') AS month,
TO_CHAR(hire_date, 'Q') AS quarter
FROM employees
ORDER BY 3 DESC;
7.
SELECT first_name ||' '|| last_name as "nom et prénom",
TRUNC(MONTHS_BETWEEN(SYSDATE, hire_date)) AS "ancienneté"
FROM employees
WHERE department_id = 30
ORDER by 2 desc;
8.
SELECT first_name, last_name,
CASE
WHEN EXTRACT(YEAR FROM hire_date) = 1998 THEN 'NEEDS REVIEW'
ELSE 'NOT THIS YEAR'
END AS review
FROM employees
ORDER BY 3;
--OU
SELECT first_name, last_name,
DECODE(to_char(hire_date, 'yyyy'), 1998, 'NEEDS REVIEW','NOT THIS YEAR') AS review
FROM employees
ORDER BY 3;
9.
SELECT department_id, first_name, last_name, salary,
ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rank
FROM employees;
10.
SELECT MAX(salary), MIN(salary)
FROM employees;
11.
SELECT department_id, ROUND(AVG(salary), 2) AS "Salaire moyen"
FROM employees
GROUP BY department_id
ORDER BY 1;
12.
SELECT department_id as identifiant, COUNT(*) AS "nbr d'employé"
FROM employees
GROUP BY department_id;
a.
SELECT department_id as identifiant, COUNT(*) AS "nbr d'employé"
FROM employees
GROUP BY department_id
ORDER BY 1;
13.
SELECT first_name, last_name, department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id
ORDER BY 3;
14.
SELECT first_name, last_name, job_title
FROM employees e
JOIN jobs j ON e.job_id = j.job_id;
15.
SELECT d.*, e.first_name, e.last_name
FROM departments d left JOIN employees e
ON d.manager_id=e.employee_id;
16.
SELECT department_name, country_name, region_name
FROM departments d
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
ORDER BY 1;
17.
SELECT department_name, trunc(SUM(MONTHS_BETWEEN(SYSDATE, hire_date)), 2) AS
total_Months
FROM employees e
JOIN departments d ON e.department_id = d.department_id
GROUP BY department_name;
a.
SELECT d.department_id, department_name, trunc(SUM(MONTHS_BETWEEN(SYSDATE,
hire_date)), 2) AS totalMois
FROM employees e
JOIN departments d ON e.department_id = d.department_id
GROUP BY d.department_id,department_name;
18.
SELECT e.employee_id||'-'||e.first_name||' '||e.last_name AS collaborateur,
m.employee_id||'-'||m.first_name||' '||m.last_name AS manager
FROM employees e JOIN employees m ON e.manager_id = m.employee_id;
a.
SELECT e.employee_id||'-'||e.first_name||' '||e.last_name AS collaborateur,
m.employee_id||'-'||m.first_name||' '||m.last_name AS manager
FROM employees e LEFT JOIN employees m ON e.manager_id = m.employee_id;
19.
a.
SELECT department_id
FROM departments
WHERE department_id NOT IN (SELECT DISTINCT department_id FROM employees where
department_id is not null);
b.
SELECT department_id
FROM departments
MINUS
SELECT DISTINCT department_id FROM employees;
20.
SELECT *
FROM employees
WHERE salary = (SELECT MIN(salary) FROM employees);
21.
SELECT *
FROM employees
WHERE manager_id = (SELECT manager_id FROM employees WHERE employee_id = 110);
22.
a.
SELECT first_name, last_name, job_title
FROM employees e join jobs j on j.job_id = e.job_id;
23.
SELECT *
FROM employees
WHERE salary > ALL (SELECT salary FROM employees WHERE job_id = 'SA_MAN');
24.
SELECT first_name, last_name, salary, department_id
FROM employees e
WHERE salary < (SELECT AVG(salary) FROM employees WHERE department_id =
e.department_id);
25.
SELECT department_id, count(employee_id) "nbr employes"
FROM employees
GROUP BY department_id
HAVING count(employee_id)<40
ORDER BY 2;
26.
SELECT employee_id,department_id FROM employees WHERE department_id IN (SELECT
department_id FROM employees GROUP BY department_id HAVING min(salary)>2000);
27.
SELECT department_id,avg(salary)
FROM employees
GROUP BY department_id
HAVING avg(salary)>(select max(salary) from employees where department_id=50)
ORDER BY 1;
28.
SELECT department_id, MAX(salary)
FROM employees
WHERE job_id LIKE '%REP'
GROUP BY department_id
ORDER BY department_id;
a.
SELECT department_id, job_id, MAX(salary)
FROM employees
WHERE job_id LIKE '%REP'
GROUP BY department_id,job_id
ORDER BY department_id;
b.
SELECT department_id, job_id, MAX(salary)
FROM employees
WHERE job_id LIKE '%REP'
GROUP BY department_id,job_id
HAVING MAX(salary)>=10000
ORDER BY department_id;
29.
SELECT department_id,avg(salary)
FROM employees
WHERE department_id in (20,30,80)
GROUP BY department_id
HAVING max(salary)>9000
ORDER BY 1;
a.
SELECT department_name,avg(salary) AS Salaire_moyen
FROM employees e join departments d on e.department_id=d.department_id
WHERE e.department_id in (20,30,80)
GROUP BY department_name
HAVING max(salary)>9000
ORDER BY 1;
b.
SELECT department_name,avg(salary)
FROM employees e join departments d on e.department_id=d.department_id
WHERE e.department_id in (20,30,80)
GROUP BY department_name
HAVING max(salary)>9000 AND avg(salary)>8000
ORDER BY 1;
30.
select ' ' as liste, region_name
from regions
union
select 'Total', to_char(count(*))
from regions;
31.
SELECT to_char(department_id), COUNT(*) AS num_employees
FROM employees
GROUP BY department_id
UNION
SELECT 'Total', COUNT(*)
FROM employees
ORDER BY 2;
32.
create table grades as select job_id as grade, min_salary, max_salary from jobs
where 1=2;
a.
INSERT INTO GRADES VALUES ('G1', 2000, 5000);
INSERT INTO GRADES VALUES ('G2', 5001, 10000);
INSERT INTO GRADES VALUES ('G3', 10001, 17000);
INSERT INTO GRADES VALUES ('G4', 17001, 25000);
COMMIT;
33.
select first_name,last_name,salary,grade
from employees e join grades g on e.salary between g.min_salary and g.max_salary
order by 3 desc;
34.
create or replace view emp2g as select first_name||' '||last_name as nomPrenom,
nvl(commission_pct,0) as prime, salary, grade from employees e join grades g on
e.salary between g.min_salary and g.max_salary order by employee_id;
a. select * from emp2g;