SELECT

La sentencia SELECT es una modalidad de consulta.

Invocación

Esta sentencia puede utilizarse en un programa de aplicación utilizando las funciones de CLI de DB2 o emitirse a través del CLP.

Sintaxis

                         .-,------------------------.
                         V                          |
>>-SELECT--+----------+----| elementoSeleccionado |-+--FROM----->
           '-DISTINCT-'
 
   .-,--------------------------------------------.
   V                                              |
>----nombre-tabla--+----------------------------+-+------------->
                   '-+----+--nombre-correlación-'
                     '-AS-'
 
>--+-------------------------------+---------------------------->
   '-WHERE--| condición-búsqueda |-'
 
>--+---------------------------------------------------+-------->
   |           .-,-----------------------------------. |
   |           V                                     | |
   '-GROUP BY----+-----------------+--nombre-columna-+-'
                 '-nombre-tabla--.-'
 
>--+---------------------------------------------------------------------+-->
   |             .-,-------------.                                       |
   |             V               |                                       |
   '-ORDER BY--+---entero-simple-+-------------------------------------+-'
               | .-,-------------------------------------------------. |
               | V                                                   | |
               '---+-----------------+--nombre-columna--+----------+-+-'
                   '-nombre-tabla--.-'                  '-+-ASC--+-'
                                                          '-DESC-'
 
>--+----------------------+------------------------------------><
   '-LIMIT--entero-simple-'
 
elementoSeleccionado:
 
|--+-*--------------------------------------+-------------------|
   +-COUNT--(--+-| expresión |-+--)---------+
   |           '-*-------------'            |
   +-AVG--(----| expresión |----)-----------+
   +-SUM--(----| expresión |----)-----------+
   +-MIN--(----| expresión |----)-----------+
   +-MAX--(----| expresión |----)-----------+
   +-MOD--(-| expresión |-,-| expresión |-)-+
   +-LENGTH--(--| expresión |--)------------+
   +-RTRIM--(--| expresión |--)-------------+
   +-LCASE--(--| expresión |--)-------------+
   '-UCASE--(--| expresión |--)-------------'
 
condición-búsqueda:
 
   .--------------------------------------------------.
   V                                                  |
|----+----------------------------------------------+-+---------|
     '-+-AND-+--+-----+--+-| predicado |----------+-'
       '-OR--'  '-NOT-'  '-| condición-búsqueda |-'
 
predicado:
 
                              (1)
|--+-| predicado básico |-+-------------------------------------|
   +-| predicado IN |-----+
   +-| predicado LIKE |---+
   '-| predicado NULL |---'
 
predicado básico:
 
|--| expresión |--+-=---+--| expresión |------------------------|
                  +- <>-+
                  +- <--+
                  +->---+
                  +- <=-+
                  +- >=-+
                  '-||--'
 
predicado IN:
 
                               .-,-------------.
                               V               |
|--| expresión |--+-----+--IN----| expresión |-+----------------|
                  '-NOT-'
 
predicado LIKE:
 
|--| expresión |--+-----+--LIKE--| expresión |------------------|
                  '-NOT-'
 
predicado NULL:
 
|--| expresión |--IS--+-----+--NULL-----------------------------|
                      '-NOT-'
 
expresión:
 
   .-operador----------------------------------------.
   V                                                 |
|----+----+--+-literal-----------------------------+-+----------|
     +- +-+  +-+-----------------+--nombre-columna-+
     '- --'  | '-nombre-tabla--.-'                 |
             +-registro-especial-------------------+
             '-función-----------------------------'
 
operador:
 
|--+- /-+-------------------------------------------------------|
   +- *-+
   +- +-+
   '- --'
 
 

Notas:

  1. Las expresiones BLOB sólo están permitidas en predicados NULL.

Descripción

elementoSeleccionado
*
Especifica todas las columnas. Si se especifica un asterisco (*), debe ser el único elemento seleccionado.
COUNT(*)
La función COUNT obtiene el número de filas o valores de un conjunto de filas o valores. El argumento de COUNT(*) es un conjunto de filas. El resultado es el número de filas del conjunto. En la cuenta se incluyen también las filas que sólo contengan valores nulos.
expresión
La expresión puede ser un literal, nombre de columna, registro especial o función. Las funciones válidas son: COUNT, AVG, SUM, MIN, MAX, MOD, LENGTH y RTRIM.

No se da soporte a las operaciones aritméticas sobre los tipos de datos CHAR, VARCHAR, BLOB(n), DATE, TIME y TIMESTAMP.

