You are on page 1of 9

Exerccios (LAB SQL)

AULA 01 (INTRODUO SELECT)


Voc foi admitido como programador SQL da XYZW Corporation. Sua primeira tarefa criar alguns relatrios com base
nos dados das tabelas de recursos humanos.
1.

Sua primeira tarefa determinar a estrutura da tabela DEPARTMENTS e seu contedo.

DESCRIBE departments
SELECT *
FROM departments;
2.

Voc precisa determinar a estrutura da tabela EMPLOYEES.

DESCRIBE employees
3.
O departamento de recursos humanos deseja executar uma consulta para exibir o sobrenome, o cdigo do
cargo, a data de admisso e o telefone de cada funcionrio, com o nmero do funcionrio exibido primeiro. Fornea o
apelido STARTDATE para a coluna HIRE_DATE.
SELECT employee_id, last_name, job_id, hire_date AS StartDate, phone_integer
FROM employees;
4.
O departamento de recursos humanos precisa de uma consulta para exibir todos os cdigos de cargo
exclusivos da tabela EMPLOYEES.
SELECT DISTINCT job_id
FROM employees;

AULA 02 (SELECT COM RESTRIES)


1.
Em funo de questes oramentrias, o departamento precisa de um relatrio com o sobrenome e o salrio
dos funcionrios que ganham mais de US$ 12.000.
SELECT last_name, salary
FROM employees
WHERE salary > 12000;
2.

Crie um relatrio que exiba o sobrenome e o nmero do departamento do funcionrio 176.

SELECT last_name, department_id


FROM employees
WHERE employee_id = 176;

3.
O departamento de recursos humanos precisa localizar funcionrios com altos e baixos salrios. Crie uma
query para exibir o sobrenome e o salrio de todos os funcionrios cuja faixa salarial no esteja entre US$ 5.000 e US$
12.000.
SELECT last_name, salary
FROM employees
WHERE salary NOT BETWEEN 5000 AND 12000;
4.
Crie um relatrio para exibir o sobrenome, o ID do cargo e a data de admisso dos funcionrios cujos
sobrenomes sejam Matos e Taylor. Organize a consulta em ordem crescente por data de admisso.
SELECT last_name, job_id, hire_date
FROM

employees

WHERE last_name IN ('Matos', 'Taylor')


ORDER BY hire_date;
5.
Exiba o sobrenome e o nmero do departamento de todos os funcionrios nos departamentos 20 e 50 em
ordem alfabtica crescente por nome.
SELECT last_name, department_id
FROM

employees

WHERE department_id IN (20, 50) ORDER BY last_name ASC;


6.
Construa uma query para exibir o sobrenome e o salrio dos funcionrios que ganham entre US$ 5.000 e US$
12.000 e esto no departamento 20 ou 50. Atribua s colunas os labels Employee e Monthly Salary, respectivamente.
SELECT last_name "Employee", salary "Monthly Salary"
FROM

employees

WHERE salary BETWEEN 5000 AND 12000


AND

department_id IN (20, 50);

7.
O departamento de recursos humanos precisa de um relatrio que exiba o sobrenome e a data de admisso
de todos os funcionrios admitidos em 1994.
SELECT last_name, hire_date
FROM

employees

WHERE hire_date LIKE '1994%';


8.

Crie um relatrio que exiba o sobrenome e o cargo de todos os funcionrios no subordinados a um gerente.

SELECT last_name, job_id


FROM

employees

WHERE manager_id IS NULL;

9.
Crie um relatrio para exibir o sobrenome, o salrio e a comisso de todos os funcionrios que ganham
comisso. Classifique os dados em ordem decrescente de salrio e comisses.
SELECT last_name, salary, commission_pct
FROM

employees

WHERE commission_pct IS NOT NULL


ORDER BY salary DESC, commission_pct DESC;
10.
Os membros do departamento de recursos humanos desejam ter mais flexibilidade em relao s consultas
criadas. Eles desejam um relatrio que exiba o sobrenome e o salrio dos funcionrios que ganham mais do que uma
quantia especificada pelo usurio aps o prompt. (S O SCRIPT)
SELECT last_name, salary
FROM employees
WHERE salary > &sal_amt;
11.
O departamento de recursos humanos deseja executar relatrios baseados em um gerente. Crie uma consulta
que solicite um ID de gerente ao usurio e gere o ID de funcionrio, o sobrenome, o salrio e o departamento dos
funcionrios desse gerente. O departamento de recursos humanos deseja ter permisso para classificar o relatrio em
uma coluna selecionada. Voc pode testar os dados com os seguintes valores: (S O SCRIPT)
ID do gerente = 103, classificado pelo sobrenome do funcionrio:
ID do gerente = 201, classificado pelo salrio:
ID do gerente = 124, classificado pelo ID do funcionrio:
SELECT employee_id, last_name, salary, department_id
FROM employees
WHERE manager_id = &mgr_num
ORDER BY &order_col;
12.

Exiba todos os sobrenomes dos funcionrios cuja terceira letra do nome seja a.

