16th Jan 2023 8 minutos de leitura Como Praticar Subconsultas SQL Ignacio L. Bisso sql subqueries Índice O que é uma subconsulta SQL? Outro exemplo de subconsulta SQL Usando Subconsultas SQL em Outras Partes da Consulta Pratique as subconsultas SQL para Melhorar suas Habilidades 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! Tags: sql subqueries