50 perguntas da entrevista de consulta SQL


Linguagem de consulta estruturada é o principal instrumento utilizado ao trabalhar com bancos de dados relacionais, portanto, todos que estão conectados com bancos de dados devem conhecê-lo. Se você é novo em SQL ou apenas deseja aprimorar seu conhecimento, este artigo o orienta através de 50 perguntas de entrevista de consulta SQL projetadas especificamente, do nível básico ao avançado.

Dados de tabela de amostra

Para melhor compreender e executar o Consultas SQLvamos começar examinando os dados de amostra usados ​​neste artigo. As tabelas a seguir servirão de base para todas as consultas e exemplos.

Tabela de Funcionários

ID do funcionárioPrimeiro nomeSobrenomeID do departamentoSalárioKnowledge de contrataçãoID do gerente
1AliceJohnson10160.00015/01/20183
2PrumoSmith10275.00020/05/20173
3CharlieMarrom10190.00030/09/2015NULO
4DaviWillians10355.00011/07/20193
5EvaDavis10265.0002020-03-252

Tabela de Pedidos

ID do pedidoID do funcionárioID do produtoQuantidadeKnowledge do pedido
100112011015/01/2022
10022202516/01/2022
100332032017/01/2022
100442021518/01/2022
100552042519/01/2022

Tabela de Produtos

ID do produtoNomeDoProdutoPreçoCategoria
201Portátil1200Eletrônica
202Smartphone800Eletrônica
203Cadeira de escritório150Mobília
204Mesa300Mobília
205Monitor200Eletrônica

Nível iniciante

Nesta seção, forneceremos uma diretriz de consultas SQL básicas que os alunos que são novos em SQL possam entender facilmente. Essas consultas básicas podem ser usadas como base para atingir um nível de conforto com os aspectos mais importantes do SQL, incluindo seleção de dados, formas de filtragem de dados e cálculos rudimentares.

Q1. Escreva uma consulta para exibir todos os registros da tabela Funcionários.

Responder:

SELECT * FROM Staff;
EmployeeID | FirstName | LastName | DepartmentID | Wage | HireDate    | ManagerID
----------------------------------------------------------------------------
1          | Alice    | Johnson  | 10           | 160000 | 2018-01-15  | 32
2          | Bob      | Smith    | 10           | 275000 | 2017-05-20  | 33
3          | Charlie  | Brown    | 10           | 190000 | 2015-09-30  | NULL
4          | David    | Williams | 10           | 355000 | 2019-07-11  | 35
5          | Eva      | Davis    | 10           | 265000 | 2020-03-25  | 32

Q2. Busque apenas o Nome e o Sobrenome dos funcionários.

Responder:

SELECT FirstName, LastName FROM Staff;

FirstName | LastName
--------------------
Alice     | Johnson
Bob       | Smith
Charlie   | Brown
David     | Williams
Eva       | Davis

Q3. Recupere os IDs exclusivos de departamento da tabela Funcionários.

Responder:

SELECT DISTINCT DepartmentID FROM Staff;

DepartmentID
-------------
10

This autumn. Busque funcionários com salário superior a 60.000.

Responder:

SELECT * FROM Staff WHERE Wage > 60000;

EmployeeID | FirstName | LastName | DepartmentID | Wage | HireDate    | ManagerID
----------------------------------------------------------------------------
1          | Alice    | Johnson  | 10           | 160000 | 2018-01-15  | 32
2          | Bob      | Smith    | 10           | 275000 | 2017-05-20  | 33
3          | Charlie  | Brown    | 10           | 190000 | 2015-09-30  | NULL
4          | David    | Williams | 10           | 355000 | 2019-07-11  | 35
5          | Eva      | Davis    | 10           | 265000 | 2020-03-25  | 32

Q5. Escreva uma consulta para exibir todos os pedidos feitos em ou após 17 de janeiro de 2022.

Responder:

SELECT * FROM Orders WHERE OrderDate >= '2022-01-17';

OrderID | EmployeeID | ProductID | Amount | OrderDate  
----------------------------------------------------------
1022    | 2          | 1         | 2        | 2022-01-16
1023    | 3          | 3         | 3        | 2022-01-17
1024    | 4          | 2         | 5        | 2022-01-18
1025    | 5          | 4         | 5        | 2022-01-19

