Curso
Filtrar linhas de uma tabela com base em uma condição (ou conjunto de condições) é uma prática muito comum em análise de dados. Em SQL, você faz isso usando a cláusula where. Neste tutorial, você vai usá-la em vários cenários diferentes.
Você usará o PostgreSQL como o SGBD (Sistema de Gerenciamento de Banco de Dados), mas a sintaxe não muda muito ao usar outros sistemas. Você vai começar configurando um banco de dados PostgreSQL e criando manualmente uma tabela com dados de países. Depois disso, vai executar várias consultas com filtros usando a cláusula WHERE.
Observação: para acompanhar o tutorial, é importante conhecer o básico de SQL e PostgreSQL. Se precisar, estes recursos podem ajudar:
Criando uma tabela no PostgreSQL
Para acompanhar este tutorial, você vai criar uma tabela no PostgreSQL com informações sobre países do mundo. Essa tabela será usada para demonstrar como a cláusula WHERE funciona em diferentes situações.
Passo 1: crie um novo banco de dados
Abra o pgAdmin (ou sua interface SQL preferida) e crie um novo banco de dados PostgreSQL. Você pode chamá-lo de world_data ou outro nome de sua preferência.
Passo 2: crie e popule a tabela
Com o banco pronto, abra uma nova janela de editor de consultas SQL e rode o código abaixo. Ele cria uma tabela chamada countries e insere um conjunto de registros cobrindo vários continentes, anos de independência e regiões:
-- Create the countries tableCREATE TABLE countries ( code VARCHAR(3) PRIMARY KEY, name VARCHAR(100), continent VARCHAR(50), region VARCHAR(100), surface_area NUMERIC, indep_year INTEGER, local_name VARCHAR(100), gov_form VARCHAR(100), capital VARCHAR(100), cap_long NUMERIC, cap_lat NUMERIC);-- Insert sample data into the countries tableINSERT INTO countries (code, name, continent, region, surface_area, indep_year, local_name, gov_form, capital, cap_long, cap_lat)VALUES('IND', 'India', 'Asia', 'Southern Asia', 3287263, 1947, 'Bharat', 'Federal Republic', 'New Delhi', 77.2090, 28.6139),('PAK', 'Pakistan', 'Asia', 'Southern Asia', 881912, 1947, 'Pakistan', 'Federal Republic', 'Islamabad', 73.0551, 33.6844),('CHN', 'China', 'Asia', 'Eastern Asia', 9596961, NULL, 'Zhongguo', 'People''s Republic', 'Beijing', 116.4074, 39.9042),('VNM', 'Vietnam', 'Asia', 'South-Eastern Asia', 331212, 1945, 'Việt Nam', 'Socialist Republic', 'Hanoi', 105.8544, 21.0285),('JPN', 'Japan', 'Asia', 'Eastern Asia', 377975, NULL, 'Nippon', 'Constitutional Monarchy', 'Tokyo', 139.6917, 35.6895),('DEU', 'Germany', 'Europe', 'Western Europe', 357386, 1955, 'Deutschland', 'Federal Republic', 'Berlin', 13.4050, 52.5200),('FRA', 'France', 'Europe', 'Western Europe', 551695, 843, 'France', 'Republic', 'Paris', 2.3522, 48.8566),('RUS', 'Russia', 'Europe', 'Eastern Europe', 17098242, 1991, 'Rossiya', 'Federation', 'Moscow', 37.6173, 55.7558),('UKR', 'Ukraine', 'Europe', 'Eastern Europe', 603500, 1991, 'Ukrayina', 'Republic', 'Kyiv', 30.5234, 50.4501),('EGY', 'Egypt', 'Africa', 'Northern Africa', 1002450, 1922, 'Misr', 'Republic', 'Cairo', 31.2357, 30.0444),('NGA', 'Nigeria', 'Africa', 'Western Africa', 923768, 1960, 'Nigeria', 'Federal Republic', 'Abuja', 7.4951, 9.0578),('AUS', 'Australia', 'Oceania', 'Australia and New Zealand', 7682300, 1901, 'Australia', 'Federal Parliamentary Democracy', 'Canberra', 149.1245, -35.3075),('USA', 'United States', 'North America', 'North America', 9833517, 1776, 'United States', 'Federal Republic', 'Washington, D.C.', -77.0369, 38.9072),('CAN', 'Canada', 'North America', 'North America', 9984670, 1867, 'Canada', 'Constitutional Monarchy', 'Ottawa', -75.6972, 45.4215),('BRA', 'Brazil', 'South America', 'South America', 8515767, 1822, 'Brasil', 'Federal Republic', 'Brasília', -47.9292, -15.7801),('ARG', 'Argentina', 'South America', 'South America', 2780400, 1816, 'Argentina', 'Federal Republic', 'Buenos Aires', -58.3816, -34.6037);A tabela traz informações diferentes sobre um total de 16 países ao redor do mundo. Ela possui as seguintes colunas:
code, a chave primária da tabela, que representa o código universal do paísname, o nome do paíscontinent, o continente ao qual o país pertenceregion, a região geográfica onde o país está localizadosurface_area, a área do paísindep_year, o ano em que o país obteve independêncialocal_name, o nome local do paísgov_form, a forma de governo vigente no paíscapital, a capital do paíscap_long, a longitude da capitalcap_lat, a latitude da capital
Agora vamos começar a filtrar alguns registros com a cláusula WHERE.
Usando a cláusula WHERE em SQL
Em SQL, a cláusula WHERE permite filtrar registros com base em valores textuais e numéricos. Você pode comparar esses valores, e as seguintes operações de comparação são suportadas:
=igual<>e!=diferente<menor que>maior que<=menor ou igual a>=maior ou igual a
É recomendado usar <> em vez de !=, conforme o padrão SQL.
Vamos buscar agora o registro do país cujo code é AUS. A coluna a ser comparada é code e o valor a comparar é AUS. A consulta seria:
SELECT * FROM countries WHERE code = 'AUS';E o resultado é:

