Trazendo linhas a mais?

Alura
Guilherme Silveira
Guilherme Silveira

Compartilhe

Query bonita escrita, executada, resultado zoado.

Gostaria de trazer os livros ativos cujos preços tem algo de estranho: são muito baratos (< 10) **OU** muito caros (> 1000)


select * from Livros where ativo = true AND preco < 10 OR preco > 1000;
\> Java SE 8 Programmer I, true, 5 > Swift, true, 3000 > Introdução a Computação, false, 2000

Que caca! O espertinho trouxe um livro que está inativo. Mas eu pedi ativo, não pedi? Pedi ativo, sim:

Banner promocional da Imersão Cloud DevOps da Alura e Google Cloud com o texto "INSCRIÇÕES ABERTAS PARA A PRIMEIRA EDIÇÃO DA IMERSÃO CLOUD DEVOPS" e a informação de 3 aulas gratuitas com certificado. A imagem mostra um desenvolvedor focado usando fones de ouvido em um computador, com uma colega trabalhando ao fundo, e um botão chamativo com a frase "GARANTA A SUA VAGA".

where ativo = true

O que aconteceu? Opa! Como já dizia meu pai, "e ou" não é a mesma coisa que "ou e". Vamos ver? Troco a ordem do nosso AND OR por OR AND:


select * from Livros where preco < 10 OR preco > 1000 AND ativo = true;
\> Java SE 8 Programmer I, true, 5 > Swift, true, 3000 > Algortimos, false, 37

Opa lá! Não é mesmo! Para com isso!

Acontece que como em qualquer linguagem, SQL também segue padrões de precedência de operadores. Se quer forçar sua própria ordem, diga aos SQL como diria a sua professora de matemática: use parênteses.


select * from Livros where (preco < 10 OR preco > 1000) AND ativo = true;
\> Java SE 8 Programmer I, true, 5 > Swift, true, 3000

A sacada? Sempre que escrever uma regra que envolva um OR, utilize parentêses.

Gostou das boas práticas? recomende a lista para um amigo!

Desafio para a próxima: devo criar lógica de negócios complexa no banco? Quando usar a tal da stored procedure?

Guilherme Silveira
Guilherme Silveira

Co-fundador da Alura, da Caelum e do GUJ. Com 18 anos de ensino nas áreas de programação e dados, criou mais de 100 cursos. Possui formação em engenharia de software, viés matemático e criativo, além de ser medalhista de ouro em competições nacionais de computação, tendo representado o Brasil nos mundiais. Participante de comunidades open source e de educação em tecnologia, tendo escrito 7 livros. Faz mágica e fala coreano no tempo livre.

Veja outros artigos sobre DevOps