Expresiones

SQL92 permite expresiones para transformar datos en tablas.Las expresiones pueden contener operadores (ver Operadores para más detalles) y funciones (Functions tiene más información).

Una expresión es una de las siguientes:

( a_expr )
constantes
atributos
a_expr binary_operator a_expr
a_expr right_unary_operator
left_unary_operator a_expr
parametros
expresiones funcionales
expresiones de agregación

Nosotros ya hemos hablado de las constantes y atributos. Las tres clases de expresiones de operadores son respectivamente operadores binarios (infijo), unarios por la derecha (sufijo) y unarios por la izquierda (prefijo). Las siguientes secciones hablan de la distintas opciones.

Parámetros

Un Parámetro se usa para indicar un parámetro en una función SQL. Típicamente este es el uso de la definición de la declaración de la función SQL. La forma con paréntesis es:

$number
     

Por ejemplo, consideramos la definición de la función, dept, como

CREATE FUNCTION dept (name)
	RETURNS dept
	AS 'select * from 
	    dept where name=$1'
	LANGUAGE 'sql';
     

Expresiones Funcionales

Una Expresión Funcional es el nombre de una función legal SQL, seguida por sus lista de argumentos entre paréntesis:

function (a_expr [, a_expr ... ] )
     

Por ejemplo, el siguiente calcula la raíz cuadrada del salario de un empleado:

sqrt(emp.salary)
     

Expresiones de Agregación

Una expresión de agregación representa la aplicación de una función de agregación a través de las filas seleccionadas por la consulta. Una función de agregación reduce múltiples entradas a un solo valor de salida, como la suma o la media de la entrada. La sintaxis de la expresión de agregación es la siguiente:

aggregate_name (expression)
aggregate_name (ALL expression)
aggregate_name (DISTINCT expression)
aggregate_name ( * )

Donde aggregate_name es la agregación previamente definida, y expressiones cualquier expresión que no contenga a su vez ninguna expresión de agregación.

La primera forma de expresión de agregación llama a la agregación a través de todas las filas de entrada la expresión devuelve un valor no nulo. La segunda forma es similar a la primera, pero ALL es por defecto. La tercera forma llama a la agregación para todas las filas de entrada con valores distintos entre si y no nulo. La última forma llama a la agregación para cada una de las filas de entrada sean con valor nulo o no; si no se especifica un valor específico de entrada, generalmente sólo es útil para la agregación count().

Por ejemplo, count(*) devuelve el número total de filas de entrada; count(f1) devuelve el número de filas de entrada donde f1 no es nulo; count(distinct f1) devuelve el número de distintos valores no nulos de f1.

Lista Objetivo

Una Lista Objetivo es una lista de uno o más elementos separados por comas y entre paréntesis, cada una debe ser de la forma:

a_expr [ AS result_attname ]
     
Donde result_attname es el nombre del atributo que ha sido creado (o el nombre del atributo que ya existía en el caso de una sentencia de actualización.) Si result_attname no está presente, entonces a_expr debe contener sólo un nombre de atributo el cual se asumirá como el nombre del campo resultado. Sólo se usa el nombrado por defecto en Postgres si a_expr es un atributo.

Calificadores

Un calificador consiste en cualquier número de cláusulas conectadas por operadores lógicos:

NOT
AND
OR

Una cláusula es un a_expr que se evalúa como un boolean sobre el conjunto de instancias.

Lista From

La Lista From es una lista de expresiones from. separadas por comas. Cada "expresión from " es de esta forma:

[ class_reference ] instance_variable
	{, [ class_ref ] instance_variable... }
     
Donde class_reference es de la forma
class_name [ * ]
     
La "expresión from" define una o más variables instancia sobre el rango que la clase indica en class_reference. Uno también puede requerir la variable instancia sobre el rango de todas la clases que están por debajo de las clases indicadas en la jerarquía de herencia especificando el designador asterisco ("*").