0% acharam este documento útil (0 voto)
57 visualizações9 páginas

Prova Final - Banco de Dados II - Reoferta

O documento apresenta uma prova final de Banco de Dados II, contendo diversas consultas SQL que abordam a manipulação de dados relacionados a empregados e dependentes. As consultas incluem listagens de empregados com dependentes femininos, horas de projetos por localização, contagem de empregados por departamento, identificação de empregados sem projetos, dependentes com nomes específicos e supervisores em departamentos específicos. Cada consulta é acompanhada de uma explicação sobre sua construção e uso de funções SQL.

Enviado por

vbem797
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
57 visualizações9 páginas

Prova Final - Banco de Dados II - Reoferta

O documento apresenta uma prova final de Banco de Dados II, contendo diversas consultas SQL que abordam a manipulação de dados relacionados a empregados e dependentes. As consultas incluem listagens de empregados com dependentes femininos, horas de projetos por localização, contagem de empregados por departamento, identificação de empregados sem projetos, dependentes com nomes específicos e supervisores em departamentos específicos. Cada consulta é acompanhada de uma explicação sobre sua construção e uso de funções SQL.

Enviado por

vbem797
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 9

PROVA FINAL – BANCO DE DADOS II – REOFERTA

ALUNO: DOUGLAS REZENDE DE CARVALHO

1) Listar a matrícula, o nome e salário do empregado e o nome e a


data de nascimento dos dependentes desses empregados, para os
empregados que tem mais de 10 anos que foram admitidos (utilizar
função timestampdiff e data de admissão) e dependentes do sexo
feminino.
Construindo a Query SQL:
SELECT
e.idEmprg AS Matricula,
e.nomEmprg AS Nome_Empregado,
e.valSalEmprg AS Salario,
d.nomDepend AS Nome_Dependente,
d.datNascDepend AS Data_Nascimento_Dependente
FROM
Empregado e
INNER JOIN Dependente d ON e.idEmprg = d.idEmprg
WHERE
timestampdiff(YEAR, e.datAdmsEmprg, CURDATE()) > 10
AND d.indSexoDepend = 'F';

Outro exemplo:
SELECT
e.idEmprg AS Matricula,
e.nomEmprg AS Nome_Empregado,
e.valSalEmprg AS Salario,
d.nomDepend AS Nome_Dependente,
d.datNascDepend AS Data_Nascimento_Dependente
FROM
Empregado e
INNER JOIN Dependente d ON e.idEmprg = d.idEmprg
WHERE
timestampdiff(YEAR, e.datAdmsEmprg, CURDATE()) > 10
AND d.indSexoDepend = 'F';
2) Listar a matrícula e nome dos empregados, juntamente com a
soma da quantidade de horas de projetos por empregado, dos
projetos cuja localização seja no Espírito Santo, Piauí ou São Paulo.
Ordenar em ordem crescente de horas de projeto. Listar somente
os empregados que tiveram entre 20 e 100 horas de projeto na
soma. Utilizar cláusula like para a localização, cláusula group by,
função agregada sum e cláusula having).
Construindo a Query SQL:
SELECT
e.idEmprg AS Matricula,
e.nomEmprg AS Nome_Empregado,
SUM(ep.qtdHoras) AS Total_Horas
FROM
Empregado e
INNER JOIN EmprProjeto ep ON e.idEmprg = ep.idEmprg
INNER JOIN Projeto p ON ep.idProj = p.idProj
INNER JOIN Localizacao l ON p.idLocal = l.idLocal
WHERE
l.dscLocal LIKE '%ES%'
OR l.dscLocal LIKE '%PI%'
OR l.dscLocal LIKE '%SP%'
GROUP BY
e.idEmprg, e.nomEmprg
HAVING
SUM(ep.qtdHoras) BETWEEN 20 AND 100
ORDER BY
SUM(ep.qtdHoras) ASC;
3) Mostrar a quantidade de empregados por departamento, listando
o código e nome do departamento, juntamente com a quantidade,
para os departamentos que tem gerente. Utilizar group by e função
agregada count(*).
Construindo a Query SQL:
SELECT
d.idDepto AS Codigo_Departamento,
d.dscDepto AS Nome_Departamento,
COUNT(*) AS Quantidade_Empregados
FROM
Departamento d
INNER JOIN Empregado e ON d.idDepto = e.idDepto
WHERE
d.idGerEmprg IS NOT NULL
GROUP BY
d.idDepto, d.dscDepto;

Outro exemplo:
SELECT
d.idDepto,
d.dscDepto,
COUNT(*) AS quantidade_empregados
FROM
Empregado e
INNER JOIN Departamento d ON e.idDepto = d.idDepto
WHERE
EXISTS (
SELECT 1
FROM Empregado e2
WHERE e2.idDepto = d.idDepto
AND e2.idSupervEmprg IS NOT NULL
)
GROUP BY
d.idDepto, d.dscDepto;
4) Listar os empregados que não tem nenhum projeto (utilizar
cláusula exists/not exists).
Construindo a Consulta com NOT EXISTS:
SELECT
e.idEmprg,
e.nomEmprg
FROM
Empregado e
WHERE
NOT EXISTS (
SELECT 1
FROM EmprProjeto ep
WHERE e.idEmprg = ep.idEmprg
);

Alternativa com LEFT JOIN e IS NULL:


Outra forma de resolver essa consulta é utilizando um LEFT JOIN e
verificando se a chave estrangeira da tabela relacionada é nula:
SELECT
e.idEmprg,
e.nomEmprg
FROM
Empregado e
LEFT JOIN EmprProjeto ep ON e.idEmprg = ep.idEmprg
WHERE
ep.idEmprg IS NULL;
5) Listar os dependentes cujos nomes tem as sílabas la, le ou lu e
cujos empregados responsáveis recebem salário maior que R$
2.000,00 (utilizar expressão regular para o nome do dependente).
Construindo a Consulta SQL:
SELECT
d.nomDepend,
e.nomEmprg,
e.valSalEmprg
FROM
Dependente d
INNER JOIN Empregado e ON d.idEmprg = e.idEmprg
WHERE
e.valSalEmprg > 2000
AND d.nomDepend REGEXP 'la|le|lu';
6) Fazer uma consulta para mostrar o id e nome dos supervisores
que tem dependente e que trabalham no departamento de
Recursos Humanos, Contabilidade ou Custos.
Construindo a Consulta SQL:
SELECT
e.idEmprg,
e.nomEmprg
FROM
Empregado e
INNER JOIN Dependente d ON e.idEmprg = d.idEmprg
INNER JOIN Departamento dep ON e.idDepto = dep.idDepto
WHERE
dep.dscDepto IN ('Recursos Humanos', 'Contabilidade', 'Custos')
GROUP BY
e.idEmprg, e.nomEmprg
HAVING
COUNT(d.idDepend) > 0;

Você também pode gostar