Baixe o app para aproveitar ainda mais
Prévia do material em texto
• Pergunta 1 1 em 1 pontos Considere um banco de dados com uma tabela voos, contendo a coluna companhia, com a sigla da companhia aérea que operou o voo. Considere também que esse banco possui uma tabela companhias, com um cadastro de todas as companhias aéreas existentes. O que representa a seguinte consulta? SELECT (SELECT count(distinct companhia) FROM voos) / (SELECT count(*) FROM companhias); Considere como dica os seguintes comandos e suas respectivas saídas: > SELECT 4; 4 > SELECT 4/2; 2 Resposta Selecionada: b. A proporção de companhias cadastradas que operaram voos registrados na tabela voos. Respostas: a. A quantidade de companhias que operaram voos registrados na tabela voos. b. A proporção de companhias cadastradas que operaram voos registrados na tabela voos. c. A quantidade total de companhias cadastradas. d. Não representa nada, pois seja qual for o conteúdo das tabelas esse comando sempre retorna o número zero. e. Não representada nada, pois resultará em um erro devido a sintaxe incorreta. Comentário da resposta: b. A consulta está dividindo o “count(distinct companhia) FROM voos” (quantidade de companhias que operaram voos) por “SELECT count(*) FROM companhias” (quantidade de empresas cadastradas). Ou seja, temos a proporção de empresas que operaram voos pelo total de empresas cadastradas. • Pergunta 2 0 em 1 pontos Considere a seguinte consulta: SELECT nome FROM funcionario WHERE not(idade > 65 AND sexo = 'M' OR idade > 60 AND sexo = 'F'); Assinale a alternativa que indica um par válido de entrada e saída para essa consulta. Obs: Todas as entradas se referem à tabela “funcionario”. Resposta Selecionada: a. Entrada: +----------+-------+------+ | nome | idade | sexo | +----------+-------+------+ | Moacir | 70 | M | | Geraldo | 67 | M | | Enzo | 23 | M | | Josefina | 63 | F | | Ivone | 70 | F | +----------+-------+------+ Saída: +----------+ | nome | +----------+ | Enzo | | Josefina | | Ivone | +----------+ Respostas: a. Entrada: +----------+-------+------+ | nome | idade | sexo | +----------+-------+------+ | Moacir | 70 | M | | Geraldo | 67 | M | | Enzo | 23 | M | | Josefina | 63 | F | | Ivone | 70 | F | +----------+-------+------+ Saída: +----------+ | nome | +----------+ | Enzo | | Josefina | | Ivone | +----------+ b. Entrada: +----------+-------+------+ | nome | idade | sexo | +----------+-------+------+ | Moacir | 70 | M | | Geraldo | 67 | M | | Enzo | 23 | M | | Josefina | 63 | F | | Ivone | 70 | F | +----------+-------+------+ Saída: +----------+ | nome | +----------+ | Moacir | | Geraldo | | Josefina | | Ivone | +----------+ c. Entrada: +----------+-------+------+ | nome | idade | sexo | +----------+-------+------+ | Moacir | 70 | M | | Geraldo | 67 | M | | Enzo | 23 | M | | Karolyne | 23 | F | | Josefina | 63 | F | | Ivone | 70 | F | +----------+-------+------+ Saída: +----------+ | nome | +----------+ | Moacir | | Geraldo | | Enzo | | Karolyne | | Josefina | +----------+ d. Entrada: +----------+-------+------+ | nome | idade | sexo | +----------+-------+------+ | Moacir | 70 | M | | Geraldo | 67 | M | | Enzo | 23 | M | | Karolyne | 23 | F | | Josefina | 63 | F | | Ivone | 70 | F | +----------+-------+------+ Saída: +----------+ | nome | +----------+ | Enzo | | Karolyne | +----------+ e. Entrada: +----------+-------+------+ | nome | idade | sexo | +----------+-------+------+ | Moacir | 70 | M | | Geraldo | 67 | M | | Josefina | 63 | F | | Ivone | 70 | F | +----------+-------+------+ Saída: …Syntax error… Comentário da resposta: D. A consulta irá selecionar todos os homens com idade até 65 anos e todas as mulheres com idade até 60 anos. Nas opções A e B, temos “Ivone”, de 70 anos, sendo selecionada, por isso essas opções estão erradas. Na opção C, temos “Josefina”, de 63 anos, sendo selecionada, por isso essa opção também está errada. Como a consulta não possui erro de sintaxe (opção E), a alternativa correta é a D. • Pergunta 3 1 em 1 pontos Considere a tabela municipio criada com o seguinte comando: CREATE TABLE municipio ( id int auto_increment primary key, nome text, uf varchar(2) ); Considere ainda o seguinte estado para a essa tabela: > select * from municipio; +----+------------+------+ | id | nome | uf | +----+------------+------+ | 1 | São Paulo | SP | | 2 | Osasco | SP | | 3 | Mateiros | TO | +----+------------+------+ Dado o estado definido acima, considere a execução do seguinte comando: INSERT INTO municipio (nome, uf) VALUES ('Salvador', 'BA'); Considere agora as seguintes afirmações: I – A execução do comando acima incorrerá em erro. II – A chave primária deve ser especificada no comando INSERT. Assinale agora a opção correta. Resposta Selecionada: b. As sentenças I e II são falsas. Respostas: a. As sentenças I e II são verdadeiras e a II é a explicação da I. b. As sentenças I e II são falsas. c. A sentença I é verdadeira, mas a II é falsa. d. As sentenças I e II são verdadeiras, mas a II não é a explicação da I. e. Apenas a sentença II é verdadeira. Comentário da resposta: b. A chave primária foi especificada com a opção auto_increment, o que dispensa a especificação da chave primária no comando INSERT. • Pergunta 4 0 em 1 pontos Considere as seguintes tabelas: CREATE TABLE paciente (id int primary key, nome text); CREATE TABLE medico (id int primary key, nome text); CREATE TABLE consulta (data date, id_paciente int, id_medico int); Considere agora as seguintes consultas realizadas sobre as tabelas acima definidas: I) SELECT p.nome as nome_paciente, m.nome as nome_medico, c.data FROM paciente p, consulta c, medico m WHERE c.id_paciente = p.id and c.id_medico = m.id and data = curdate(); II) SELECT p.nome as nome_paciente, m.nome as nome_medico, c.data FROM paciente p JOIN consulta c ON c.id_paciente = p.id JOIN medico m ON c.id_medico = m.id WHERE data = curdate(); III) SELECT p.nome as nome_paciente, m.nome as nome_medico, c.data FROM paciente p JOIN consulta c JOIN medico m ON c.id_paciente = p.id and c.id_medico = m.id WHERE data = curdate(); IV) SELECT p.nome as nome_paciente, m.nome as nome_medico, c.data FROM paciente p INNER JOIN consulta c INNER JOIN medico m ON c.id_paciente = p.id and c.id_medico = m.id WHERE data = curdate(); Obs: “curdate()” retorna a data corrente. Assinale a opção que identifica corretamente os resultados obtidos para essas consultas. Resposta Selecionada: a. As consultas I e II terão o mesmo resultado. As consultas III e IV possuem erros de sintaxe. Respostas: a. As consultas I e II terão o mesmo resultado. As consultas III e IV possuem erros de sintaxe. b. As consultas I e II terão um mesmo resultado, enquanto as consultas III e IV terão um outro resultado (o resultado de III será o mesmo de IV). Todas as consultas são válidas. c. As consultas I e II terão um mesmo resultado, enquanto as consultas III e IV terão resultados diferentes (o resultado de III difere de I, II e IV; e o resultado de IV difere de I, II e III). Todas as consultas são válidas.d. As consultas I, II, III e IV terão o mesmo resultado, desde que todos os pacientes e médicos estejam vinculados a consultas marcadas para a data corrente. e. As consultas I, II, III e IV terão o mesmo resultado, independentemente do conteúdo das tabelas. Comentário da resposta: e. No MySQL, o JOIN padrão (consulta II) é o INNER JOIN (consulta IV), o que é a mesma coisa que o resultado do produto cartesiano filtrado pela condição de junção (consulta I). Além disso, para fazer a junção de três tabelas, há duas formas possíveis: “tabela 1 JOIN tabela 2 JOIN tabela 3 ON condição 1 and condição 2” (consulta III) e “tabela 1 JOIN tabela 2 ON condição 1 JOIN tabela 3 ON condição 2” (consulta II). • Pergunta 5 0 em 1 pontos Níveis de abstração: da realidade ao dado A evolução da humanidade pode ser encarada em parte como um trajeto no sentido da aquisição progressiva da capacidade individual de abstração. De um ser intimamente ligado ao universo e em particular à natureza, o ser humano individual tornou-se ao longo do tempo um ente independente, isolado e com cada vez maior capacidade de introspecção objetiva, isto é, sem que este dependa de fatores subjetivos, temporais e individuais. (SETZER, V. W.; SILVA, F. S. C. da. Banco de dados: aprenda o que são, melhore seu conhecimento, construa os seus. São Paulo: Edgard Blücher, 2005.) Assim como Setzer & Silva consideram a história da humanidade como um crescente na capacidade de abstração, a história da programação de computadores também pode ser encarada como uma busca por formas cada vezes mais abstratas de dar instruções a máquinas. Considere essas três formas de se utilizar o computador para se obter a previsão do tempo: I – SELECT temperatura, precipitacao FROM previsao WHERE data = CURDATE(); II – Computador, por favor, me dê a previsão do tempo de hoje. III - temperatura = None precipitacao = None for prev in previsoes: if prev.data = date.today(): temperatura = prev.temperatura precipitacao = prev.precipitacao print(“ temperatura=”, temperatura) print(“precipitacao=”, precipitacao) Assinale a alternativa que corretamente ordena os itens acima em ordem crescente de abstração. Resposta Selecionada: c. II, I, III. Respostas: a. I, II, III. b. III, II, I. c. II, I, III. d. Todas os itens estão no mesmo nível de abstração. e. III, I, II. Comentário da resposta: Texto feedback • Pergunta 6 0 em 1 pontos 6.1.2.1 Orientações do usuário final para a segurança de senha Use a opção --password = password ou -ppassword na linha de comando. Por exemplo: shell> mysql -u francis -pfrank db_name Aviso Isso é conveniente, mas inseguro. Em alguns sistemas, sua senha fica visível para programas de status do sistema, como ps, que podem ser invocados por outros usuários para exibir linhas de comando. Os clientes MySQL geralmente substituem o argumento da senha da linha de comandos com zeros durante sua sequência de inicialização. No entanto, ainda há um breve intervalo durante o qual o valor é visível. Além disso, em alguns sistemas, essa estratégia de substituição é ineficaz e a senha permanece visível para o ps. (Os sistemas SystemV Unix e talvez outros estejam sujeitos a esse problema.) Se o seu ambiente operacional estiver configurado para exibir seu comando atual na barra de título da janela do terminal, a senha permanecerá visível enquanto o comando estiver em execução, mesmo se o comando já estiver fora de vista. MYSQL. MySQL 8.0 Reference Manual. 2020. O trecho acima do manual do MySQL explica que um determinado método de login possui um certo risco de segurança. Indique qual seria uma alternativa segura ao método discutido. Resposta Selecionada: c. Logar como o discutido, passando a senha na linha de comando, mas especificando o uso de uma conexão SSL segura entre cliente e banco de dados. Respostas: a. Logar com a opção -p sem passar o parâmetro (senha) no comando, o que fará com que a senha seja lida a partir de um prompt seguro do terminal. b. Logar com a opção -p sem passar o parâmetro (senha) no comando, o que fará com que o usuário anônimo seja utilizado. c. Logar como o discutido, passando a senha na linha de comando, mas especificando o uso de uma conexão SSL segura entre cliente e banco de dados. d. Logar como o discutido, passando a senha na linha de comando, mas usando um contêiner Docker. e. O manual do MySQL está defasado. Na última versão disponível do MySQL, o método discutido é inteiramente seguro. Comentário da resposta: a. Com a senha sendo digitada em modo interativo (com a opção -p), não há como outro programa capturar a senha digitada, a menos que haja algum programa espião que capture as teclas sendo digitadas. • Pergunta 7 1 em 1 pontos Considere a seguinte tabela de pratos disponíveis em um restaurante: CREATE TABLE pratos (nome text, pais_origem text, vegetariano boolean, preco float); Considerando essa tabela, assinale a alternativa com o comando que torna possível a execução da seguinte consulta: SELECT pais_origem as pais, count(*) as qtd_pratos_vegetarianos FROM pratos_vegetarianos GROUP BY pais_origem; +--------+-------------------------+ | pais | qtd_pratos_vegetarianos | +--------+-------------------------+ | Índia | 10 | | Itália | 7 | | Brasil | 4 | +--------+-------------------------+ Resposta Selecionada: b. CREATE VIEW pratos_vegetarianos AS SELECT nome, pais_origem FROM pratos WHERE vegetariano; Respostas: a. CREATE SUBSELECT pratos_vegetarianos AS SELECT nome, pais_origem AS pais FROM pratos WHERE vegetariano; b. CREATE VIEW pratos_vegetarianos AS SELECT nome, pais_origem FROM pratos WHERE vegetariano; c. CREATE SUBSELECT pratos_vegetarianos AS SELECT nome, pais_origem FROM pratos WHERE vegetariano; d. CREATE VIEW pratos_vegetarianos FROM SELECT nome, pais_origem FROM pratos WHERE vegetariano; e. CREATE VIEW FOR pratos AS SELECT * FROM pratos_vegetarianos WHERE vegetariano; Comentário da resposta: b. Para que a consulta funcione, é preciso criar uma view para a tabela pratos. E a sintaxe para criar uma view é CREATE VIEW <nome-da-view> AS <SELECT ...>. • Pergunta 8 0 em 1 pontos Considere a seguinte sequência de comandos: > SELECT id, saldo FROM conta_corrente WHERE id in (1324, 7634); id saldo ----- -------- 1324 5000.0 7634 40000.0 > BEGIN; > UPDATE conta_corrente SET saldo = saldo - 100 WHERE id = 1324; > UPDATE conta_corrente SET saldo = saldo + 200 WEHRE id = 7634; > COMMIT; > SELECT id, saldo FROM conta_corrente WHERE id in (1324, 7634); Qual é a saída produzida pelo último comando? Resposta Selecionada: d. … You have an error in your SQL syntax ... Respostas: a. id saldo ----- -------- 1324 5100.0 7634 40200.0 b. id saldo ----- -------- 1324 5000.0 7634 40000.0 c. id saldo ----- -------- 1324 5100.0 7634 40000.0 d. … You have an error in your SQL syntax ... e. ----- -------- 1324 7634 5000.0 40000.0 Comentário da resposta: b. Como há um erro de sintaxe no segundo UPDATE e os comandos de UPDATE estão envoltos em uma transação (BEGIN, COMMIT), então nenhum UPDATE será efetivo. Por isso a saída final será igual a saída do primeiro SELECT. • Pergunta 9 0 em 1 pontos Considere os seguintes tipos de bancos de dados: (I) Relacionais com propriedades ACID (II) Em memória (III) Orientados a documentos (IV) Orientados a grafos Considere agora os seguintes domínios a serem modelados em bancosde dados: ( ) Soluções de cache. ( ) Entidades com alta variabilidade de atributos entre suas instâncias. ( ) Dados financeiros que exigem alta consistência. ( ) Análise logística de rotas de caminhões. Assinale a alternativa que traça a correspondência mais adequada entre os tipos de bancos de dados e os domínios aos quais eles se aplicam melhor. Resposta Selecionada: b. (II) (I) (III) (IV) Respostas: a. (IV) (III) (I) (II) b. (II) (I) (III) (IV) c. (III) (II) (I) (IV) d. (II) (III) (I) (IV) e. (I) (III) (II) (IV) Comentário da resposta: d. Soluções de cache exigem pouco espaço e devem ser rápidas, por isso bancos em memória são adequados para elas. Instâncias diferentes com atributos diferentes para uma mesma entidade geram tabelas esparsas em bancos relacionais; utilizar um banco com esquema flexível, como os orientados a documentos, é interessante. A transferência entre contas correntes é um caso que exige alta consistência e todas as garantias do ACID: melhor ficar com um SGBD relacional. Por fim, a análise logística pode utilizar a aplicação de algoritmos em grafos, por isso pode se valer de um SGBD orientado a grafos. • Pergunta 10 1 em 1 pontos Considere a uma tabela voos contendo um registro por voo e a coluna orig_estado_abrv, que representa o estado da federação de origem do voo. Qual será o resultado da consulta abaixo? SELECT count(*) FROM voos WHERE orig_estado_abrv = 'SP' AND orig_estado_abrv = 'RJ'; Resposta Selecionada: b. Zero. Respostas: a. A soma das quantidades de voos partindo do estado de São Paulo e voos partindo do estado do Rio de Janeiro. b. Zero. c. Duas linhas, uma linha com a quantidade de voos partindo do estado de São Paulo e outra linha com a quantidade de voos partindo do estado do Rio de Janeiro. d. Uma linha com duas colunas; uma coluna com a quantidade de voos partindo do estado de São Paulo e outra coluna com a quantidade de voos partindo do estado do Rio de Janeiro. e. Um erro, pois a sintaxe está incorreta. Comentário da resposta: b. Um mesmo registro não pode ter um valor (“SP”) para uma coluna e ao mesmo tempo outro valor (“RJ”) para a mesma coluna. Dessa forma nenhuma linha satisfará a condição imposta pelo WHERE. O que resultará numa contagem de zero linhas.
Compartilhar