21st Jul 2022 5 minutos de leitura Aprenda a Escrever uma Subconsulta relacionada a SQL em 5 minutos Ignacio L. Bisso análise de dados como fazer em sql noções básicas de sql Subconsulta SQL Índice O que é exatamente uma subconsulta relacionada a SQL Correspondente? Quando você deve usar uma subconsulta relacionada ao SQL Correspondente? Subconsultas SQL Correlatas Vs. Subconsultas simples Outro exemplo de subconsulta relacionada a Cor Chega de Negatividade. E as perguntas sobre dados positivos? Advertência: Sua subconsulta relacionada ao SQL Cor é provável que seja lenta Tente você mesmo uma subconsulta relacionada à SQL Correspondente! Se você está familiarizado com o famoso boneco de nidificação russo, então as subconsultas correlatas do SQL devem ser uma paz de bolo para entender - as subconsultas são apenas consultas aninhadas dentro de consultas. Uma subconsulta SQL é freqüentemente chamada de consulta "interna"; a consulta principal é normalmente chamada de consulta "externa". Este artigo cobre tudo o que você precisa saber sobre subconsultas correlatas. O que é exatamente uma subconsulta relacionada a SQL Correspondente? Uma subconsulta SQL correlacionada é apenas uma subconsulta que é executada muitas vezes - uma vez para cada registro (linha) retornado pela consulta "externa" (principal). Em outras palavras, a consulta externa retorna uma tabela com várias linhas; a consulta interna então é executada uma vez para cada uma dessas linhas. Se sua consulta externa retorna 10 linhas, então a consulta interna será executada 10 vezes. E se sua consulta externa retorna 100 linhas, a consulta interna será executada 100 vezes. Quando você deve usar uma subconsulta relacionada ao SQL Correspondente? Algumas perguntas de dados só podem ser respondidas com subconsultas correlatas. Isto é particularmente verdadeiro quando se fazem perguntas de dados negativos. Perguntas de dados negativos surgem quando procuramos por registros que não satisfazem uma determinada condição. Um exemplo de uma simples pergunta de dados negativos é: "Obter os nomes de todos os filmes não produzidos por Steven Spielberg". Vamos resolver um exemplo de uma questão de dados negativos neste artigo. Antes de fazermos isso, vamos primeiro rever as tabelas envolvidas. Temos duas tabelas: a tabela employee mesa e o payment_history mesa. A segunda tabela tem uma coluna chamada payment_type que denota se um pagamento é parte de um salário regular, um bônus, ou um prêmio. Vamos ver alguns exemplos de dados das tabelas que utilizaremos: employee employee_id payment_type amount_paid payment_date 100 salary 2000.00 2018-Mar-02 101 salary 1800.00 2018-Mar-02 102 salary 1900.00 2018-Mar-02 101 award 500.00 2018-Mar-08 102 adjustment 124.70 2018-Mar-10 payment_history employee_id payment_type amount_paid payment_date 100 salary 2000.00 2018-Mar-02 101 salary 1800.00 2018-Mar-02 102 salary 1900.00 2018-Mar-02 101 award 500.00 2018-Mar-08 102 adjustment 124.70 2018-Mar-10 Aqui está a pergunta sobre dados negativos que gostaríamos de responder: "Obter os nomes de funcionários que nunca receberam um prêmio". A consulta SQL que responde à pergunta anterior é a seguinte: SELECT last_name, first_name FROM employee e1 WHERE NOT EXISTS (SELECT ph.last_name FROM payment_history ph WHERE ph.employee_id = e1.employee_id AND ph.payment_type = 'award') Subconsultas SQL Correlatas Vs. Subconsultas simples A principal diferença entre uma subconsulta SQL correlacionada e uma subconsulta simples é que uma subconsulta SQL correlacionada faz referência a colunas da tabela da consulta externa. No exemplo acima, ph.employee_id = e1.employee_id é uma referência à tabela de subconsultas externas (e1). Para identificar uma subconsulta correlata, basta procurar este tipo de referência. Se você encontrar pelo menos uma, você tem uma subconsulta correlata! A parte negativa de uma questão de dados é freqüentemente resolvida em uma subconsulta correlacionada a SQL usando o operador NOT EXISTS na cláusula WHERE. EXISTS é um operador sempre seguido por uma subconsulta. Se a subconsulta retornar pelo menos um registro, então EXISTS avalia para TRUE. Se a subconsulta retornar um conjunto vazio, então EXISTS avalia para FALSE. Note que usamos NOT EXISTS, que é simplesmente o oposto de EXISTS. O resultado da consulta anterior é: first_name last_name John Smith Alice Johnson Outro exemplo de subconsulta relacionada a Cor Neste exemplo, tentaremos obter os nomes de todos os funcionários que ganharam salários mais altos em março de 2018 do que sua média mensal de salários de todos os meses anteriores, utilizando uma subconsulta correlata SQL. Aqui está a consulta que vamos fazer: SELECT first_name, last_name FROM employee e1, payment_history ph WHERE e1.employee_id = ph.employee_id AND amount_paid > = ( SELECT AVG(amount_paid) FROM payment_history ph2 WHERE ph2.employee_id = e1.employee_id AND ph2.payment_date < '01/03/2018' AND ph2.payment_type = 'salary' ) AND month(ph.payment_date) =3 AND year(ph.payment_date) = 2018 AND ph.payment_type ='salary' Chega de Negatividade. E as perguntas sobre dados positivos? Devemos usar uma subconsulta correlacionada a SQL para responder a uma pergunta de dados positiva? Não, você não precisa. Mas você ainda pode fazer isso se quiser. Para perguntas positivas, geralmente podemos usar apenas uma condição JOIN ou uma relação entre duas tabelas. Vamos mudar nossa pergunta anterior para uma positiva e resolvê-la com um JOIN em vez disso, uma subconsulta correlata. A pergunta se torna: "Obter os nomes dos funcionários que receberam pagamentos de prêmios". E a consulta SQL (sem subconsultas correlacionadas) que responde a esta pergunta é: SELECT first_name, last_name FROM employee e1 JOIN payment_history ph ON ph.employee_id = e1.employee_id WHERE ph.payment_type =award' O resultado é: "Obter nomes de funcionários que receberam pagamentos de prêmios": first_name last_name Kate Miller Advertência: Sua subconsulta relacionada ao SQL Cor é provável que seja lenta Gostaria apenas de mencionar que tentamos não usar em demasia subconsultas correlatas SQL, se possível. Lembre-se de que uma subconsulta correlacionada é executada uma vez para cada registro retornado pela consulta externa. Se a consulta externa retornar milhares e milhares de registros, você pode imaginar a rapidez com que sua consulta irá diminuir o desempenho. Em geral, você só deve usar uma subconsulta correlata SQL se ela for absolutamente necessária. Tente você mesmo uma subconsulta relacionada à SQL Correspondente! Já vimos que as subconsultas correlacionadas são uma parte importante da linguagem SQL e podem nos ajudar a responder diferentes perguntas de dados, especialmente as negativas. Também explicamos como reconhecer uma subconsulta SQL correlacionada e porque devemos geralmente tentar evitar subconsultas correlacionadas, se possível, devido a razões de desempenho. Para melhorar suas habilidades de subconsulta, tente LearnSQL.com.br's SQL para Iniciantes curso. Temos uma seção específica dedicada a subconsultas, com muitos exercícios práticos e exemplos de subconsultas correlacionadas para ajudá-lo a dominar o conteúdo. Tags: análise de dados como fazer em sql noções básicas de sql Subconsulta SQL