He visto muchas consultas con algo de la siguiente manera.
Select 1
From table
¿Qué significa esto 1
, cómo se ejecutará y qué devolverá?
Además, ¿en qué tipo de escenarios, se puede usar esto?
He visto muchas consultas con algo de la siguiente manera.
Select 1
From table
¿Qué significa esto 1
, cómo se ejecutará y qué devolverá?
Además, ¿en qué tipo de escenarios, se puede usar esto?
Respuestas:
SELECT 1 FROM TABLE_NAME
significa "Devolver 1 de la tabla". Es bastante poco notable por sí solo, por lo que normalmente se usará WHERE
y con frecuencia EXISTS
(como señala @gbn, esto no es necesariamente la mejor práctica, sin embargo, es lo suficientemente común como para ser observado, incluso si no es realmente significativo ( Dicho esto, lo usaré porque otros lo usan y es "más obvio" de inmediato. Por supuesto, eso podría ser un problema viscoso de pollo versus huevo, pero generalmente no me detengo)).
SELECT * FROM TABLE1 T1 WHERE EXISTS (
SELECT 1 FROM TABLE2 T2 WHERE T1.ID= T2.ID
);
Básicamente, lo anterior devolverá todo de la tabla 1 que tiene una ID correspondiente de la tabla 2. (Este es un ejemplo artificial, obviamente, pero creo que transmite la idea. Personalmente, probablemente haría lo anterior tal SELECT * FROM TABLE1 T1 WHERE ID IN (SELECT ID FROM TABLE2);
como lo veo como MUCHO más explícito para el lector a menos que haya una razón circunstancialmente convincente para no hacerlo).
De hecho, hay un caso que olvidé hasta ahora. En el caso de que intente determinar la existencia de un valor en la base de datos desde un idioma externo, a veces SELECT 1 FROM TABLE_NAME
se utilizará. Esto no ofrece un beneficio significativo sobre la selección de una columna individual, pero, dependiendo de la implementación, puede ofrecer ganancias sustanciales sobre hacerlo SELECT *
, simplemente porque a menudo ocurre que mientras más columnas devuelve la base de datos a un idioma, mayores son los datos estructura, lo que a su vez significa que se tomará más tiempo.
...EXISTS (SELECT 1...
select 1 from table
devolverá la constante 1 para cada fila de la tabla. Es útil cuando desea determinar de forma económica si el registro coincide con su where
cláusula y / o join
.
Si te refieres a algo como
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1 FROM table WHERE...)
entonces es un mito que 1
es mejor que
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT * FROM table WHERE...)
Se ignora 1
o *
en EXISTS y puede escribir esto según la página 191 del estándar ANSI SQL 1992 :
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1/0 FROM table WHERE...)
exists (select 1/0
funciona de maravilla
hace lo que dice: siempre devolverá el entero 1. Se utiliza para verificar si existe un registro que coincida con su cláusula where.
select 1 from table
Algunas bases de datos lo usan como una consulta para probar una conexión para ver si está viva, a menudo se usa al recuperar o devolver una conexión a / desde un grupo de conexiones.
Aunque no se conoce ampliamente, una consulta puede tener una HAVING
cláusula sin una GROUP BY
cláusula.
En tales circunstancias, la HAVING
cláusula se aplica a todo el conjunto. Claramente, la SELECT
cláusula no puede referirse a ninguna columna, de lo contrario (correcto) obtendría el error "La columna no es válida en la selección porque no está contenida en GROUP BY", etc.
Por lo tanto, se debe usar un valor literal (porque SQL no permite un conjunto de resultados con cero columnas, ¿por qué?) Y el valor literal 1 ( INTEGER
) se usa comúnmente: si la HAVING
cláusula evalúa, TRUE
entonces el conjunto de resultados será una fila con una columna que muestra el valor 1, de lo contrario obtendrá el conjunto vacío.
Ejemplo: para determinar si una columna tiene más de un valor distinto:
SELECT 1
FROM tableA
HAVING MIN(colA) < MAX(colA);
SELECT MIN(colA) < MAX(colA) FROM tableA
:?
Para ser un poco más específico, usaría esto para hacer
SELECT 1 FROM MyUserTable WHERE user_id = 33487
en lugar de hacer
SELECT * FROM MyUserTable WHERE user_id = 33487
porque no te importa mirar los resultados. Pedir el número 1 es muy fácil para la base de datos (ya que no tiene que hacer ninguna búsqueda).
Si no sabe que existen datos en su tabla o no, puede usar la siguiente consulta:
SELECT cons_value FROM table_name;
Para un ejemplo:
SELECT 1 FROM employee;
Entonces, usamos esta consulta SQL para saber si hay datos en la tabla y el número de filas indica cuántas filas existen en esta tabla.
Esto significa que desea un valor " 1 " como salida o que la mayoría de las veces se utiliza como consultas internas porque, por alguna razón, desea calcular las consultas externas en función del resultado de las consultas internas ... no todo el tiempo usa 1 pero tener algunos valores específicos ...
Esto le dará estáticamente salida como valor 1.
Si solo desea marcar un verdadero o falso basado en la cláusula WHERE, seleccione 1 de la tabla donde la condición es la forma más barata.
Veo que siempre se usa en la inyección SQL, como:
www.urlxxxxx.com/xxxx.asp?id=99 union select 1,2,3,4,5,6,7,8,9 from database;
Estos números se pueden usar para adivinar dónde existe la base de datos y adivinar el nombre de la columna de la base de datos que especificó. Y los valores de las tablas.
simplemente significa que está recuperando el número de la primera columna de la tabla ,,,, significa seleccionar Emply_num, Empl_no From Employees; aquí está utilizando seleccione 1 de Empleados; eso significa que está recuperando la columna Emply_num. Gracias
La razón es otra, al menos para MySQL. Esto es del manual de MySQL
InnoDB calcula los valores de cardinalidad de índice para una tabla la primera vez que se accede a esa tabla después del inicio, en lugar de almacenar dichos valores en la tabla. Este paso puede llevar un tiempo considerable en los sistemas que dividen los datos en muchas tablas. Dado que esta sobrecarga solo se aplica a la operación de apertura de la tabla inicial, para "calentar" una tabla para su uso posterior, acceda a ella inmediatamente después del inicio emitiendo una declaración como SELECT 1 FROM tbl_name LIMIT 1
Esto solo se usa por conveniencia con IF EXISTS (). De lo contrario, puedes ir con
select * from [table_name]
Imagen En el caso de 'SI EXISTE', solo necesitamos saber que cualquier fila con una condición especificada existe o no, no importa cuál sea el contenido de la fila.
select 1 from Users
código de ejemplo anterior, devuelve no. de filas es igual a no. de usuarios con 1 en una sola columna