WorksheetsSQL Query Selection for E-commerce Scenario
Total questions: 23
Worksheet time: 12mins
Uma empresa de e-commerce deseja gerar relatórios detalhados com dados de seus clientes e seus pedidos. Para isso, o analista de dados precisa extrair registros de todos os clientes que moram na cidade de 'Curitiba', cujo status do pedido seja 'pago', e deseja visualizar essas informações organizadas pela data do pedido, do mais antigo para o mais recente. A tabela disponível se chama 'pedidos' e possui as colunas: nome_cliente, cidade, status_pedido e data_pedido.
SELECT nome_cliente FROM pedidos WHERE cidade = 'Curitiba' ORDER BY status_pedido ASC;
SELECT * FROM pedidos ORDER BY data_pedido ASC WHERE cidade = 'Curitiba' AND status_pedido = 'pago';
SELECT nome_cliente, cidade, status_pedido FROM pedidos WHERE status_pedido = 'pago' AND cidade = 'Curitiba';
SELECT * FROM pedidos WHERE cidade = 'Curitiba' AND status_pedido = 'pago' ORDER BY data_pedido ASC;
SELECT * FROM pedidos WHERE cidade = 'Curitiba' OR status_pedido = 'pago' ORDER BY nome_cliente DESC;
Qual das alternativas a seguir aplica corretamente as cláusulas SELECT, WHERE e ORDER BY em uma consulta SQL para selecionar todos os dados da tabela 'pedidos', filtrando por cidade e status do pedido, e ordenando cronologicamente conforme solicitado?
Filtro incompleto e ordenação incorreta, pois não inclui o status do pedido.
Ordem incorreta das cláusulas, pois ORDER BY deve vir após WHERE.
Embora os filtros corretos sejam aplicados, não ordena por data.
O uso do operador OR é inadequado para este caso, pois selecionaria registros que atendem apenas a uma das condições.
Uma empresa que oferece cursos online deseja identificar quais alunos compraram mais de R$ 500,00 em cursos ao longo do ano. Além disso, a equipe pedagógica quer saber quantos cursos diferentes cada um desses alunos adquiriu. As informações estão organizadas em três tabelas no banco de dados: Alunos, Compras e Cursos. A equipe de dados precisa preparar uma consulta SQL para apresentar essa análise em uma reunião com a diretoria.
SELECT a.nome, COUNT(DISTINCT c.id_curso) FROM Alunos a JOIN Compras cp ON a.id_aluno = cp.id_aluno JOIN Cursos c ON cp.id_curso = c.id_curso WHERE cp.valor > 500 GROUP BY a.nome;
SELECT a.nome, COUNT(DISTINCT cp.id_curso) FROM Alunos a JOIN Compras cp ON a.id_aluno = cp.id_aluno WHERE a.id_aluno IN ( SELECT id_aluno FROM Compras GROUP BY id_aluno HAVING SUM(valor) > 500 ) GROUP BY a.nome;
SELECT a.nome, COUNT(DISTINCT c.id_curso) FROM Alunos a JOIN Compras cp ON a.id_aluno = cp.id_aluno JOIN Cursos c ON cp.id_curso = c.id_curso WHERE a.id_aluno IN ( SELECT id_aluno FROM Compras GROUP BY id_aluno HAVING SUM(valor) > 500 ) GROUP BY a.nome;
O item busca avaliar se o estudante consegue aplicar corretamente subconsultas correlacionadas e junções para resolver um problema real de análise de dados. Qual alternativa está correta?
Filtra compras individuais com valor acima de R$ 500,00, não o total gasto pelo estudante. Pode excluir estudantes que fizeram muitas pequenas compras.
Não faz junção com a tabela Cursos, então não é possível contar corretamente cursos diferentes, apenas IDs de compras.
Filtra estudantes com valor total de compras acima de R$ 500,00 e retorna o nome e a contagem distinta de cursos adquiridos.
Agrupa corretamente por estudante e soma os valores, mas a contagem usa o ID da compra, não os cursos distintos.
Embora utilize a junção com Cursos, conta id_curso sem DISTINCT, o que pode gerar duplicidade em cursos repetidos na mesma compra.
Uma rede de farmácias deseja atualizar os dados de seus produtos com base nas informações recebidas de seus fornecedores. Cada produto está vinculado a um fornecedor específico e, recentemente, a fornecedora Distribuidora Saúde+ concedeu um desconto de 7% em todos os medicamentos fornecidos por ela. Essas informações estão registradas nas tabelas Produtos, Fornecedores_Produtos e Fornecedores. O analista responsável precisa utilizar um comando SQL apropriado para refletir essa atualização de forma segura e precisa no banco de dados.
UPDATE Produtos p JOIN Fornecedores_Produtos fp ON p.id_produto = fp.id_produto SET p.preco = p.preco * 0.93 WHERE fp.nome_fornecedor = 'Distribuidora Saúde+';
UPDATE Produtos JOIN Fornecedores f ON Produtos.id_fornecedor = f.id_fornecedor SET preco = preco * 0.93 WHERE f.nome_fornecedor = 'Distribuidora Saúde+';
UPDATE Produtos p JOIN Fornecedores f ON p.id_produto = f.id_produto SET p.preco = p.preco * 0.93 WHERE f.nome_fornecedor = 'Distribuidora Saúde+';
UPDATE Produtos p JOIN Fornecedores_Produtos fp ON p.id_produto = fp.id_produto JOIN Fornecedores f ON fp.id_fornecedor = f.id_fornecedor SET preco = preco * 0.93
UPDATE Produtos p JOIN Fornecedores_Produtos fp ON p.id_produto = fp.id_produto JOIN Fornecedores f ON fp.id_fornecedor = f.id_fornecedor SET p.preco = p.preco * 0.93
Qual das alternativas a seguir aplica corretamente o comando UPDATE com JOIN para atualizar dados entre tabelas relacionadas no MySQL, garantindo o uso correto dos JOINs e da cláusula WHERE para aplicar um desconto apenas aos produtos fornecidos pela Distribuidora Saúde+?
Utiliza JOIN, mas tenta acessar nome_fornecedor a partir de Fornecedores_Produtos, onde essa coluna não existe.
Assume incorretamente que há um vínculo direto entre Produtos e Fornecedores, ignorando a existência de Fornecedores_Produtos, que é necessária para relacionamentos muitos-para-muitos.
Realiza um JOIN direto entre Produtos e Fornecedores com base em id_produto, uma relação inexistente. Essa tentativa ignora a estrutura correta do banco de dados.
A ausência da cláusula WHERE faz com que todos os preços dos produtos sejam atualizados, e não apenas os da Distribuidora Saúde+, o que pode comprometer a integridade dos dados.
Utiliza as três tabelas envolvidas no relacionamento, realiza os JOINs apropriados e aplica o desconto apenas aos produtos fornecidos pela Distribuidora Saúde+, utilizando corretamente a cláusula WHERE para filtrar a condição.
Em um projeto de integração de sistemas hospitalares, uma equipe de TI precisa manter sincronizados os dados de pacientes entre dois bancos: um que registra atendimentos e outro que armazena informações cadastrais. Alterações nos dados cadastrais devem ser refletidas imediatamente nos registros de atendimento para garantir precisão no histórico clínico. Além disso, quando um novo paciente realiza um primeiro atendimento, seus dados devem ser inseridos. Caso um paciente seja removido do sistema principal, ele também deve ser excluído do banco de atendimentos. O time opta por uma abordagem que centralize essas ações em uma única instrução SQL. Com base no cenário apresentado, a utilização do comando MERGE é mais adequada porque:
Combina operações de atualização, inserção e exclusão, otimizando a sincronização de dados entre tabelas.
Realiza atualizações condicionais quando não há conflito entre os dados das tabelas comparadas.
Assegura integridade referencial automaticamente ao sincronizar dados entre tabelas relacionadas.
Permite consolidar registros de múltiplas fontes em uma única tabela, com base em critérios predefinidos.
Possibilita a substituição automatizada de registros antigos sempre que novos dados forem inseridos.
A empresa do setor logístico enfrenta lentidão em seu sistema de rastreamento. A tabela Rastreamento tem milhões de registros e apenas uma chave primária na coluna ID. Consultas frequentes filtram por codigo_encomenda e ordenam por data_hora. A equipe técnica considera criar um índice composto nessas colunas e também reestruturar a tabela com comandos DDL, buscando melhor desempenho sem comprometer a integridade dos dados. Qual ação pode melhorar o desempenho das consultas?
Adicionar um índice composto em codigo_encomenda e data_hora.
Remover a chave primária da tabela.
Excluir registros antigos da tabela.
Desabilitar transações na tabela.
Como os comandos DDL podem contribuir para a reestruturação de uma tabela grande e quais cuidados devem ser adotados ao aplicá-los em produção?
Permitem modificar a estrutura da tabela, mas exigem planejamento para evitar perda de dados e indisponibilidade.
Servem apenas para inserir dados, sem impacto na estrutura da tabela.
São usados para consultas rápidas, sem alterar a estrutura da tabela.
Apenas otimizam índices, sem necessidade de cuidados em produção.
Qual comando SQL deve ser utilizado para atualizar a data de validade dos produtos armazenados em depósitos da região Nordeste, considerando as tabelas 'produtos' (com data de validade e código do depósito) e 'depositos' (com código do depósito e região)?
UPDATE produtos SET data_validade =
UPDATE produtos SET data_validade =
UPDATE depositos SET data_validade =
UPDATE produtos SET data_validade =
Justifique a importância de usar a cláusula WHERE neste tipo de comando (UPDATE com JOIN para manipulação de dados em tabelas relacionadas).
Ela restringe as linhas a serem atualizadas, evitando alterações de dados não intencionais.
Ela aumenta a velocidade da operação JOIN.
Ela permite o uso de funções agregadas na instrução UPDATE.
Ela cria automaticamente índices nas colunas associadas.
Qual das seguintes consultas SQL retorna corretamente os pacientes que realizaram consultas nas especialidades “Cardiologia” e “Endocrinologia” nos últimos 6 meses, utilizando JOIN?
SELECT p.nome, c.data, c.especialidade FROM pacientes p JOIN consultas c ON p.id = c.id_paciente WHERE c.especialidade IN ('Cardiologia', 'Endocrinologia') AND c.data >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH);
SELECT * FROM pacientes WHERE especialidade = 'Cardiologia' OR especialidade = 'Endocrinologia';
SELECT nome FROM consultas WHERE data > NOW() - INTERVAL 6 MONTH;
SELECT p.nome, c.data FROM pacientes p, consultas c WHERE c.especialidade = 'Cardiologia' AND c.data >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH);
Qual é a importância do uso da cláusula JOIN em análises que envolvem múltiplas tabelas normalizadas, como no caso de relatórios de pacientes que realizaram consultas em diferentes especialidades?
Permite combinar dados de diferentes tabelas relacionadas, garantindo informações completas e corretas.
Serve apenas para ordenar os resultados das consultas.
É utilizada para excluir registros duplicados das tabelas.
Apenas melhora a performance das consultas, sem alterar os resultados.
Uma rede de academias mantém dois sistemas distintos para registrar seus alunos: um para os alunos que frequentam as unidades presenciais e outro para aqueles que utilizam a plataforma de treinamento online. A equipe de dados foi chamada para realizar análises cruzadas entre os dois bancos de dados para apoiar estratégias de retenção e fidelização. Entre as necessidades identificadas estão: (1) descobrir quais alunos utilizam apenas a plataforma online; (2) identificar alunos que frequentam tanto as academias físicas quanto o ambiente virtual. Qual operador de conjunto ou estratégia alternativa em SQL poderia ser utilizada para encontrar os alunos que utilizam apenas a plataforma online?
UNION
INTERSECT
EXCEPT (ou LEFT JOIN com verificação de NULL)
GROUP BY
O operador INTERSECT é mais apropriado para encontrar estudantes que utilizam ambas as modalidades porque:
Ele encontra registros presentes em ambos os conjuntos, correspondendo ao objetivo de identificar estudantes que utilizam ambas as modalidades.
Ele combina todos os registros de ambos os conjuntos, independentemente da sobreposição.
Ele remove duplicatas de um único conjunto.
Ele ordena os resultados em ordem crescente.
Um sistema de biblioteca universitária permite que vários usuários peguem livros emprestados simultaneamente. Durante períodos de alta demanda, como semanas de provas, ocorrem situações em que dois alunos tentam pegar o mesmo livro ao mesmo tempo. Em alguns casos, o sistema registrou o mesmo livro como emprestado para dois usuários diferentes, causando conflitos de dados. Após análise, constatou-se que o aplicativo não utilizava transações ou controle de concorrência adequado, permitindo que várias transações acessassem e modificassem os mesmos dados sem qualquer isolamento.
Qual das alternativas a seguir explica melhor como a falta de transações e controle de concorrência pode levar a conflitos de dados neste cenário, e quais mecanismos de banco de dados poderiam ser implementados para evitar tais problemas?
Permite que várias transações acessem e modifiquem os mesmos dados simultaneamente, levando a inconsistências; a implementação de transações e mecanismos de controle de concorrência como bloqueios ou níveis de isolamento pode evitar tais conflitos.
Garante que apenas um usuário possa pegar um livro emprestado, evitando qualquer conflito de dados; não usar controle de concorrência é a melhor abordagem.
Resolve automaticamente todos os conflitos sobrescrevendo os dados anteriores; nenhum mecanismo adicional é necessário.
Impede que os usuários peguem livros emprestados durante períodos de alta demanda, o que elimina a necessidade de controle de concorrência.
Como o uso de transações e controle de concorrência no MySQL pode evitar o empréstimo duplicado do mesmo item?
Garantindo que apenas uma transação possa atualizar o status de empréstimo de um item por vez
Permitindo que várias transações atualizem o status de empréstimo simultaneamente
Ignorando conflitos entre transações
Desativando o registro de transações
Qual nível de isolamento seria mais apropriado para este sistema e por quê? Considere o impacto na integridade dos dados e na experiência do usuário.
Read Uncommitted
Read Committed
Repeatable Read
Serializable
Quais das seguintes são melhorias sugeridas pela equipe de tecnologia para automatizar processos administrativos em uma empresa que faz manutenção de equipamentos industriais?
A apenas
B apenas
A e B
Nenhuma das anteriores
Por que criar uma função é mais apropriado para calcular o custo total do serviço com base em regras variáveis em um sistema que registra ordens de serviço?
Porque funções podem ser reutilizadas e retornam um valor com base em parâmetros de entrada, tornando-as ideais para cálculos com regras variáveis.
Porque funções são usadas apenas para atualizar dados no banco de dados.
Porque funções são melhores para automatizar atualizações de status das ordens de serviço.
Porque funções só podem ser usadas para valores fixos e não para regras variáveis.
Considere um cenário em que é necessário identificar todos os clientes que realizaram compras em mais de três categorias diferentes de produtos no último semestre. Quais comandos SQL e estratégias de junção e agregação são mais adequados para resolver esse problema?
Utilizar apenas a tabela de compras, sem relacionar com produtos ou categorias.
Utilizar uma subconsulta para filtrar clientes com COUNT(DISTINCT categoria) > 3, realizando JOIN entre as tabelas de clientes, compras e produtos.
Selecionar apenas clientes com compras acima de R$ 500,00, sem considerar as categorias dos produtos.
Aplicar um LEFT JOIN entre clientes e produtos, sem agrupar por cliente.
Uma empresa deseja atualizar o status de todos os pedidos entregues em cidades da região Sul. As informações estão distribuídas nas tabelas 'pedidos' (com status e código da cidade) e 'cidades' (com código e região). Qual comando SQL realiza essa atualização corretamente?
UPDATE pedidos SET status = 'Entregue' WHERE regiao = 'Sul';
UPDATE cidades SET status = 'Entregue' WHERE regiao = 'Sul';
UPDATE pedidos SET status = 'Entregue' WHERE cod_cidade IN (SELECT cod_cidade FROM cidades WHERE regiao = 'Sul');
UPDATE pedidos SET status = 'Entregue' WHERE cod_cidade = 'Sul';
Em um sistema de reservas de salas, como o uso de transações e níveis de isolamento pode evitar que duas pessoas reservem a mesma sala para o mesmo horário?
Utilizando apenas comandos SELECT para verificar disponibilidade, sem controle de concorrência.
Bloqueando o registro da sala durante a transação, garantindo que apenas uma reserva seja confirmada por vez para o mesmo horário.
Permitindo que múltiplas transações reservem a mesma sala simultaneamente, sem restrições.
Desabilitando o uso de transações para agilizar o processo de reserva.
