Subconsultas de expresión en SQL estándar

Hay cuatro tipos de subconsultas de expresión (es decir, subconsultas que se usan como expresiones). Las subconsultas de expresión muestran NULL o un solo valor (no una columna o tabla) y deben estar entre paréntesis. Para ver un análisis más completo de las subconsultas, ve a Subconsultas.

Tipo de subconsulta Tipo de datos del resultado Descripción
Escalar Cualquier tipo T Una subconsulta entre paréntesis dentro de una expresión (p. ej., en la lista SELECT o la cláusula WHERE) se interpreta como una subconsulta escalar. La lista SELECT de una subconsulta escalar debe tener solo un campo. Si la subconsulta muestra exactamente una fila, ese único valor es el resultado de la subconsulta escalar. Si la subconsulta muestra cero filas, el valor de la subconsulta escalar es NULL. Si la subconsulta muestra más de una fila, la consulta genera un error de tiempo de ejecución. Cuando la subconsulta se escribe con SELECT AS STRUCT, puede incluir varias columnas y el valor mostrado será el STRUCT construido. Seleccionar varias columnas sin usar SELECT AS es un error.
ARRAY ARRAY Se puede usar SELECT AS STRUCT para crear arreglos de structs; a su vez, seleccionar varias columnas sin usar SELECT AS es un error. Muestra un ARRAY vacío si el resultado de la subconsulta son cero filas. Nunca muestra un ARRAY NULL.
IN BOOL Ocurre en una expresión que sigue al operador IN. La subconsulta debe producir una sola columna cuyo tipo admita la comparación de igualdad con la expresión que está en el lado izquierdo del operador IN. El resultado es FALSE si la subconsulta muestra cero filas. x IN () es equivalente a x IN (value, value, ...). Consulta el operador IN en los operadores de comparación para obtener una semántica completa.
EXISTS BOOL Muestra TRUE si la subconsulta produce una o más filas. Muestra FALSE si la subconsulta produce cero filas. Nunca muestra NULL. A diferencia de todas las demás subconsultas de expresión, no hay reglas que se apliquen a la lista de columnas. Se puede seleccionar cualquier cantidad de columnas sin que esto afecte el resultado de la consulta.

Ejemplos

En los siguientes ejemplos de subconsultas de expresión, se supone que t.int_array tiene el tipo ARRAY<INT64>.

Tipo Subconsulta Tipo de datos del resultado Notas
Escalar (SELECT COUNT(*) FROM t.int_array) INT64  
(SELECT DISTINCT i FROM t.int_array i) INT64, posible error de entorno de ejecución  
(SELECT i FROM t.int_array i WHERE i=5) INT64, posible error de entorno de ejecución  
(SELECT ARRAY_AGG(i) FROM t.int_array i) ARRAY Utiliza la función de agregación ARRAY_AGG para mostrar un ARRAY.
(SELECT 'xxx' a) STRING  
(SELECT 'xxx' a, 123 b) Error Muestra un error porque hay más de una columna.
(SELECT AS STRUCT 'xxx' a, 123 b) STRUCT  
(SELECT AS STRUCT 'xxx' a) STRUCT  
ARRAY ARRAY(SELECT COUNT(*) FROM t.int_array) ARRAY de tamaño 1  
ARRAY(SELECT x FROM t) ARRAY  
ARRAY(SELECT 5 a, COUNT(*) b FROM t.int_array) Error Muestra un error porque hay más de una columna.
ARRAY(SELECT AS STRUCT 5 a, COUNT(*) b FROM t.int_array) ARRAY  
ARRAY(SELECT AS STRUCT i FROM t.int_array i) ARRAY Genera un ARRAY de STRUCT de un campo.
ARRAY(SELECT AS STRUCT 1 x, 2, 3 x) ARRAY Muestra un ARRAY de STRUCT con campos anónimos o duplicados.
ARRAY(SELECT AS TypeName SUM(x) a, SUM(y) b, SUM(z) c from t) array<TypeName> Selección de un tipo con nombre. Supone que TypeName es un tipo de STRUCT con los campos a, b y c.
STRUCT (SELECT AS STRUCT 1 x, 2, 3 x) STRUCT Construye un STRUCT con campos anónimos o duplicados.
EXISTS EXISTS(SELECT x,y,z FROM table WHERE y=z) BOOL  
NOT EXISTS(SELECT x,y,z FROM table WHERE y=z) BOOL  
IN x IN (SELECT y FROM table WHERE z) BOOL  
x NOT IN (SELECT y FROM table WHERE z) BOOL  
¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.