Pular para o conteúdo

Guia Completo de Perguntas de SQL para Entrevistas de Emprego e Testes

Guia Completo de Perguntas de SQL para Entrevistas de Emprego e Testes

Se você está se preparando para uma entrevista de emprego, um teste ou uma prova que envolva SQL, é importante conhecer os conceitos básicos e avançados da linguagem, bem como as particularidades do Oracle. Neste artigo, vamos apresentar algumas perguntas comuns sobre SQL que podem ser feitas nessas situações, e como respondê-las de forma correta e eficiente. Vamos usar o Oracle 19c como base, mas muitas das respostas também se aplicam a outras versões e outros bancos de dados.

Perguntas básicas

1. O que é SQL e para que serve?

SQL é a sigla para Structured Query Language, ou Linguagem de Consulta Estruturada em português. SQL é uma linguagem padrão para interagir com bancos de dados relacionais, ou seja, bancos de dados que organizam os dados em tabelas com colunas e linhas. SQL permite realizar operações como:

  • Criar, alterar e excluir tabelas e outros objetos do banco de dados, como índices, visões, sequências, etc.
  • Inserir, atualizar e excluir dados nas tabelas.
  • Consultar e filtrar dados de uma ou mais tabelas, usando critérios, funções, agrupamentos, ordenações, junções, etc.
  • Controlar o acesso e a segurança dos dados, usando usuários, privilégios, perfis, etc.
2. Quais são os principais tipos de dados usados em SQL?

Os principais tipos de dados usados em SQL são:

  • Numéricos: representam valores numéricos, inteiros ou decimais, como NUMBER, INTEGER, FLOAT, DECIMAL, etc.
  • Caracteres: representam valores alfanuméricos, como letras, números, símbolos, etc. Podem ser de tamanho fixo ou variável, como CHAR, VARCHAR2, CLOB, etc.
  • Data e hora: representam valores de data e/ou hora, como DATE, TIMESTAMP, INTERVAL, etc.
  • Binários: representam valores binários, como imagens, arquivos, etc. Podem ser de tamanho fixo ou variável, como RAW, BLOB, BFILE, etc.
3. O que são chaves primárias e estrangeiras, e qual a sua importância?

Chaves primárias e estrangeiras são conceitos fundamentais para garantir a integridade e a consistência dos dados em um banco de dados relacional.

Uma chave primária é uma coluna ou um conjunto de colunas que identifica de forma única cada registro de uma tabela. Uma chave primária não pode ter valores nulos ou duplicados, e deve ser definida na criação da tabela ou posteriormente. Uma chave primária facilita a localização e a manipulação dos dados, e também serve como base para relacionar as tabelas.

Uma chave estrangeira é uma coluna ou um conjunto de colunas que referencia a chave primária de outra tabela. Uma chave estrangeira estabelece uma relação de dependência entre as tabelas, ou seja, um registro da tabela que contém a chave estrangeira só pode existir se houver um registro correspondente na tabela referenciada. Uma chave estrangeira garante a integridade referencial dos dados, ou seja, evita que haja registros órfãos ou inconsistentes nas tabelas.

Perguntas avançadas

4. O que são subconsultas e como usá-las?

Subconsultas são consultas aninhadas dentro de outras consultas, que retornam um valor ou um conjunto de valores que são usados na consulta principal. Subconsultas podem ser usadas em diversas situações, como:

  • Em cláusulas WHERE, para filtrar os registros da consulta principal com base no resultado da subconsulta. Por exemplo, para listar os nomes dos funcionários que ganham mais do que a média salarial:
SELECT nome FROM funcionarios
WHERE salario > (SELECT AVG(salario) FROM funcionarios);
  • Em cláusulas SELECT, para retornar um valor calculado ou derivado da subconsulta. Por exemplo, para listar os nomes dos departamentos e o número de funcionários de cada um:
