top ejemplos avg sql select-query

sql - ejemplos - SELECCIONAR*DESDE nombre de tabla DONDE 1



order by sql (10)

  1. SELECT * FROM table_name : le dará todos los registros de la tabla con la ejecución de cualquier instrucción where.
  2. 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.
  3. 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?

  1. SELECT * FROM `tablename`

  2. SELECT * FROM `tablename` WHERE 1

  3. 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:

  1. Seleccione * de ''myTable donde ID = 3 (válido)
  2. 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