✒️ABAP / El lenguaje SQL y la sentencia SELECT Por Yeny Yanes Bautista
ABAP El lenguaje SQL y la sentencia SELECT

El lenguaje SQL y la sentencia SELECT
1. El lenguaje SQL
Para acceder y manupular los datos que se encuentran almacenados en las tablas de la base de datos centralizada de SAP vamos a utilizar el lenguaje SQL.
< SQL: Lenguaje de Consulta Estructurado. Es un lenguaje de consulta, usado como interfaz para comunicarse con bases de datos y realizar operaciones de acceso y manipulación de la información almacenada. >
Las sentencias del lenguaje SQL pueden ser clasificadas en tre grupos que son los siguientes:
Lenguaje de Definición de Datos (DDL): Se utiliza para definir estructuras como el esquema, la base de datos, las tablas de la base de datos, las restricciones, etc.
* CREATE: Se utiliza para crear una base de datos, tablas bases de datos, vistas, etc.
* ALTER: Se utiliza para modificar la estructura de la base de datos, por ejemplo añadir o borrar columnas de una tabla base de datos.
* DROP: Con esta sentencia podemos eliminar los objetos de la estructura por ejemplo: un índice o una secuencia.
Lenguaje de Manipulación de Datos (DML): Permite a los usuarios introducir datos para posteriormente realizar tareas de consultas o modificación de los datos que contienen las bases de datos.
* SELECT: Esta sentencia se utiliza para realizar consultas sobre los datos
* INSERT: Con esta sentencia podemos insertar los valores en una tabla base de datos
* UPDATE: Se utiliza para modificar los valores de uno o varios registros
* MODIFY: Se utiliza para modificar los valores de uno o varios registros
* DELETE: Se utiliza para eliminar las filas de una tabla base de datos.
Lenguaje de Control de Datos (DCL): Permiten al administrador del sistema gestor de base de datos, controlar el acceso a los objetos, es decir, podemos otorgar o denegar permisos a uno o más roles para realizar determinadas tareas.
* GRANT: Permite otorgar permisos
* REVOKE: Elimina los permisos que previamente se han concedido.
2. La sentencia SELECT
< La sentencia SELECT se utiliza para recuperar información en SQL, es decir, permite obtener registros de la base de datos de una o varias tablas combinadas. Ademas permite hacer filtrados de la informacion para obtener unicamente los registros que cumplen ciertas condiciones. >
En ABAP la sentencia select tiene la siguiente sintaxis:
SELECT <resultado> "En resultado se colocan los campos que se desean recuperar
FROM <tabla> "Es la tabla base de datos de donde se sacan los datos
INTO <target> "Es el destino donde serán alojados los datos
WHERE <condiciones> "Condiciones de la búsqueda
2.1 SELECT * INTO TABLE
* Seleccionamos todos los registros SELECT * FROM ztabla_usuarios INTO TABLE ti_usuarios.La claúsula INTO TABLE se utiliza cuando el resultado de la consulta se guarda en una tabla interna
2.2 SELECT * APPENDING TABLE
Podría ocurrir que quisiérmoas conservar el contenido de la tabla interna TI_USUARIOS luego de reiteradas selecciones
* Seleccionamos todos los registros SELECT * FROM ztabla_usuarios APPENDING TABLE ti_usuarios.2.3 SELECT campo1
Si quisieramos obtener de todos los campos de la tabla ztabla_usuarios el campo DNI deberíamos crear una tabla auxiliar solo con el campo DNI para alojar el resultado de la consulta
* Seleccionamos el campo DNI de todos los registros SELECT dni FROM ztabla_usuarios INTO TABLE ti_usuarios_aux.Siempre despues de un SELECT se debe preguntar por el SY-SUBRC para saber cómo proseguir
Si quisieramos obtener 2 campos de la tabla base de datos ztabla_usuarios entonces debemos escribir luego de la sentencia select el nombre de los campos, en el mismo orden en el que dichos campos se encuentran en la tabla base de datos:
* Seleccionamos el nombre y apellido y el estado del usuario de todos los registros SELECT nombre_ape estado_usu FROM ztabla_usuarios INTO TABLE ti_usuarios2.2.4 SELECT SINGLE
Si quisiéramos obtener la primera ocurrencia de la tabla ztabla_usuarios donde se cumpla determinada condición debemos ejecutar un SELECT SINGLE *:
* Seleccionamos 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 esta consulta será guardado en la estructura wa_usuarios que es del mismo tipo que la tabla ztabla_usuarios
Si quisiéramos realizar la misma consulta anterior pero necesitamos obtener solo el campo DNI entonces ya no será necesaria la estructura wa_usuarios sino que guardaríamos el resultado en la variable V_DNI_
* Seleccionamos el primer registro que cumpla la condición CLEAR v_dni. SELECT SINGLE dni FROM ztabla_usuarios INTO v_dni WHERE nombre_ape NE space.2.5 SELECT INTO CORRESPONDING FIELDS OF TABLE
Si quisiéramos obtener de una tabla base de datos los registros que cumplan una condición pero deseamos guardarlos en una tabla interna que no tiene la misma estructura que la tabla base de datos entonces tenemos que usar la cláusula INTO CORRESPONDING FIELDS OF TABLE:
* Seleccionamos 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 EQ 'A'.<< La sentencia into corresponding fields of table realiza la comparación de los campos teniendo en cuenta los tipos de los campos de cada tabla y la posición de cada uno de ellos >>
2.6 SELECT ... WHERE
Donde Nombre y Apellido es el parameter p_nomape y Estado del usuario que es el select-options s_estado
La cláusula IN se utiliza para los select-options en las condiciones de un select
2.7 SELECT MAX
Si queremos obtener el usuario activo con DNI más alto tendríamos que usar la cláusula MAX:
2.8 SELECT COUNT
Si quisiéramos saber la cantidad de usuarios con estado = "Activo", debemos usar la cláusula COUNT:
* Obtenemos la cantidad de usuarios activos CLEAR v_activos. SELECT COUNT(*) INTO v_activos FROM ztabla_usuarios WHERE estado_usu EQ 'A'.2.9 SELECT FOR ALL ENTRIES IN
Si quisiéramos obtener de una tabla todos los registros que existan en una tabla interna cargada con datos, entonces debemos utilizar la cláusula FOR ALL ENTRIES IN
2.10 SELECT ... LIKE
Si quisieramos obtener todos los registros que cumplan con un patrón de texto en alguno de sus campos debemos utilizar la cláusula LIKE
* Obtenemos todos los registros de usuarios cuyo Nombre y Apellido comience con A SELECT * FROM ztabla_usuarios INTO TABLE ti_usuarios WHERE nombre_ape LIKE 'A%'.
Tenemos la posibilidad de realizar un SELECT a más de una tabla base de datos, lo que se conoce con el nombre de JOIN
Para analizar este punto vamos a trabajar con dos tablas bases de datos muy importantes dentro del sistema SAP, como son la tabla estandar VBRK Factura: Datos de cabecera y la tabla VBRP de Factura: Datos de posición
Supongamos que deseamos recuperar de ambas tablas los registros donde el campo VBELN (Número de factura) coincida
TYPES: BEGIN OF ty_facturas, vbeln LIKE vbrk-vbeln, fkart LIKE vbrk-fkart, fktyp LIKE vbrk-fktyp, vbtyp LIKE vbrk-vbtyp, waerk LIKE vbrk-waerk, vkorg LIKE vbrk-vkorg, vtweg LIKE vbrk-vtweg, posnr LIKE vbrp-posnr, netwr LIKE vbrp-netwr, END OF ty_facturas. DATA: ti_facturas TYPE STANDARD TABLE OF ty_facturas, wa_facturas LIKE LINE OF ti_facturas. * Realizamos un join entre las tablas VBRK y VBRP SELECT t1~vbeln t1~fkart t1~fktyp t1~vbtyp t1~waerk t1~vkorg t1~vtweg t2~posnr t2~netwr INTO CORRESPONDING FIELDS OF TABLE ti_facturas FROM vbrk AS t1 INNER JOIN vbrp AS t2 ON t2~vbeln = t1~vbeln. La cláusula INNER JOIN entre dos tablas base de datos A y B entregará el resultado de la intersección de los conjuntos A y B Tambien Tambien tenemos disponible en ABAP la claúsula LEFT OUTER JOIN entre dos tablas base de datos A y B, en donde obtendremos como resultado la uníon entre las tablas A y B más la parte de información exterior de la tabla base de datos A, es de la tabla base de datos que se encuentre a la izquierda en la unión
 
 
 
Sobre el autor
Publicación académica de Yeny Gisela Yanes Bautista, en su ámbito de estudios para la Carrera Consultor ABAP Nivel Inicial.
Yeny Gisela Yanes Bautista
Profesión: Ingeniera en Sistemas - Honduras - Legajo: XC34C
✒️Autor de: 46 Publicaciones Académicas
🎓Egresado de los módulos:
- Master Funcional ABAP
- Master ABAP for HANA
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial






Disponibilidad Laboral: FullTime


















