Lista de Exercícios de Projeto e Otimização de Banco de Dados – Lista 5
Questão 1
Considere o seguinte esquema de uma empresa:
Func (cod_func, nome, dta_nasc, salario, nro_depto, cod_superv)
Depto (nro_depto, nome)
Projeto (cod_proj, nome, duracao, nro_depto)
Participa (cod_proj, cod_func, horas_trab)
A opção que contém o comando em SQL para obter o maior e o menor salário da empresa é:
a) SELECT MAX(SALARIO), MIN(SALARIO) FROM FUNC
b) SELECT MAIOR(SALARIO), MENOR(SALARIO) FROM FUNC
c) SELECT SUM(SALARIO), AVG(SALARIO) FROM FUNC
d) SELECT COUNT(SALARIO), AVG(SALARIO) FROM FUNC
e) SELECT MIN(SALARIO), MAX(SALARIO) FROM FUNC
Questão 2
Considere as tabelas da questão 1. A opção que contém o comando em SQL para obter a média de salários de cada departamento da empresa é:
SELECT AVG(SALARIO) FROM DEPTO
SELECT MEDIA(SALARIO) FROM FUNC
SELECT NRO_DEPTO, AVG(SALARIO) FROM FUNC GROUP BY NRO_DEPTO
SELECT SUM(SALARIO) FROM FUNC WHERE NRO_DEPTO
SELECT COUNT(SALARIO) FROM FUNC GROUP BY NRO_DEPTO
Questão 3
Considere as tabelas da questão 1. A opção que contém o comando em SQL para obter a quantidade de funcionários em cada departamento onde a média salarial seja maior ou igual a R$ 2.000,00 é:
a) SELECT NRO_DEPTO, COUNT(*) >=2000 FROM FUNC GROUP BY NRO_DEPTO
b) SELECT COUNT(SALARIO) FROM FUNC HAVING AVG(SALARIO) >= 2000
c) SELECT NRO_DEPTO, SUM(COD_FUNC) FROM FUNC GROUP BY NRO_DEPTO HAVING AVG(SALARIO) >= 2000
d) SELECT COUNT(SALARIO) FROM FUNC WHERE AVG(SALARIO >= 2000
e) SELECT NRO_DEPTO, COUNT(*) FROM FUNC GROUP BY NRO_DEPTO HAVING AVG(SALARIO) >= 2000
Questão 4
Considere o seguinte esquema de uma empresa:
FUNC (COD_FUNC, NOME, DTA_NASC, SALARIO, NRO_DEPTO, COD_SUPERV)
DEPTO (NRO_DEPTO, NOME)
PROJETO (COD_PROJ, NOME, DURACAO, NRO_DEPTO)
PARTICIPA (COD_PROJ, COD_FUNC, HORAS_TRAB)
Marque a alternativa que contém o comando em SQL utilizado para recuperar os nomes dos funcionários e dos projetos que eles participaram.
a) SELECT NOME, NOME FROM PROJETO P, FUNC F WHERE P.COD_FUNC = F.COD_FUNC
b) SELECT F.NOME, P.NOME FROM PARTICIPA PA, PROJETO P, FUNC F WHERE PA.COD_PROJ=P.COD_PROJ AND PA.COD_FUNC = F.COD_FUNC
c) SELECT F.NOME, P.NOME FROM PROJETO P, FUNC F
d) SELECT * FROM PARTICIPA PA, PROJETO P, FUNC F
e) SELECT F.NOME, PA.NOME FROM PARTICIPA PA, FUNC F WHERE PA.COD_FUNC = F.COD_FUNC
Questão 5
Considere as tabelas da questão 1. Marque a alternativa que contém o comando em SQL utilizado para obter os nomes dos funcionários que participaram de projetos e os respectivos totais de horas trabalhadas.
a) SELECT F.NOME, TOTAL(HORAS_TRAB) FROM PARTICIPA PA, FUNC F
b) SELECT F.NOME, SUM(HORAS_TRAB) FROM PARTICIPA PA, FUNC F WHERE PA.COD_FUNC = F.COD_FUNC
c) SELECT F.NOME, MAX(HORAS_TRAB) FROM PARTICIPA PA, FUNC F WHERE PA.COD_FUNC = F.COD_FUNC GROUP BY F.NOME
d) SELECT F.NOME, SUM(HORAS_TRAB) FROM PARTICIPA PA, FUNC F WHERE PA.COD_FUNC = F.COD_FUNC GROUP BY F.NOME
e) SELECT NOME, SUM(HORAS_TRAB) FROM PARTICIPA GROUP BY NOME
Questão 6
Considere as tabelas da questão 1. Marque a alternativa que contém o comando em SQL para recuperar nomes dos funcionários e dos respectivos supervisores.
a) SELECT F.NOME, S.NOME FROM FUNC F, FUNC S
b) SELECT F.NOME, S.NOME FROM FUNC F, FUNC S WHERE F.COD_FUNC = S.COD_SUPERV
c) SELECT F.NOME, S.NOME FROM FUNC F, FUNC S WHERE F.COD_SUPERV = S.COD_FUNC
d) SELECT F.NOME, F.NOME_SUPERV FROM FUNC F
e) SELECT F.NOME, PA.NOME FROM FUNC F, PARTICIPA PA WHERE F.COD_FUNC = PA.COD_FUNC
Questão 7
Considere o seguinte esquema de uma empresa:
CARGO (COD_CARGO, DESCRICAO, SALARIO_MIN, SALARIO_MAX)
FUNCIONARIO (MATRICULA, NOME, COD_CARGO, MAT_CHEFE, DT_NASC, SALARIO)
CONTRATADO (MATRICULA, NOME, COD_CARGO, SALARIO)
Marque a alternativa que contém o comando em SQL utilizado para recuperar o nome do funcionário e a descrição do seu cargo, listando os cargos sem funcionários.
a) SELECT F.NOME, C.DECRICAO FROM FUNCIONARIO F LEFT OUTER JOIN CARGO C ON F.COD_CARGO=C.COD_CARGO
b) SELECT F.NOME, C.DECRICAO FROM FUNCIONARIO F FULL OUTER JOIN CARGO C ON F.COD_CARGO=C.COD_CARGO
c) SELECT F.NOME, C.DECRICAO FROM FUNCIONARIO F OUTER JOIN CARGO C ON F.COD_CARGO=C.COD_CARGO
d) SELECT F.NOME, C.DECRICAO FROM FUNCIONARIO F INNER JOIN CARGO C ON F.COD_CARGO=C.COD_CARGO
e) SELECT F.NOME, C.DECRICAO FROM FUNCIONARIO F RIGHT OUTER JOIN CARGO C ON F.COD_CARGO=C.COD_CARGO
Questão 8
Considere as tabelas da questão 4. Marque a alternativa que contém o comando em SQL utilizado para recuperar os nomes dos funcionários e contratados que têm salário maior que R$ 1.500,00.
a) (SELECT NOME FROM FUNCIONARIO WHERE SALARIO > 1500) UNION (SELECT NOME FROM CONTRATADO WHERE SALARIO > 1500)
b) (SELECT NOME FROM FUNCIONARIO WHERE SALARIO > 1500) INTERSECT (SELECT NOME FROM CONTRATADO WHERE SALARIO > 1500)
c) (SELECT NOME FROM FUNCIONARIO WHERE SALARIO > 1500) JOIN (SELECT NOME FROM CONTRATADO WHERE SALARIO > 1500)
d) (SELECT NOME FROM FUNCIONARIO WHERE SALARIO > 1500) EXCEPT (SELECT NOME FROM CONTRATADO WHERE SALARIO > 1500)
e) SELECT F.NOME, C.NOME FROM FUNCIONARIO F, CONTRATADO C WHERE SALARIO > 1500
Questão 9
Considere o seguinte esquema de uma empresa:
FUNC (COD_FUNC, NOME, DTA_NASC, SALARIO, NRO_DEPTO, COD_SUPERV)
DEPTO (NRO_DEPTO, NOME)
PROJETO (COD_PROJ, NOME, DURACAO, NRO_DEPTO)
PARTICIPA (COD_PROJ, COD_FUNC, HORAS_TRAB)
Marque a alternativa que contém o comando em SQL utilizado para listar o nome e o salário dos funcionários cuja remuneração é maior que a média salarial da empresa.
a) SELECT NOME, SALARIO FROM FUNC WHERE SALARIO > AVG(SALARIO)
b) SELECT NOME, SALARIO>AVG(SALARIO) FROM FUNC
c) SELECT NOME, SALARIO FROM FUNC WHERE SALARIO > (SELECT AVG(SALARIO) FROM FUNC)
d) SELECT NOME, SALARIO FROM FUNC WHERE EXISTS > (SELECT AVG(SALARIO) FROM FUNC)
e) SELECT NOME, SALARIO FROM FUNC WHERE SALARIO > (SELECT MEDIA(SALARIO) FROM FUNC)
Questão 10
Considere as tabelas da questão 1. Marque a alternativa que contém o comando em SQL utilizado para retornar os códigos dos projetos cuja duração foi menor que a de todos os projetos do departamento 5.
a) SELECT COD_PROJ FROM PROJETO WHERE DURACAO < (SELECT DURACAO FROM PROJETO WHERE NRO_DEPTO = 5)
b) SELECT COD_PROJ FROM PROJETO WHERE DURACAO < ALL (SELECT DURACAO FROM PROJETO WHERE NRO_DEPTO = 5)
c) SELECT COD_PROJ FROM PROJETO WHERE DURACAO IN (SELECT DURACAO FROM PROJETO WHERE NRO_DEPTO = 5)
d) SELECT COD_PROJ FROM PROJETO WHERE DURACAO < NRO_DEPTO = 5
e) SELECT COD_PROJ FROM PROJETO WHERE EXISTS (SELECT DURACAO FROM PROJETO WHERE NRO_DEPTO = 5)
Questão 11
Considere as tabelas da questão 1. Marque a alternativa que contém o comando em SQL utilizado para conceder privilégios para que o usuário Pedro insira dados na tabela Func, podendo repassar estes direitos.
a) GRANT INSERT TO PEDRO ON FUNC WITH GRANT OPTION
b) GRANT INSERT ON FUNC TO PEDRO
c) GRANT INSERT ON PEDRO TO FUNC WITH GRANT OPTION
d) GRANT INSERT ON FUNC TO PEDRO CASCADE
e) GRANT INSERT ON FUNC TO PEDRO WITH GRANT OPTION
Questão 12
Considere as tabelas da questão 1. Marque a alternativa que contém o comando em SQL utilizado para eliminar todos os privilégios do usuário Pedro na tabela Func.
a) REVOKE ALL ON FUNC FROM PEDRO
b) REVOKE PRIVILEGES ON FUNC FROM PEDRO
c) REVOKE PUBLIC ON FUNC FROM PEDRO
d) REVOKE ALL FROM PEDRO ON FUNC
e) REVOKE ALL ON PEDRO FROM FUNC
Aula 05 – Respostas
Questão 1 – A
Justificativa: O comando SQL correto é: SELECT MAX(SALARIO), MIN(SALARIO) FROM FUNC.
Questão 2 – C
Justificativa: O comando SQL correto é: SELECT NRO_DEPTO, AVG(SALARIO) FROM FUNC GROUP BY NRO_DEPTO.
Questão 3 – E
Justificativa: O comando SQL correto é: SELECT NRO_DEPTO, COUNT(*) FROM FUNC GROUP BY NRO_DEPTO HAVING AVG(SALARIO) >= 2000.
Questão 4 – B
Justificativa: A sentença correta é SELECT F.NOME, P.NOME FROM PARTICIPA PA, PROJETO P, FUNC F WHERE PA.COD_PROJ=P.COD_PROJ AND PA.COD_FUNC = F.COD_FUNC.
Questão 5 – D
Justificativa: A sentença correta é SELECT F.NOME, SUM(HORAS_TRAB) FROM PARTICIPA PA, FUNC F WHERE PA.COD_FUNC = F.COD_FUNC GROUP BY F.NOME.
Questão 6 – C
Justificativa: A sentença correta é SELECT F.NOME, S.NOME FROM FUNC F, FUNC S WHERE F.COD_SUPERV = S.COD_FUNC.
Questão 7 – E
Justificativa: A sentença correta é SELECT F.NOME, C.DECRICAO FROM FUNCIONARIO F RIGHT OUTER JOIN CARGO C ON F.COD_CARGO=C.COD_CARGO.
Questão 8 – A
Justificativa: A sentença correta é (SELECT NOME FROM FUNCIONARIO WHERE SALARIO > 1500) UNION (SELECT NOME FROM CONTRATADO WHERE SALARIO > 1500).
Questão 9 – C
Justificativa: A sentença correta é SELECT NOME, SALARIO FROM FUNC WHERE SALARIO > (SELECT AVG(SALARIO) FROM FUNC).
Questão 10 – B
Justificativa: A sentença correta é SELECT COD_PROJ FROM PROJETO WHERE DURACAO < ALL (SELECT DURACAO FROM PROJETO WHERE NRO_DEPTO = 5).
Questão 11 – E
Justificativa: A sentença correta é GRANT INSERT ON FUNC TO PEDRO WITH GRANT OPTION.ativa
Questão 12 – A
Justificativa: A sentença correta é REVOKE ALL ON FUNC FROM PEDRO.
Material retirado da Web. (Material não revisado ou testado! Revisão e confirmação das respostas em Breve!)
Se você tiver alguma dúvida ou correção a fazer, por favor, comente! Obrigado!