Q6. Recupere todos os produtos com preço inferior a 300.

Responder:

SELECT * FROM Merchandise WHERE Value < 300;

ProductID | ProductName | Value | Class
--------------------------------------------
203       | Workplace Chair | 150   | Furnishings
204       | Desk         | 300   | Furnishings
205       | Monitor      | 200   | Electronics

Q7. Encontre o número complete de pedidos na tabela Pedidos.

Responder:

SELECT COUNT(*) AS TotalOrders FROM Orders;

TotalOrders
------------
5

Q8. Obtenha os detalhes do produto chamado ‘Laptop computer’.

Responder:

SELECT * FROM Merchandise WHERE ProductName="Laptop computer";

ProductID | ProductName | Value | Class
--------------------------------------------
201       | Laptop computer      | 1200  | Electronics

Q9. Escreva uma consulta para classificar os funcionários por HireDate em ordem crescente.

Responder:

SELECT * FROM Staff ORDER BY HireDate ASC;

EmployeeID | FirstName | LastName | DepartmentID | Wage | HireDate    | ManagerID
----------------------------------------------------------------------------
3          | Charlie  | Brown    | 10           | 190000 | 2015-09-30  | NULL
2          | Bob      | Smith    | 10           | 275000 | 2017-05-20  | 33
1          | Alice    | Johnson  | 10           | 160000 | 2018-01-15  | 32
4          | David    | Williams | 10           | 355000 | 2019-07-11  | 35
5          | Eva      | Davis    | 10           | 265000 | 2020-03-25  | 32

Q10. Recuperar o preço máximo dos produtos da categoria Eletrônicos.

Responder:

SELECT MAX(Value) AS MaxPrice FROM Merchandise WHERE Class = 'Electronics';

MaxPrice
--------
1200

A seção seguinte do artigo trata do nível intermediário em Aprendizagem SQL, apresentando consultas mais abrangentes. Você continuará juntando tabelas, aprenderá como usar funções para filtrar dados, bem como operações complexas para resolver melhor as operações do mundo actual.

Q11. Escreva uma consulta para unir as tabelas Funcionários e Pedidos para buscar os nomes dos funcionários junto com seus pedidos.

Responder:

SELECT e.FirstName, e.LastName, o.OrderID, o.OrderDate  
FROM Staff e  
JOIN Orders o ON e.EmployeeID = o.EmployeeID;

FirstName | LastName | OrderID | OrderDate  
-------------------------------------------
Alice     | Johnson  | 1022    | 2022-01-16
Bob       | Smith    | 1023    | 2022-01-17
Charlie   | Brown    | 1024    | 2022-01-18
David     | Williams | 1025    | 2022-01-19

Q12. Calcule o salário complete por departamento.

Responder:

SELECT DepartmentID, SUM(Wage) AS TotalSalary  
FROM Staff  
GROUP BY DepartmentID;

DepartmentID | TotalSalary
-------------------------
10           | 1355000

Q13. Encontre os funcionários que não têm gerente.

Responder:

SELECT * FROM Staff WHERE ManagerID IS NULL;

EmployeeID | FirstName | LastName | DepartmentID | Wage | HireDate    | ManagerID
----------------------------------------------------------------------------
3          | Charlie  | Brown    | 10           | 190000 | 2015-09-30  | NULL

Q14. Escreva uma consulta para exibir o preço médio do produto para cada categoria.

Responder:

SELECT Class, AVG(Value) AS AvgPrice  
FROM Merchandise  
GROUP BY Class;

Class    | AvgPrice
-----------------------
Electronics | 800
Furnishings   | 216.67

Q15. Obtenha os detalhes dos três funcionários mais bem pagos.

Responder:

SELECT * FROM Staff  
ORDER BY Wage DESC  
LIMIT 3;

EmployeeID | FirstName | LastName | DepartmentID | Wage | HireDate    | ManagerID
----------------------------------------------------------------------------
4          | David    | Williams | 10           | 355000 | 2019-07-11  | 35
2          | Bob      | Smith    | 10           | 275000 | 2017-05-20  | 33
5          | Eva      | Davis    | 10           | 265000 | 2020-03-25  | 32

