Saltar al contenido

SQL y sus sublenguajes

Por qué se dice que SQL es declarativo, qué añade su extensión procedural, en qué cuatro sublenguajes se reparten las sentencias y sobre qué estándar trabajan todos los gestores.

Un lenguaje declarativo con una extensión procedural

SQL es el lenguaje normalizado para trabajar con bases de datos relacionales. Se le clasifica como lenguaje de cuarta generación (4GL) y como lenguaje declarativo, y las dos etiquetas dicen lo mismo desde ángulos distintos: en una sentencia se describe el resultado que se quiere, no el procedimiento para conseguirlo.

Cuando se pide la media de aciertos de un alumno no se dice al gestor que abra el fichero, que recorra los registros uno a uno y que vaya sumando. Se dice qué se quiere y el optimizador de consultas del gestor decide el cómo: qué índice usar, en qué orden combinar las tablas y qué algoritmo aplicar. Por eso la misma consulta puede ejecutarse de forma distinta según los datos que haya en ese momento, y por eso existe la sentencia que muestra el plan elegido.

Ese carácter declarativo se queda corto en cuanto hace falta lógica: condiciones, bucles, variables o control de errores. Para eso el estándar incorpora una extensión procedural, SQL/PSM (Persistent Stored Modules), que es la parte del lenguaje con la que se escriben los procedimientos almacenados y los disparadores. Cada fabricante tiene su dialecto de esa extensión: PL/SQL en Oracle, Transact-SQL en SQL Server y PL/pgSQL en PostgreSQL.

SQL declara el qué y el optimizador resuelve el cómo. La programación dentro del gestor no la hace el SQL declarativo, la hace su extensión procedural SQL/PSM.

Para el examen

  • Qué tipo de lenguaje es: declarativo de cuarta generación (4GL)

  • Quién decide el plan: el optimizador del gestor

  • Extensión procedural del estándar: SQL/PSM

  • Dialectos: PL/SQL en Oracle, Transact-SQL en SQL Server y PL/pgSQL en PostgreSQL

DDL, DML, DCL y TCL

Las sentencias de SQL se agrupan en familias según sobre qué actúan. La distinción es de las que caen todos los años, y la forma rápida de fijarla es preguntarse sobre qué manda cada una: sobre el recipiente, sobre lo que hay dentro, sobre quién puede tocarlo o sobre cuándo se da por bueno el cambio.

SublenguajeSobre qué mandaSentencias características
DDL, definición de datosLa estructura: los objetos donde viven los datosCREATE, ALTER, DROP, TRUNCATE
DML, manipulación de datosEl contenido: las filas que hay dentro de esos objetosSELECT, INSERT, UPDATE, DELETE, MERGE
DCL, control de datosEl acceso: quién puede hacer qué sobre cada objetoGRANT, REVOKE
TCL, control de transaccionesEl principio y el final de una unidad de trabajoCOMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION

El reparto no es único y conviene saberlo antes del examen. Hay clasificaciones que presentan el TCL como una parte del DCL, porque las dos gobiernan cómo se accede a los datos y no los datos mismos. También se discute dónde cae TRUNCATE, que borra filas como el DML pero se comporta como DDL, y CALL, que unos fabricantes consideran DML y otros DCL. Si una pregunta admite esas dos lecturas, suele ser porque está copiada de un manual concreto.

DDL toca el continente, DML el contenido, DCL los permisos y TCL las transacciones.

SQL y sus sublenguajes

DDL: la estructura

  • CREATE
  • ALTER
  • DROP
  • TRUNCATE

DML: los datos

  • SELECT
  • INSERT
  • UPDATE
  • DELETE
  • MERGE

DCL: los permisos

  • GRANT
  • REVOKE

TCL: las transacciones

  • COMMIT
  • ROLLBACK
  • SAVEPOINT
  • SET TRANSACTION

Para el examen

  • DDL: CREATE, ALTER, DROP y TRUNCATE

  • DML: SELECT, INSERT, UPDATE, DELETE y MERGE

  • DCL: GRANT y REVOKE

  • TCL: COMMIT, ROLLBACK, SAVEPOINT y SET TRANSACTION

El estándar y los dialectos

SQL está normalizado por ANSI y por ISO desde 1986. La revisión de 1992, conocida como SQL-92 o SQL2, es la ampliación grande del lenguaje y sigue siendo la referencia más citada: cuando alguien dice «SQL estándar» sin más apellidos, casi siempre está pensando en ella.

Ningún gestor implementa el estándar entero ni se limita a él. Todos añaden extensiones propias, y de ahí salen los dialectos. La consecuencia práctica es que una aplicación escrita contra el subconjunto estándar se migra de un gestor a otro con poco trabajo, mientras que otra escrita a base de extensiones del fabricante queda atada a él.

Para el examen

  • Quién lo normaliza: ANSI e ISO, desde 1986

  • Revisión más citada: SQL-92, también llamada SQL2

Gestores relacionales del mercado

Los sistemas gestores de bases de datos relacionales más presentes en la Administración y en la industria hablan todos SQL, con su dialecto propio encima del estándar.

  • Oracle Database, con su extensión procedural PL/SQL.
  • Microsoft SQL Server, con Transact-SQL.
  • MySQL y su bifurcación libre MariaDB.
  • PostgreSQL, el más cercano al estándar entre los libres.
  • IBM Db2 e IBM Informix.
  • SAP MaxDB.

Para el examen

  • Oracle: PL/SQL

  • SQL Server: Transact-SQL

  • MariaDB: bifurcación de MySQL

  • PostgreSQL: el libre más cercano al estándar

SQLite: SQL sin servidor

SQLite es el caso raro de la lista: no sigue la arquitectura cliente/servidor. No hay un proceso servidor escuchando en un puerto al que se conecten los clientes; el motor entero es una biblioteca que se enlaza dentro del propio programa y que lee y escribe un fichero local. Por eso no se accede a él por red y no sirve para dar servicio a muchos usuarios concurrentes.

Conviene no confundir la ausencia de servidor con la ausencia de gestor. SQLite es un motor relacional completo: analiza SQL, optimiza consultas, mantiene índices y cumple las propiedades ACID, de modo que dentro de él se pueden abrir y confirmar transacciones igual que en cualquier otro. Lo que ocurre es que toda la base de datos cabe en un único fichero, lo que lo hace ideal para aplicaciones de escritorio y para el móvil: es el almacenamiento estructurado estándar de Android.

SQLite no es «menos base de datos», es una base de datos sin servidor: se enlaza como biblioteca en el programa que la usa.

Para el examen

  • Qué es: motor relacional completo, que cumple ACID

  • Arquitectura: sin cliente/servidor: biblioteca más fichero local

  • Dónde se usa: es el almacenamiento estándar de Android