14th May 2024 8 minutos de leitura Operador SQL IN Radu Gheorghiu operador sql Índice Introdução ao operador SQL IN Uso do operador SQL IN Sintaxe do operador IN Uso do operador SQL NOT IN Uso de IN com SELECT Uso de NOT IN com SELECT Exercício: Desafio do operador IN Exemplos avançados de IN e casos de uso Subconsultas correlacionadas Manuseio de grandes listas de valores Combinação de IN com outros operadores Agora é hora de praticar o uso do SQL IN Por que você precisa conhecer o operador SQL IN? Descubra o que você pode fazer com esse pequeno, mas poderoso operador. O operador IN é uma ferramenta fundamental no SQL, permitindo que os analistas e desenvolvedores de dados filtrem e recuperem subconjuntos específicos de dados dos bancos de dados. Embora seu uso básico possa parecer simples, dominar as nuances e os aplicativos avançados do operador SQL IN pode aprimorar muito suas habilidades em SQL e levar a consultas mais eficientes e otimizadas. Neste guia abrangente, vamos nos aprofundar no operador SQL IN, abordando sua sintaxe, casos de uso, considerações de desempenho e práticas recomendadas. Introdução ao operador SQL IN O operador SQL IN é usado para verificar se um valor corresponde a qualquer valor em uma lista ou subconsulta especificada. Ele oferece uma maneira concisa de combinar várias condições usando a lógica OR sem precisar escrever explicitamente cada condição separadamente. Isso pode simplificar bastante suas consultas SQL e melhorar a legibilidade, especialmente quando estiver lidando com um grande número de condições. Se estiver procurando um ponto de partida para criar bases sólidas de SQL, recomendo nosso curso SQL para Iniciantes . Ele contém 129 exercícios práticos para que você possa dominar o SQL fundamental e aumentar sua confiança. Se você já conhece os conceitos básicos de SQL, confira nosso Trilha de Práticas em SQL - ele tem mais de 1.000 exercícios para ajudá-lo a aprimorar suas habilidades. Uso do operador SQL IN Um dos casos mais comuns de uso do SQL IN é verificar se um valor corresponde a qualquer valor em uma lista. Veja um exemplo: SELECT * FROM employees WHERE department_id IN (10, 20, 30); Nessa consulta, o operador SQL IN é usado para recuperar todas as linhas da tabela employees em que department_id é 10, 20 ou 30. Sintaxe do operador IN O operador SQL IN funciona como uma abreviação para várias condições OR no mesmo campo, tornando a consulta mais concisa e legível. Veja a seguir a sintaxe básica: SELECT column1, column2, ... FROM table_name WHERE column_name IN (value1, value2, ...); Uso do operador SQL NOT IN O operador SQL NOT IN é o oposto do operador SQL IN. Ele é usado para recuperar registros em que o valor não corresponde a nenhum valor da lista especificada. Veja um exemplo: SELECT * FROM products WHERE product_category NOT IN ('Electronics', 'Clothing'); Essa consulta recupera todas as linhas da tabela products em que product_category não é "Eletrônicos" ou "Roupas". Uso de IN com SELECT O operador SQL IN também pode ser usado em conjunto com uma subconsulta, que é uma consulta aninhada dentro de outra consulta. Essa combinação poderosa permite filtrar dados com base nos resultados de outra consulta. Veja um exemplo: SELECT product_name, product_price FROM products WHERE product_id IN ( SELECT product_id FROM orders WHERE order_date >= '2023-01-01' ); Nessa consulta, a subconsulta SELECT product_id FROM orders WHERE order_date >= '2023-01-01' recupera uma lista de valores product_id para pedidos feitos em 1º de janeiro de 2023 ou após essa data. Em seguida, a consulta principal usa o operador IN para recuperar product_name e product_price para todos os produtos cujo product_id esteja na lista retornada pela subconsulta. Esse é apenas um exemplo de como você pode utilizar uma subconsulta em um operador IN. Há vários tipos de subconsultas que podem ser escritas em SQL, mas, para entender melhor, recomendamos dar uma olhada em mais exemplos de como usar uma subconsulta. Uso de NOT IN com SELECT Assim como no exemplo anterior, é possível usar o operador NOT IN com uma subconsulta para recuperar registros que não correspondam aos resultados da subconsulta. Aqui está um exemplo: SELECT employee_name, department_name FROM employees WHERE department_id NOT IN (SELECT department_id FROM departments WHERE location = 'New York'); Essa consulta recupera o nome_do_funcionário e o nome_do_departamento de todos os funcionários que não estão em departamentos localizados em Nova York. A subconsulta SELECT department_id FROM departments WHERE location = 'New York' recupera uma lista de valores department_id para departamentos localizados em Nova York. Em seguida, a consulta principal usa o operador SQL NOT IN para excluir funcionários cujo department_id esteja na lista retornada pela subconsulta. Exercício: Desafio do operador IN Agora que lemos sobre diferentes maneiras de usar o operador IN para resolver problemas complexos de SQL, é hora de praticar o que aprendemos. Imagine que você está trabalhando com um banco de dados que armazena informações sobre livros. O banco de dados tem uma tabela chamada Books com as seguintes colunas: BookID, Title, AuthorID, e GenreID. Há outra tabela chamada Genres (Gêneros ) com as colunas GenreID e GenreName. Aqui está um exemplo de algumas linhas que essas tabelas conteriam. A Books tabela: BookIDTitleAuthorIDGenreID 1The Hitchhiker's Guide to the Galaxy11 2Dune21 3The Lord of the Rings32 4The Da Vinci Code43 5Harry Potter and the Sorcerer’s Stone52 6The Girl on the Train63 7Pride and Prejudice74 A tabela Genres tabela: GenreIDGenreName 1Science Fiction 2Fantasy 3Mystery 4Romance 5Non-Fiction Seu desafio é escrever uma consulta SQL que selecione todos os títulos de livros que pertençam aos gêneros "Ficção científica", "Fantasia" ou "Mistério". (Suponha que você ainda não conheça os valores GenreID para esses gêneros). Solução: SELECT Title FROM Books WHERE GenreID IN (SELECT GenreID FROM Genres WHERE GenreName = 'Science Fiction' OR GenreName = 'Fantasy' OR GenreName = 'Mystery'); Explicação: Selecione os títulos dos livros na tabela Books tabela. Filtre os resultados usando uma cláusula WHERE com o operador IN para incluir somente as linhas em que o GenreID é o mesmo que GenreID na tabela Genres para "Science Fiction" (Ficção científica), "Fantasy" (Fantasia) ou "Mystery" (Mistério). Como alternativa, você pode escrever uma consulta que use dois operadores IN: SELECT Title FROM Books WHERE GenreID IN (SELECT GenreID FROM Genres WHERE GenreName IN ('Science Fiction','Fantasy','Mystery')); Resultado: Title The Hitchhiker's Guide to the Galaxy Dune The Lord of the Rings Harry Potter and the Sorcerer's Stone The Da Vinci Code The Girl on the Train Exemplos avançados de IN e casos de uso Embora o uso básico do operador SQL IN seja relativamente simples, seu verdadeiro poder está na capacidade de lidar com cenários complexos e casos de uso avançados. Vamos explorar alguns deles: Subconsultas correlacionadas As subconsultas correlacionadas são subconsultas que fazem referência a colunas da consulta externa. Isso permite que você filtre dados com base em critérios complexos que envolvem várias tabelas e condições. Veja um exemplo: SELECT product_name, category_name FROM products p JOIN categories c ON p.category_id = c.category_id WHERE p.product_id IN (SELECT product_id FROM order_items oi WHERE oi.order_id IN (SELECT order_id FROM orders WHERE customer_id = 1001)); Nessa consulta, a subconsulta mais interna recupera os valores de order_id para um cliente específico. A subconsulta intermediária usa esses valores order_id para recuperar os valores product_id correspondentes da tabela order_items tabela. Por fim, a consulta principal usa o operador SQL IN para recuperar product_name e category_name para esses produtos. As subconsultas correlacionadas são apenas uma das maneiras avançadas de usar o operador IN. Para obter uma compreensão profunda de todos os tipos de subconsultas, recomendamos estes 15 exercícios práticos de subconsultas. Manuseio de grandes listas de valores Ao trabalhar com grandes listas de valores, usar uma subconsulta ou uma tabela temporária pode ser mais eficiente do que listar todos os valores na cláusula SQL IN. Isso pode melhorar o desempenho da consulta e reduzir o risco de atingir os limites de comprimento de consulta impostos pelo seu sistema de gerenciamento de banco de dados. Veja um exemplo: -- Create a temporary table with the desired values CREATE TEMPORARY TABLE temp_values (value INT); INSERT INTO temp_values (value) VALUES (10), (20), (30), ...; -- Use the temporary table with the SQL IN operator SELECT * FROM employees WHERE department_id IN (SELECT value FROM temp_values); Neste exemplo, uma tabela temporária temp_values é criada e preenchida com os valores desejados. Em seguida, a consulta principal usa uma subconsulta para recuperar esses valores da tabela temporária e filtrar a employees tabela de acordo. Combinação de IN com outros operadores O operador IN pode ser combinado com outros operadores SQL, como AND e OR, para criar condições de filtragem mais complexas. Isso permite lidar com cenários em que você precisa filtrar dados com base em vários critérios que envolvem diferentes operadores. Veja um exemplo: SELECT * FROM orders WHERE order_date >= '2023-01-01' AND customer_id IN (SELECT customer_id FROM customers WHERE country = 'USA') AND total_amount > 1000; Nessa consulta, IN é usado em combinação com AND para filtrar pedidos com base na data do pedido, no país do cliente e no valor total. Agora é hora de praticar o uso do SQL IN O operador IN é uma ferramenta poderosa e versátil que pode simplificar muito suas tarefas de análise de dados e relatórios SQL. Ao compreender a sintaxe, o uso avançado, as considerações de desempenho e as práticas recomendadas, você poderá aproveitar o IN para filtrar e recuperar com eficácia os dados relevantes dos bancos de dados e, ao mesmo tempo, garantir o desempenho ideal da consulta e a facilidade de manutenção. Obrigado por ler o nosso artigo; esperamos que tenha gostado de conhecer os recursos avançados do operador SQL IN. Se estiver começando a usar o SQL, confira nosso curso interativo SQL para Iniciantes. Se você for um usuário experiente de SQL e estiver em busca de prática, confira o nosso Trilha de Práticas em SQL . Bom aprendizado! Tags: operador sql