Lección 6/9: Instrucciones SQL: La sentencia SELECT
1. SENTENCIA SELECT
Se utiliza para acceder a las bases de datos. La principal sentencia es SELECT, cuya sintaxis:
SELECT <Resultado> "En resultado se colocan los campos que se requieren recuperar.
FROM <tabla> "Tabla es la tabla origen de donde se sacan los datos.
INTO <target> "target es el destino donde serán alojados los datos.
WHERE<condiciones>. "Condiciones de la búsqueda.
Ejemplo:
* Selecciono todos los registros
SELECT * "Evitar el uso de * cuando se requiere solo algunos porque * selecciona todos los campos de la tabla origen
FROM ztabla_usuarios
INTO TABLE ti_usuarios.
La sentencia anterior reemplaza todos los registros de la tabla ti_usuarios con registros que enviamos de la tabla ztabla_usuarios, si los queremos conservar utilizar la clausula APPENDING TABLE en lugar de INTO TABLE
NOTA: Se recomienda hacer CLEAR y REFRESH en la tabla interna antes de realizar la selección.
Siempre después de un SELECT se debe preguntar por el SY-SUBRC para saber como proseguir.
Con la cláusula SINGLE obtiene sólo el primer registro de la tabla. Ejemplo:
CLEAR wa_usuarios.
SELECT SINGLE *
FROM ztabla_usuarios
INTO wa_usuarios
WHERE nombre_ap NE space.
Sentencia INTO CORRESPONDING FIELDS OF TABLE Se utiliza si se quiere obtener una lista de registros, pero queremos guardarlos en una tabla interna con una estructura distinta del origen.
*Selecciono los registros que cumplen la condición
SELECT nombre_ape estado_usu
FROM ztabla_usuarios
INTO CORRESPONDING FIELDS OF TABLE ti_usuarios2
WHERE nombre_ape NE space
AND estado_usu = 'A'.
Para realizar una selección en función de lo que un usuario ha ingresado por pantalla en el formulario en los campos p_nombre_ape y s_estado haríamos lo siguiente (la cláusula IN se utiliza para buscar igualdad en un select-options:
SELECT *
FROM ztabla_usuarios
INTO TABLE ti_usuarios
WHERE nombre_ape = p_nombre_ape
AND estado_usu IN s_estado.
NOTA: la clausula IN se utiliza para los select/options en las condiciones de un select.
Clausula MAX Por ejemplo la utilizamos para obtener el usuario activo con DNI mas alto, de la siguiente forma.
*Obtengo el usuario activo con DNI mas alto
SELECT SINGLE MAX(dni)
INTO v_dni
FROM ztabla_usuarios
WHERE estado_usu = 'A'.
La clausula COUNT se utiliza para saber la cantidad de usuarios con estado = "activo".
* Obtengo la cantidad de usuarios activos.
SELECT COUNT(*)
INTO v_activos
FROM ztabla_usuarios
WHERE estado_usu = 'A'.
Sentencia FOR ALL ENTRIES IN se utiliza para obtener todos los registros de una tabla interna.
* Obtengo los registros de los usuarios que existan en la tabla
* interna TI_PROVEEDORES
SELECT *
INTO TABLE ti_usuarios
FROM ztabla_usuarios
FOR ALL ENTRIES IN ti_proveedores
WHERE dni = ti_proveedores-dni.
La sentencia LIKE se utiliza para obtener todos los registros que cumplan con un patrón de texto en alguno de sus campos, ejemplo:
*Recupero los usuarios cuyo nombre empiece con A
SELECT *
FROM ztabla_usuarios
INTO TABLE ti_usuarios
WHERE nombre_ape LIKE 'A%'.