Structured Query Language (SQL) o Lenguaje de consultas estructuradas
SQL es un lenguaje que permite la interacción con una base de datos relacional, es la única manera de crear bases de datos, agregar tablas, registros, modificar campos. Todas las aplicaciones, sistemas y herramientas que acceden a una base de datos para explotar su información lo hacen por medio de este lenguaje, por eso su importancia y relevancia.
En el mundo de las bases de datos relacionales (aquellas que cumplen con las Reglas de Codd, y debido precisamente a ellas) era indispensable contar con un lenguaje que permitiera la interacción con los datos y su estructura. Es por eso que muchos motores de bases de datos implementaron, cada quien, un lenguaje estructurado para este propósito. Esto hacía muy complicada la migración de datos, procedimientos y obligaba a los administradores de bases de datos y desarrolladores cumplir con un proceso de aprendizaje cada vez que se requería cambiar de motor de bases de datos. Por ello, se desarrollo un lenguaje universal que permitiera que todas las bases de datos hablaran «el mismo idioma» y, a pesar de cierta personalización de cada proveedor a su versión de SQL, en general se cumpliera con tener un mismo lenguaje para operar cualquier motor, versión y marca de bases de datos.
Haciendo una analogía con los idiomas humanos es como utilizar el Español; si bien cada país -incluso cada región- tiene ciertas palabras y modismos, en términos generales es el mismo Español que se habla en todo el mundo.
Es así que incluso se desarrollo un estándar internacional para permitir la estandarización del SQL. (ISO/IEC 9075 Information technology-Database languages-SQL). Este estándar define formalmente el lenguaje y todas las bases de datos relacionales actuales, utilizan ese estándar. Siguiendo el simil del idioma Español, el estándar sería ese idioma regido por las Academias de la lengua, que define un español «mínimo» y «correcto», si bien cada país tendrá su pequeñas variantes.
SQL es un lenguaje que se conforma de 4 sublenguajes que operan sobre 4 necesidades de operación de las bases de datos:
- DDL (Data Definition Language o Lenguaje de definición de datos) que son aquellos comandos que permite la definición de la estructura de datos (tablas, campos, índices, reglas, etc.) No opera sobre los datos, solo sobre la estructura donde se guardarán los datos. Los comandos principales del DDL son CREATE, ALTER y DROP.
- DML (Data Manipulation Language o Lenguaje de manipulación de datos). Este sublenguaje permite agregar registros, modificarlos y eliminarlos, si fuera necesario, en las bases de datos. Una vez definida la estructura donde se guardarán los datos, los comandos de DML son quizá los más conocidos (INSERT, UPDATE, DELETE, TRUNCATE, SELECT).
- DCL (Data Control Language o Lenguaje de control de datos) Permite administrar los permisos sobre los datos y sus estructuras. Son los comandos GRANT y REVOKE por ejemplo.
- TCL (Transaction Control Language o Lenguaje de control de transacciones) Es un conjunto de comandos para poder manejar las transacciones (grupos de operaciones de DML que se manejan como una solo, de tal manera que la base de datos realiza todas las operaciones o ninguna. TRANSACTION, ROLLBACK y COMMIT son ejemplos de comandos de TCL.
En términos generales podemos decir que el proceso de las operaciones o comandos en la base de datos se realiza de la siguiente manera:
- El motor de base de datos recibe el comando SQL (o «query»),
- Se realiza un análisis sintáctico (que el comando esté bien escrito, si errores «ortográficos»).
- Se realiza un análisis semántico; es decir, que el comando -que se sabe está bien escrito por que pasó por el análisis sintáctico- tenga sentido (que lo escrito tenga cierto sentido, no solo esté bien escrito).
- Si es posible, se parte el comando en unidades de trabajo más sencillos (un comando puede dividirse en partes para que se procede en paralelo cada una de sus partes, por ejemplo).
- Se determina el mejor plan de ejecución (el mejor camino para ejecutar el comando) haciendo uso de las estructuras de datos como índices, particiones, paralelismo, etc.
- Se ejecuta el query (o cada una de las subpartes que se hayan determinado) realizando las operaciones sobre la o las bases de datos descritas en el comando.
- El resultado obtenido del query es formateado para enviárselo a quien haya hecho la petición original.