Operadores en SQL estándar

Los operadores se representan mediante palabras clave o caracteres especiales, no se usa la sintaxis de llamada a funciones. Un operador manipula cualquier cantidad de entradas de datos, también llamados operandos, y muestra un resultado.

Convenciones comunes:

  • A menos que se especifique lo contrario, todos los operadores muestran NULL cuando uno de los operandos es .
  • Todos los operadores mostrarán un error si el cálculo arroja demasiados resultados.
  • Para todas las operaciones de coma flotante, +/-inf y NaN solo se pueden mostrar si uno de los operandos es o NaN. En otros casos, se muestra un error.

En la siguiente tabla se enumeran todos los operadores de BigQuery de mayor a menor prioridad, es decir, según el orden en el que se los evaluará dentro de una declaración.

Orden de prioridad Operador Tipos de datos de entrada Nombre Aridad del operador
1 . STRUCT
Operador de acceso de campo del miembro Binario
  [ ] ARRAY Posición de arreglo. Se debe usar con OFFSET o con ORDINAL; consulta Funciones de ARRAY. Binario
2 - Todos los tipos numéricos Menos unario Unario
  ~ Número entero o BYTES NOT a nivel de bits Unario
3 * Todos los tipos numéricos Multiplicación Binario
  / Todos los tipos numéricos División Binario
4 + Todos los tipos numéricos Suma Binario
  - Todos los tipos numéricos Resta Binario
5 << Número entero o BYTES Desplazamiento de bits a la izquierda Binario
  >> Número entero o BYTES Desplazamiento de bits a la derecha Binario
6 & Número entero o BYTES AND a nivel de bits Binario
7 ^ Número entero o BYTES XOR a nivel de bits Binario
8 | Número entero o BYTES OR nivel de bits Binario
9 (Operadores de comparación) = Cualquier tipo comparable. Consulta Tipos de datos para ver una lista completa. Igual Binario
  < Cualquier tipo comparable. Consulta Tipos de datos para ver una lista completa. Menor que Binario
  > Cualquier tipo comparable. Consulta Tipos de datos para ver una lista completa. Mayor que Binario
  <= Cualquier tipo comparable. Consulta Tipos de datos para ver una lista completa. Menor o igual que Binario
  >= Cualquier tipo comparable. Consulta Tipos de datos para ver una lista completa. Mayor o igual que Binario
  !=, <> Cualquier tipo comparable. Consulta Tipos de datos para ver una lista completa. No igual Binario
  [NOT] LIKE STRING y byte El valor [no] coincide con el patrón especificado Binario
  [NOT] BETWEEN Cualquier tipo comparable. Consulta los tipos de datos para ver la lista. El valor [no] está dentro del rango especificado Binario
  [NOT] IN Cualquier tipo comparable. Consulta los tipos de datos para ver la lista. El valor [no] está en el conjunto de valores especificado Binario
  IS [NOT] NULL All El valor [no] es NULL Unario
  IS [NOT] TRUE BOOL El valor [no] es VERDADERO Unario
  IS [NOT] FALSE BOOL El valor [no] no FALSO Unario
10 NOT BOOL Lógica NOT Unario
11 AND BOOL Lógica AND Binario
12 OR BOOL Lógica OR Binario

Los operadores con la misma prioridad son asociativos a la izquierda. Esto significa que esos operadores se agrupan juntos de izquierda a derecha. Por ejemplo, la expresión:

x AND y AND z

se interpreta como

( ( x AND y ) AND z )

La expresión:

x * y / z

se interpreta como:

( ( x * y ) / z )

Todos los operadores de comparación tienen la misma prioridad, pero no son asociativos. Por lo tanto, se requieren paréntesis para resolver la ambigüedad. Por ejemplo:

(x < y) IS FALSE

Operadores de acceso a elementos

Operador Sintaxis Tipos de datos de entrada Tipo de datos del resultado Descripción
. expression.fieldname1... STRUCT
Tipo T almacenado en fieldname1 Operador de punto. Se puede usar a fin de acceder a campos anidados, por ejemplo, expression.fieldname1.fieldname2...
[ ] array_expression [position_keyword (int_expression ) ] Consulta Funciones de ARRAY Tipo T almacenado en ARRAY position_keyword es OFFSET o bien ORDINAL. Consulta Funciones de ARRAY para ver las dos funciones que usan este operador.

Operadores aritméticos

Todos los operadores aritméticos aceptan la entrada del tipo numérico T, y el tipo de resultado tiene el tipo T, a menos que se indique lo contrario en la siguiente descripción:

Nombre Sintaxis
Suma X + Y
Resta X - Y
Multiplicación X * Y
División X / Y
Menos unario - X

NOTA: Las operaciones de división por cero muestran un error. Para que se muestre un resultado diferente considera usar la funciones IEEE_DIVIDE o SAFE_DIVIDE.

Tipos de resultados para suma y multiplicación:

 INT64NUMERICFLOAT64
