Voltar para a lista de artigos Artigos
8 minutos de leitura

Como Praticar Subconsultas SQL

Você já se perguntou o que separa os usuários iniciantes dos usuários avançados de SQL? Isso inclui coisas como, por exemplo, subconsultas. Neste artigo, eu explico sua importância e porque você precisa praticar as subconsultas SQL para se tornar um especialista.

O que é uma subconsulta SQL?

SQL é uma linguagem fácil de aprender. Entretanto, existem certas características e técnicas complexas da linguagem que requerem prática. Uma dessas características é a subconsulta, que agrega grande poder expressivo à linguagem e a seus projetos.

Neste artigo, revisamos exemplos para que você dê seu primeiro passo em direção à prática de subconsultas. Também mencionamos artigos e cursos onde você encontra mais material como palestras e exercícios para continuar melhorando no uso das subconsultas.

Se você não sabe do que estou falando, comece com o SQL para Iniciantes curso. É o ponto de partida perfeito para aprender SQL. Se você já sabe um pouco sobre o assunto, mas não sabe como praticar as subconsultas, continue lendo.

Em termos simples, uma subconsulta é uma consulta dentro de uma consulta. SQL nos permite colocar subconsultas em diferentes partes de uma consulta SQL, como as cláusulas WHERE e FROM, entre outras. Criar uma subconsulta é muito fácil porque sua estrutura é a mesma de uma consulta regular. Só precisamos conhecer algumas regras sobre como conectar a consulta e a subconsulta.

Antes de começar com exemplos, vamos esclarecer algum vocabulário: no restante deste artigo, chamamos de "consulta externa" a consulta externa na qual uma subconsulta reside.

Vamos introduzir uma base de dados simples com duas tabelas: employee e department.

Tabela employee

employee_idlast_namefirst_namesalarydepartment_id
1001SmithJohn145000.00100
1002BelleMary115000.00101
1003DalePeter155000.00102
1004GarrahanSusan195000.00100
1005GarrahanMary94000.00102
1006FiesJulia92000.00101

Tabela department

department_iddept_namemanager_idbudgetbuilding
100Sales23240000.00CentralPark
101Accounting56130000.00CentralPark
102IT34150000.00Oblivious

Suponhamos que queremos obter o nome do departamento com o maior orçamento. Podemos escrever a seguinte pergunta, que inclui uma subconsulta (em azul):

SELECT dept_name, budget
FROM   department
WHERE budget = ( SELECT MAX(budget) FROM department )

Temos uma subconsulta (em azul) na cláusula WHERE que devolve o maior orçamento do department mesa. Em seguida, usamos este valor na cláusula WHERE da consulta externa para comparar com a coluna do orçamento. Todos os registros na tabela de department tabela com um orçamento igual ao valor máximo do orçamento são devolvidos.

Note que a subconsulta está entre parênteses. Em SQL, as subconsultas sempre precisam ser incluídas entre parênteses.

Com este exemplo, vimos como é fácil e simples criar uma subconsulta. Entretanto, há algumas regras sobre como conectar a subconsulta com a consulta externa. Também precisamos saber onde uma subconsulta deve estar dentro da declaração SELECT. Há diferentes cláusulas (como WHERE, FROM e HAVING) na consulta externa onde podemos colocar uma subconsulta. Estas são algumas das razões pelas quais a prática com subconsultas é tão importante.

Finalmente, para aqueles que procuram recursos para praticar suas habilidades SQL, sugiro o curso Curso de Práticas em SQL. Você encontra mais de 80 exercícios interativos, que vão desde tarefas simples com declarações SELECT FROM até problemas mais avançados envolvendo múltiplas subconsultas. Outro conjunto interessante de exercícios SQL está no Mensal Curso de Práticas em SQLs, onde você vê seu código SQL em ação e recebe feedback imediato.

Outro exemplo de subconsulta SQL

Vimos uma subquisição que retorna um resultado estabelecido com um único recorde e uma única coluna. Este tipo de subquisição é bastante comum, e é fácil integrar ou conectar a subquisição com a consulta externa usando o operador igual (=).

Agora, vamos ver uma subconsulta que retorna uma única coluna mas vários registros para contrastar com uma subconsulta que produz um único registro.

Suponha que precisamos obter as identificações dos funcionários e os nomes dos funcionários que trabalham no prédio do CentralPark. Podemos escrever uma consulta SQL como a seguinte. Novamente, a subconsulta está em azul.

SELECT employee_id, last_name, first_name
FROM   employee
WHERE department_id IN ( SELECT department_id
                         FROM   department
                         WHERE  building = ‘CentralPark’
                       )

A primeira coisa a notar é o número de registros devolvidos pela subconsulta. Ela retorna dois registros porque há dois departamentos no edifício CentralPark: Vendas e Contabilidade. Portanto, a subquisição gera um conjunto de resultados com duas identificações de departamento, 100 e 101.

A segunda coisa a ser observada é o operador IN utilizado na cláusula WHERE da consulta externa. Quando uma subconsulta retorna várias linhas, não podemos usar o operador igual (=) como temos no primeiro exemplo. Ao invés disso, usamos o operador IN, que funciona como o operador "pertence a". Em outras palavras, a condição:

department_id IN ( SELECT department_id
                         FROM   department
                         WHERE  building = ‘CentralPark’
                       )

retorna VERDADEIRO quando o valor de department_id existe no conjunto de resultados da subconsulta e FALSE quando o valor de department_id não está incluído no conjunto de resultados da subconsulta.

