He tenido curiosidad ¿Cuáles son las diferencias entre estas consultas respectivas?
SELECT * FROM `tablename`
SELECT * FROM `tablename` WHERE 1
SELECT * FROM `tablename` WHERE 1=1
sql
select-query
Stephen Alexander
fuente
fuente
... WHERE TRUE
? Soy consciente de que (en la mayoría de SQL, incluido MySQL) TRUE es solo una macro elegante para1
, pero aún así, ¿no es un poco más obvio para el lector?Respuestas:
2 y 3 son iguales en MySQL, funcionalmente 1 también es igual.
where 1
no es estándar, por lo que, como han señalado otros, no funcionará en otros dialectos.Las personas agregan
where 1
owhere 1 = 1
máswhere
condiciones pueden agregarse o eliminarse fácilmente a / desde una consulta agregando / comentando algunosand
componentes " ...".es decir
fuente
WHERE 1=1
, no tendrá que preocuparse si la condición que está tratando de agregar a la cadena es la primera (por lo que necesitará unWHERE
frente) ) o no.ORDER BY 1
sintaxis @dlatikay (en lugar de los nombres de columna) si está haciendo una unión de dos o más instrucciones SELECT." AND "
el delimitador.Como saben, los tres producen los mismos resultados. (En un contexto booleano, MySQL trata el número entero "1" como verdadero; de hecho, cualquier número que no sea "0" se trata como verdadero).
El optimizador MySQL está explícitamente documentado para eliminar condiciones constantes en la
WHERE
cláusula:Por lo tanto, los tres se compilarán exactamente en el mismo código.
Todos son funcionalmente equivalentes y deben tener las mismas características de rendimiento.
Dicho esto, el primero y el tercero son SQL estándar. El segundo causará algún tipo de error de expresión booleana en muchas bases de datos. Por lo tanto, le aconsejaría que evite eso (no estoy seguro de si funciona o no en el estricto modo SQL de MySQL).
A menudo, el tercero se usa al construir
WHERE
cláusulas dinámicas . Facilita la adición de condiciones adicionales, ya queAND <condition>
sin preocuparse por la persistencia deAND
s.fuente
Si está preguntando sobre las diferencias en el rendimiento y los resultados, no hay ninguno, 2 y 3 son iguales
WHERE TRUE
, y resultarán igual que el primero.Resultados en todos los datos de
table_name
(sin filtro)1 se evaluará como
TRUE
, por lo tanto, sin filtro, se devolverán todos los registros.Igual que el último, 1 = 1 es una
TRUE
expresión, por lo tanto, sin filtro, se seleccionarán todos los registros.fuente
Todos son iguales, pero 2 y 3 se usan para manejar fácilmente
AND/OR
condiciones como:fuente
En 1, MySQL no necesita evaluar ninguna condición WHERE.
En 2 y 3, la condición where es estática y no se basa en los valores de las filas. Será evaluado con lógica booleana y siempre será verdadero.
Funcionalmente, no hay diferencia. Debe elegir 1 para la claridad del código.
fuente
Todos son iguales, pero 2 y 3 se utilizan para crear consultas dinámicas para condiciones AND / OR
Usamos el formato 2 y 3 para realizar consultas dinámicas, por lo que ya sabemos "dónde" se agrega la palabra clave y seguimos agregando más filtros. Me gusta
después de algunas líneas, si tenemos nuevos filtros, agregamos "AND coulmnb = b" y así sucesivamente
No tiene que verificar la consulta SQL para saber dónde se encuentra la palabra clave en la primera consulta o en la consulta inicial
De lo contrario podemos escribir
sqlquery = "SELECT * FROM tablename"
luego
si no hay 'dónde' cláusula de
sqlquery
entoncesmás
fuente
Todos dan la misma respuesta. Sin embargo, la forma en que se escriben 2 y 3 es principalmente para tener el control de la instrucción "Dónde" para que sea más fácil agregarla o eliminarla más tarde.
Creo que la primera y la tercera forma son la forma correcta de escribirlo. Si necesita una declaración where que le guste en el número 3, de lo contrario, el número 1 sería lo suficientemente bueno.
fuente
En MS SQL 1 y 3 son iguales, sin embargo, la opción 2 no funcionará, la opción 2 es una declaración inválida como en MS SQL, DONDE se usa para comparar algunos valores. Por ejemplo:
fuente
fuente
Resultado : proporciona todos los registros de la tabla especificada en lugar del nombre de la tabla para las tres consultas
SELECT * FROM tablename WHERE 1
- Comprueba esta respuestaSELECT * FROM tablename WHERE 1=1
- Comprueba esta respuestaPara obtener más información sobre las optimizaciones de la cláusula WHERE, consulte estas: MYSQL , SQLite , SQL
fuente