INT64INT64NUMERICFLOAT64
NUMERICNUMERICNUMERICFLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64

Tipos de resultados para Resta:

 INT64NUMERICFLOAT64
INT64INT64NUMERICFLOAT64
NUMERICNUMERICNUMERICFLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64

Tipos de resultados para División:

 INT64NUMERICFLOAT64
INT64FLOAT64NUMERICFLOAT64
NUMERICNUMERICNUMERICFLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64

Tipos de resultados para Menos unario:

Tipo de datos de entrada Tipo de datos del resultado
INT64 INT64
NUMERIC NUMERIC
FLOAT64 FLOAT64

Operadores a nivel de bits

Todos los operadores a nivel de bits muestran el mismo tipo y la misma longitud que el primer operando.

Nombre Sintaxis Tipo de datos de entrada Descripción
NOT a nivel de bits ~ X Número entero o BYTES Realiza una negación lógica en cada bit y forma el complemento a uno del valor binario dado.
OR nivel de bits X | Y X: entero o BYTES
Y: mismo tipo que X
Toma dos patrones de bits de igual longitud y realiza la operación OR inclusiva lógica en cada par de los bits correspondientes. Este operador muestra un error si Y y X son BYTES de diferentes longitudes.
XOR a nivel de bits X ^ Y X: entero o BYTES
Y: mismo tipo que X
Toma dos patrones de bits de igual longitud y realiza la operación exclusiva lógica OR en cada par de los bits correspondientes. Este operador muestra un error si Y y X son BYTES de diferentes longitudes.
AND a nivel de bits X & Y X: entero o BYTES
Y: mismo tipo que X
Toma dos patrones de bits de igual longitud y realiza una operación lógica AND en cada par de los bits correspondientes. Este operador muestra un error si Y y X son BYTES de diferentes longitudes.
Desplazamiento a la izquierda X << Y X: entero o BYTES
Y: INT64
Desplaza el primer operando X a la izquierda. Este operador muestra 0 o una secuencia de bytes de b'\x00' si el segundo operando Y es igual o mayor que el largo de bits del primer operando X (por ejemplo, 64 si X tiene el tipo INT64). Este operador muestra un error si Y es negativo.
Desplazamiento a la derecha X >> Y X: entero o BYTES
Y: INT64
Desplaza el primer operando X a la derecha. Este operador no realiza la extensión de signo con un tipo de signo (es decir, llena los bits vacantes de la izquierda con 0). Este operador muestra 0 o una secuencia de bytes de b'\x00' si el segundo operando Y es igual o mayor que el largo de bits del primer operando X (por ejemplo, 64 si X tiene el tipo INT64). Este operador muestra un error si Y es negativo.

Operadores lógicos

Todos los operadores lógicos permiten solo la entrada BOOL.

Nombre Sintaxis Descripción
Lógica NOT NOT X Muestra FALSE si la entrada es TRUE. Muestra TRUE si la entrada es FALSE. De lo contrario, muestra NULL.
Lógica AND X AND Y Muestra FALSE si al menos una entrada es FALSE. Muestra TRUE si tanto X como Y son TRUE. De lo contrario, muestra NULL.
Lógica OR X OR Y Muestra FALSE si tanto X como Y son FALSE. Muestra TRUE si al menos una entrada es TRUE. De lo contrario, muestra NULL.

Operadores de comparación

Las comparaciones siempre muestran BOOL. Por lo general, las comparaciones requieren que ambos operandos sean del mismo tipo. Si los operandos son de tipos diferentes y si BigQuery puede convertir los valores de esos tipos en un tipo común sin que se pierda la precisión, BigQuery, en general, los fuerza a ese tipo común para la comparación. Con frecuencia, BigQuery fuerza los literales al tipo no literales, cuando están presentes. Los tipos de datos comparables se definen en Tipos de datos.

Los STRUCT solo admiten cuatro operadores de comparación: igual (=), no igual (!= Y <>) y también IN.

Las siguientes reglas se aplican cuando se comparan estos tipos de datos:

  • FLOAT64: todas las comparaciones con NaN muestran FALSE, excepto != y <>, que muestran TRUE.
  • BOOL: FALSE es menor que TRUE.
  • STRING: las strings se comparan punto de código por punto de código, lo que significa que solo se garantiza que las strings canónicamente equivalentes se comparen como iguales si se normalizaron primero.
  • NULL: aquí se mantiene la convención: cualquier operación con una entrada mostrará el valor .