Repare em dois pontos aqui:
A cláusula
WHEREsempre vem após oFROM.Em SQL, strings são colocadas entre aspas simples.
Agora, vamos ver uma comparação numérica. Busque os países que conquistaram sua independência (indep_year) depois de 1901:
SELECT * FROM countries WHERE indep_year > 1901;Você obtém os registros de 3 países que conquistaram a independência depois de 1901. Observe o operador de comparação usado. A coluna indep_year é do tipo inteiro. Portanto, nada de aspas na comparação.
Você pode combinar várias condições em uma cláusula WHERE usando os conectivos AND e OR. A consulta a seguir retorna os países where continent = 'Asia' and indep_year > 1900:
SELECT * FROM countries WHERE continent = 'Asia' AND indep_year > 1901;
Você obtém informações de três países que ficam no continente Asia e conquistaram independência após 1901. Note que, na consulta acima, você comparou valores textuais e numéricos. Como exercício, experimente diferentes combinações de AND e OR na cláusula WHERE.
Observação: ao combinar AND e OR, não esqueça de colocar cada condição entre parênteses. Caso contrário, o SQL pode se confundir ao determinar a precedência na avaliação das condições.
Com a consulta abaixo, você obtém um total de seis países.
SELECT * FROM countries WHERE(continent = 'Europe' AND indep_year > 1900)or(continent = 'Asia' AND indep_year > 1900);
Você pode até conectar mais de duas condições em uma cláusula WHERE:
SELECT * FROM countries WHERE continent = 'Asia' OR indep_year > 1900 OR surface_area > 652090;
Nesse caso, você obtém 15 países que estão em Asia, ou que conquistaram independência após 1901, ou que têm área maior que 652090.
Agora, vamos transformar a consulta em uma variante com AND, que é mais restritiva:
SELECT * FROM countries WHERE continent = 'Asia' AND indep_year > 1901 AND surface_area > 652090;
Nesse caso, você terá um total de dois países.
Também é possível usar subconsultas em uma cláusula WHERE. Suponha que você queira buscar o país com a maior área, mas não sabe qual é esse valor máximo. A consulta abaixo resolve isso:
SELECT * FROM countries WHERE surface_area in (SELECT MAX(surface_area) FROM countries);Você deve obter o registro de Russia.

Conclusão
Parabéns, você concluiu este tutorial. Filtrar resultados de consultas com base em condições é uma habilidade essencial, e este conteúdo foi uma introdução a isso. Quer levar suas habilidades em SQL ainda mais longe? Confira nossos cursos (link abaixo).
Torne-se certificado em SQL

Sayak trabalha na Hugging Face, onde codifica, escreve e fala. Seu tempo é gasto principalmente com tudo relacionado à biblioteca de difusores. Ele também é instrutor de projetos do DataCamp e autor de vários tutoriais do DataCamp. Fora do trabalho, você o verá assistindo a Suits na Netflix pela enésima vez.
SQL: perguntas frequentes sobre a cláusula WHERE
Posso usar colunas de texto e numéricas em uma cláusula WHERE?
Sim, você pode filtrar por valores de texto (por exemplo, 'Asia') e numéricos (por exemplo, > 1901). Lembre-se de que valores de texto devem estar entre aspas simples.
Existe diferença entre <> e != em SQL?
Ambos significam "diferente", mas <> é o operador padrão do SQL. Alguns bancos de dados também aceitam !=, mas é melhor usar <> para garantir compatibilidade.
Como filtro registros com valores NULL?
Use IS NULL ou IS NOT NULL. Exemplo:
SELECT * FROM countries WHERE indep_year IS NULL;Posso usar subconsultas em uma cláusula WHERE?
Sim. Você pode usar subconsultas para comparar uma coluna com o resultado de outra consulta. Exemplo:
SELECT * FROM countries WHERE surface_area = (SELECT MAX(surface_area) FROM countries);A cláusula WHERE vem antes ou depois do FROM?
A cláusula WHERE sempre vem depois da cláusula FROM e antes de cláusulas como GROUP BY ou ORDER BY.
Posso usar WHERE com JOINs?
Com certeza. Você pode aplicar a cláusula WHERE depois de executar um JOIN para filtrar o conjunto de resultados combinados.
