Pular para o conteúdo principal

Como usar o operador IN do SQL: Um guia para técnicas eficientes de filtragem

O operador SQL IN permite que você filtre os resultados da consulta para incluir apenas as linhas que atendem às condições especificadas. Explore todo o seu potencial e suas alternativas.
Actualizado 29 de jul. de 2024  · 8 min de leitura

O operador SQL IN é uma ferramenta útil para filtrar dados com base em um conjunto de valores. Quando incluído em consultas longas, o operador IN ajuda a simplificar consultas complexas e melhora a legibilidade.

Se você é um aspirante a profissional de dados, recomendo que faça os cursos Introduction to SQL e SQL Fundamentals da DataCamp para aprender os fundamentos da aplicação de SQL para filtrar dados. Para que você possa se atualizar rapidamente, consulte nossa Folha de consulta de noções básicas de SQL.

O que é o operador SQL IN?

O operador SQL IN é uma ferramenta poderosa para filtrar dados em consultas SQL. Ele ajuda a refinar os resultados da consulta, retornando apenas as linhas que atendem às condições especificadas.

No entanto, o operador IN é incluído após a cláusula WHERE para retornar resultados com várias condições. Portanto, o operador IN pode ser usado quando o tipo de dados filtrado tiver valores diferentes.

-- Select the employee ID, employee name, and department columns
SELECT employee_id, employee_name, department
FROM employees
-- Filter the results to include only employees whose department is 'Sales' and 'HR'
WHERE department IN ('Sales', 'HR');

No exemplo acima, selecionamos as colunas employee_id, employee_name e department da tabela employees. No entanto, retornamos apenas as linhas em que os funcionários são de Sales e HR.

O operador IN pode filtrar diferentes tipos de dados SQL, inclusive cadeias de caracteres, números e datas. Sempre verifique se a coluna de referência tem o tipo de dados apropriado ao filtrar linhas.

Sintaxe do operador SQL IN

O operador IN tem uma sintaxe simples para filtrar valores. É usado na cláusula WHERE para permitir a filtragem de vários valores de uma lista de colunas. A sintaxe geral do operador IN é mostrada abaixo.

-- Select the columns you want to retrieve
SELECT column_name(s)
-- Specify the table from which to retrieve the data
FROM table_name
-- Filter the results to include only those rows where the column's value matches any value in the specified list
WHERE column_name IN (value1, value2, ...);

A seguir, um exemplo prático de inclusão do operador IN na cláusula WHERE.

-- Select the employee ID, employee name, and department columns
SELECT employee_id, employee_name, department
FROM employees
-- Filter the results to include only employees whose department is 'Sales' and 'HR'
WHERE department IN ('Sales', 'HR');

Pontos importantes a serem lembrados

O operador IN está incluído na cláusula WHERE da declaração SELECT. Esse posicionamento permite que a consulta filtre as linhas com base em vários valores. Quando usado em uma consulta SQL, o operador IN simplifica consultas complexas e as torna fáceis de ler.

O operador IN é padrão em diferentes bancos de dados, incluindo os bancos de dados SQL Server, PostgreSQL, MySQL e Oracle. Escrever o operador IN em letras maiúsculas, como padrão, é importante para melhorar a legibilidade.

Casos de uso comuns do operador IN

O operador SQL IN é usado para diferentes aplicativos de análise de dados. Esta seção explorará alguns dos casos de uso mais comuns, incluindo filtragem de dados, manipulação de vários valores e utilização de subconsultas. 

Filtragem de dados

O operador IN filtra, registra e retorna um conjunto de valores especificados. Por exemplo, na consulta abaixo, você selecionará todas as colunas da tabela employees e retornará linhas com funcionários dos departamentos Sales, HR e IT.

-- Select all columns from employees table
SELECT employee_id, employee_name, department
FROM employees
-- Filter to include only 'Sales', 'HR', and 'IT' departments
WHERE department IN ('Sales', 'HR', 'IT');

Manuseio de vários valores

O operador IN também é usado para filtrar registros com vários valores. Esse aplicativo é útil para filtrar dados usando várias condições do OR. Portanto, o operador IN oferece uma maneira mais simples de melhorar a legibilidade da consulta.

Veja abaixo como a consulta ficaria com o operador OR em vez do operador IN.

-- Main query to select employee_id and name from the employees table
SELECT employee_id, name
FROM employees
-- Filter employees based on multiple department names using OR conditions
WHERE department = 'Sales'
OR department = 'Marketing'
OR department = 'HR';

Aqui está a consulta que usa o operador IN. Observe a simplicidade da consulta ao remover o operador OR repetido.

-- Main query to select employee_id and name from the employees table
SELECT employee_id, name
FROM employees
-- Filter employees based on a list of department names using the IN operator
WHERE department IN ('Sales', 'Marketing', 'HR');

Subconsultas

Você também pode usar o operador IN para filtrar os resultados em uma subconsulta. Essa operação permite que você filtre registros de outra consulta ou dados relacionados. No exemplo abaixo, a subconsulta seleciona o endereço department_id do departamento Sales na tabela departments. Portanto, a consulta principal retornará linhas contendo employee_id e nome da tabela employees, filtradas de acordo com a subconsulta.

