✒️ABAP El lenguaje SQL y la sentencia SELECT
ABAP El lenguaje SQL y la sentencia SELECT
SQL:
Sus siglas significan Lenguaje de consulta estructurado. Es un lenguaje de consulta, usando como interfaz para comunicarse con bese de datos y realizar operaciones de acceso y manupulación de la información almacenada. Permite realizar otereeciones de selección, inserción, autualización y borrado de datos, asi como operaciones aministrativas sobre loas bases datos. Tiene la capacidad de hacer cálculos avanzados y álgebra. Es utilisado en la mayoria de las empresas que almacenan datos en una bese de datos. Ha sido y sigue siendo el lenguaje de programación más usado para base de datos relacionales. El lenguaje SQL es un etándar manteniendo por ANSI.
Podemos desir que las centencias del lenguaje SQL pueden ser clasificadas en tres grupo que son los siguientes:
- Lenguaje de definición de datos (DDL): gracias a este leguaje podemos definir los diferentes objetos que tenemos en nuestra base de datos. Se utiliza para definir estructuras como esquemas, la base de datos, las tablas de base de datos, las restricciones, etc.
Parar definir las estructuras disponemos de tres sentencias:
- CLEATE: se utiliza para crear una base de datos, tabla base de datos, vistas, etc.
- ALTER: se utiliza para modificar la estructura de la base de datos, por ejemplo añadir o borrar columnas de la tabla base de datos.
- DROP: con esta sentencia podemos eliminar los objetos de la estructura,por ejemplo un indise o una sentencia.
- Lenguaje de manipulación de datos (DML): gracias a este lenguaje podemos manipular los datos de los diferentes objetos que disponemos de nuestra base de datos, sobre todo, en las tablas, donde podemos realizar inserciones,actualizaciones y borrado de datos, ademas de poder extraer estos datos.
El DML permite a los usuarios ingresar dsatos para posteriormente realizar tareas de consultas o modificación de los datos que contienen las bases de datos.
- SELECT: esta sentencia se utilizar 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 una o varios registros.
- MODIFY: también se utiliza para modificar los varores de uno o varios rehistros.
- DELETE: se utiliza para eliminar las filas de una tabla base de datos.
- Lenguaje de control de datos (DCL): gracias a este lenguaje podemos dale o quilarle permisos sobre los objetos a los usuarios que se conectan la base de datos. Esros comandos permiten al aministrador del sistema gestor de base de datos, controlar el acceso a los objetos, es desir, podemos otorgar o denegar permisos a uno o mas roles para realizar determinadas tareas.
- GRANT: permite otorgar prmisos.
- REVOKE: elimina los permisos que previamente se an concedido.
Las sentencia SELECT: e utiliza para recuperar infermación en AQL, es desir, permite obtener registros de la base de datos, de una o varias tablas mombinadas. Ademas permite hacer filtrados de la información, para obtener únicamente los registros que culmplen ciertas condiciones. Una sentencia SELECT recupera cero o m,as filas de una o mas tablas de base de datos o vistas de base de datos.
SELECT * INTO TABLE:
Si queremos obtener todos los registros de la tabla ZTABLA_USUARIOS utilizamos la sentencia SELECT * .
*Seleccionamos todos los registros
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. (Evitar el uso del * cuando solo se requiere obtener algunos campos de la tabla origen).
En la sentencia anterior, en caso de existir registros en la tabla ZTABLA_USUARIOS, estos pisaran 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.
SELECT * APPENDING TABLE:
Podria ocurrir que quisiéramos conservar el contenido de la tabla interna TI_USUARIOS luego de reiteradas selecciones. en este caso tendremos que usar la cláusula APPENDING TABLE en lugar de INTO TABLE.
* Seleccionamos todos los registros
SELECT *
FROM ztabla_usuarios
APPENDING TABLE ti_usuarios.
Es recomendable hacer un REFRECH 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:
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.
* Seleccion el campo DNI de todod los registros
SELECT dni
FROM ztabla_usuarios
INTO TABLE ti_usuarios_aux.
Si quisieramos obtemer dos campos de la tabla base de datos ZTABLABA_USUARIOS, por ejemplo los campos NOMBRES_APE y ESTADO_USU, entoces debemos escribir luego de la sentencia SELECT el nombres de los campos, en el mismo ordenen el que dicho campo 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.
SELECT SINGLE:
Si quisiéramos obtener la primera ocurrencia de la tabla ZTABLA_USUARIOS donde se cumple 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.
Si quisieramos realizar la misma consulta anterior pero nesesitamos obtener solo el campo DNI entonses ya no seria nesesario la estructura WA_USUARIOS sino que guardariamos 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.
SELECT INTO CORRESPONDIENG FIELDS OF TABLE:
Si quisieramos 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 CORRESPONDIENG FIELDS OF TABLE.
* Seleccionamos los registro que cumpla la condición
SELECT nombre_ape estado_usu
FROM ztabla_usuarios
INTO CORRESPONDING FILDS OF TABLE ti_usuarios2
WHERE nombre_ape NE space.
AND estados_usu EQ 'A'.
SELECT ...WHERE IN:
Ahora supongamos que tenemos un reporte que tiene la siguiente pantalla de selección. Donde NOMBRE y APELLIDO es el parameter P_NOMBRE y Estado de usuario que es el select-options S_ESTADO. Si quisieramos hacer una selección a la tabla ZTABLA_USUARIOS en base a lo que los usuarios ingresen por pantalla hariamos lo siguiente
* Seleccionamos los registro que cumplan con los parámetros de la pantalla
SELECT *
FROM ztabla_usuarios
INTO TABLE ti_usuarios
WHERE nombre_ape EQ p_nombre
AND estados_usu IN s_estado.
La cláusula IN se utiliza para los select-options en la condiciones de un SELECT.
SELECT MAX:
Ahora si quisieramos obtener el usuario activo con DNI más alto tendriamos que usar la cláusula MAX de siguiente forma:
* Obtendremos 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 quisieramos saber la cantidad de usuarios con estado = "activo", debemos usar la cláusula COUNT de la siguiente manera:
* Obtenemos la cantidad de usuarios activos
SELECT COUNT (*)
INTO v_activos
FROM ztabla_usuarios
WHERE estado_usu EQ 'A'.
SELECT FOR ALL ENTRIES IN:
Si quisieramos obtener de una tabla todos los registros que existen en una tabla interna cargada con datos, entonces debemos utilizar la cláusula FOR ALL ENTRIES IN que nos permite espesificar condiciones en tiempo de ejecución. Veamos un ejemplo:
* Obtenemos los registros de los usuarios que existan en la tabla
* Interna Ti_proveedores
SELECT *
INTO TABLE ti_usuarios
FROM ztabla_usuarios
FOR ALLA ENTRIES IN ti_proveedores
WHERE dni EQ ti_proveedores-dni.
SELECT ...LIKE:
Si quisieramos obtener todos los registros que cumplan con un pató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 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 Cabeceras.
 
 
 
Sobre el autor
Publicación académica de Javier Miguel Angel Barcelo, en su ámbito de estudios para la Carrera Consultor ABAP.
Javier Miguel Angel Barcelo
Profesión: Militar - Argentina - Legajo: DQ34X
✒️Autor de: 29 Publicaciones Académicas
🎓Cursando Actualmente: Consultor ABAP Nivel Inicial
Certificación Académica de Javier Angel