Q16. Recupere os detalhes do pedido junto com o nome do produto.

Responder:

SELECT o.OrderID, o.Amount, p.ProductName, p.Value  
FROM Orders o  
JOIN Merchandise p ON o.ProductID = p.ProductID;

OrderID | Amount | ProductName  | Value
-------------------------------------------
1022    | 2        | Laptop computer       | 1200
1023    | 3        | Workplace Chair | 150
1024    | 5        | Smartphone   | 800
1025    | 5        | Desk         | 300

Q17. Encontre a quantidade complete de produtos encomendados para cada produto.

Responder:

SELECT ProductID, SUM(Amount) AS TotalQuantity  
FROM Orders  
GROUP BY ProductID;

ProductID | TotalQuantity
--------------------------
1         | 2
2         | 8
3         | 3
4         | 5

Q18. Escreva uma consulta para atualizar o preço de todos os produtos da categoria Móveis em 10%.

Responder:

UPDATE Merchandise  
SET Value = Value * 1.10  
WHERE Class = 'Furnishings';

Q19. Exclua todos os pedidos feitos antes de 17 de janeiro de 2022.

Responder:

DELETE FROM Orders WHERE OrderDate < '2022-01-17';

Q20. Busque funcionários cujo primeiro nome comece com ‘A’.

Responder:

SELECT * FROM Staff WHERE FirstName LIKE 'A%';

EmployeeID | FirstName | LastName | DepartmentID | Wage | HireDate    | ManagerID
----------------------------------------------------------------------------
1          | Alice    | Johnson  | 10           | 160000 | 2018-01-15  | 32

Q21. Recuperar o número de funcionários contratados a cada ano.

Responder:

SELECT YEAR(HireDate) AS HireYear, COUNT(*) AS EmployeesHired  
FROM Staff  
GROUP BY YEAR(HireDate);

HireYear | EmployeesHired
-------------------------
2015     | 1
2017     | 1
2018     | 1
2019     | 1
2020     | 1

Q22. Escreva uma consulta para buscar funcionários que ganham mais do que o salário médio.

Responder:

SELECT * FROM Staff  
WHERE Wage > (SELECT AVG(Wage) FROM Staff);

EmployeeID | FirstName | LastName | DepartmentID | Wage | HireDate    | ManagerID
----------------------------------------------------------------------------
2          | Bob      | Smith    | 10           | 275000 | 2017-05-20  | 33
4          | David    | Williams | 10           | 355000 | 2019-07-11  | 35
5          | Eva      | Davis    | 10           | 265000 | 2020-03-25  | 32

Q23. Exiba os 3 principais produtos com a maior quantidade complete vendida.

Responder:

SELECT p.ProductName, SUM(o.Amount) AS TotalQuantity  
FROM Orders o  
JOIN Merchandise p ON o.ProductID = p.ProductID  
GROUP BY p.ProductName  
ORDER BY TotalQuantity DESC  
LIMIT 3;

ProductName | TotalQuantity
----------------------------
Smartphone  | 8
Desk        | 5
Workplace Chair| 3

Q24. Recupere os funcionários que não fizeram nenhum pedido.

Responder:

SELECT * FROM Staff  
WHERE EmployeeID NOT IN (SELECT DISTINCT EmployeeID FROM Orders);

EmployeeID | FirstName | LastName | DepartmentID | Wage | HireDate    | ManagerID
----------------------------------------------------------------------------
3          | Charlie  | Brown    | 10           | 190000 | 2015-09-30  | NULL

Q25. Escreva uma consulta para buscar o funcionário contratado mais recentemente.

Responder:

SELECT * FROM Staff  
ORDER BY HireDate DESC  
LIMIT 1;

EmployeeID | FirstName | LastName | DepartmentID | Wage | HireDate    | ManagerID
----------------------------------------------------------------------------
5          | Eva      | Davis    | 10           | 265000 | 2020-03-25  | 32

Q26. Exiba todos os funcionários junto com o número complete de pedidos que eles atenderam.

Responder:

SELECT e.EmployeeID, e.FirstName, COUNT(o.OrderID) AS TotalOrders  
FROM Staff e  
LEFT JOIN Orders o ON e.EmployeeID = o.EmployeeID  
GROUP BY e.EmployeeID, e.FirstName;
ID do funcionárioPrimeiro nomeWhole de pedidos
1Alice2
2Prumo2
3Charlie1
4Davi1
5Eva0

