✒️ABAP / El lenguaje SQL y la sentencia SELECT Por Gustavo Rondon Hernandez
ABAP El lenguaje SQL y la sentencia SELECT

El lenguaje SQL Y la sentencia SELECT
1 | El lenguaje SQL
Para acceder y manipular los datos que se encuentran almacenados en las tablas de la base de datos centralizada de SAP vamos a utilizar el lenguaje SQL.
SQL
Sus siglas significan 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.
Es un lenguaje sencillo de consulta, que permite realizar operaciones de selección, inserción, actualización y borrado de datos, así como operaciones administrativas sobre las bases de datos.
Tiene la capacidad de hacer cálculos avanzados y álgebra Es utilizado en la mayoría de las empresas que almacenan datos en una base de datos. Ha sido y sigue siendo el lenguaje de programación más usado para bases de datos relacionales.
El lenguaje SQL es un estándar mantenido por ANSI, por lo que las bases del lenguaje son las mismas en la mayoría de los sistemas de gestión de bases de datos.
Sabias que: Algunos sistemas de gestión de bases de datos comunes que utilizan SQL som Oracle, SAP HANA, MySQL, Microsoft SQL Server, Microsoft Access, Ingres, etc.
Aunque la mayoría de los sistemas de base de datos utilizan SQL, la mayoría de ellos también tienen sus propias extensiones propietarias que usualmente sólo se utilizan en su sistema.
Con esto nos referimos a que el lenguaje SQL que utilizamos cuando la base de datos es Oracle no es exactamente el mismo lenguaje SQL que utilizamos cuando la base de datos es SAP HANA.
Una persona que conozca las bases del lenguaje SQL, con el acceso a una referencia básica del sistema de gestión de base de datos en particular con el que esté trabajando, será capaz de escribir consultas para cualquier base de datos.
La estructura de las consultas es prácticamente igual pero existen pequeñas diferencias a la hora de organizar los bloques de las sentencias y especificar las operaciones o las funciones de administración. También dependiendo del sistema de gestión de base de datos: este puede tener soporte a algunas operaciones extra cómo procedimientos o transacciones, así como un juego de funciones específico.
Podemos decir que las sentencias del lenguaje SQL pueden ser clasificadas en tres grupos que son los siguientes:
Lenguaje de Definición de Datos (DDL): gracias a este lenguaje podemos definir los diferentes objetos que tenemos en nuestra base de datos. Se utiliza para definir estructuras como el esquema, la base de datos, las tablas de la base de datos, las restricciones, etc.
Lenguaje de Definición de Datos (DDL): gracias a este lenguaje podemos definir los diferentes objetos que tenemos en nuestra base de datos. Se utiliza para definir estructuras como el esquema, la base de datos, las tablas de la base de datos: las restricciones, etc.
Para definir las estructuras disponemos de tres sentencias:
- 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): gracias a este lenguaje podemos manipular los datos de los diferentes objetos que disponemos en nuestra base de datos, sobre todo, en las tablas, donde podemos realizar inserciones actualizaciones y borrado de datos, además de poder también extraer estos datos.
El 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.
Las sentencias que se utilizan para manipular los datos son las siguientes:
- 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: también 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): gracias a este lenguaje podemos darle o quitarle permisos sobre los objetos a los usuarios que se conectan a la base de datos.
Estos comandos 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
En nuestra labor del día a día como Consultores ABAP vamos a utilizar mucho el lenguaje SQL, por lo que es fundamental que aprendamos todos los detalles de este lenguaje de consulta.
En la gran mayoría de las veces vamos a utilizar SQL para realizar consultas a las tablas que forman parte de la base de datos de SAP
Para realizar estas consultas vamos a utilizar la sentencia de consulta más importante que presenta SQL, nos referimos a 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. Además permite hacer filtrados de la información, para obtener únicamente los registros que cumplen ciertas condiciones.
una sentencia SELECT recupera cero o más filas de una o más tablas de base de datos o vistas de base de datos
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
A continuación, vamos a aprender las distintas variantes que presenta la sentencia SELECT para su ejecución y para ello tomaremos como ejemplo la tabla base de datos Z TABLA USUARIOS de Usuarios con la que trabajamos en las lecciones anteriores de esta misma unidad.
2.1 | SELECT* INTO TABLE
Si quisiéramos obtener todos los registros de la tabla ZTABLA USUARIOS utilizaríamos la sentencia SELECT *
Donde TI_USUARIOS es una tabla .)nterna del mismo tipo de la tabla ZTABLA USUARIOS. El asterisco indica que se obtendrán todos los campos de la tabla. La cláusula INTO TABLE se utiliza cuando el resultado de la consulta se guarda en una tabla interna.
Importante: Evitar el uso del * cuando solo se requiera obtener algunos campos de la tabla origen.
En la sentencia anterior, en caso de existir registros en la tabla ZTABLA USUARIOS, estos pisarán el contenido de la tabla interna TI USUARIOS y la variable del sistema SY-SUBRC será 0. En caso de no encontrarse registros de datos entonces la variable del sistema SY-SUBRC será distinto de cero.
2.2 | SELECT * APPENDING TABLE
Podría ocurrir que quisiéramos conservar el contenido de la tabla interna TI USUARIOS luego de reiteradas selecciones. En este caso tendríamos que usar la cláusula APPENDING TABLE en lugar de INTO TABLE.
Recuerda: Es recomendable hacer un REFRESH de la tabla interna en donde se almacenarán los datos antes de realizar la selección de los mismos. En caso de utilizar una variable o una estructura entonces deberemos ejecutar un CLEAR.
2.3 | SELECT campo1
Si quisiéramos 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.
Ideas: Siempre después de un SELECT se debe preguntar por el SY-SUBRC para saber cómo proseguir.
Si quisiéramos obtener dos campos de la tabla base de datos ZTABLA_USUARIOS: por ejemplo los campos NOMBRE_AP y ESTADO_USU, entonces debemos escribir luego de la sentencia SELECT el nombre de los campos, en el mismo orden el que dichos campos se encuentran en la tabla base de datos.
Sabias que: Si la variable, estructura o tabla intema de destino en donde serán almacenados IOS datos que se recuperen de la ejecución de la sentencia SELECT no coincide en el formato con IOS datos recuperados entonces se produce un error, que degEndiend0 del caso puede ser ce sintaxis o en tiempo de ejecución, es decir un dump.
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 *
El resultado de esta consulta será guardado en la estructura WA_USUARIOS que es del mismo tipo que la tabla TABLA_USUARIOS.
Si quisiéramos realizar la misma consulta anterior pero necesitamos obtener solo el campo DNI entonces ya no sería necesaria la estructura WA USUARIOS sino que guardaríamos el resultado en la variable V_DNI.
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.
En el ejemplo anterior, la tabla interna TI_USUARIOS2 está compuesta por los campos NOMBRE_APE y ESTADO_USU.
2.6 | SELECT ...WHERE IN
Ahora supongamos que tenemos un reporte
Donde Nombre y Apellido es el parameter P_NOMAPE y Estado del Usuario que es el select-options S_ESTADO Si quisiéramos hacer una selección a la tabla ZTABLA_USUARIOS en base a lo que los usuarios ingresan por pantalla
La cláusula IN se utiliza para los select-options en las condiciones de un select.
2.7 | SELECT MAX
Ahora si quisiéramos 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.
2.9 | SELECT FOR ALL ENTRES 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 EN TRIES IN que nos permite especificar condiciones en tiempo de ejecución
2.10 | SELECT ... LIKE
Si quisiéramos obtener todos los registros que cumplan con un patrón de texto en alguno de sus campos, debemos utilizar la cláusula LIKE como vemos en el siguiente ejemplo en donde buscamos los registros que cumplen que el campo Nombre y Apellido comienza con A:
2.11 | SELECT ... INNER JOIN
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 base de datos estándar VBRK de Factura: Datos de cabecera.
Y la tabla base de datos estándar VBRP de Factura: Datos de posición.
Supongamos que deseamos recuperar de ambas tablas bases de datos los registros en donde el campo VBELN (Número de factura) coincida, esta será la condición de unión entre ambas tablas y para estos registros nos vamos a quedar con los siguientes campos de la tabla base de datos VBRK:
Factura (VBELN)
Clase de factura (FKART)
TIPO de factura (FKTYP)
TIPO de documento comercial (VBTYP)
Moneda del documento comercial (WAERK)
Organización de ventas (VKORG)
Canal de distribución (VTWEG)
Y los siguientes campos de la tabla base de datos VBRP
Posición de factura (POSNR)
Valor neto de posición de factura (NETWR)
Entonces vamos a ejecutar la sentencia SELECT INNER JOIN
Sabias que: 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. En otras palabras, la parte interna, es decir los registros en común entre ambas tablas base de datos según la condición de conexión entre ambas.
También tenemos disponible en ABAP la cláusula LEFT OUTER JOIN entre dos tablas base de datos A y B, en donde obtendremos como resultado la unión 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 Gustavo Jose Rondon Hernandez, en su ámbito de estudios para la Carrera Consultor ABAP Nivel Inicial.
Gustavo Jose Rondon Hernandez
Profesión: Becario - España - Legajo: WF47H
✒️Autor de: 33 Publicaciones Académicas
🎓Egresado del módulo:
Disponibilidad Laboral: FullTime
Presentación:
Soy informático con 10 años de experiencia en el área de tecnología, tengo un master en sap business intelligence sap bw & sap bi-bo en la salle barcelona.
Certificación Académica de Gustavo Rondon
