-- Main query to select employee_id and name from the employees table
SELECT employee_id, name
FROM employees
-- Filter employees based on department_id using a subquery
WHERE department_id IN (
    -- Subquery to get department_id for the "Sales" department
    SELECT department_id
    FROM departments
    WHERE department_name = 'Sales'
);

Limitações e alternativas

Embora o operador IN seja simples de usar em consultas SQL, há algumas limitações em suas aplicações, que incluem as seguintes:

  • Problemas de desempenho com listas grandes: O uso do operador IN com grandes listas de valores pode causar problemas de desempenho, tornando a execução da consulta mais lenta.
  • Manipulação de valores NULL: O operador IN não lida eficientemente com os valores NULL e pode retornar resultados não previstos. Esse problema se deve ao fato de os valores de NULL não estarem incluídos na lista de valores.
  • Flexibilidade limitada: O operador IN é limitado ao lidar com grandes conjuntos de dados com várias colunas. Você só pode filtrar colunas limitadas usando subconsultas.

As alternativas para evitar as limitações do operador do IN incluem:

Usando o operador EXISTS

O operador EXISTS verifica se os registros especificados estão em uma subconsulta. Quando usado corretamente, esse operador é eficiente e mais rápido.

-- Select employee ID and name for employees in departments located in New York using EXISTS
SELECT employee_id, employee_name
FROM employees e
-- Check if there exists a row in the departments table
WHERE EXISTS (
    -- Select 1 is used here as a placeholder; it simply checks for existence
    SELECT 1
    FROM departments d
    -- Match the department_id in employees with department_id in departments
    WHERE d.department_id = e.department_id
    -- Filter for departments located in New York
    AND d.location = 'New York'
);

Usando JOIN

A cláusula SQL JOIN é eficiente ao consultar dados com filtragem complexa e útil ao filtrar dados de várias colunas ou colunas relacionadas. No exemplo abaixo, a cláusula JOIN foi usada para unir as tabelas employees e departments em department_id para filtrar os registros de funcionários que moram em Nova York.

-- Select employee ID and name for employees in departments located in New York using JOIN
SELECT e.employee_id, e.employee_name
FROM employees e
-- Join the employees table with the departments table on department_id
JOIN departments d ON e.department_id = d.department_id
-- Filter the results to include only departments located in New York
WHERE d.location = 'New York';

Usando expressões de tabela comuns (CTEs) ou tabelas temporárias

Se você tiver tabelas com listas grandes, considere o uso de CTEs para armazenar a lista de valores antes da consulta. Esse método melhora o desempenho e a legibilidade da consulta.

-- Define a CTE (Common Table Expression) to store the list of department IDs located in New York
WITH DepartmentList AS (
    SELECT department_id
    FROM departments
    WHERE location = 'New York'
)
-- Select employee ID and name for employees who belong to the departments listed in the CTE
SELECT e.employee_id, e.employee_name
FROM employees e
-- Filter the results to include only employees whose department_id is in the list of department IDs from the CTE
WHERE e.department_id IN (SELECT department_id FROM DepartmentList);

Para aprender outras técnicas avançadas de filtragem de dados, recomendo que você faça o programa de carreira Associate Data Analyst in SQL da DataCamp. Você também pode conferir o curso Intermediate SQL Server da DataCamp, que inclui um capítulo sobre expressões de tabela comuns e outros tópicos avançados. 

Conclusão

Entender o operador SQL IN é importante para um profissional de dados, pois ele permite que você filtre e transforme os dados durante a análise. Para aprimorar suas habilidades em SQL na aplicação do operador IN, recomendo que você pratique com diferentes conjuntos de dados para análise.

Se você quiser aumentar seu conhecimento de SQL para um nível intermediário, recomendo o curso Reporting in SQL para explorar outras técnicas de consulta complexas. Além disso, a Certificação SQL Associate ajudará você a se destacar entre outros analistas de dados, mostrando seu conhecimento prático do uso do SQL para análises avançadas.

Perguntas frequentes

Posso usar o operador IN para filtrar diferentes tipos de dados?

O operador IN filtra diferentes tipos de dados SQL, incluindo cadeias de caracteres, números e datas.

Você pode usar o operador IN em subconsultas?

O operador IN é usado em subconsultas como um método avançado para filtrar dados da consulta principal.

Qual é a alternativa do operador IN?

O operador EXISTS operator, JOIN e as tabelas de expressões comuns (CTEs) são as melhores alternativas para você usar o operador. IN operador.

Quais bancos de dados são compatíveis com o operador IN?

Os bancos de dados comuns suportam o uso do operador IN incluindo os bancos de dados SQL Server, MySQL, PostgreSQL e Oracle.

Temas

Aprenda SQL com a DataCamp

curso

Exploratory Data Analysis in SQL

4 hr
136.6K
Learn how to explore what's available in a database: the tables, relationships between them, and data stored in them.
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow