Leí algunos artículos pero realmente no entendí lo que select 1 from
hace. Alguien dice "deberías usar en select 1
lugar de select *
". Aquí hay una tabla de ejemplo:
cust_id cust_name cust_address
1000000001 Village Toys Mapl
1000000002 Kids Place South
1000000003 Fun4All Sunny
1000000004 Fun4All Riverside
1000000005 The Toy Store 53rd
¿Cuál será el resultado cuando escriba select 1 from customer_table
qué hace esta declaración?
sql-server-2008
Mehmet
fuente
fuente
select 1
lugar de,select *
por ejemplo, unaEXISTS
cláusula. El optimizador se mejoró hace mucho tiempo. Fue Nunca un reemplazo para "obtener todas las columnas de este conjunto de resultados".Respuestas:
select 1 from table
devolverá una columna de unos por cada fila de la tabla. Puede usarlo con una instrucción where para verificar si tiene una entrada para una clave determinada, como en:
if exists(select 1 from table where some_column = 'some_value')
Lo que probablemente estaba diciendo su amigo es que en lugar de hacer selecciones masivas con select * from table, debe especificar las columnas que necesita con precisión, por dos razones:
1) rendimiento y es posible que recupere más datos de los que realmente necesita.
2) el usuario de la consulta puede confiar en el orden de las columnas. Si su tabla se actualiza, el cliente recibirá columnas en un orden diferente al esperado.
fuente
La construcción se usa generalmente en controles de "existencia"
if exists(select 1 from customer_table where customer = 'xxx')
o
if exists(select * from customer_table where customer = 'xxx')
Ambas construcciones son equivalentes. En el pasado, la gente decía que la selección * era mejor porque el gobernador de consultas usaba la mejor columna indexada. Se ha demostrado que esto no es cierto.
fuente
Se hace lo que se pide,
SELECT 1 FROM table
seSELECT
(regreso) una1
para cada fila de esa tabla, si había 3 filas de la tabla que se obtendríaEche un vistazo a Count (*) vs Count (1), que puede ser el problema que describieron.
fuente
WHERE
cláusula es verdadera o falsa. A menudo se utiliza en subconsultas.La declaración
SELECT 1 FROM SomeTable
solo devuelve una columna que contiene el valor1
de cada fila en su tabla. Si agrega otra columna, por ejemploSELECT 1, cust_name FROM SomeTable
, lo hace un poco más claro:cust_name ----------- --------------- 1 Village Toys 1 Kids Place 1 Fun4All 1 Fun4All 1 The Toy Store
fuente
SELECT COUNT(*) in EXISTS/NOT EXISTS
EXISTS(SELECT CCOUNT(*) FROM TABLE_NAME WHERE CONDITIONS)
- laEXISTS
condición siempre será verdadera independientemente de que se cumplan o no las CONDICIONES.NOT EXISTS(SELECT CCOUNT(*) FROM TABLE_NAME WHERE CONDITIONS)
- laNOT EXISTS
condición siempre devolverá falso independientemente de queCONDITIONS
se cumpla o no.SELECT COUNT 1 in EXISTS/NOT EXISTS
EXISTS(SELECT CCOUNT 1 FROM TABLE_NAME WHERE CONDITIONS)
- laEXISTS
condición se volverá verdadera siCONDITIONS
se cumple. De lo contrario, falso.NOT EXISTS(SELECT CCOUNT 1 FROM TABLE_NAME WHERE CONDITIONS)
- laNOT EXISTS
condición devolverá falso siCONDITIONS
se cumple. De lo contrario, es cierto.fuente