Buscar

respostas_sql

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Para os exercícios abaixo, utilize o script EMPRESA.SQL disponível no portal da disciplina para 
criar o esquema e popular o banco de dados EMPRESA apresentado em aula. 
1. Elabore e execute consultas SQL para obter os seguintes dados:
(a) todos os dados dos empregados trabalham no departamento com o nome 'Pesquisa' 
(b) nome completo e CPF dos empregados que são gerentes de departamento 
(c) nome completo e CPF dos empregados que trabalham em algum projeto
(d) nome completo e CPF dos empregados supervisores e gerentes de departamento
(e) nome completo e CPF dos empregados supervisores ou gerentes de departamento 
(f) nome completo e CPF dos empregados supervisores e não gerentes de departamento 
(g) nome completo, CPF e salário dos empregados do sexo feminino são gerentes de departamento 
(h) nome completo, CPF e data de nascimento dos empregados do sexo feminino que são 
supervisores de outros funcionários 
(i) nome completo e CPF dos empregados que possuem supervisores mais jovens
(j) nome completo e CPF dos empregados que possuem dependentes mais velhos 
2. Elabore e execute consultas SQL equivalentes às seguintes consultas em álgebra relacional:
(a) π Pnome, Unome (FUNCIONARIO) 
(b) Sexo=”F” (FUNCIONARIO) 𝜎
(c) π Pnome, Unome, Salario ( Sexo=”F” (FUNCIONARIO) )𝜎
(d) TRABALHA_EM x PROJETO
(e) π Dnome, Pnome, Unome ( FUNCIONARIO Cpf=Cpf_gerente DEPARTAMENTO ) ⨝
(f) Dnr CONTAGEM Cpf , MÉDIA Salario, MÁXIMO Salario, MÍNIMO Salario 
(FUNCIONARIO) 
(g) π Cpf_supervisor (FUNCIONARIO) π Cpf_gerente (DEPARTAMENTO) 
3. Elabore comandos SQL para realizar as seguintes alterações no banco de dados:
(a) Cadastrar um novo funcionário com os seguintes dados. Nome: Joaquim Alves, Cpf: 
82922312321, Datanasc: 12/01/1980, Salario: 40000, Departamento: Administração 
(b) Alterar o gerente do departamento de pesquisa para o funcionário João Silva. 
(c) Atualizar o supervisor do funcionário João Silva para Jorge Brito
(d) Adicionar R$ 1000 ao salário dos funcionários do sexo feminino
(e) Excluir o funcionário Ronaldo Lima 
(f) Aumentar em 5% os salários dos funcionários que possuem o menor salário em cada 
departamento 
4. Elabore e execute consultas SQL para obter os seguintes dados:
(a) dados do(s) departamento(s) (número, nome do departamento, CPF e nome completo do 
gerente) que possuem a folha de pagamento (soma dos salários dos funcionários) mais elevada 
(b) dados dos funcionários que possuem mais de um filho/filha 
(c) dados dos funcionários que não possuem dependentes 
(d) dados dos projetos que estão localizados em localidades diferentes das do departamento do 
projeto
(e) dados dos funcionários que possuem dependentes maiores de idade 
(f) dados do(s) projeto(s) com o maior número de horas de trabalho alocadas 
(g) dados dos funcionários do departamento ‘Pesquisa’ ordenados por idade 
(h) dados do(s) funcionário(s) mais idosos de cada sexo 
(i) quantitativo de funcionários agrupado pelas seguintes faixas etárias: 18- 35, 36-60, acima de 60 
(j) lista dos departamentos da empresa e para cada departamento a soma dos salários dos 
funcionários e o custo adicional de um aumento de 10% no salário dos funcionários do sexo 
feminino.
(k) lista dos supervisores cujo salário é mais de 50% maior que algum supervisionado 
(l) lista dos departamentos junto com o nome e CPF do funcionário com maior salário
(m) lista dos projetos com o nome e CPF do(s) funcionário(s) que trabalha(m) mais horas no projeto
(n) lista de cada departamento cujo salário médio dos funcionários seja maior do que 30000, 
incluindo o nome do departamento e o número de funcionários
5. Descreva qual o resultado da consulta:
(a) SELECT Dnumero, Dnome FROM DEPARTAMENTO WHERE Dnumero IN (SELECT 
Dnumero FROM LOCALIZACAO_DEP WHERE Dlocal = 'São Paulo') 
(b) SELECT Dnome, AVG(Salario) FROM DEPARTAMENTO, FUNCIONARIO WHERE Dnr = 
Dnumero GROUP BY Dnumero, Dnome 
(c)SELECT DISTINCT Dnome FROM DEPARTAMENTO AS DF JOIN FUNCIONARIO AS F 
ON DF.Dnumero = F.Dnr WHERE F.Salario > (SELECT Salario FROM FUNCIONARIO AS GER
WHERE GER.Cpf = DF.Cpf_gerente) 
(d) SELECT Dnome, EXTRACT(YEAR FROM AVG(AGE(CURRENT_DATE, Datanasc))) 
FROM FUNCIONARIO, DEPARTAMENTO WHERE Dnr = Dnumero GROUP BY Dnome
(e) SELECT Nome_dependente, EXTRACT(YEAR FROM AGE(CURRENT_DATE, Datanasc)) 
AS Idade FROM DEPENDENTE WHERE Fcpf IN (SELECT Cpf FROM FUNCIONARIO 
WHERE Dnr IN (SELECT Dnumero FROM DEPARTAMENTO WHERE Dnome = 'Pesquisa')) 
(f) SELECT Dnome, AVG(F.Salario), FM.Cpf, FM.Pnome, FM.Unome, FM.Salario FROM 
DEPARTAMENTO AS D, FUNCIONARIO AS F, FUNCIONARIO AS FM WHERE F.Dnr = 
D.Dnumero AND FM.Dnr = D.Dnumero AND FM.Salario = (SELECT MAX(FI.Salario) FROM 
FUNCIONARIO AS FI WHERE FI.Dnr = D.Dnumero) GROUP BY Dnumero, Dnome, FM.Cpf, 
FM.Pnome, FM.Unome, FM.Salario 6. Reescreva as seguintes consultas SQL dos itens (a) ao (e) do
exercício 5 sem fazer uso de subconsultas: 
RESPOSTAS:
1.a.
SELECT * FROM FUNCIONARIO WHERE Dnr = ( SELECT Dnumero FROM 
DEPARTAMENTO WHERE Dnome='Pesquisa' );
b.
SELECT Pnome, Minicial, Unome, Cpf FROM FUNCIONARIO WHERE Cpf IN ( SELECT 
Cpf_gerente FROM DEPARTAMENTO );
c.
SELECT DISTINCT Pnome, Minicial, Unome, Cpf FROM FUNCIONARIO, 
TRABALHA_EM WHERE Fcpf = Cpf;
d.
SELECT DISTINCT SUPER.Pnome, SUPER.Minicial, SUPER.Unome, SUPER.Cpf
FROM FUNCIONARIO AS FUNC, FUNCIONARIO AS SUPER, DEPARTAMENTO
WHERE FUNC.Cpf_supervisor = SUPER.Cpf AND Cpf_gerente = SUPER.cpf;
e.
SELECT DISTINCT SUPER.Pnome, SUPER.Minicial, SUPER.Unome, SUPER.Cpf
FROM FUNCIONARIO AS FUNC, FUNCIONARIO AS SUPER, DEPARTAMENTO
WHERE FUNC.Cpf_supervisor = SUPER.Cpf OR Cpf_gerente = SUPER.cpf;
f.
SELECT DISTINCT SUPER.Pnome, SUPER.Minicial, SUPER.Unome, SUPER.Cpf
FROM FUNCIONARIO AS FUNC, FUNCIONARIO AS SUPER
WHERE FUNC.Cpf_supervisor = SUPER.Cpf AND NOT SUPER.cpf IN (SELECT 
Cpf_gerente FROM DEPARTAMENTO);
g.
SELECT DISTINCT Pnome, Minicial, Unome, Cpf
FROM FUNCIONARIO, DEPARTAMENTO
WHERE Cpf_gerente = cpf AND Sexo = 'F';
h.
SELECT DISTINCT SUPER.Pnome, SUPER.Minicial, SUPER.Unome, SUPER.Cpf, 
SUPER.Datanasc
FROM FUNCIONARIO AS FUNC, FUNCIONARIO AS SUPER
WHERE FUNC.Cpf_supervisor = SUPER.Cpf AND SUPER.Sexo = 'F';
i.
SELECT DISTINCT FUNC.Pnome, FUNC.Minicial, FUNC.Unome, FUNC.Cpf
FROM FUNCIONARIO AS FUNC, FUNCIONARIO AS SUPER
WHERE FUNC.Cpf_supervisor = SUPER.Cpf AND SUPER.Datanasc<FUNC.Datanasc;
j.
SELECT DISTINCT Pnome, Minicial, Unome, Cpf
FROM FUNCIONARIO, DEPENDENTE
WHERE Fcpf=cpf AND FUNCIONARIO.Datanasc < DEPENDENTE.Datanasc;
2.a.
SELECT Pnome, Unome FROM FUNCIONARIO;
b.
SELECT * FROM FUNCIONARIO WHERE Sexo='F';
c.
SELECT Pnome, Unome, Salario FROM FUNCIONARIO WHERE Sexo='F';
d.
SELECT * FROM PROJETO, TRABALHA_EM;
e.
SELECT Dnome, Pnome, Unome FROM FUNCIONARIO, DEPARTAMENTO WHERE Cpf
= Cpf_gerente;
f.
SELECT Dnr, COUNT(Cpf), AVG(Salario), MAX(Salario), MIN(Salario) FROM 
FUNCIONARIO GROUP BY Dnr;
g.
SELECT Cpf_supervisor AS cpf FROM FUNCIONARIO INTERSECT SELECT 
Cpf_gerente AS cpf FROM DEPARTAMENTO;
3. a.
INSERT INTO FUNCIONARIO (Pnome, Unome, Cpf, Datanasc, Salario, Dnr)
VALUES ('Joaquim', 'Alves', '82922312321', '12/01/1980', '40000', '4');
b.
UPDATE DEPARTAMENTO
SET Cpf_gerente = '12345678966', Data_inicio_gerente = '2020-08-10'
WHERE Dnumero = 5;
c.
UPDATE FUNCIONARIO
SET Cpf_supervisor = '88866555576'
WHERE cpf = '12345678966';
d.
UPDATE FUNCIONARIO
SET Salario = Salario + 1000
WHERE Sexo='F';
e.
DELETE FROM FUNCIONARIO
WHERE Cpf = '66688444476';
f.
UPDATE FUNCIONARIO
SET Salario = Salario * 1.05
WHERE Salario IN ( SELECT MIN(Salario) 
FROM DEPARTAMENTO, FUNCIONARIO 
WHERE Dnr = Dnumero GROUP BY Dnr );
4. a.
SELECT Dnumero, Dnome, Cpf_gerente
FROM DEPARTAMENTO, FUNCIONARIO
WHERE Dnr = Dnumero
GROUP BY Dnumero
ORDER BY SUM(Salario) DESC
limit 1;
b.
SELECT * FROM FUNCIONARIO
WHERE Cpf IN (
SELECT Fcpf FROM DEPENDENTE 
WHERE (Parentesco = 'Filho' OR Parentesco = 'Filha')
GROUP BY Fcpf
HAVING COUNT(Fcpf) > 1);
c.
SELECT * FROM FUNCIONARIO
WHERE Cpf NOT IN (
SELECT Fcpf FROM DEPENDENTE );
d.
SELECT * FROM PROJETO AS Pro
WHERE Projlocal NOT IN (SELECT Dlocal FROM LOCALIZACAO_DEP AS LO
WHERE Pro.Dnum = LO.Dnumero);
e.
SELECT * FROM FUNCIONARIO
WHERE Cpf IN (
SELECT Fcpf FROM DEPENDENTE 
WHERE extract(year from age(CURRENT_DATE, Datanasc))>=18);
f.
SELECT * FROM PROJETO
WHERE Projnumero IN (
SELECT Pnr FROM TRABALHA_EM
GROUP BY Pnr
HAVING SUM(Horas) >= ALL(SELECT SUM(Horas) FROM TRABALHA_EM 
GROUP BY Pnr));
g.
SELECT * FROM FUNCIONARIO
WHERE Dnr = '5'
ORDER BY Datanasc;
h.
SELECT * FROM FUNCIONARIO
WHERE Datanasc in (
SELECT MAX(Datanasc) FROM FUNCIONARIO
WHERE Sexo IS NOT NULL
GROUP BY Sexo);
5-
a.
Listar o nome e número de cada departamento localizado em São Paulo.
b.
Listar o nome e a média salarial dos funcionários de cada departamento.
c.
Listar o nome de cada departamento que possua algum funcionário com salário maior que
o salário do gerente.
d.
Listar o nome e média das idades dos funcionários de cada departamento. 
e.
Listar o nome e a idade dos dependentes dos funcionários que trabalham no 
departamento ‘pesquisa’. 
f.
Listar o nome, média salarial, nome, cpf e salário do funcionário que possui o maior 
salário de cada departamento. 
6-
a.
SELECT D.Dnumero, Dnome FROM DEPARTAMENTO AS D, LOCALIZACAO_DEP AS L
WHERE D.Dnumero = L.Dnumero AND Dlocal = 'São Paulo';
b.
SELECT Dnome, AVG(Salario) FROM DEPARTAMENTO, FUNCIONARIO
WHERE Dnr = Dnumero GROUP BY Dnumero, Dnome
c.
SELECT DISTINCT Dnome FROM DEPARTAMENTO AS DF JOIN FUNCIONARIO AS F 
ON DF.Dnumero = F.Dnr JOIN FUNCIONARIO AS GER ON GER.Cpf = DF.Cpf_gerente 
WHERE F.Salario > GER.Salario;
d.
SELECT Dnome, EXTRACT(YEAR FROM AVG(AGE(CURRENT_DATE, Datanasc)))
FROM FUNCIONARIO, DEPARTAMENTO
WHERE Dnr = Dnumero GROUP BY Dnome
e.
SELECT Nome_dependente, EXTRACT(YEAR FROM AGE(CURRENT_DATE, 
D.Datanasc)) AS Idade
FROM DEPENDENTE AS D, FUNCIONARIO AS F, DEPARTAMENTO AS E
WHERE D.Fcpf = F.Cpf AND Dnr = Dnumero AND Dnome = 'Pesquisa';
f.
SELECT Dnome, AVG(F.Salario), FM.Cpf, FM.Pnome, FM.Unome, FM.Salario
FROM DEPARTAMENTO AS D, FUNCIONARIO AS F, FUNCIONARIO AS FM, 
FUNCIONARIO AS FI
WHERE F.Dnr = D.Dnumero AND FM.Dnr = D.Dnumero AND FI.Dnr = D.Dnumero
GROUP BY Dnumero, Dnome, FM.Cpf, FM.Pnome, FM.Unome, FM.Salario
HAVING FM.Salario = MAX(FI.Salario);

Continue navegando