literal
Un literal puede ser un valor cuyo tipo de datos es INTEGER, SMALLINT, DECIMAL, CHAR(n), VARCHAR(n), BLOB(n), DATE, TIME y TIMESTAMP.
nombre-tabla
Designa la tabla donde reside la columna que es objeto de la consulta.
.
Carácter que separa las dos partes que forman el identificador de columna, nombre-tabla.nombre-columna.
nombre-columna
Designa la columna que es objeto de la consulta.
COUNT(expresión)
El argumento de COUNT(expresión) es un conjunto de filas. La función se aplica al conjunto de filas que se obtiene a partir de los valores argumento por eliminación de los valores nulos. El resultado es el número de valores no nulos del conjunto, incluidos los duplicados.
AVG(expresión)
La función AVG(expresión) obtiene el valor promedio de los valores de expresión. Los valores argumento deben ser números y su suma debe estar dentro del rango del tipo de datos del resultado. La función se aplica al conjunto de valores que se obtiene a partir de los valores argumento por eliminación de los valores nulos. El resultado puede ser nulo.
SUM(expresión)
La función SUM(expresión) obtiene la suma de los valores de expresión. Los valores argumento deben ser números y su suma debe estar dentro del rango del tipo de datos del resultado. La función se aplica al conjunto de valores que se obtiene a partir de los valores argumento por eliminación de los valores nulos.
MIN(expresión)
La función MIN(expresión) obtiene el valor mínimo del conjunto de valores de expresión. Los valores argumento pueden ser cualquier tipo de datos interno excepto BLOB. La función se aplica al conjunto de valores que se obtiene a partir de los valores argumento por eliminación de los valores nulos.
MAX(expresión)
La función MAX(expresión) obtiene el valor máximo del conjunto de valores de expresión. Los valores argumento pueden ser cualquier tipo de datos interno excepto BLOB. La función se aplica al conjunto de valores que se obtiene a partir de los valores argumento por eliminación de los valores nulos.
MOD(expresión, expresión)
La función MOD(expresión, expresión) obtiene el resto de dividir el primer argumento por el segundo. El resultado es negativo sólo si el primer argumento es negativo.

El primer y segundo argumento puede ser de tipo SMALLINT o INTEGER.

El resultado de la función es SMALLINT si ambos argumentos son SMALLINT; en otro caso, el resultado es INTEGER. El resultado puede ser nulo; si cualquiera de los argumentos es nulo, el resultado es el valor nulo.

(expresión || expresión)
La función expresión || expresión) la concatenación de dos argumentos de serie. Los dos argumentos deben ser de tipos compatibles.

El resultado de la función es una serie. Su longitud es la suma de las longitudes de los dos argumentos. Si el argumento puede ser nulo, el resultado también; si el argumento es nulo, el resultado es el valor nulo.

LENGTH(expresión)

La función LENGTH(expresión) obtiene la longitud de un valor.

El argumento puede ser una expresión que devuelve un valor de los siguientes tipos de datos incorporados.

  • VARCHAR
  • CHAR
  • BLOB

El resultado de la función es un entero. Si el argumento puede ser nulo, el resultado también; si el argumento es nulo, el resultado es el valor nulo.

El resultado es la longitud del argumento. La longitud de una serie de longitud variable es la longitud real, no la longitud máxima.

La longitud de un BLOB es el número de bytes utilizados para representar el valor.

Considere una columna de tipo VARCHAR(50) llamada ADDRESS con un valor de '895 Don Mills Road'. LENGTH(ADDRESS) devuelve el valor 18.

RTRIM(expresión)

La función RTRIM(expresión) elimina espacios en blanco del final de la serie.

El argumento puede ser de tipo de datos CHAR o VARCHAR.

El tipo de datos resultante de la función es siempre VARCHAR.

El parámetro de longitud del tipo de datos devuelto es el mismo que el parámetro de longitud del tipo de datos del argumento.

La longitud real del resultado para series de caracteres es la longitud de la expresión de la serie menos el número de bytes de caracteres en blanco eliminados. La longitud real del resultado para series de gráficos es la longitud (en el número de caracteres de doble byte) de la expresión de la serie menos el número de caracteres en blanco de doble byte eliminados. Si se eliminan todos los caracteres, el resultado es una serie de longitud variable y vacía (con longitud cero).

Si el argumento puede ser nulo, el resultado también; si el argumento es nulo, el resultado es el valor nulo.

Considere una columna de tipo CHAR(50) llamada NAME con un valor de 'Cliff '. RTRIM(NAME) devuelve 'Cliff'. LENGTH(RTRIM(NAME)) devuelve 5.

