curso
Como usar o operador IN do SQL: Um guia para técnicas eficientes de filtragem
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 valoresNULL
e pode retornar resultados não previstos. Esse problema se deve ao fato de os valores deNULL
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.
Aprenda SQL com a DataCamp
curso
Data Manipulation in SQL
curso