Q27. Obtenha detalhes de produtos cujas vendas totais excedam US$ 10.000.

Responder:

SELECT p.ProductName, SUM(o.Amount * p.Value) AS TotalSales  
FROM Orders o  
JOIN Merchandise p ON o.ProductID = p.ProductID  
GROUP BY p.ProductName  
HAVING TotalSales > 10000;
NomeDoProdutoVendas totais
Portátil24.000

Q28. Encontre funcionários que ingressaram na empresa no mesmo ano que seu gestor.

Responder:

SELECT e.FirstName AS EmployeeName, m.FirstName AS ManagerName  
FROM Staff e  
JOIN Staff m ON e.ManagerID = m.EmployeeID  
WHERE YEAR(e.HireDate) = YEAR(m.HireDate);
NomeDoFuncionárioGerenteNome
AlicePrumo

Q29. Recupere os nomes dos funcionários com o salário mais alto em cada departamento.

Responder:

SELECT DepartmentID, FirstName, LastName, Wage  
FROM Staff  
WHERE (DepartmentID, Wage) IN (  
    SELECT DepartmentID, MAX(Wage)  
    FROM Staff  
    GROUP BY DepartmentID  
);
ID do departamentoPrimeiro nomeSobrenomeSalário
1AliceJohnson160.000
2PrumoSmith75.000
3DaviWillians55.000

Q30. Escreva uma consulta para obter a receita complete gerada por cada funcionário.

Responder:

SELECT e.FirstName, e.LastName, SUM(o.Amount * p.Value) AS TotalRevenue  
FROM Staff e  
JOIN Orders o ON e.EmployeeID = o.EmployeeID  
JOIN Merchandise p ON o.ProductID = p.ProductID  
GROUP BY e.EmployeeID, e.FirstName, e.LastName;
Primeiro nomeSobrenomeReceita complete
AliceJohnson32.000
PrumoSmith63.000
CharlieMarrom45.000
DaviWillians30.000
EvaDavis0

Nível Avançado

No nível avançado, lidamos com sínteses complexas de instruções de consulta SQL. Esta seção é dedicada à descrição de operações mais complexas, como classificação, funções de janela, subconsultas básicas e métodos de otimização para permitir a superação de tarefas complicadas na análise de dados.

Q31. Escreva uma consulta para buscar funcionários que ganham mais que seu gerente.

Responder:

SELECT e.FirstName AS EmployeeName, m.FirstName AS ManagerName  
FROM Staff e  
JOIN Staff m ON e.ManagerID = m.EmployeeID  
WHERE e.Wage > m.Wage;
NomeDoFuncionárioGerenteNome
AlicePrumo

Q32. Recupere o segundo salário mais alto da tabela Funcionários.

Responder:

SELECT MAX(Wage) AS SecondHighestSalary  
FROM Staff  
WHERE Wage < (SELECT MAX(Wage) FROM Staff);

SecondHighestSalary
75000

Q33. Liste os departamentos sem funcionários atribuídos.

Responder:

SELECT * FROM Departments  
WHERE DepartmentID NOT IN (SELECT DISTINCT DepartmentID FROM Staff);
ID do departamentoDepartamentoNome
4Advertising and marketing

Q34. Escreva uma consulta para criar uma visualização mostrando os nomes dos funcionários e os nomes dos departamentos.

Responder:

CREATE VIEW EmployeeDepartmentView AS  
SELECT e.FirstName, e.LastName, d.DepartmentName  
FROM Staff e  
JOIN Departments d ON e.DepartmentID = d.DepartmentID;
Primeiro nomeSobrenomeDepartamentoNome
AliceJohnsonISTO
PrumoSmithVendas
CharlieMarromISTO
DaviWilliansRH
EvaDavisVendas

Q35. Busque os nomes dos funcionários que fizeram mais de 10 pedidos.

Responder:

SELECT e.FirstName, e.LastName  
FROM Staff e  
JOIN Orders o ON e.EmployeeID = o.EmployeeID  
GROUP BY e.EmployeeID, e.FirstName, e.LastName  
HAVING COUNT(o.OrderID) > 10;
Primeiro nomeSobrenome
AliceJohnson
PrumoSmith

