Hello friends! neste post, veremos algumas das consultas SQL mais comuns feitas em entrevistas. Estas perguntas e respostas SQL são desenhadas tanto para os mais frescos como para os mais experientes.
Na verdade, a maioria destas perguntas foram feitas durante as entrevistas nas diferentes fases da minha carreira.
Se você quiser pular as perguntas básicas e começar com algumas consultas SQL complicadas, então você pode passar diretamente para nossas consultas SQL perguntas de entrevista para a seção experiente.
Consulte as duas tabelas abaixo para referência enquanto tenta criar consultas para as perguntas feitas aqui.
Tabela – Detalhes do Funcionário
EmpId | Nome Completo | Gerenciador | DateOfJoining | Cidade |
---|---|---|---|---|
121 | John Snow | 321 | 01/31/2014 | Toronto |
321 | Walter White | 986 | 01/30/2015 | Califórnia |
421 | Kuldeep Rana | 876 | 27/11/2016 | New Delhi |
Table – EmployeeSalary
ImpId | Projeto | Salário | Variável |
---|---|---|---|
121 | P1 | 8000 | 500 |
321 | P2 | 10000 | 1000 |
421 | P1 | 12000 | 0 |
Para sua conveniência, Eu compilei as 10 perguntas mais importantes para si. Você pode tentar resolver estas questões e clicar nos links para ir para suas respectivas respostas.
- SQL Query para ir buscar registros que estão presentes em uma tabela mas não em outra tabela.
- SQL query para ir buscar todos os funcionários que não estão trabalhando em nenhum projeto.
- SQL query para ir buscar todos os funcionários de EmployeeDetails que se juntaram no Ano 2020.
- Vai buscar todos os funcionários da EmployeeDetails que tenham um registro salarial no EmployeeSalary.
- Escrever uma consulta SQL para buscar a contagem de funcionários no projeto.
- Vai buscar os nomes e salário dos funcionários mesmo que o valor do salário não esteja presente para o funcionário.
- Escrever uma consulta SQL para buscar todos os funcionários que também são gerentes.
- Escreva uma consulta SQL para buscar registros duplicados de EmployeeDetails.
- Escreva uma consulta SQL para buscar apenas linhas ímpares da tabela.
- Escreva uma consulta para encontrar o 3º salário mais alto de uma tabela sem a palavra-chave top ou limit.
Or, você também pode pular para nossas duas seções abaixo sobre perguntas de entrevista para profissionais experientes e recém-chegados.
Conteúdo
Perguntas de Entrevista SQL para Freshers
Aqui está uma lista de perguntas e respostas SQL para os candidatos mais recentes que os ajudará em suas entrevistas. Nestas consultas, vamos focar apenas nos comandos SQL básicos.
Ques.1. Escreva uma consulta SQL para ir buscar o EmpId e FullName de todos os funcionários que trabalham sob Manager com id – ‘986’.
Ans. Podemos usar a tabela EmployeeDetails para ir buscar os detalhes dos funcionários com uma cláusula where para o manager-
SELECT EmpId, FullNameFROM EmployeeDetailsWHERE ManagerId = 986;
Ques.2Escreva uma consulta SQL para ir buscar os diferentes projetos disponíveis na tabela EmployeeSalary.
Ans. Enquanto nos referimos à tabela EmployeeSalary, podemos ver que esta tabela contém valores de projetos correspondentes a cada funcionário, ou podemos dizer que teremos valores de projetos duplicados ao selecionar Valores de projetos desta tabela.
Então, usaremos a cláusula distinta para obter os valores únicos do Projeto.
SELECT DISTINCT(Project)FROM EmployeeSalary;
Ques.3. Escreva uma consulta SQL para obter a contagem dos funcionários que trabalham no projeto ‘P1’.
Ans. Aqui, estaríamos usando a contagem de funções agregadas() com o SQL onde clause-
SELECT COUNT(*) FROM EmployeeSalary WHERE Project = 'P1';
Ques.4Escreva uma consulta SQL para encontrar o salário máximo, mínimo e médio dos funcionários.
Ans. Podemos usar a função agregada de SQL para buscar os valores máximo, mínimo e médio-
SELECT Max(Salary), Min(Salary), AVG(Salary) FROM EmployeeSalary;
Ques.5Escreva uma consulta SQL para encontrar o id do funcionário cujo salário está na faixa de 9000 e 15000.
Ans. Aqui, podemos usar o operador ‘Between’ com uma cláusula where.
SELECT EmpId, SalaryFROM EmployeeSalaryWHERE Salary BETWEEN 9000 AND 15000;
Ques.6. Escreva uma consulta SQL para buscar os funcionários que moram em Toronto e trabalham sob gerência com ManagerId – 321.
Ans. Como temos que satisfazer ambas as condições – funcionários morando em ‘Toronto’ e trabalhando no Projeto ‘P2’. Assim, usaremos E operador aqui –
SELECT EmpId, City, ManagerIdFROM EmployeeDetailsWHERE City='Toronto' AND ManagerId='321';
Ques.7. Escreva uma pergunta SQL para ir buscar todos os funcionários que moram na Califórnia ou trabalham sob um gerente com ManagerId – 321.
Ans. Esta pergunta de entrevista requer que satisfaçam uma das condições – funcionários que moram na Califórnia e trabalham sob gerente com ManagerId – 321.
Ans. Assim, usaremos o operador OR aqui -15>
SELECT EmpId, City, ManagerIdFROM EmployeeDetailsWHERE City='California' OR ManagerId='321';
Ques.8Escreva uma consulta SQL para ir buscar todos os funcionários que trabalham no Projeto que não P1.
Ans. Aqui, podemos usar o operador NOT para ir buscar as linhas que não estão satisfazendo a condição dada.
SELECT EmpIdFROM EmployeeSalaryWHERE NOT Project='P1';
Or usando o não igual ao operador-
SELECT EmpIdFROM EmployeeSalaryWHERE Project <> 'P1';
Para a diferença entre os operadores NOT e <> SQL, verifique este link – Diferença entre os operadores NOT e != operadores.
Ques.9Escreva uma consulta SQL para exibir o salário total de cada funcionário adicionando o Salário com Valor Variável.
Ans. Aqui, podemos simplesmente usar o operador ‘+’ em SQL.
SELECT EmpId,Salary+Variable as TotalSalary FROM EmployeeSalary;
Ques.10Escreva uma consulta SQL para buscar os funcionários cujo nome comece com dois caracteres quaisquer, seguido por um texto “hn” e terminando com qualquer sequência de caracteres.
Ans. Para esta pergunta, podemos criar uma consulta SQL usando o operador ‘_’ e ‘%’ caracteres curinga, onde ‘_’ corresponde a um único caracter e ‘%’ corresponde a ‘0 ou vários caracteres’.
SELECT FullNameFROM EmployeeDetailsWHERE FullName LIKE '__hn%';
Ques.11Escreva uma consulta SQL para ir buscar todos os EmpIds presentes em qualquer uma das tabelas – ‘EmployeeDetails’ e ‘EmployeeSalary’.
Ans. A fim de obter ids únicos de empregados de ambas as tabelas, podemos usar a cláusula Union que pode combinar os resultados das duas consultas SQL e retornar linhas únicas.
SELECT EmpId FROM EmployeeDetailsUNION SELECT EmpId FROM EmployeeSalary;
Ques.12Escreva uma consulta SQL para buscar registros comuns entre duas tabelas.
Ans. SQL Server – Usando o operador INTERSECT-
SELECT * FROM EmployeeSalaryINTERSECTSELECT * FROM ManagerSalary;
MySQL – Como o MySQL não tem operador INTERSECT, podemos usar a subconsulta –
SELECT *FROM EmployeeSalaryWHERE EmpId IN (SELECT EmpId from ManagerSalary);
Ques.13Escreva uma consulta SQL para buscar registros que estão presentes em uma tabela mas não em outra tabela.
Ans. SQL Server – Usando o operador MINUS-
SELECT * FROM EmployeeSalaryMINUSSELECT * FROM ManagerSalary;
MySQL – Como o MySQL não tem o operador MINUS, podemos usar o operador LEFT join-
SELECT EmployeeSalary.*FROM EmployeeSalaryLEFT JOINManagerSalary USING (EmpId)WHERE ManagerSalary.EmpId IS NULL;
Ques.14Escreva uma consulta SQL para ir buscar os EmpIds que estão presentes em ambas as tabelas – ‘EmployeeDetails’ e ‘EmployeeSalary.
Ans. Usando a subconsulta –
SELECT EmpId FROM EmployeeDetails where EmpId IN (SELECT EmpId FROM EmployeeSalary);
Ques.15. Escreva uma consulta SQL para ir buscar os EmpIds que estão presentes em EmployeeDetails mas não em EmployeeSalary.
Ans. Usando a subconsulta –
SELECT EmpId FROM EmployeeDetails where EmpId Not IN (SELECT EmpId FROM EmployeeSalary);
Ques.16Escreva uma consulta SQL para ir buscar o nome completo do funcionário e substituir o espaço por ‘-‘.
Ans. Usando a função ‘Replace’-
SELECT REPLACE(FullName, ' ', '-') FROM EmployeeDetails;
Ques.17. Escreva uma consulta SQL para ir buscar a posição de um dado caractere(s) em um campo.
Ans. Usando a função ‘Instr’-
SELECT INSTR(FullName, 'Snow')FROM EmployeeDetails;
Ques.18Escreva uma consulta SQL para mostrar o EmpId e ManagerId juntos.
Ans. Aqui podemos usar o comando CONCAT.
SELECT CONCAT(EmpId, ManagerId) as NewIdFROM EmployeeDetails;
Ques.19. Escreva uma consulta para buscar apenas o primeiro nome (string antes do espaço) na coluna FullName da tabela EmployeeDetails.
Ans. Nesta questão, somos obrigados a buscar primeiro a localização do caractere de espaço no campo FullName e depois extrair o primeiro nome do campo FullName.
Para encontrar a localização vamos usar o método LOCATE no MySQL e CHARINDEX no SQL SERVER e para buscar a string antes do espaço, vamos usar o método SUBSTRING OU MID.
MySQL – usando MID
SELECT MID(FullName, 1, LOCATE(' ',FullName)) FROM EmployeeDetails;
SQL Server – usando SUBSTRING
SELECT SUBSTRING(FullName, 1, CHARINDEX(' ',FullName)) FROM EmployeeDetails;
Ques.20Escreva uma consulta SQL em maiúsculas o nome do funcionário e em minúsculas os valores da cidade.
Ans. Podemos usar as funções SQL Superior e Inferior para alcançar os resultados pretendidos.
SELECT UPPER(FullName), LOWER(City) FROM EmployeeDetails;
Ques.21. Escreva uma consulta SQL para encontrar a contagem do total de ocorrências de um determinado caracter – ‘n’ no campo FullName.
Ans. Aqui, podemos usar a função ‘Length’. Podemos subtrair o comprimento total do campo FullName com um comprimento do FullName após substituir o caractere – ‘n’.
SELECT FullName, LENGTH(FullName) - LENGTH(REPLACE(FullName, 'n', ''))FROM EmployeeDetails;
Ques.22. Escreva uma consulta SQL para atualizar os nomes dos funcionários, removendo os espaços inicial e final.
Ans. Usando o comando ‘Update’ com as funções ‘LTRIM’ e ‘RTRIM’.
UPDATE EmployeeDetails SET FullName = LTRIM(RTRIM(FullName));
Ques.23. Buscar todos os funcionários que não estão trabalhando em nenhum projeto.
Ans. Esta é uma das perguntas básicas de entrevista em que o entrevistador quer ver se a pessoa sabe sobre o comumente usado – É operador NULL.
SELECT EmpId FROM EmployeeSalary WHERE Project IS NULL;
Ques.24Escreva uma consulta SQL para buscar nomes de funcionários com salário maior ou igual a 5000 e menor ou igual a 10000.
Ans. Aqui, usaremos BETWEEN na cláusula ‘where’ para devolver o EmpId dos funcionários com salário que satisfaça os critérios exigidos e depois usá-lo como subquery para encontrar o nome completo do funcionário da tabela EmployeeDetails.
SELECT FullName FROM EmployeeDetails WHERE EmpId IN (SELECT EmpId FROM EmployeeSalary WHERE Salary BETWEEN 5000 AND 10000);
Ques.25. Escreva uma consulta SQL para encontrar a data/hora atual.
Ans. MySQL-
SELECT NOW();
SQL Server-
SELECT getdate();
Oracle-
SELECT SYSDATE FROM DUAL;
Ques.26Escreva uma consulta SQL para ir buscar todos os detalhes dos funcionários da tabela EmployeeDetails que se juntaram no Ano 2020.
Ans. Usando BETWEEN para o intervalo de datas ’01-01-2020′ E ’31-12-2020′-
Também, podemos extrair parte do ano da data de adesão (usando o ANO no mySQL)-
SELECT * FROM EmployeeDetails WHERE YEAR(DateOfJoining) = '2020';
Ques.27Escreva uma consulta SQL para ir buscar todos os registros de empregados da tabela EmployeeDetails que têm um registro salarial na tabela EmployeeSalary.
Ans. Usando ‘Exists’-
SELECT * FROM EmployeeDetails EWHERE EXISTS(SELECT * FROM EmployeeSalary S WHERE E.EmpId = S.EmpId);
Ques.28. Escreva uma consulta SQL para ir buscar a contagem dos empregados ordenados por projeto em ordem decrescente.
Ans. A consulta tem dois requisitos – primeiro para ir buscar a contagem por projeto e depois para ordenar o resultado por essa contagem.
Para a contagem por projeto, estaremos usando a cláusula GROUP BY e para a ordenação, usaremos a cláusula ORDER BY no alias do project-count.
SELECT Project, count(EmpId) EmpProjectCountFROM EmployeeSalaryGROUP BY ProjectORDER BY EmpProjectCount DESC;
Ques.29. Escreva uma consulta para ir buscar nomes de empregados e registros de salário. Exibir os detalhes do funcionário mesmo que o registro salarial não esteja presente para o funcionário.
Ans. Esta é novamente uma das perguntas muito comuns de entrevista em que o entrevistador só quer verificar os conhecimentos básicos de SQL JOINS.
Aqui, podemos usar a tabela EmployeeDetail do lado esquerdo da tabela EmployeeSalary.
SELECT E.FullName, S.Salary FROM EmployeeDetails E LEFT JOIN EmployeeSalary SON E.EmpId = S.EmpId;
Ques.30. Escreva uma consulta SQL para juntar 3 tabelas.
Ans. Considerando 3 tabelas TableA, TableB, e TableC, podemos usar 2 cláusulas de adesão como abaixo-
SELECT column1, column2FROM TableAJOIN TableB ON TableA.Column3 = TableB.Column3JOIN TableC ON TableA.Column4 = TableC.Column4;
Para mais perguntas sobre SQL Joins, você também pode verificar as nossas perguntas SQL Joins Interview.
Perguntas de Entrevista SQL para Profissionais Experientes
Aqui está a lista de algumas das perguntas mais frequentes de entrevistas SQL para profissionais experientes. Estas perguntas cobrem consultas SQL sobre conceitos avançados de SQL JOIN, buscar linhas duplicadas, linhas ímpares e pares, enésimo salário mais alto, etc.
Ques. 31. Escreva uma consulta SQL para ir buscar todos os Colaboradores que também são gestores da tabela EmployeeDetails.
Ans. Aqui, temos de usar o SelfJoin como requisito para analisarmos a tabela EmployeeDetails como duas tabelas. Usaremos diferentes apelidos ‘E’ e ‘M’ para a mesma tabela EmployeeDetails.
SELECT DISTINCT E.FullNameFROM EmployeeDetails EINNER JOIN EmployeeDetails MON E.EmpID = M.ManagerID;
Para saber mais sobre Self Join juntamente com mais algumas consultas, você pode assistir o vídeo abaixo que explica o conceito de Self Join de uma forma muito simples.
Ques.32. Escreva uma consulta SQL para buscar registros duplicados de EmployeeDetails (sem considerar a chave primária – EmpId).
Ans. Para encontrar registros duplicados da tabela, podemos usar GROUP BY em todos os campos e depois usar a cláusula HAVING para retornar somente aqueles campos cuja contagem é maior que 1, ou seja, as linhas com registros duplicados.
SELECT FullName, ManagerId, DateOfJoining, City, COUNT(*)FROM EmployeeDetailsGROUP BY FullName, ManagerId, DateOfJoining, CityHAVING COUNT(*) > 1;
Ques.33 . Escreva uma consulta SQL para remover duplicatas de uma tabela sem usar uma tabela temporária.
Ans. Aqui, podemos usar o delete com alias e inner join. Vamos verificar a igualdade de todos os registros correspondentes e eles removem a linha com EmpId.
DELETE E1 FROM EmployeeDetails E1INNER JOIN EmployeeDetails E2 WHERE E1.EmpId > E2.EmpId AND E1.FullName = E2.FullName AND E1.ManagerId = E2.ManagerIdAND E1.DateOfJoining = E2.DateOfJoiningAND E1.City = E2.City;
Ques.34. Escreva uma consulta SQL para buscar apenas linhas ímpares da tabela.
Ans. Caso tenhamos um campo auto-incremental, por exemplo, EmpId, então podemos simplesmente usar a consulta abaixo –
SELECT * FROM EmployeeDetails WHERE MOD (EmpId, 2) <> 0;
No caso de não termos um campo desse tipo, então podemos usar as consultas abaixo.
Usar número_de_fileira no servidor SQL e verificar se o restante quando dividido por 2 é 1-
SELECT E.EmpId, E.Project, E.SalaryFROM ( SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber FROM EmployeeSalary) EWHERE E.RowNumber % 2 = 1;
Usar uma variável definida pelo usuário no MySQL-
Ques.35. Escreva uma consulta SQL para buscar apenas linhas da tabela.
Ans. Caso tenhamos um campo auto-incremental, por exemplo, EmpId, então podemos simplesmente usar a consulta abaixo-
SELECT * FROM EmployeeDetails WHERE MOD (EmpId, 2) = 0;
No caso de não termos tal campo, então podemos usar as consultas abaixo.
Usar número_de_fileira no servidor SQL e verificar se o restante quando dividido por 2 é 1-
SELECT E.EmpId, E.Project, E.SalaryFROM ( SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber FROM EmployeeSalary) EWHERE E.RowNumber % 2 = 0;
Usar uma variável definida pelo usuário no MySQL-
SELECT *FROM ( SELECT *, @rowNumber := @rowNumber+ 1 rn FROM EmployeeSalary JOIN (SELECT @rowNumber:= 0) r ) t WHERE rn % 2 = 0;
Ques.36. Escrever uma consulta SQL para criar uma nova tabela com dados e estrutura copiados de outra tabela.
Ans.
CREATE TABLE NewTable SELECT * FROM EmployeeSalary;
Ques.37 . Escreva uma consulta SQL para criar uma tabela vazia com a mesma estrutura que alguma outra tabela.
Ans. Aqui, podemos usar a mesma consulta como acima com a falsa condição ‘WHERE’ –
CREATE TABLE NewTable SELECT * FROM EmployeeSalary where 1=0;
Ques.38. Escreva uma consulta SQL para buscar os primeiros n registros?
Ans. No MySQL usando LIMIT-
SELECT *FROM EmployeeSalaryORDER BY Salary DESC LIMIT N;
No servidor SQL usando o comando TOP-
SELECT TOP N *FROM EmployeeSalaryORDER BY Salary DESC;
Ques.39. Escreva uma consulta SQL para encontrar o enésimo maior salário da tabela.
Ans, Using Top keyword (SQL Server)-
SELECT TOP 1 SalaryFROM ( SELECT DISTINCT TOP N Salary FROM Employee ORDER BY Salary DESC )ORDER BY Salary ASC;
Using limit clause(MySQL)-
SELECT SalaryFROM EmployeeORDER BY Salary DESC LIMIT N-1,1;
Ques.40. Escreva a consulta SQL para encontrar o terceiro maior salário de uma tabela sem usar a palavra-chave TOP/limit.
Ans. Esta é uma das perguntas mais comumente feitas em entrevistas. Para isso, vamos usar uma subconsulta correlata.
Para encontrar o 3º salário mais alto, vamos encontrar o valor do salário até que a consulta interna retorne uma contagem de 2 linhas tendo o salário maior que outros salários distintos.
SELECT SalaryFROM EmployeeSalary Emp1WHERE 2 = ( SELECT COUNT( DISTINCT ( Emp2.Salary ) ) FROM EmployeeSalary Emp2 WHERE Emp2.Salary > Emp1.Salary )
Para o n-ésimo salário mais alto-
SELECT SalaryFROM EmployeeSalary Emp1WHERE N-1 = ( SELECT COUNT( DISTINCT ( Emp2.Salary ) ) FROM EmployeeSalary Emp2 WHERE Emp2.Salary > Emp1.Salary )
>
Esta é a conclusão do nosso post sobre as perguntas e respostas da consulta SQL mais freqüente. Espero que estas perguntas o ajudem com as entrevistas da sua base de dados.
Se você se sentir, nós perdemos qualquer uma das perguntas comuns de entrevista então nos informe nos comentários e nós adicionaremos essas perguntas à nossa lista.
>
>
Veja nosso artigo sobre – Perguntas de Entrevista ao Banco de Dados, focando nas perguntas teóricas de entrevista baseadas nos conceitos do SGBD e SQL.
Kuldeep é o fundador e autor principal do ArtOfTesting. Ele é especializado em automação de testes, testes de desempenho, grandes dados e CI-CD. Ele traz sua década de experiência para seu papel atual onde ele é dedicado a educar os profissionais de GQ. Pode ligar-se a ele no LinkedIn.