![](/cvo_files/imgs_sap_abap/logos/logo_cvo_academy_it.png)
✒️ABAP El lenguaje SQL y la sentencia SELECT
ABAP El lenguaje SQL y la sentencia SELECT
![ABAP El lenguaje SQL y la sentencia SELECT ABAP El lenguaje SQL y la sentencia SELECT](https://www.cvosoft.com/cvo_files/imgs_sap_abap/og-images/69.jpg)
Lección 6 -- Instrucciones SQL: La Sentencia Select
1. La sentencia SELECT:
Es una sentencia utilizada para acceder a la base de datos, cuya sintaxis es la siguiente:
SELECT <Resultado> " Se colocan los campos que se quieren recuperar
FROM <Tabla> " Tabla, es la tabla origen de donde se obtienen los datos
INTO <Target> " Target, Es el destino donde serán alojados los datos.
WHERE <condiciones> "Condiciones de la busqueda.
Ejemplo: Obtener todos los registros de la tabla ZTABLA_USUARIOS
SELECT *
FROM ztabla_usuarios
INTO TABLE ti_usuarios.
Donde ti_usuarios es una tabla interna del mismo tipo de la tabla ztabla_usuarios.
IMPORTANTE:
- Evitar el uso de * cuando solo se requiera obtener algunos campos de la tabla origen.
- Si queremos conservar el contenido de una tabla interna y no sobreescribir los datos despues de una selección , usamos la sentencia APPENDING TABLE en lugar de INTO TABLE.
- Es recomendable usar CLEAR y REFRESH de la tabla interna antes de realizar la seleccion.
Ejemplo: Obtener el campo DNI de la tabla ztabla_usiarios, para esto creamos una tabla auxiliar solo con el campo DNI, para alojar el resultado de la consulta.
SELECT dni
FROM ztabla_usuarios
INTO TABLE ti_usuarios_aux.
Clausula SINGLE:
Clausula usada con la sentencia SELECT y produce que solo se seleccione la primera ocurrencia que cumpla las condiciones de la selección.
Ejemplo: Selecciono el primer registro que cumpla la condición.
CLEAR wa_usuarios.
SELECT SINGLE *
FROM ztabla_usuarios
INTO wa_usuarios
WHERE nombre_ape NE space.
El resultado de la consulta sera guardado en la estructura wa_usuarios que es del mismo tipo de la tabla ztabla_usuarios.
En caso de que se quisiera hacer la misma consulta anterior, pero necesitaramos obtener solo el campo DNI, ya no es necesaria la estructura wa_usuarios sino que guardariamos el resultado en la variable v_dni.
Ejemplo: CLEAR v_dni.
SELECT SINGLE dni
FROM ztabla_usuarios
INTO v_dni
WHERE nombre_ape NE space
Si quisiéramos obtener los resultados de una select y guardarlos en una tabla interna que no tienen la misma estructura que la tabla, entonces hay que usar la clásula INTO CORRESPONDINGT FIELDS OF TABLE. Ejemplo:
* Selecciono los registros que cumpla 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'.
Nota: La sentencia INTO CORRESPONDING FIELDS OF TABLE, realiza la comparación de los tipos de los campos y la posición de cada uno de ellos.
Otro ejemplo donde podemos filtrar la select a partir de los parámetros de una pantalla de selección de un reporte:
* Selecciono los registros que cumplan con los parámetros de pantalla
SELECT *
FROM ztabla_usuarios
INTO TABLE ti_usuarios
WHERE nombre_ape = p_nomape
AND estado_usu IN s_estado.
Donde: p_nomape es un parámetro simple de la pantalla de selección y s_estado es un parámetro también pero del tipo select-options.
* Obtengo el usuario activo con DNI más alto
SELECT SINGLE MAX( dni )
INTO v_dni
FROM ztabla_usuarios
WHERE estado_usu = 'A'.
* Obtengo la cantidad de usuarios activos
SELECT COUNT(*)
INTO v_activos
FROM ztabla_usuarios
WHERE estado_usu = 'A'.
Nota: Cuando utilizamos la instrucción SELECT para el compilador ABAP es igual si escribimos primero la instrucción FROM y luego la instrución INTO o al revés.
Si queremos obtener de una tabla todos los registros que existan en una tabla interna cargada con datos se usa la sentencia: FOR ALL ENTRIES IN, es como querer comparar que datos de la tabla están en la tabla intermedia. Ejemplo:
* 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.
Otra ventaja del FOR ALL ENTRIES IN, es que solo accedemos una sola vez a la base de datos.
Con este ejemplo vemos el uso de la sentencia LIKE que busca por un patron de texto:
SELECT * FROM ztabla_usuarios INTO TABLE ti_usuarios WHERE nom_ape LIKE 'A%'.
 
 
 
Sobre el autor
Publicación académica de Eric David Rivas Rivas, en su ámbito de estudios para la Carrera Consultor ABAP.
Eric David Rivas Rivas
Profesión: Ing. en Ciencias de la Computación - El Salvador - Legajo: GO81U
✒️Autor de: 29 Publicaciones Académicas
🎓Egresado de los módulos:
- Carrera Consultor en SAP FI Nivel Avanzado
- Carrera Consultor en SAP FI Nivel Inicial
- Carrera Consultor ABAP Nivel Inicial
Disponibilidad Laboral: FullTime