Nombre Sintaxis Descripción
Menor que X < Y Muestra TRUE si X es menor que Y.
Menor o igual que X <= Y Muestra TRUE si X menor o igual que Y.
Mayor que X > Y Muestra TRUE si X es mayor que Y.
Mayor o igual que X >= Y Muestra TRUE si X es mayor o igual que Y.
Igual X = Y Muestra TRUE si X es igual que Y.
No igual X != Y
X <> Y
Muestra TRUE si X no es igual que Y.
BETWEEN X [NOT] BETWEEN Y AND Z Muestra TRUE si X [no] está dentro del rango especificado. El resultado de "X BETWEEN Y AND Z" equivale a "Y <= X AND X <= Z" pero X solo se evalúa una vez en el primer caso.
LIKE X [NOT] LIKE Y Verifica si la STRING del primer operando X coincide con un patrón especificado por el segundo operando Y. Las expresiones pueden contener los siguientes caracteres:
  • Un signo de porcentaje "%" coincide con cualquier número de caracteres o bytes
  • Un guion bajo "_" coincide con un solo carácter o byte
  • Puedes escapar “\”, “_”, o “%” mediante dos barras invertidas. Por ejemplo, "\\%". Si usas strings sin procesar, se requiere una sola barra invertida. Por ejemplo, r"\%".
IN Múltiple: ver a continuación Muestra FALSE si el operando derecho está vacío. Muestra NULL si el operando izquierdo es NULL. Muestra TRUE o NULL, nunca FALSE, si el operando derecho contiene NULL. Los argumentos a ambos lados de IN son expresiones generales. No se requiere que ninguno de los operandos sea literal, aunque lo más común es usar un literal del lado derecho. X se evalúa una sola vez.

Cuando se evalúan valores que tienen un tipo de datos STRUCT para determinar la igualdad, es posible que uno o más campos sea NULL. En esos casos:

  • Si todos los valores que no son NULL son iguales, la comparación muestra NULL.
  • Si el valor de algún campo no NULL no es igual, la comparación muestra FALSE.

En la siguiente tabla, se muestra cómo los tipos de datos STRUCT se comparan cuando tienen campos con valores NULL.

Struct1 Struct2 Struct1 = Struct2
STRUCT(1, NULL) STRUCT(1, NULL) NULL
STRUCT(1, NULL) STRUCT(2, NULL) FALSE
STRUCT(1,2) STRUCT(1, NULL) NULL

Operadores IN

El operador IN es compatible con las siguientes sintaxis:

x [NOT] IN (y, z, ... ) # Requires at least one element
x [NOT] IN (<subquery>)
x [NOT] IN UNNEST(<array expression>) # analysis error if the expression
                                      # does not return an ARRAY type.

Los argumentos a cualquier lado del operador IN son expresiones generales. Es común usar literales en la expresión del lado derecho, pero no es obligatorio.

La semántica de:

x IN (y, z, ...)

se define como equivalente a:

(x = y) OR (x = z) OR ...

y las formas de subconsulta y arreglo se definen de forma similar.

x NOT IN ...

es equivalente a lo siguiente:

NOT(x IN ...)

El formulario UNNEST trata un análisis de arreglo como UNNEST en la cláusula FROM:

x [NOT] IN UNNEST(<array expression>)

Este formulario se suele usar con parámetros ARRAY. Por ejemplo:

x IN UNNEST(@array_parameter)

Nota: Un ARRAY NULL se tratará de forma equivalente a un ARRAY vacío.

Consulta el tema Arreglos para obtener información sobre cómo usar esta sintaxis.

Cuando se usa el operador IN, se aplica la siguiente semántica:

  • IN con una expresión vacía del lado derecho siempre es FALSE
  • IN con una expresión NULL del lado izquierdo y una expresión no vacía del lado derecho siempre es NULL
  • IN con NULL en la lista de solo puede mostrar TRUE o NULL, nunca FALSE
  • NULL IN (NULL) muestra NULL
  • IN UNNEST(<NULL array>) muestra FALSE (no NULL)
  • NOT IN con un NULL en la lista IN solo puede mostrar FALSE o NULL, nunca TRUE

IN se puede usar con claves de varias partes mediante la sintaxis del constructor de struct. Por ejemplo:

(Key1, Key2) IN ( (12,34), (56,78) )
(Key1, Key2) IN ( SELECT (table.a, table.b) FROM table )

Consulta la sección Tipo Struct del tema Tipos de datos para obtener más información sobre la sintaxis.

Operadores IS

Los operadores IS muestran TRUE o FALSE para la condición que están probando. Nunca muestran NULL, ni siquiera para entradas NULL, a diferencia de las funciones IS_INF y IS_NAN que se definen en Funciones matemáticas. Si NOT está presente, el valor de salida BOOL se invierte.

Sintaxis de la función Tipo de datos de entrada Tipo de datos del resultado Descripción

X IS [NOT] NULL
Cualquier tipo de valor BOOL Muestra TRUE si el operando X se evalúa como NULL; de lo contrario, muestra FALSE.

X IS [NOT] TRUE
BOOL BOOL Muestra TRUE si el operando BOOL se evalúa como TRUE. De lo contrario, muestra FALSE.

X IS [NOT] FALSE
BOOL BOOL Muestra TRUE si el operando BOOL se evalúa como FALSE. De lo contrario, muestra FALSE.
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.