SELECT last_name
FROM

employees

WHERE last_name LIKE '__a%';


13.

Exiba o sobrenome de todos os funcionrios que contenham a e e.

SELECT last_name
FROM

employees

WHERE last_name LIKE '%a%'


AND

last_name LIKE '%e%';

14.
Exiba o sobrenome, o cargo e o salrio de todos os funcionrios cujo cargo seja representante de
vendas(SA_REP) ou estoquista (ST_CLERK) e cujo salrio seja diferente de US$ 2.500, US$ 3.500 ou US$ 7.000.
SELECT last_name, job_id, salary
FROM

employees

WHERE job_id IN ('SA_REP', 'ST_CLERK')


AND

salary NOT IN (2500, 3500, 7000);

15.
Construa uma query para exibir o sobrenome, o salrio e a comisso de todos os funcionrios cuja comisso
seja de 20%.
SELECT last_name , salary , commission_pct
FROM

employees

WHERE commission_pct = .20;

AULA 03 (FUNES DE DATA, CARACTER E NMERO)


1.
O departamento de recursos humanos solicitou um relatrio de todos os funcionrios e os respectivos IDs de
cargo. Exiba o sobrenome concatenado com o ID do cargo (separado por uma vrgula e um espao) e nomeie a coluna
como Employee and Title.
SELECT CONCAT(last_name, ', ' , job_id) "Employee and Title"
FROM employees;
2.
O departamento de recursos humanos precisa de um relatrio para exibir o nmero do funcionrio, o
sobrenome, o salrio e o salrio com 15,5% de aumento (especificado como um nmero inteiro) de cada funcionrio.
Atribua o label New Salary coluna.
SELECT employee_id, last_name, salary,
ROUND(salary * 1.155, 0) "New Salary"
FROM employees;
3.
Modifique o exerccio anterior para adicionar uma coluna que subtraia o salrio antigo do novo salrio.
Atribua o label Increase coluna.
SELECT employee_id, last_name, salary,
ROUND(salary * 1.155, 0) "New Salary",
ROUND(salary * 1.155, 0) - salary "Increase"
FROM employees;

4.
Crie uma consulta que exiba o sobrenome e o tamanho do sobrenome de todos os funcionrios cujos nomes
comecem com a letra J, A ou M. Atribua um label apropriado a cada coluna. Classifique os resultados pelos
sobrenomes dos funcionrios.
SELECT last_name "Name",
LENGTH(last_name) "Length"
FROM employees
WHERE last_name LIKE 'J%'
OR

last_name LIKE 'M%'

OR

last_name LIKE 'A%'

ORDER BY last_name ;
5.
Recrie a consulta anterior para que o usurio seja solicitado a informar a letra inicial do sobrenome. Por
exemplo, se o usurio informar H quando uma letra for solicitada, a sada dever mostrar todos os funcionrios cujos
sobrenomes comeam com a letra H.
SELECT last_name "Name",
LENGTH(last_name) "Length"
FROM employees
WHERE last_name LIKE '&start_letter%'
ORDER BY last_name;
6.
O departamento de recursos humanos deseja saber qual o tempo de emprego de cada funcionrio. Para
cada funcionrio, exiba o sobrenome e calcule o nmero de meses entre hoje e a data de admisso do funcionrio.
Atribua o label MONTHS_WORKED coluna. Ordene os resultados pelo nmero de meses em que o funcionrio est
empregado. Arredonde o nmero de meses para o nmero inteiro mais prximo.
SELECT last_name, ROUND(datediff (curdate(), hire_date)/30,0) as MONTHS_WORKED
FROM employees
ORDER BY MONTHS_WORKED;
7.
Crie um relatrio que produza estas informaes somente para os funcionrios com salrios entre 2000 e
4000:
<sobrenome do funcionrio> recebe <salrio> mensalmente, mas deseja <3 vezes o salrio>.
Atribua o label Dream Salaries coluna.
SELECT CONCAT(last_name, recebe ,salary,mensalmente, mas deseja ,salary*3,.)
as Dream Salaries
FROM employees WHERE salary BETWEEN 2000 and 4000;

8.
Crie uma consulta que exiba o sobrenome e o salrio de todos os funcionrios. Formate o salrio para definilo com um tamanho de 15 caracteres e preench-lo esquerda com o smbolo $. Atribua o label SALARY coluna.
SELECT last_name, LPAD(salary, 15, '$') SALARY FROM employees;
9.
Exiba o sobrenome, a data de admisso e a data do fim da experincia (90 dias aps a contratao) de todos
os funcionrios cuja funo seja REPRESENTANTE DE VENDAS (SA_REP). Atribua os labels data de contratacao e fim
da experincia s respectivas colunas. Formate as datas para que sejam exibidas no formato "2000-july-23th.
SELECT last_name,date_format(hire_date,'%Y-%M-%D') as 'data de contratacao',
date_format(hire_date+90, '%Y-%M-%D') as 'fim da experiencia'
FROM employees WHERE job_id='SA_REP';
OBS: Funo DATE_ADD : Soma corretamente um certo nmero de dias a uma data.
DATE_ADD(<data>, INTERVAL <nmero> DAY);
SELECT last_name,date_format(hire_date,'%Y-%M-%D') as 'data de contratacao',
date_format(date_add(hire_date,interval 90 day),'%Y-%M-%D') as 'fim da experiencia'
FROM employees WHERE job_id='SA_REP';
10.
Crie uma consulta que exiba os sobrenomes e as comisses dos funcionrios. Se um funcionrio no ganhar
comisso, a informao "No Commission" dever ser exibida. Atribua o label COMM coluna.
SELECT last_name, COALESCE(commission_pct, 'No Commission') COMM FROM employees;
11.
Com a function CASE, crie uma consulta que exiba o nvel de todos os funcionrios com base no valor da
coluna JOB_ID. Use estes dados:
Cargo

