Eu tenho ficado curioso. Quais são as diferenças entre essas respectivas consultas:
SELECT * FROM `tablename`
SELECT * FROM `tablename` WHERE 1
SELECT * FROM `tablename` WHERE 1=1
sql
select-query
Stephen Alexander
fonte
fonte
... WHERE TRUE
? Estou ciente de que (na maioria dos SQL, incluindo o MySQL) TRUE é apenas uma macro sofisticada para1
- mas ainda assim, não é um pouco mais óbvio para o leitor?Respostas:
2 e 3 são iguais no MySQL, funcionalmente 1 também é o mesmo.
where 1
não é padrão e, como outros já apontaram, não funcionará em outros dialetos.As pessoas que adicionam mais
where 1
ouwhere 1 = 1
menoswhere
condições podem ser facilmente adicionadas ou removidas para / de uma consulta adicionando / comentando algunsand
componentes "...".ie
fonte
WHERE 1=1
você não vai precisar tomar cuidado se a condição que você está tentando adicionar à corda é o primeiro (por isso vai precisar de umWHERE
em frente ) ou não.ORDER BY 1
sintaxe @dlatikay é necessária (em vez dos nomes das colunas) se você estiver fazendo uma união de duas ou mais instruções SELECT." AND "
como delimitador.Como você sabe, todos os três produzem os mesmos resultados. (Em um contexto booleano, o MySQL trata o número inteiro "1" como verdadeiro - de fato, qualquer número que não seja "0" é tratado como verdadeiro).
O otimizador do MySQL está explicitamente documentado para remover condições constantes na
WHERE
cláusula:Portanto, todos os três serão compilados exatamente no mesmo código.
Todos são funcionalmente equivalentes e devem ter as mesmas características de desempenho.
Dito isto, o primeiro e o terceiro são SQL padrão. O segundo causará algum tipo de erro de expressão booleana em muitos bancos de dados. Então, eu aconselho você a evitar isso (não tenho certeza se funciona ou não no modo SQL estrito do MySQL).
Geralmente, o terceiro é usado ao construir
WHERE
cláusulas dinâmicas . Torna mais fácil adicionar condições adicionais,AND <condition>
sem se preocupar comAND
s remanescentes .fonte
Se você está perguntando sobre as diferenças de desempenho e resultado, não há, 2 e 3 são iguais
WHERE TRUE
e resultarão iguais ao primeiro.Resultados em todos os dados de
table_name
(sem filtro)1 será avaliado como
TRUE
, portanto - sem filtro - todos os registros serão retornados.Igual ao último, 1 = 1 é uma
TRUE
expressão, portanto - sem filtro - todos os registros serão selecionados.fonte
Todos são iguais, mas 2 e 3 são usados para lidar facilmente com
AND/OR
condições como:fonte
Em 1, o MySQL não precisa avaliar nenhuma condição WHERE.
Em 2 e 3, a condição where é estática e não se baseia nos valores das linhas. Será avaliado com lógica booleana e sempre será verdadeiro.
Funcionalmente, não há diferença. Você deve escolher 1 para maior clareza do código.
fonte
Todos são iguais, mas 2 e 3 são usados para criar consultas dinâmicas para condições AND / OR
usamos o formato 2 e 3 para fazer consultas dinâmicas, para que já saibamos a palavra-chave "onde" foi adicionada e continuemos adicionando mais filtros. Gostar
depois de algumas linhas, se tivermos novos filtros, adicionamos "AND coulmnb = b" e assim por diante
Você não precisa verificar a consulta sql para onde a palavra-chave foi colocada na primeira ou na consulta inicial
Caso contrário, podemos escrever
sqlquery = "SELECT * FROM tablename"
então
se não houver cláusula 'where',
sqlquery
entãooutro
fonte
Todos eles emitem a mesma resposta. No entanto, a maneira como 2 e 3 são escritos é principalmente para ter controle da instrução "Where" para facilitar a adição ou a remoção posterior.
Eu acho que a primeira e a terceira maneira são a maneira correta de escrever. Se você precisar de uma declaração where, como você gosta no número 3, caso contrário, o número 1 seria bom o suficiente.
fonte
No MS SQL 1 e 3 são iguais, no entanto, a opção 2 não funciona, a opção 2 é uma instrução inválida, como no MS SQL, WHERE é usado para comparar alguns valores. Por exemplo:
fonte
fonte
Resultado - fornece todos os registros da tabela especificada em vez do nome da tabela para as três consultas
SELECT * FROM tablename WHERE 1
- Verifique esta respostaSELECT * FROM tablename WHERE 1=1
- Verifique esta respostaPara obter mais informações sobre otimizações de cláusula WHERE, verifique estas: MYSQL , SQLite , SQL
fonte