SELECT nome, (SELECT COUNT(*) FROM funcionarios WHERE departamento_id = departamentos.id) AS numero_funcionarios
FROM departamentos;
  • Em cláusulas FROM, para criar uma tabela temporária com o resultado da subconsulta, que pode ser usada na consulta principal. Por exemplo, para listar os nomes e os salários dos funcionários que ganham mais do que os seus gerentes:
SELECT f.nome, f.salario FROM funcionarios f
JOIN (SELECT id, salario FROM funcionarios WHERE cargo = 'Gerente') g
ON f.gerente_id = g.id
WHERE f.salario > g.salario;
5. O que são funções analíticas e como usá-las?

Funções analíticas são funções que permitem realizar cálculos complexos sobre um conjunto de dados, sem agrupar ou reduzir o número de registros. Funções analíticas podem ser usadas para obter informações como:

  • Ranking: classificar os registros de acordo com um critério, como RANK, DENSE_RANK, ROW_NUMBER, etc. Por exemplo, para listar os nomes e os salários dos funcionários, ordenados por salário em ordem decrescente, e com o seu ranking:
SELECT nome, salario, RANK() OVER (ORDER BY salario DESC) AS ranking
FROM funcionarios;
  • Particionamento: dividir os registros em grupos, de acordo com uma coluna ou uma expressão, como PARTITION BY. Por exemplo, para listar os nomes e os salários dos funcionários, e a média salarial de cada departamento:
SELECT nome, salario, AVG(salario) OVER (PARTITION BY departamento_id) AS media_departamento
FROM funcionarios;
  • Janela: definir um intervalo de registros que serão considerados para o cálculo da função, de acordo com uma coluna ou uma expressão, como ROWS BETWEEN ou RANGE BETWEEN. Por exemplo, para listar os nomes e os salários dos funcionários, e o salário anterior e posterior de cada um:
SELECT nome, salario, LAG(salario) OVER (ORDER BY nome) AS salario_anterior, LEAD(salario) OVER (ORDER BY nome) AS salario_posterior
FROM funcionarios;
6. O que são triggers e como usá-las?

Triggers são objetos do banco de dados que executam uma ação automaticamente quando ocorre um evento específico, como uma operação de inserção, atualização ou exclusão em uma tabela. Triggers podem ser usados para:

  • Validar ou modificar os dados antes ou depois de serem inseridos, atualizados ou excluídos. Por exemplo, para verificar se o salário de um funcionário é maior do que o salário mínimo, e se não for, aumentá-lo em 10%:
CREATE OR REPLACE TRIGGER validar_salario
BEFORE INSERT OR UPDATE ON funcionarios
FOR EACH ROW
BEGIN
  IF :NEW.salario < 1100 THEN
    :NEW.salario := :NEW.salario * 1.1;
  END IF;
END;
  • Registrar ou auditar as alterações feitas nos dados, em uma tabela de log ou em um arquivo externo. Por exemplo, para gravar o nome do usuário, a data e a hora, e o tipo de operação realizada em uma tabela de funcionários:
CREATE OR REPLACE TRIGGER registrar_alteracao
AFTER INSERT OR UPDATE OR DELETE ON funcionarios
FOR EACH ROW
BEGIN
  INSERT INTO log_funcionarios (usuario, data_hora, operacao, funcionario_id)
  VALUES (USER, SYSDATE, :NEW.operation, :NEW.id);
END;
  • Executar uma ação específica em resposta a um evento, como enviar um e-mail, chamar uma função, etc. Por exemplo, para enviar um e-mail para o gerente de um departamento quando um novo funcionário for contratado:
CREATE OR REPLACE TRIGGER enviar_email
AFTER INSERT ON funcionarios
FOR EACH ROW
DECLARE
  v_email VARCHAR2(100);
BEGIN
  SELECT email INTO v_email FROM funcionarios WHERE id = :NEW.gerente_id;
  UTL_MAIL.SEND(sender => 'rh@empresa.com.br', recipients => v_email, subject => 'Novo funcionário', message => 'Olá, um novo funcionário foi contratado para o seu departamento. O nome dele é ' || :NEW.nome || ' e o salário dele é ' || :NEW.salario || '.');
