
Sentencias SQL
S Q L
(Structured Query Language
Lenguaje de consulta estructurado).
Sentencias.
SELECT [ALL | DISTICT] lista_selección
FROM [nombre_tabla1 | nombre_vista1 | nombre_correlación1], ...
[WHERE condición_búsqueda]
[[GROUP BY [nombre_columna | número_columna]]
[HAVING condición_búsqueda]
[[INTERSECT | MINUS | UNION | ALL] sentencia_select]
[[ORDER BY nombre_columna | número_columna]]
[ASC | DESC]
[FOR UPDATE OF mombre_columna, ...]
Descripción:
Lleva a cabo las operaciones relacionales, selección, proyección y unión (join) para crear una tabla lógica a partir de otras tablas o vistas. Los elementos de la
lista_selección identifican las columnas de cada tabla que serán proyectadas en la tabla que está siendo formada. En la cláusula
FROM se identifican las tablas que serán unidas, y en la cláusula WHERE se identifica el criterio de unión, así como las filas que serán seleccionadas.
La palabra clave DISTINCT indica que si existen filas idénticas, sólo una de ellas será incluida.
Esta sentencia puede ejecutarse de forma interactiva o inmersa dentro de un programa de aplicación como parte de una sentencia
DECLARE CURSOR o INSERT.
Opcionalmente, se puede indicar un nombre_correlación para cada nombre de la tabla como un alias en lugar del nombre completo de la tabla, al cualificar los nombres de las columnas dentro de la
lista_selección o dentro de la cláusula WHERE y sus subcláusulas. Si se une una tabla o una vista consigo misma, se deben utilizar los nombres de correlación para identificar
con claridad la copia de la tabla o vista a la que hacemos referencia en la lista_selección, en el criterio de unión o el criterio de selección.
Si se especifica más de una tabla o vista en la cláusula
FROM de una sentencia SELECT o una subcláusula subselect, el sistema SQL construye el producto cartesiano de todas las tablas o vistas. El sistema devuelve las filas que cumplen los criterios de selección y unión especificados en la cláusula
WHERE.
Para la nomenclatura de nombre_tabla1 o nombre_vista1 válidos hay que consultar la documentación de cada fabricante.
Un nombre_columna dentro de la cláusula GROUP BY puede hacer referencia a cualquier columna de cualquier tabla especificada en la cláusula
FROM, aún en el caso de que la columna no aparezca en la lista_selección.
Se utiliza número_columna dentro de la cláusula GROUP BY para hacer referencia a una columna sin nombre, como por ejemplo una expresión, dentro de la
lista_selección.
Si la cláusula GROUP BY está precedida de una cláusula WHERE, el sistema forma grupos de las filas seleccionadas después de la aplicación de la cláusula
WHERE. En la mayoría de las implementaciones, el orden en que se especifican las cláusulas
WHERE y GROUP BY es significativo.
Cuando se incluye una cláusula GROUP BY, todas las columnas de la lista_selección deben ser funciones de columna (AVG, COUNT, MAX, MIN
ó SUM) o nombre_columna especificados en la cláusula GROUP BY.
En la mayoría de las implementaciones, no se pueden utilizar las cláusulas GROUP BY o
HAVING dentro de una sentencia SELECT o de una cláusula subselect si la sentencia
SELECT o la cláusula subselect contienen una cláusula FROM que hace referencia a una vista definida, utilizando las cláusulas
GROUP BY o HAVING.
Si se utiliza una cláusula HAVING pero no se incluye una cláusula GROUP BY, todas las columnas de
lista_selección deben formarse utilizando funciones de columna (AVG,
COUNT, MAX, MIN, SUM).
Si se incluye una cláusula GROUP BY precediendo a la cláusula HAVING, la
condición_búsqueda de la cláusula HAVING se aplica a cada uno de los grupos formados por tener los mismos valores en las columnas especificadas. Si no se incluye una cláusula
GROUP BY, la condición_búsqueda de la cláusula HAVING se aplica a toda la tabla lógica definida en la sentencia
SELECT.
En algunas implementaciones, el sistema aplica la cláusula HAVING a los resultados de las cláusulas inmediatamente precedentes. Esto significa que:
SELECT ... WHERE ... HAVING ...
GROUP BY
Se procesa de forma diferente a:
SELECT ... WHERE ... GROUP BY ...
HAVING
En otras implementaciones, el sistema siempre aplica la cláusula HAVING a los resultados de cualquier
GROUP BY presente, sin tener en cuenta el orden de las cláusulas.
Un nombre_columna dentro de la cláusula ORDER BY puede ser ambiguo porque el mismo nombre puede aparecer más de una vez en la
lista_selección, o bien columnas con diferentes nombres pueden aparecer en la misma posición al utilizar una operación
INTERSECT, MINUS, o UNION, las cuales hacen que los nombres de las columnas resultado queden indefinidos. Si el
nombre_columna es ambiguo, se debe usar un número_columna relativo dentro de la cláusula
ORDER BY.
Se pueden especificar varias columnas dentro de la cláusula ORDER BY. El resultado se ordena en primer lugar según el primer
nombre_columna o número_columna. Si existen filas en las que son iguales los valores de esa columna, se ordenan según el siguiente
nombre_columna o número_columna que aparece en la lista de la cláusula
ORDER BY.
Se puede especificar un orden ascendente (ASC) o descendente (DESC) para cada columna. Si no se especifica ninguno, se asume
ASC.
A menos que se utilice una cláusula ORDER BY dentro de una sentencia SELECT, en la mayoría de las implementaciones queda indefinida la secuencia de las filas devueltas, ahora bien, si la primera
nombre_columna de lista_selección es clave o índice de la tabla, esta aparecerá ordenada por por este
nombre_columna.
Funciones asociadas a los nombre_columna de la cláusula SELECT:
AVG([[ALL] expresión |
DISTINCT nombre_columna])
En una tabla lógica definida por una sentencia SELECT o una cláusula subselect, crea una columna cuyo valor es el promedio numérico de los valores de la expresión o del
nombre_columna especificado. Se puede utilizar la cláusula GROUP BY para crear el promedio de cada grupo de filas seleccionadas en las tablas o vistas subyacentes.
No se puede utilizar una función columna (AVG, COUNT, MAX,
MIN o SUM) en la lista_select de una sentencia SELECT, cualquier otra columna de la
lista_select debe ser obtenida utilizando también una función de columna, o bien el
nombre_columna debe aparecer en una cláusula GROUP BY.
Una expresión debe contener, por lo menos, una referencia a un nombre_columna.
Los tipos de datos de expresión y nombre_columna deben ser numéricos.
Los valores nulos (NULL) no son incluidos en el cálculo del resultado.
Si se especifica DISTINCT nombre_columna, los valores duplicados se eliminan antes del cálculo del promedio. Por ejemplo la función
AVG(DISTINCT n), donde los valores de la columna n en las filas seleccionadas son 2.0, 2.0, 4.5 y 5.5, devuelve 4.0, el valor duplicado 2.0 se ignora. La función
AVG(ALL n) devuelve el valor 3.5.
El tipo de datos del resultado es generalmente el mismo que el de expresión o nombre_columna. En la mayoría de las implementaciones, el resultado es un entero largo (long int) si la expresión o
nombre_columna es un entero corto (short int).
Si la expresión o nombre_columna es entero, el promedio resultado es generalmente truncado. Por ejemplo,
AVG(ALL n), donde n es un entero y los valores de n en las filas seleccionadas son 0, 1 y 1, devuelve el valor 0.
Se puede incluir un nombre de correlación en una expresión para indicar la tablas o vista que contiene la columna deseada; sin embargo, si se incluye un nombre de correlación no se puede incluir ningún operador en expresión.
COUNT([* | DISTINCT nombre_columna])
En una tabla lógica definida por una sentencia SELECT o una cláusula subselect, crea una columna cuyo valor es igual al número de filas de la tabla resultado o al número de valores distintos en el
nombre_columna especificado. Se puede utilizar la cláusula GROUP BY para crear una cuenta para cada grupo de filas seleccionadas en las tablas o vistas subyacentes.
Si se utiliza una función de columna (AVG, COUNT, MAX, MIN o
SUM) en la lista_select de una sentencia SELECT, cualquier otra columna de la
lista_select debe ser obtenida utilizando también una función de columna, o bien el
nombre_columna debe aparecer en una cláusula GROUP BY.
Si se especifica DISTINCT nombre_columna, los valores duplicados se eliminan. Por ejemplo, la función
COUNT(DISTINCT n), donde los valores de la columna n en las filas seleccionadas son 2.0, 2.0, 4.5 y 5.5, devuelve el valor 3, el valor duplicado 2.0 se ignora.
COUNT(*) devuelve 4.
El tipo de datos del resultado es un entero largo (long int).
MAX([[ALL] expresión | DISTINCT
nombre_columna])
En una tabla lógica definida por una sentencia SELECT o una cláusula subselect, crea una columna cuyo valor es el valor máximo de la expresión o del
nombre_columna especificado. Se puede utilizar la cláusula GROUP BY para obtener el valor máximo de cada grupo de filas seleccionadas en las tablas o vistas subyacentes.
No se puede utilizar otra función dentro de expresión. De igual forma, nombre_columna no debe hacer referencia a una columna o una vista derivada de una función.
Si se utiliza una función de columna (AVG, COUNT, MAX, MIN o
SUM) en la lista_select de una sentencia SELECT, cualquier otra columna de la
lista_select debe ser obtenida utilizando también una función de columna, o bien el
nombre_columna debe aparecer en una cláusula GROUP BY.
Una expresión debe contener por los menos una referencia a un nombre_columna.
Los valores nulos (NULL) no son incluidos en el cálculo del resultado.
Si se especifica DISTINCT nombre_columna, los valores duplicados se eliminan antes del cálculo del valor máximo.
El tipo de datos del resultado es el mismo que el de expresión o nombre_columna.
Se puede incluir un nombre de correlación en una expresión para indicar la tabla o vista que contiene la columna deseada; sin embargo, si se incluye un nombre de correlación no se puede incluir ningún operador en expresión.
MIN([[ALL] expresión | DISTINCT nombre_columna])
En una tabla lógica definida por una sentencia SELECT o una cláusula subselect, crea una columna cuyo valor es el valor mínimo de la expresión o del
nombre_columna especificado. Se puede utilizar la cláusula GROUP BY para obtener el valor máximo de cada grupo de filas seleccionadas en las tablas o vistas subyacentes.
No se puede utilizar otra función dentro de expresión. De igual forma, nombre_columna no debe hacer referencia a una columna o una vista derivada de una función.
Si se utiliza una función de columna (AVG, COUNT, MAX, MIN o
SUM) en la lista_select de una sentencia SELECT, cualquier otra columna de la
lista_select debe ser obtenida utilizando también una función de columna, o bien el
nombre_columna debe aparecer en una cláusula GROUP BY.
Una expresión debe contener por los menos una referencia a un nombre_columna.
Los valores nulos (NULL) no son incluidos en el cálculo del resultado.
Si se especifica DISTINCT nombre_columna, los valores duplicados se eliminan antes del cálculo del valor mínimo.
El tipo de datos del resultado es el mismo que el de expresión o nombre_columna.
Se puede incluir un nombre de correlación en una expresión para indicar la tabla o vista que contiene la columna deseada; sin embargo, si se incluye un nombre de correlación no se puede incluir ningún operador en expresión.
SUM([[ALL] expresión |
DISTINCT nombre_columna])
En una tabla lógica definida por una sentencia SELECT o una cláusula subselect, crea una columna cuyo valor es la suma de los valores de la expresión o del
nombre_columna especificado. Se puede utilizar la cláusula GROUP BY para obtener el valor máximo de cada grupo de filas seleccionadas en las tablas o vistas subyacentes.
No se puede utilizar otra función dentro de expresión. De igual forma, nombre_columna no debe hacer referencia a una columna o una vista derivada de una función.
Si se utiliza una función de columna (AVG, COUNT, MAX, MIN o
SUM) en la lista_select de una sentencia SELECT, cualquier otra columna de la
lista_select debe ser obtenida utilizando también una función de columna, o bien el
nombre_columna debe aparecer en una cláusula GROUP BY.
Una expresión debe contener por los menos una referencia a un nombre_columna.
Los tipos de datos de expresión y nombre_columna deben ser numéricos.
Los valores nulos (NULL) no son incluidos en el cálculo del resultado.
Si se especifica DISTINCT nombre_columna, los valores duplicados se eliminan antes del cálculo del valor de la suma.
El tipo de datos del resultado es generalmente el mismo que el de expresión o nombre_columna. En la mayoría de las implementaciones, el resultado es un entero largo (long int) si la expresión o
nombre_columna es un entero corto (short int).
Se puede incluir un nombre de correlación en una expresión para indicar la tabla o vista que contiene la columna deseada; sin embargo, si se incluye un nombre de correlación no se puede incluir ningún operador en expresión.
|
|