LCASE / UCASE

La función LCASE o LOWER devuelve una serie en la que todos los caracteres SBCS se han convertido a caracteres en minúsculas. Es decir, los caracteres A-Z se convertirán en los caracteres a-z y los caracteres con marcas diacríticas se convertirán a sus equivalentes en minúsculas en el caso de que éstas existan.

El argumento debe ser una expresión cuyo valor sea un tipo de datos CHAR o VARCHAR.

El resultado de la función tiene el mismo tipo de datos y atributo de longitud que el argumento. Si el argumento puede ser nulo, el resultado también; si el argumento es nulo, el resultado es el valor nulo.

Asegúrese de que los caracteres del valor de la columna JOB de la tabla EMPLOYEE se devuelven en caracteres en minúsculas. Por ejemplo:

SELECT LCASE(JOB)
     FROM EMPLOYEE
     WHERE EMPNO = '000020';
registro-especial
Se pueden utilizar los registros especiales CURRENT DATE, CURRENT TIME y CURRENT TIMESTAMP para generar la fecha, la hora y la indicación de hora actuales.
FROM
La cláusula FROM especifica una tabla resultante intermedia.

Si se especifica una referencia de tabla, la tabla resultante intermedia es simplemente el resultado de esa referencia de tabla. Si se especifica más de una tabla de referencia, la tabla resultante intermedia consta de todas las combinaciones posibles de las filas de las referencias de tabla especificadas (el producto cartesiano). Cada fila del resultado es una fila de la primera referencia de tabla concatenada con una fila de la segunda referencia de tabla, concatenada a su vez con una fila de la tercera y así sucesivamente. El número de filas del resultado es el producto del número de filas de todas las referencias de tabla individuales. Se puede especificar un máximo de 20 tablas en la cláusula FROM.

nombre-tabla
Cada nombre-tabla especificado como referencia de tabla debe identificar una tabla existente.
AS
Identifica la definición de tabla.
nombre-correlación
Cada nombre-correlación identifica el nombre-tabla inmediato anterior. Si se especifica un nombre de correlación para una tabla, cualquier referencia calificada a una columna de la tabla debe utilizar el nombre de correlación en lugar del nombre de tabla. Si se especifica dos veces un mismo nombre de tabla, al menos una de las especificaciones debe ir seguida por un nombre de correlación. El nombre de correlación se utiliza para calificar referencias a las columnas de la tabla. Como calificador, el nombre de correlación se puede utilizar para evitar ambigüedades o para establecer una referencia correlacionada. Puede también utilizarse simplemente como nombre abreviado para una tabla.
WHERE
Especifica una condición que selecciona filas. Se puede omitir la cláusula o especificar una condición de búsqueda. Si se omite la cláusula, se seleccionan todas las filas de la tabla.
condición-búsqueda
La condición de búsqueda especifica una condición que es verdadera, falsa o desconocida para una fila determinada.

El resultado de una condición de búsqueda se obtiene aplicando los operadores lógicos especificados (AND, OR, NOT) al resultado de cada predicado especificado. Un predicado compara dos valores. Si no se especifican operadores lógicos, el resultado de la condición de búsqueda es el resultado del predicado especificado.

Las condiciones de búsqueda que están entre paréntesis se evalúan en primer lugar. Si no se especifica un orden de evaluación mediante el uso de paréntesis, NOT se aplica antes que AND y AND se aplica antes que OR. El orden en el que se evalúan los operadores con igual nivel de prioridad es indefinido, para permitir la optimización de las condiciones de búsqueda.

La condición de búsqueda se aplica a cada fila de la tabla y las filas seleccionadas son aquellas para las cuales el resultado de la condición de búsqueda es verdadero.

Cada nombre de columna especificado en la condición de búsqueda debe identificar una columna de la tabla.

NOT
Si se especifica NOT, se invierte el resultado del predicado.
expresión
La expresión puede ser un literal, nombre de columna, registro especial o función.

No se da soporte a las operaciones aritméticas sobre los tipos de datos CHAR, VARCHAR, BLOB(n), DATE, TIME y TIMESTAMP.