Nvel

AD_PRES

ST_MAN

IT_PROG

SA_REP

ST_CLERK

Nenhuma das opes anteriores

SELECT job_id, CASE job_id


WHEN 'ST_CLERK' THEN 'E'

WHEN 'SA_REP' THEN 'D'

WHEN 'IT_PROG' THEN 'C'

WHEN 'ST_MAN' THEN 'B'

WHEN 'AD_PRES' THEN 'A

ELSE '0' END GRADE

FROM employees;

EXTRAS
1. Para fins oramentarios, o RH precisa de um relatrio sobre os aumentos salariais projetados. O relatrio deve
exibir os funcionrios que no ganham comisso, mas tero um aumento salarial de 10% (arredonde os salrios
para o formato monetrio)
FORMATO:
O salrio de <funcionrio> depois de um aumento de 10% <salrio com aumento>.
2. Crie um relatrio contendo os funcionrios , os salrios e os respectivos tempos de emprega (em anos). Ordene
o relatrio pelo tempo de emprego dos funcionrios. O funcionrio empregado a mais tempo deve estar no
incio da lista.
3. Exiba os funcionrios cujos sobrenomes comeam com a letra J,K ,L ou M (OBRIGATORIAMENTE UTILIZANDO A
FUNO IN). Ordenar pelo sobrenome.
4. Crie um relatrio que exiba os seguintes dados dos funcionrios:
-

Nome e Sobrenome do funcionrio (concatenados e em caixa alta)

Cargo

Salrio

Data de contratao (formato 24/September/2009)

Tempo de casa em anos (arredondado sem casas decimais)

Participao nos lucros da empresa em funo do tempo de casa, mediante o seguinte critrio:
At 13 anos de casa: 20% do salrio
At 14 anos de casa: 25% do salrio
At 15 anos de casa: 30% do salrio
At 16 anos de casa: 40% do salrio
Mais que 16 anos de casa: 50% do salrio

Escalo do funcionrio em funo do cargo, mediante o seguinte critrio:


AD_PRES,AD_VP - ALTA GESTO
AC_MGR,SA_MAN,ST_MAN,MK_MAN - GESTO OPERACIONAL
SA_REP,MK_REP - NEGCIOS
Outros cargos - APOIO

Devero constar no relatrio os funcionrios admitidos entre os anos de 1990 e 1997.


O relatrio dever estar ordenado pelo tempo de casa descendente e pelo salrio ascendente.

RESPOSTAS
1
Select
concat('O salrio de ',last_name,' depois de um aumento de 10% ',round(salary*1.10,2)) as 'NOVO SALARIO'
from employees
where commission_pct is null;

2
Select
last_name, salary, round(datediff(curdate(),hire_date)/365,0) as years
from employees
order by years desc ;
3
Select last_name from employees
where
lower(last_name) like 'j%' or
lower(last_name) like 'k%' or
lower(last_name) like 'l%' or
lower(last_name) like 'm%'
order by last_name;
OU
Select last_name from employees
where
substr(last_name,1,1) in ('J','K','L','M')
order by last_name

4select
upper (concat (first_name,' ',last_name)) as funcionario,
job_id as cargo,
salary as salario,
date_format(hire_date,'%d/%M/%Y') as admissao,
round(datediff(curdate(),hire_date)/365,0) as tempo_de_casa,
case when round(datediff(curdate(),hire_date)/365,0) < 13 then salary*0.20
when round(datediff(curdate(),hire_date)/365,0) < 14 then salary*0.25
when round(datediff(curdate(),hire_date)/365,0) < 15 then salary*0.30
when round(datediff(curdate(),hire_date)/365,0) < 16 then salary*0.40
else salary*0.50
end
as Gratificacao,
case when lower(job_id) in('ad_pres','ad_vp') then 'ALTA GESTAO'
when lower(job_id) in('ac_mgr','sa_man','st_man','mk_man') then 'GESTAO OPERACIONAL'
when lower(job_id) in('sa_rep','mk_rep') then 'NEGOCIOS'
else 'APOIO'
end
as Escalao
FROM employees
where
year(hire_date) between 1990 and 1997
order by
tempo_de_casa desc, salary ;

You might also like