Sempre tente identificar com antecedência quantos registros sua subconsulta retorna. É uma subconsulta com vários registros ou uma subconsulta com um único registro? Com base nisso, descubra como conectá-la com a consulta externa. Para saber mais detalhes sobre subconsultas de múltiplos registros e de um único registro, sugiro fortemente os artigos "Guia para iniciantes na Subconsulta SQL" e "Quais são os diferentes tipos de subconsultas SQL?"?

Para aqueles que querem ir mais fundo nas subconsultas, outro artigo interessante é "Subquery vs. JOIN". Você aprende diferentes maneiras de criar consultas SQL equivalentes usando joins e subconsultas.

Usando Subconsultas SQL em Outras Partes da Consulta

Mostramos exemplos de subconsultas na cláusula WHERE da declaração SELECT. Nesta seção, mostramos subconsultas em outras cláusulas.

A cláusula FROM é onde normalmente especificamos a tabela a ser lida na consulta. Entretanto, podemos colocar uma subconsulta na cláusula FROM para criar uma espécie de conjunto de resultados intermediários. Depois disso, este conjunto de resultados pode ser usado como uma tabela virtual pela consulta externa.

Vamos ver um exemplo. Suponha que tenhamos departamentos onde o salário total de todos os funcionários exceda o orçamento do departamento. Para detectar esses casos, queremos obter o orçamento e o valor total dos salários pagos por cada departamento. Também acrescentamos ao relatório uma expressão matemática para obter a parte não utilizada do orçamento. Vamos ver a consulta:

SELECT 	d1.dept_name,
d1.budget,
total.total_salaries,
d1.budget - total.total_salaries AS budget_after_salaries
FROM		( SELECT department_id, SUM(salary) AS total_salaries
		  FROM employee
		 GROUP BY department_id
		) AS total
INNER JOIN    department d1 ON d1.department_id = total.department_id

A subconsulta em azul, na cláusula FROM, cria uma tabela intermediária chamada total com as colunas department_id e total_salaries. Depois disso, fazemos um JOIN entre a tabela intermediária total e a tabela regular department. Na lista de colunas em SELECT, calculamos a diferença entre o orçamento do departamento e o valor total do salário. Nomeamos este valor em budget_after_salaries. Vamos ver o resultado da consulta:

dept_namebudgettotal_salariesbudget_after_salaries
Sales240000340000-100000
Accounting28000020700073000
IT2490002500001000

Também podemos colocar subconsultas em outras cláusulas da declaração SELECT, como a cláusula HAVING utilizada para filtrar grupos de registros. Suponhamos que queremos mostrar os departamentos cujo valor total do salário é maior do que a média dos totais do departamento. Obtemos a média dos totais do departamento com uma subconsulta. Vamos ver a consulta:

SELECT 	d1.dept_name,
SUM(salary)
FROM		employee e
INNER JOIN  department d1 ON d1.department_id = e.department_id
GROUP BY  d1.dept_name
HAVING SUM(salary) > (
SELECT SUM(salary)/COUNT(distinct department_id)
FROM   employee
   )

Obtemos o valor total do salário em cada departamento com a expressão SUM(salary). Em seguida, na cláusula HAVING, comparamos este valor com a média do total do departamento obtido na subconsulta. Os departamentos cujo SUM(salary) é maior do que o resultado da subconsulta são mostrados no resultado da consulta, como vemos abaixo:

dept_nametotal_salaries
Sales340000

Para aqueles que querem saber onde a subconsulta é suportada em SQL, os próximos dois artigos explicam outros lugares onde as subconsultas podem ser colocadas. O artigo "Subquery vs. CTE: Uma Cartilha SQL" explica CTEs, e no artigo "Como usar subconsultas nas declarações INSERT, UPDATE, e DELETE", como o título diz, você aprende subconsultas SQL em outras declarações como INSERT, UPDATE, e DELETE.

Pratique as subconsultas SQL para Melhorar suas Habilidades

Temos visto várias subconsultas SQL em diferentes cláusulas. As subconsultas SQL são normalmente utilizadas em uma declaração SELECT; no entanto, é possível utilizá-las em outras declarações. Além disso, existem outros tipos de subconsultas SQL como subconsultas correlacionadas e CTEs que adicionam ainda mais expressividade à linguagem SQL.

É fácil e intuitivo aprender SQL, especialmente nos primeiros passos. Mas como qualquer linguagem, você precisa praticar para atingir o nível onde você pode gerenciar e criar todos os tipos de consultas e relatórios. Quanto mais tempo você gasta resolvendo problemas na linguagem SQL, maiores são as habilidades SQL que você adquire.

Eu gostaria de encerrar com alguns grandes recursos para aprender SQL. Primeiro, aqui estão alguns artigos que se concentram na prática de SQL: "How Much SQL Practice Do You Need to Become a Pro?" e "Why Is the SQL Practice Set my Favorite Online Course?" Em ambos os artigos, você encontra muitas sugestões e dicas para praticar SQL para atingir o nível de mestre SQL. Em segundo lugar, você encontra diferentes maneiras de praticar SQL em LearnSQL.com.br's Monthly SQL Practice in 2022. Por último, mas não menos importante, o artigo "5 Tips for You From a Senior SQL Data Analyst" descreve como se tornar um analista de dados, que é uma profissão que precisa de um sólido conhecimento de SQL.

Melhore suas habilidades e invista em si mesmo!