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:
Descripción
No se da soporte a las operaciones aritméticas sobre los tipos de datos CHAR, VARCHAR, BLOB(n), DATE, TIME y TIMESTAMP.
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.
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.
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.
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.
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.
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';
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.
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.
No se da soporte a las operaciones aritméticas sobre los tipos de datos CHAR, VARCHAR, BLOB(n), DATE, TIME y TIMESTAMP.
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);
Ejemplos:
SELECT empid FROM emp WHERE city NOT IN ('San Jose', 'Morgan Hill', 'Santa Clara');
Reglas
Las columnas con datos de tipo BLOB no se pueden utilizar en cláusulas GROUP BY, ORDER BY ni DISTINCT.
Notas
SELECT EMPNO, FIRSTNAME FROM EMPLOYEE ORDER BY LASTNAMELa consulta siguiente es válida:
SELECT LASTNAME, EMPNO, FIRSTNAME FROM EMPLOYEE ORDER BY LASTNAME
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