Q36. Escreva uma consulta para classificar os funcionários com base no salário em cada departamento.

Responder:

SELECT EmployeeID, FirstName, DepartmentID, Wage,  
       RANK() OVER (PARTITION BY DepartmentID ORDER BY Wage DESC) AS Rank  
FROM Staff;
ID do funcionárioPrimeiro nomeID do departamentoSalárioClassificação
1Alice1160.0001
3Charlie1190.0002
2Prumo275.0001
4Davi355.0001
5Eva265.0002

Q37. Recupere as vendas acumuladas de cada produto.

Responder:

SELECT ProductID, ProductName,  
       SUM(SUM(Amount * Value)) OVER (ORDER BY ProductID) AS CumulativeSales  
FROM Merchandise p  
JOIN Orders o ON p.ProductID = o.ProductID  
GROUP BY ProductID, ProductName;
ID do produtoNomeDoProdutoVendas cumulativas
201Portátil24.000
202Smartphone32.000
203Cadeira de escritório1500
204Mesa3.000
205Monitor1500

Q38. Identifique o departamento com as maiores despesas salariais totais.

Responder:

SELECT DepartmentID, SUM(Wage) AS TotalExpenditure  
FROM Staff  
GROUP BY DepartmentID  
ORDER BY TotalExpenditure DESC  
LIMIT 1;
ID do departamentoDespesas Totais
1450.000

Q39. Escreva uma consulta para encontrar a contribuição percentual de cada produto nas vendas totais.

Responder:

SELECT p.ProductName,  
       (SUM(o.Amount * p.Value) * 100.0 /  
        (SELECT SUM(Amount * Value) FROM Orders o JOIN Merchandise p ON o.ProductID = p.ProductID)) AS ContributionPercentage  
FROM Orders o  
JOIN Merchandise p ON o.ProductID = p.ProductID  
GROUP BY p.ProductName;
NomeDoProdutoPorcentagem de contribuição
Portátil48,00
Smartphone32h00
Cadeira de escritório4h00
Mesa8h00
Monitor8h00

Q40. Encontre funcionários que tenham o mesmo gerente e ganhem mais de US$ 70.000.

Responder:

SELECT *  
FROM Staff e1  
WHERE ManagerID IS NOT NULL  
AND Wage > 70000  
AND ManagerID IN (  
    SELECT ManagerID FROM Staff e2 WHERE e1.ManagerID = e2.ManagerID  
);
ID do funcionárioPrimeiro nomeSobrenomeSalárioID do gerente
1AliceJohnson160.00032
2PrumoSmith75.00032

Q41. Escreva uma consulta para detectar linhas duplicadas na tabela Pedidos.

Responder:

SELECT EmployeeID, ProductID, OrderDate, COUNT(*) AS DuplicateCount  
FROM Orders  
GROUP BY EmployeeID, ProductID, OrderDate  
HAVING COUNT(*) > 1;
ID do funcionárioID do produtoKnowledge do pedidoContagem Duplicada
120115/01/20222

Q42. Obtenha os detalhes dos pedidos feitos no mesmo dia por vários funcionários.

Responder:

SELECT OrderDate, COUNT(DISTINCT EmployeeID) AS EmployeeCount  
FROM Orders  
GROUP BY OrderDate  
HAVING EmployeeCount > 1;
Knowledge do pedidoContagem de funcionários
15/01/20222
16/01/20222
17/01/20221

Q43. Crie um procedimento armazenado para atualizar os preços dos produtos com base na categoria.

Responder:

DELIMITER $$  
CREATE PROCEDURE UpdatePriceByCategory(IN category_name VARCHAR(50), IN price_factor DECIMAL(5, 2))  
BEGIN  
    UPDATE Merchandise  
    SET Value = Value * price_factor  
    WHERE Class = category_name;  
END$$  
DELIMITER ;

Q44. Escreva uma consulta para calcular o avanço e o atraso nas datas dos pedidos para cada funcionário.

Responder:

SELECT EmployeeID, OrderID, OrderDate,  
       LAG(OrderDate) OVER (PARTITION BY EmployeeID ORDER BY OrderDate) AS PreviousOrderDate,  
       LEAD(OrderDate) OVER (PARTITION BY EmployeeID ORDER BY OrderDate) AS NextOrderDate  
