sql - ejemplos - SELECCIONAR*DESDE nombre de tabla DONDE 1
order by sql (10)
- SELECT * FROM table_name : le dará todos los registros de la tabla con la ejecución de cualquier instrucción where.
- SELECCIONAR * DESDE nombre_tabla DONDE 1 : esto donde la condición siempre es verdadera, es utilizada principalmente por piratas informáticos para ingresar a cualquier sistema. Si escuchó acerca de las inyecciones sql, 2 y 3 son escenarios que el pirata informático obliga a construir para obtener todos los registros de la tabla.
- SELECT * FROM table_name donde 1 = 1 : Esto le dará todos los registros de la tabla, pero comparará la instrucción where y luego avanzará, básicamente se agrega para agregar o eliminar más declaraciones después de eso.
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
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
o
where 1 = 1
para
where
condiciones puedan agregarse o eliminarse fácilmente a / desde una consulta agregando / comentando algunos componentes "
and
...".
es decir
SELECT * FROM `tablename` WHERE 1=1
--AND Column1 = ''Value1''
AND Column2 = ''Value2''
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
documented
para eliminar condiciones constantes en la cláusula
WHERE
:
Remoción de condición constante. . .:
(B> = 5 Y B = 5) O (B = 6 Y 5 = 5) O (B = 7 Y 5 = 6) -> B = 5 O B = 6
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 cláusulas dinámicas
WHERE
.
Facilita agregar condiciones adicionales como
AND <condition>
sin preocuparse por demorar
AND
s.
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.
En MS SQL 1 y 3 son iguales, sin embargo, la opción 2 no funcionará, la opción 2 es una declaración no válida como en MS SQL, DONDE se utiliza para comparar algunos valores. Por ejemplo:
- Seleccione * de ''myTable donde ID = 3 (válido)
- Seleccione * de ''myTable donde 1 = 1 es igual que Select * de'' myTable donde 2 = 2 es igual que Select * de ''myTable donde 3 = 3 obtiene la idea (válida) es igual que Select * From'' myTable ''
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 iguales que el primero.
1 - SELECT * FROM table_name
Resultados en todos los datos de
table_name
(sin filtro)
2 - SELECT * FROM table_name WHERE 1
1 se evaluará como
TRUE
, por lo tanto, sin filtro, se devolverán todos los registros.
3 - SELECT * FROM table_name where 1=1
Igual que la última, 1 = 1 es una expresión
TRUE
, por lo tanto, sin filtro, se seleccionarán todos los registros.
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.
Todos son iguales, pero 2 y 3 se utilizan para crear consultas dinámicas para condiciones AND / OR
sqlquery =" SELECT * FROM `tablename` where 1 =1 "
Utilizamos el formato 2 y 3 para realizar consultas dinámicas, de modo que ya sabemos "dónde" se agrega la palabra clave y seguimos agregando más filtros. Me gusta
sqlquery = sqlquery + "and columna =a"
"AND columna =a " then
después de algunas líneas si tenemos nuevos filtros, agregamos "Y coulmnb = b" y así sucesivamente
No tiene que verificar la consulta sql para saber dónde se encuentra la palabra clave en su primera consulta o consulta inicial
SELECT * FROM `tablename` WHERE 1=1 AND (columnname1 = ''Value'' OR columnname2 = ''Value'')
De lo contrario, podemos escribir
sqlquery = "SELECT * FROM tablename"
entonces
si no hay una cláusula ''where'' en
sqlquery
entonces
sqlquery = sqlquery + "where columna =a"
más
sqlquery = sqlquery + "and columna =a"
Todos son iguales, pero 2 y 3 se utilizan para manejar fácilmente condiciones
AND/OR
como:
SELECT * FROM `tablename` WHERE 1=1 AND (columnname1 = ''Value'' OR columnname2 = ''Value'')
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
- Marque esta
answer
SELECT * FROM tablename WHERE 1=1
- Marque esta
answer
Para obtener más información sobre las optimizaciones de la cláusula WHERE, consulte estas: documented , SQLite , SQL