literal
Un literal puede ser un valor cuyo tipo de datos es INTEGER, SMALLINT, DECIMAL, CHAR(n), VARCHAR(n), BLOB(n), DATE, TIME o TIMESTAMP.
nombre-tabla
Designa la tabla donde reside la columna que es un operando del predicado.
.
Carácter que separa las dos partes que forman el identificador de columna, nombre-tabla.nombre-columna.
nombre-columna
Identifica la columna que es un operando del predicado.
registro-especial
Identifica el registro especial que es un operando del predicado. Se pueden utilizar los registros especiales CURRENT DATE, CURRENT TIME y CURRENT TIMESTAMP para generar la fecha, la hora y la indicación de hora actuales.
función
Puede incluir las funciones LCASE, UCASE, MOD, LENGTH y RTRIM.
operador
Puede ser cualquiera de los operadores siguientes:

=
Igual a.

<>
No igual a.

<
Menor que.

>
Mayor que.

<=
Menor o igual que.

>=
Mayor o igual que.

||
Devuelve la concatenación de dos argumentos de serie.

LIKE
Coincide con una serie de caracteres. Utilice un símbolo de subrayado de SBCS (juego de caracteres de un solo byte) para representar un carácter SBCS individual. Utilice un símbolo de subrayado de DBCS (juego de caracteres de doble byte) para representar un carácter DBCS individual. Por ejemplo, la condición WHERE PART_NUMBER LIKE '_0' obtiene todos los números de pieza de 2 dígitos que terminan en 0 (20, 30 y 40, por ejemplo). Utilice un símbolo de porcentaje (del juego de caracteres SBCS o DBCS) para representar una serie de caracteres SBCS o DBCS, o la ausencia de caracteres. Por ejemplo, la condición WHERE DEPT_NUMBER LIKE '2%' obtiene todos los números de departamento (DEPT_NUMBER) que comienzan con el número 2 (por ejemplo, 20, 27 ó 234).

NOT LIKE
Indica que al menos uno de los caracteres es diferente.

IN
Encuentra las coincidencias de una colección de valores. El predicado IN compara un valor con una colección de valores.

Ejemplos:

SELECT lname, fname FROM emp WHERE state IN ('CA', 'AZ', 'OR');

SELECT c1 FROM t1 WHERE c1*5-6 IN (mod(c2,2)+5,c3+4/2);

NOT IN
No coincide con una colección de valores. El predicado NOT IN compara un valor con una colección de valores.

Ejemplos:

SELECT empid FROM emp WHERE city NOT IN ('San Jose', 'Morgan Hill', 'Santa Clara');

IS NULL
Contiene el valor nulo.

IS NOT NULL
No contiene el valor nulo.
AND
Si se especifica, el operador lógico AND se aplica al resultado de cada predicado especificado.
OR
Si se especifica, el operador lógico OR se aplica al resultado de cada predicado especificado.
GROUP BY
Especifica una tabla resultante intermedia formada por un agrupamiento de las filas de R. R es el resultado de la cláusula anterior de la subselección.
ORDER BY
Especifica una ordenación de las filas de la tabla resultante.
nombre-columna
Suele designar una columna de la tabla resultante. En este caso, nombre-columna debe ser el nombre de una columna que aparece en la lista de selección.
entero-simple
Debe ser mayor que 0 y no ser mayor que el número de columnas de la tabla resultante. El entero n identifica la columna que ocupa la posición n en la tabla resultante.
ASC
Utiliza los valores de la columna en orden ascendente.
DESC
Utiliza los valores de la columna en orden descendente.
LIMIT entero-simple
Limita el número de filas que se devuelven a la aplicación al primer número n de filas del conjunto de respuestas donde n es un entero. Debe ser mayor que 0.
Operadores relacionales
Puede ser uno de los operadores siguientes:

+
Sumar

-
Restar

*
Multiplicar

/
Dividir por

Reglas

Las columnas con datos de tipo BLOB no se pueden utilizar en cláusulas GROUP BY, ORDER BY ni DISTINCT.

Notas

Ejemplos

Ejemplo 1: Este ejemplo selecciona los empleados (EMPNO y LASTNAME) de la tabla EMPLOYEE que se contrataron después de la fecha 01/01/1980 y los ordena de acuerdo con su apellido (LASTNAME).

SELECT EMPNO, LASTNAME FROM EMPLOYEE
 WHERE HIREDATE > '01/01/1980'
 ORDER BY LASTNAME

Ejemplo 2: Este ejemplo calcula el salario promedio para cada departamento de la tabla EMPLOYEE.

SELECT DEPT, AVG(SALARY) FROM EMPLOYEE
 GROUP BY DEPT

Ejemplo 3: Calcular el volumen máximo de ventas de cada región de ventas y visualizar el resultado por región, en orden de mayor a menor volumen de ventas.

SELECT REGION, MAX(SALES_VOL) FROM SALES
 GROUP BY REGION ORDER BY 2 DESC

Consulta relacionada