FROM Orders;
ID do funcionárioID do pedidoKnowledge do pedidoKnowledge do pedido anteriorKnowledge do próximo pedido
1115/01/2022NULO16/01/2022
2216/01/202215/01/202217/01/2022
3317/01/2022NULONULO

Q45. Identifique os produtos que não foram encomendados.

Responder:

SELECT * FROM Merchandise  
WHERE ProductID NOT IN (SELECT DISTINCT ProductID FROM Orders);
ID do produtoNomeDoProduto
204Mesa
205Monitor

Q46. Escreva uma consulta para buscar funcionários cuja quantidade complete de pedidos esteja entre 50 e 100.

Responder:

SELECT e.FirstName, e.LastName, SUM(o.Amount) AS TotalQuantity  
FROM Staff e  
JOIN Orders o ON e.EmployeeID = o.EmployeeID  
GROUP BY e.EmployeeID, e.FirstName, e.LastName  
HAVING TotalQuantity BETWEEN 50 AND 100;
Primeiro nomeSobrenomeQuantidade Whole
PrumoSmith60

Q47. Busque a segunda maior quantidade solicitada para cada produto.

Responder:

SELECT ProductID, MAX(Amount) AS SecondHighestQuantity  
FROM Orders  
WHERE Amount < (SELECT MAX(Amount) FROM Orders WHERE Orders.ProductID = ProductID)  
GROUP BY ProductID;
ID do produtoSegunda maior quantidade
20120
20230
20310

Q48. Encontre as quantidades mínimas e máximas do pedido para cada funcionário.

Responder:

SELECT EmployeeID, MIN(Amount) AS MinQuantity, MAX(Amount) AS MaxQuantity  
FROM Orders  
GROUP BY EmployeeID;
ID do funcionárioQuantidade mínimaQuantidade Máxima
11020
22040
31010

Q49. Escreva uma consulta para dividir os salários dos funcionários em quartis.

Responder:

SELECT EmployeeID, FirstName, Wage,  
       NTILE(4) OVER (ORDER BY Wage) AS SalaryQuartile  
FROM Staff;
ID do funcionárioPrimeiro nomeSalárioSalárioQuartil
1Alice160.0004
2Prumo75.0003
3Charlie190.0004
4Davi55.0002
5Eva65.0002

Q50. Crie uma tabela temporária para pedidos com receita alta (maior que US$ 5.000)

Responder:

CREATE TEMPORARY TABLE HighRevenueOrders AS  
SELECT o.OrderID, o.Amount, p.Value, (o.Amount * p.Value) AS Income  
FROM Orders o  
JOIN Merchandise p ON o.ProductID = p.ProductID  
WHERE (o.Amount * p.Value) > 5000;
ID do pedidoQuantidadePreçoReceita
110120012.000
22580020.000

Conclusão

Dominar as perguntas da entrevista de consulta SQL fornece uma base sólida para gerenciamento e análise eficiente de dados. Ao praticar essas perguntas da entrevista de consulta SQL, você aprimora sua capacidade de trabalhar com bancos de dados do mundo actual, tornando mais fácil recuperar, manipular e interpretar dados de maneira eficaz. Esteja você apenas começando ou aprimorando suas habilidades, o SQL continua sendo uma ferramenta essencial para qualquer profissional de dados, e a compreensão de seus diversos recursos desbloqueará inúmeras oportunidades para solução de problemas e geração de insights.

Meu nome é Ayushi Trivedi. Eu sou formado em B. Tech. Tenho 3 anos de experiência trabalhando como educador e editor de conteúdo. Trabalhei com várias bibliotecas python, como numpy, pandas, seaborn, matplotlib, scikit, imblearn, regressão linear e muito mais. Eu também sou um autor. Meu primeiro livro chamado #turning25 foi publicado e está disponível na amazon e flipkart. Aqui, sou editor de conteúdo técnico da Analytics Vidhya. Sinto-me orgulhoso e feliz por ser AVian. Tenho uma ótima equipe para trabalhar. Adoro construir a ponte entre a tecnologia e o aluno.

Deixe um comentário

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