END;
7. O que são índices e como usá-los?

Índices são estruturas de dados que armazenam os valores de uma ou mais colunas de uma tabela, ordenados de forma a facilitar a busca e a recuperação dos dados. Índices podem ser usados para:

  • Melhorar o desempenho das consultas, reduzindo o tempo e o espaço necessários para localizar os registros desejados. Por exemplo, para criar um índice na coluna nome da tabela funcionarios, que é frequentemente usada nas consultas:
CREATE INDEX idx_nome ON funcionarios (nome);
  • Garantir a unicidade dos dados, evitando que haja valores duplicados em uma coluna ou um conjunto de colunas. Por exemplo, para criar um índice único na coluna cpf da tabela funcionarios, que deve ser um identificador exclusivo de cada funcionário:
CREATE UNIQUE INDEX idx_cpf ON funcionarios (cpf);
  • Implementar restrições de integridade, como chaves primárias e estrangeiras, que exigem que os valores sejam únicos e consistentes. Por exemplo, para criar um índice na coluna departamento_id da tabela funcionarios, que referencia a coluna id da tabela departamentos:
CREATE INDEX idx_departamento ON funcionarios (departamento_id);
8. O que são views e como usá-las?

Views são objetos do banco de dados que armazenam uma consulta SQL, que pode ser usada como se fosse uma tabela. Visões podem ser usadas para:

  • Simplificar as consultas, ocultando a complexidade ou a redundância dos dados. Por exemplo, para criar uma visão que mostra o nome, o salário e o nome do departamento de cada funcionário:
CREATE VIEW vw_funcionarios AS
SELECT f.nome, f.salario, d.nome AS departamento
FROM funcionarios f
JOIN departamentos d
ON f.departamento_id = d.id;
  • Proteger os dados, restringindo o acesso ou a modificação de determinadas colunas ou registros. Por exemplo, para criar uma visão que mostra apenas o nome e o salário dos funcionários que pertencem ao departamento de vendas:
CREATE VIEW vw_vendedores AS
SELECT nome, salario FROM funcionarios
WHERE departamento_id = (SELECT id FROM departamentos WHERE nome = 'Vendas');
  • Facilitar a manutenção, permitindo alterar a estrutura ou a fonte dos dados sem afetar as consultas que usam a view. Por exemplo, se a tabela funcionarios for renomeada para empregados, a view vw_funcionarios continuará funcionando, desde que a consulta que a define seja atualizada:
CREATE OR REPLACE VIEW vw_funcionarios AS
SELECT e.nome, e.salario, d.nome AS departamento
FROM empregados e
JOIN departamentos d
ON e.departamento_id = d.id;

Esse foi o meu artigo sobre SQL. Espero que você tenha gostado e que ele tenha sido útil para você. Se você tiver alguma dúvida, sugestão ou comentário, por favor, me diga. 🙂

Valeuuuuu !

Referências

Natanael Freitas

Natanael Freitas

E aí, pessoal! Sou o Natanael Freitas, o cara que curte desbravar o mundo do PL/SQL. Não sou nenhum expert, mas me viro bem nas linhas de código desse universo. A verdade é que sou mais íntimo de bancos de dados do que de muitas pessoas por aí – sério! Quando não tô quebrando a cabeça com triggers e stored procedures, tô por aí fuçando a web em busca de tudo que é novidade nesse mundão tech. Às vezes, me pego dando uma aula rápida sobre PL/SQL pros colegas, na tentativa de descomplicar essa coisa toda. Meu dia a dia é basicamente sorrisos, café (sim, sou desses que não larga a caneca!) e resolvendo problemas nos códigos. Não sou nenhum Picasso, mas acho que consigo fazer umas artes por aí. Então, se precisar de ajuda com PL/SQL ou só quiser bater um papo sobre o assunto, tamo aí!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Marcações:
plugins premium WordPress