A cláusula WHERE especifica quais linhas devem aparecer no resultado. Ela aceita expressões lógicas compostas por comparações, conectivos booleanos e predicados especiais.
Operadores de Comparação
Operador
Significado
Exemplo
=
igual
id_escola = 31
<> ou !=
diferente
semestre <> 2
<
menor que
carga_horaria < 60
>
maior que
carga_horaria > 100
<=
menor ou igual
semestre <= 4
>=
maior ou igual
carga_horaria >= 60
Conectivos Lógicos: AND, OR, NOT
-- Disciplinas de ENS com carga horária acima de 150 horasSELECT id_disciplina, nome_disciplina, carga_horariaFROM disciplinaWHERE id_curso =311AND carga_horaria >150;
2 records
id_disciplina
nome_disciplina
carga_horaria
3110401
Bases da Eng. de Software 4
180
3110802
Projeto Aplicado 8 - Sistema em Tempo Real
160
-- Disciplinas de PED ou com carga horária acima de 150 horasSELECT id_disciplina, nome_disciplina, id_curso, carga_horariaFROM disciplinaWHERE id_curso =211OR carga_horaria >150ORDERBY carga_horaria DESC;
Displaying records 1 - 10
id_disciplina
nome_disciplina
id_curso
carga_horaria
3110401
Bases da Eng. de Software 4
311
180
3110802
Projeto Aplicado 8 - Sistema em Tempo Real
311
160
2110401
Eletiva I
211
80
2110402
Fundamentos e Orientações Metodológicas - Ed. Infantil - BNCC
211
80
2110601
Eletiva II
211
80
2110201
Desenvolvimento Humano
211
60
2110202
Didática Geral
211
60
2110801
Tecnologia Educacional - Design
211
60
2110802
Estatística Aplicada
211
50
2110602
Educação do Campo, Indígena e Quilombola
211
40
-- Disciplinas que NÃO são de ECOSELECT id_disciplina, nome_disciplina, id_cursoFROM disciplinaWHERENOT id_curso =111ORDERBY id_curso, id_disciplina;
Displaying records 1 - 10
id_disciplina
nome_disciplina
id_curso
2110201
Desenvolvimento Humano
211
2110202
Didática Geral
211
2110401
Eletiva I
211
2110402
Fundamentos e Orientações Metodológicas - Ed. Infantil - BNCC
211
2110601
Eletiva II
211
2110602
Educação do Campo, Indígena e Quilombola
211
2110801
Tecnologia Educacional - Design
211
2110802
Estatística Aplicada
211
3110201
Bases da Eng. de Software 2
311
3110202
Projeto Aplicado 2 - site WEB
311
BETWEEN
O predicado BETWEEN verifica se um valor está dentro de um intervalo fechado (inclusive os extremos):
-- Disciplinas com carga horária entre 100 e 160 horas (inclusive)SELECT id_disciplina, nome_disciplina, id_curso, carga_horariaFROM disciplinaWHERE carga_horaria BETWEEN100AND160ORDERBY carga_horaria;
8 records
id_disciplina
nome_disciplina
id_curso
carga_horaria
3110801
Bases da Eng. de Software 8
311
100
1110801
Monografia
111
100
3110602
Projeto Aplicado 6 - Machine Learning
311
120
3110202
Projeto Aplicado 2 - site WEB
311
120
3110402
Projeto Aplicado 4 - blockchain
311
120
3110601
Bases da Eng. de Software 6
311
150
3110201
Bases da Eng. de Software 2
311
150
3110802
Projeto Aplicado 8 - Sistema em Tempo Real
311
160
carga_horaria BETWEEN 100 AND 160 é equivalente a carga_horaria >= 100 AND carga_horaria <= 160. A versão com BETWEEN é mais legível.
O predicado NOT BETWEEN exclui o intervalo.
LIKE: Padrões em Strings
O predicado LIKE permite filtrar strings usando padrões. Dois caracteres especiais estão disponíveis:
Caractere
Significado
%
Qualquer sequência de zero ou mais caracteres
_
Exatamente um caractere qualquer
-- Disciplinas cujo nome começa com "Bases"-- (corresponde às disciplinas de Bases da Eng. de Software dos semestres 2, 4, 6 e 8 de ENS)SELECT id_disciplina, nome_disciplina, carga_horariaFROM disciplinaWHERE nome_disciplina LIKE'Bases%';
4 records
id_disciplina
nome_disciplina
carga_horaria
3110201
Bases da Eng. de Software 2
150
3110401
Bases da Eng. de Software 4
180
3110601
Bases da Eng. de Software 6
150
3110801
Bases da Eng. de Software 8
100
-- Disciplinas cujo nome contém a palavra "Projeto"SELECT id_disciplina, nome_disciplina, id_cursoFROM disciplinaWHERE nome_disciplina LIKE'%Projeto%';
4 records
id_disciplina
nome_disciplina
id_curso
3110202
Projeto Aplicado 2 - site WEB
311
3110402
Projeto Aplicado 4 - blockchain
311
3110602
Projeto Aplicado 6 - Machine Learning
311
3110802
Projeto Aplicado 8 - Sistema em Tempo Real
311
Nota
LIKE aplica-se a colunas do tipo texto (VARCHAR, CHAR, TEXT). Como id_disciplina é agora um INTEGER, padrões de código de disciplina devem ser expressos via atributos textuais, como nome_disciplina, ou filtrando pela coluna id_curso.
Por padrão, LIKE é sensível a maiúsculas e minúsculas na maioria dos SGBDs. Para buscas sem distinção de caixa, use ILIKE (PostgreSQL) ou a função LOWER().
ORDER BY: Ordenando o Resultado
A cláusula ORDER BY especifica a ordem em que as linhas são retornadas. Por padrão, a ordem é crescente (ASC); para ordem decrescente, usa-se DESC.
-- Disciplinas ordenadas por carga horária, da maior para a menorSELECT id_disciplina, nome_disciplina, id_curso, carga_horariaFROM disciplinaORDERBY carga_horaria DESC;
Displaying records 1 - 10
id_disciplina
nome_disciplina
id_curso
carga_horaria
3110401
Bases da Eng. de Software 4
311
180
3110802
Projeto Aplicado 8 - Sistema em Tempo Real
311
160
3110601
Bases da Eng. de Software 6
311
150
3110201
Bases da Eng. de Software 2
311
150
3110202
Projeto Aplicado 2 - site WEB
311
120
3110602
Projeto Aplicado 6 - Machine Learning
311
120
3110402
Projeto Aplicado 4 - blockchain
311
120
3110801
Bases da Eng. de Software 8
311
100
1110801
Monografia
111
100
1110402
Macroeconomia 2
111
95
É possível ordenar por múltiplas colunas. O critério secundário é aplicado quando há empate no critério primário:
-- Disciplinas ordenadas por curso e, dentro do mesmo curso, por carga horária decrescenteSELECT id_disciplina, nome_disciplina, id_curso, carga_horariaFROM disciplinaORDERBY id_curso ASC, carga_horaria DESC;
Displaying records 1 - 10
id_disciplina
nome_disciplina
id_curso
carga_horaria
1110801
Monografia
111
100
1110402
Macroeconomia 2
111
95
1110802
Desenvolvimento Econômico
111
90
1110602
Orçamento e Finanças Públicas
111
75
1110601
Economia Brasileira
111
75
1110401
Microeconomia 2
111
75
1110201
História Econômica Geral
111
75
1110202
Culturas Digitais
111
60
2110601
Eletiva II
211
80
2110401
Eletiva I
211
80
Para Praticar
-- NOT BETWEEN: disciplinas fora do intervalo central de carga horáriaSELECT id_disciplina, nome_disciplina, id_curso, carga_horariaFROM disciplinaWHERE carga_horaria NOTBETWEEN60AND120ORDERBY carga_horaria;
6 records
id_disciplina
nome_disciplina
id_curso
carga_horaria
2110602
Educação do Campo, Indígena e Quilombola
211
40
2110802
Estatística Aplicada
211
50
3110201
Bases da Eng. de Software 2
311
150
3110601
Bases da Eng. de Software 6
311
150
3110802
Projeto Aplicado 8 - Sistema em Tempo Real
311
160
3110401
Bases da Eng. de Software 4
311
180
-- LIKE com sublinhado: nomes com exatamente uma letra após "Bases d"-- Demonstra o uso do caractere curinga _ (um único caractere qualquer)SELECT id_disciplina, nome_disciplina, semestreFROM disciplinaWHERE nome_disciplina LIKE'Bases d_'ORDERBY id_disciplina;
0 records
id_disciplina
nome_disciplina
semestre
-- IN com lista literal: cursos específicos sem usar LIKESELECT sigla_curso, nome_curso, tipo_cursoFROM cursoWHERE tipo_curso IN ('bacharelado', 'licenciatura')ORDERBY tipo_curso, sigla_curso;
3 records
sigla_curso
nome_curso
tipo_curso
ECO
Ciências Econômicas
bacharelado
ENS
Engenharia de Software
bacharelado
PED
Pedagogia
licenciatura
-- Combinação de AND/OR com parênteses: a precedência importa!-- Sem parênteses, AND tem precedência sobre ORSELECT nome, id_escola, salarioFROM professorWHERE (id_escola =31OR id_escola =21)AND salario >5000ORDERBY id_escola, salario DESC;
2 records
nome
id_escola
salario
Felipe Araujo
21
6400
Helena Carvalho
31
6700
Aviso
Atenção à precedência:AND tem precedência sobre OR. A expressão a OR b AND c é interpretada como a OR (b AND c), não (a OR b) AND c. Use parênteses sempre que combinar AND e OR para garantir a intenção correta.