✒️ABAP / El lenguaje SQL y la sentencia SELECT Por Mauricio Yedro
ABAP El lenguaje SQL y la sentencia SELECT

Lenguaje SQL y la sentencia SELECT
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.
Las sentencias SQL pueden ser clasificadas en tres grupos:
• Lenguaje de definición de datos (DDL): 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.
CREATE: Crea una base de datos, tablas, vistas, etc.
ALTER: modificar la estructura de la BD, por ejemplo, añadir o borrar columnas de una tabla.
DROP: podemos eliminar objetos de la estructura, por ejemplo, un índice o una secuencia.
• Lenguaje de manipulación de datos (DML): 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, borrado de datos y extracción de datos.
SELECT: se utiliza para realizar consultas sobre los datos.
INSERT: 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): podemos darle o quitarles el acceso 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 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.
La sentencia SELECT
Sintaxis de SAP:
SELECT <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 búsqueda
Distintas variantes que representa la sentencia SELECT para su ejecución:
• SELECT * INTO TABLE: para obtener todos los registros de una tabla
SELECT *
FROM ztabla_usuarios
INTO TABLE ti_usuarios.
Donde ti_usuarios es una tabla interna 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.
• SELECT * APPENDING TABLE: Agrega los datos sin sobrescribir a la tabla interna
SELECT *
FROM ztabla usuarios
APPENDING TABLE ti_usuarios.
NOTA: 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.
• SELECT campo1: Obtener un campo de todos los campos de una tabla:
SELECT dni
FROM ztabla_usuarios
INTO TABLE ti_usuarios_aux.
NOTA: Siempre después de un SELECT se debe preguntar por el SY-SUBRC para saber cómo proseguir.
• SELECT SINGLE: Obtener la primera ocurrencia de la tabla ZTABLA_usuarios donde se cumpla determinada condición debemos ejecutar un SELECT SINGLE * tal como vemos a continuación:
“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 de la tabla ZTABLA_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 tal como vemos en el siguiente ejemplo:
“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.
• 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 tal como vemos a continuación:
“Seleccionamos los registros que cumplan 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’.
• SELECT …WHERE IN: Seleccionamos los registros que cumplan con los parámetros de la pantalla de selección:
SELECT *
FROM ztabla _usuarios
INTO TABLE ti_usuarios
WHERE nombre_ape EQ p_nomape
AND estado_usu IN s_estado.
La clausula IN se utiliza para los select-options en las condiciones de un select.
• SELECT MAX: Obtener el usuario activo con DNI más alto:
CLEAR v_dni.
SELECT SINGLE MAX ( dni )
INTO v_dni
FROM ztabla_usuarios
WHERE estado_usu EQ ‘A’.
• SELECT COUNT: si quisiéramos saber la cantidad de usuarios con estado = “activo”, debemos usar la cláusula COUNT de la siguiente manera:
CLEAR v_activos.
SELECT COUNT (*)
INTO v_activos
FROM ztabla_usuarios
WHERE estado_usu EQ ‘A’.
• SELECT FOR ALL ENTRIES IN: obtener de una table todos los registros que existan en una tabla interna cargada con datos, utilizar la cláusula FOR ALL ENTRIES IN que nos permite especificar condiciones en tiempo de ejecución:
“Obtenemos los registros de los usuarios que existan en la tabla
“Tab. Interna TI_PROVEEDORES
SELECT *
INTO TABLE ti_usuarios
FROM ztabla_usuarios
FOR ALL ENTRIES IN ti_proveedores
WHERE dni EQ ti_proveedores-dni.
• SELECT … LIKE: 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:
“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%’.
• SELECT … INNER JOIN: tenemos la posibilidad de realizar un SELECT a más de una tabla, lo que se conoce con el nombre de JOIN.
Para analizar este punto vamos a trabajar con datos 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 de documento comercial (WAERK)
· Organización de ventas (VKORG)
· Canal de distribución (VTWEG)
Y los siguientes campos de la tabla VBRP:
• Posición de factura (POSNR)
• Valor neto de posición de factura (NETWR)
Entonces vamos a ejecutar la sentencia SELECT INNER JOIN de la siguiente forma:
TYPES: BEGIN OF ty_facturas,
Vblen LIKE vbrk-vbeln,
Fkart LIKE vbrk-fkart,
Fktyp LIKE vbrk-fktyp,
Vbtyp LIKE vbtk-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 STANDAR TABLE OF ty_facturas,
Wa_facturas LIKE LINE OF ti_facturas.
“Realizamos un join entre las tablas VBRK y VBRP
SELECT tl~vbeln tl~fkart tl~fktyp tl~vbtyp tl~waerk
Tl~vkorg tl~vtweg t2~posnr t2~netwr
INTO CORRESPONDING FIELDS OF TABLE ti_facturas
FROM vbrk AS tl INNER JOIN vbrp AS t2
ON t2~vbeln = t2~vbeln.
NOTA: 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 resultados 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 decir la tabla que se encuentre a la izquierda de la unión.
 
 
 
Sobre el autor
Publicación académica de Mauricio Ezequiel Yedro, en su ámbito de estudios para la Carrera Consultor ABAP Nivel Inicial.
Mauricio Ezequiel Yedro
Profesión: Programador - Argentina - Legajo: FU93M
✒️Autor de: 20 Publicaciones Académicas
🎓Cursando Actualmente: Master ABAP Orientado a Objetos
🎓Egresado de los módulos:
Certificación Académica de Mauricio Yedro






Disponibilidad Laboral: FullTime


















