De repente deparo com a query sendo rodada no meu código de programação, quando tento buscar um livro pelo nome e ano de lançamento:
select * from Produtos p
where 1=1
and p.nome like '%Java%'
and p.ano = 2015;
Que porcaria é essa? 1=1? Claro que 1=1, podemos tirar esse cara daí por favor?
Claro! Ele é totalmente desnecessário em nosso SQL, mas se olharmos o código que gerou essa query:
query = "select * from Produtos p "
query += "where 1=1 "
if(nome != "") {
query += "and nome like '%" + nome + "%'
}
if(ano != "") {
query += "and ano = " + ano
}
...
O que eu fiz? Se preencheu o campo nome, adiciona ele na query:
if(nome != "") {
query += "and nome like '%" + nome + "%'
}
Se preencheu o campo ano, adiciona ele na busca:
if(ano != "") {
query += "and ano = " + ano
}
Isto é, nosso formulário de busca permite que o usuário final preencha os campos que bem entender. Se ele preenche nenhum, funciona, se preenche qualquer um funciona, se preenche ambos, funciona.
Poderíamos fazer o mesmo código sem o 1=1:
query = "select * from Produtos p "
e = "where"
if(nome != "") {
query += e + " nome like '%" + nome + "%';
e = "and";
}
if(ano != "") {
query += e + " ano = " + ano;
e = "and";
}
...
Mas repare que o código acima precisa de uma variável extra, ou precisaria de uns ifs a mais, ou qualquer outra complicação.
Ao colocar o where 1=1 fazemos com que cada parte opcional da nossa query use sempre um and, e fica facinho de escrever o código.
Por isso é comum ver algumas queries rodando com o where 1=1: são queries dinamicas onde o programador desejou fazer uma sequência de ands e ficar de boa na hora de concatená-los!
Consegue imaginar outras variações de como implementar esse código sem fazer where 1=1? Sem ifs extras?
Queria aproveitar para indicar o curso do meu amigo e professor comigo na Alura, o Maurício Aniche:
No MySQL I: Iniciando suas consultas passamos por diversos pepinos do dia a dia ao usar um banco de dados relacional, resolvendo nossos problemas com o MySQL.
Quando 1 não é 1 no SQL?
De repente deparo com a query sendo rodada no meu código de programação, quando tento buscar um livro pelo nome e ano de lançamento:
Que porcaria é essa? 1=1? Claro que 1=1, podemos tirar esse cara daí por favor?
Claro! Ele é totalmente desnecessário em nosso SQL, mas se olharmos o código que gerou essa query:
O que eu fiz? Se preencheu o campo nome, adiciona ele na query:
Se preencheu o campo ano, adiciona ele na busca:
Isto é, nosso formulário de busca permite que o usuário final preencha os campos que bem entender. Se ele preenche nenhum, funciona, se preenche qualquer um funciona, se preenche ambos, funciona.
Poderíamos fazer o mesmo código sem o 1=1:
Mas repare que o código acima precisa de uma variável extra, ou precisaria de uns ifs a mais, ou qualquer outra complicação.
Ao colocar o where 1=1 fazemos com que cada parte opcional da nossa query use sempre um and, e fica facinho de escrever o código.
Por isso é comum ver algumas queries rodando com o where 1=1: são queries dinamicas onde o programador desejou fazer uma sequência de ands e ficar de boa na hora de concatená-los!
Consegue imaginar outras variações de como implementar esse código sem fazer where 1=1? Sem ifs extras?
Queria aproveitar para indicar o curso do meu amigo e professor comigo na Alura, o Maurício Aniche:
No MySQL I: Iniciando suas consultas passamos por diversos pepinos do dia a dia ao usar um banco de dados relacional, resolvendo nossos problemas com o MySQL.
FIQUE POR DENTRO
Compartilhe:
Guilherme Silveira
Tech Education Leader no Alura
Próximo Artigo6 dicas de marketing pessoal para o profissional de tecnologia