Te explicamos el lenguaje que utilizan la mayoría de las bases de datos.
Toda la información con la que te encuentras en internet se encuentra en bases de datos. En ellas también se almacenan datos sobre empleados y clientes de grandes empresas, investigaciones científicas y sociológicas, horarios de vuelos del aeropuerto más cercano y mucho más.
Trabajar con estos enormes conjuntos de información manualmente sería lento, tedioso e improductivo. Por eso se inventó SQL, un lenguaje especial para interactuar con las bases de datos.
¿Qué es SQL?
SQL (Structured Query Language, o lenguaje de consultas estructuradas) es un lenguaje de programación declarativo (lenguaje de consultas) que se utiliza para crear, procesar y almacenar datos en bases de datos relacionales.
Con SQL puro no se puede escribir un programa; solo sirve para interactuar con bases de datos: obtener, agregar, modificar y eliminar información, gestionar el acceso, etc.
Por lo tanto, antes de aprender SQL, debes entender cómo funcionan las bases de datos.
¿En qué bases de datos se utiliza SQL?
Todas las bases de datos se pueden dividir en dos tipos: relacionales y no relacionales. El lenguaje SQL es necesario para trabajar con las primeras.
SQL está tan estrechamente relacionado con las bases de datos relacionales que todas las bases de datos no relacionales, en contraposición, se denominaron NoSQL. Así que resulta que SQL es un lenguaje de programación, y NoSQL es un tipo de base de datos.
A menudo se dice que las bases de datos relacionales son un conjunto de tablas bidimensionales. Exactamente como en Excel: con columnas, filas y celdas. Es una visualización clara, aunque no del todo precisa.
Imaginemos que creamos una base de datos para una pequeña empresa constructora. Diseña casas de campo y entrega los proyectos a contratistas que se encargan de la construcción:
client | tel_client | num_floors | status | cost | contractor | tel_contractor |
---|---|---|---|---|---|---|
María Martínez | 612 34 56 78 | 3 | En proyecto | 8.000.000 € | NULL | NULL |
Esteban Ruiz | 622 34 56 78 | 1 | Construcción de cimientos | 1.400.000 € | Autónomo Javier Pérez | 699 78 90 12 |
Diego López | 633 45 67 89 | 2 | Construido | 4.500.000 € | S.L. «Construcciones Sol» | 952 22 34 56 |
Diego López | 633 45 67 89 | 3 | Techado en proceso | 7.000.000 € | S.L. «Hogar y Diseño» | 952 34 56 78 |
Ana Ramírez | 644 56 78 90 | 1 | Construido | 2.100.000 € | Autónomo Javier Pérez | 699 78 90 12 |
Alberto Gómez | 655 67 89 01 | 2 | Construcción segundo piso | 3.000.000 € | S.L. «Hogar y Diseño» | 952 34 56 78 |
¿En qué se diferencia una base de datos de una tabla? En que en la base:
- Las columnas y las filas no tienen una posición determinada. No se puede decir que la columna «
status
» esté antes o después de la columna «num_floors
«, y que el nombre de Ana Ramírez esté antes o después del nombre de Diego López. - Cada columna dicta su dominio, es decir, el tipo de datos al que pueden pertenecer sus valores. Por ejemplo, en las columnas «
cost
» y «num_floors
» solo se pueden almacenar números, y en la columna «client
» solo cadenas de texto. - Cada fila debe ser única y no puede repetir ninguna otra fila.
Debido a estas diferencias, en el contexto de las bases de datos se utiliza otra terminología. Una columna se llama atributo, una fila se llama registro o tupla, y la propia base de datos es su relación mutua.
Normalización en bases de datos relacionales
Volvamos a la base de datos de nuestra empresa constructora. Puede parecer cómoda, pero en realidad no está exenta de inconvenientes.
Tomemos una casa que se está construyendo para María Martínez. Actualmente solo está en proyecto, y aún no hemos elegido un contratista para ella. Por lo tanto, el valor del atributo «contractor
» es NULL
, es decir, el campo está vacío. Pero tarde o temprano elegiremos un contratista, por ejemplo, «Cabañas
«. Entonces, además del nombre del contratista, tendremos que indicar de nuevo su teléfono. Actualmente, el valor de este atributo también es NULL. Por ahora, no es difícil hacerlo.
Si el contratista cambia de número de teléfono, en todos los registros antiguos quedará información obsoleta. Y puede haber cientos o miles de esos registros (si nuestra empresa tiene mucho éxito). Exactamente la misma situación con los datos de los clientes. Es problemático controlar tal cantidad de matices, y nuestra base de datos corre el riesgo de convertirse en un almacén de datos falsos.
Para que esto no ocurra, en las bases de datos relacionales se utiliza la normalización. Esto es cuando una tabla se divide (descompone) en varias, y a cada registro se le asigna una clave única mediante la cual se puede identificar.
En total existen seis formas normales. Cuanto mayor es el número de la forma, a mayor número de reglas debe obedecer. Vamos a llevar la base de datos de nuestra empresa constructora de acuerdo con la tercera forma normal.
Ahora, si cualquier cliente o contratista cambia de teléfono, solo habrá que realizar un cambio una vez. Añadir nuevos registros también será más fácil.
Las tablas se relacionan entre sí mediante claves. Hay tres tipos.
- Primaria: indica el registro al que pertenece. En una relación no puede haber varios registros con la misma clave primaria, y el valor de la clave primaria no puede ser
NULL
. La clave primaria puede ser cualquier valor único. Por ejemplo, en la tablacontractors
, se podría utilizar el número de identificación fiscal, si estuviera en nuestra base de datos. - Externa: contiene una referencia a la clave primaria de otra tabla y vincula una tabla con otra.
- Principal: es la clave primaria a la que hace referencia la clave externa.
Lenguaje de programación SQL: cómo gestionar bases de datos
Otra diferencia entre las bases de datos relacionales y las tablas normales es que en ellas no se pueden introducir cambios directamente. Para ello se necesitan SGBD, o sistemas de gestión de bases de datos.
Un SGBD es un intermediario que recibe del usuario las instrucciones sobre qué hacer con la base de datos y las ejecuta. Estas instrucciones están escritas en lenguaje SQL.
SQL es un lenguaje declarativo. Esto significa que al escribir código, decimos lo que queremos obtener del programa. La lógica de cómo el SGBD realizará exactamente la tarea que se le ha encomendado está oculta para nosotros.
Por supuesto, si quieres que tus consultas sean más rápidas y eficientes o para proteger las bases de datos, es útil conocer los algoritmos de los SGBD. Pero incluso sin comprender estas sutilezas, podrás escribir en SQL.
Todas las instrucciones SQL se dividen en cuatro tipos:
- DDL (Data Definition Language, o lenguaje de definición de datos): se utilizan para crear, modificar y eliminar tablas completas.
- DML (Data Manipulation Language, o lenguaje de manipulación de datos): se aplican al contenido de las tablas para crear, modificar, eliminar atributos y registros. Si necesitas obtener alguna información de la base de datos, utiliza los operadores DML.
- DCL (Data Control Language, o lenguaje de control de datos): son necesarios para otorgar y revocar el acceso a bases de datos a usuarios concretos.
- TCL (Transaction Control Language, o lenguaje de control de transacciones): permite gestionar las transacciones. Una transacción es un conjunto de varias instrucciones que se ejecutan secuencialmente. Si una de las instrucciones dentro de una transacción falla, todas las acciones ya realizadas se anulan. Es decir, una transacción se puede realizar completamente o de ninguna manera.
Dónde se aplica SQL
En el índice TOPDB, la popularidad de los SGBD se determina por la frecuencia con la que se buscan en Google. En diciembre de 2024, los cinco primeros puestos los ocupan los SGBD relacionales, que juntos representan más del 70% de las consultas de búsqueda.
La clasificación de DB-Engines ofrece cifras similares. En diciembre de 2024, la cuota de mercado de los SGBD relacionales fue del 72%.
Sin bases de datos no habría sitios web, aplicaciones de red ni grandes sistemas de información; hay que almacenar toda la información en algún sitio. Al mismo tiempo, la mayoría son bases de datos relacionales, y para gestionarlas se necesita SQL. Por lo tanto, pocas ofertas de trabajo de desarrolladores backend prescinden del requisito de dominar SQL. Al menos, nosotros no hemos encontrado ninguna.
Pero la capacidad de trabajar con bases de datos no solo es útil para los programadores.
- Los analistas de datos trabajan directamente con la información «bruta». Cuanto mejor y más libremente se comuniquen con la base de datos, más fácil será obtener y procesar los datos necesarios en la forma necesaria.
- A los especialistas en marketing también les será útil SQL para resolver tareas analíticas.
- Los probadores necesitarán acceder a la base de datos, ya que es un componente importante de cualquier producto de información.
- Los directores, gestores y consultores de negocios, gracias a la información de la base de datos, podrán comprender mejor cómo funciona su negocio y tomar decisiones más meditadas.
Cómo trabajar con SQL: operadores básicos
Las consultas en SQL son similares al inglés natural y parecen oraciones completas.
Por ejemplo, si queremos obtener en la base de datos de nuestra empresa constructora el número de teléfono de «Cabañas», debemos escribir la siguiente instrucción:
SELECT tel
FROM contractors
WHERE id=1;
Se puede traducir al español como: «Selecciona el valor de la columna ‘tel’ en la tabla ‘contractors’, donde el valor de la columna ‘id’ es igual a uno». El símbolo ‘;’ indica el final de la instrucción.
Las instrucciones SQL no interactúan directamente con la base de datos, sino con el SGBD. Muchos fabricantes de SGBD querían ampliar la funcionalidad de las consultas, por lo que añadieron sus propias extensiones al lenguaje.
Así es como SQL adquirió dialectos incompatibles entre sí. Por ejemplo, PL/SQL, PL/pgSQL, T-SQL. Pero la estructura de las consultas y las instrucciones «integradas» básicas son las mismas de un dialecto a otro.
Aquí tienes una lista de los operadores SQL más comunes:
CREATE DATABASE
: crea una base de datos.DROP DATABASE
: elimina una base de datos.USE
: indica al SGBD con qué base de datos trabajar a partir de ahora.CREATE TABLE
: crea una nueva tabla dentro de la base de datos.DROP TABLE
: elimina una tabla.INSERT
: añade datos a una tabla. Se utiliza junto con los operadoresINTO
(indica la tabla) yVALUES
(se le pasan los valores que se deben añadir).UPDATE
: actualiza datos en una tabla.UPDATE
indica la propia tabla, y luego se utiliza el operadorSET
, tras el cual se escriben los nuevos valores para los atributos. Para indicar un registro concreto, se utiliza el operadorWHERE
.DELETE
: elimina datos de una tabla. Se utiliza delante del operadorFROM
.SELECT
: selecciona datos. Se le pasa el nombre del atributo o atributos. Si necesitas seleccionar todos los atributos, escribeSELECT *
. Se encuentra delante del operadorFROM
.FROM
: indica la tabla a la que se dirige la instrucción.WHERE
: indica la condición o condiciones que debe satisfacer la fila. Se escribe después del operadorFROM
. Es un elemento opcional de la instrucción. Si no se indica, la instrucción se aplica a todos los registros de la tabla.ORDER BY
: ordena los resultados de la consulta. Por defecto, en orden ascendente. Para ordenar en orden descendente, se puede utilizar la palabraDESC
.JOIN
: combina los valores de varias columnas. Hay varios tipos: interno (INNER
), externo (OUTER
), izquierdo (LEFT
) y derecho (RIGHT
).
Si te parece demasiado, puedes empezar rápido con: Aprende SQL en 20 Minutos
Vamos a escribir alguna consulta a la base de datos de nuestra empresa constructora.
SELECT *
FROM houses
WHERE status <> "Construido"
ORDER BY cost DESC;
Significa: selecciona todas las columnas de la tabla «houses
«, cuyo estado sea «No construido», y ordénalas por el atributo «cost
» en orden descendente. El SGBD nos devolverá una tabla como esta:
id_house | num_floors | status | cost | id_client | id_contractor |
---|---|---|---|---|---|
1 | 3 | En proyecto | 8000000 | NULL | NULL |
4 | 3 | Techado en proceso | 7000000 | 3 | 1 |
6 | 2 | Construcción segundo piso | 3000000 | 5 | 1 |
2 | 1 | Construcción de cimientos | 1400000 | 2 | 3 |
También existen funciones de agregación en SQL. Permiten realizar operaciones adicionales con los datos y se indican en lugar de los atributos. Las funciones de agregación se escriben en el formato FUNCTION (ATTRIBUTE)
.
Aquí tienes algunas de ellas:
COUNT
: cuenta el número de registros de una columna.SUM
: suma el contenido de los valores de una columna.MIN
: indica el valor mínimo de una columna.MAX
: indica el valor máximo de una columna.AVG
: calcula el valor medio de una columna.ROUND
: redondea el valor de una columna.
Para trabajar con instrucciones que contienen funciones de agregación, existen operadores especiales.
GROUP BY
: agrupa los valores de salida para las columnas a las que se ha aplicado una función de agregación.HAVING
: funciona comoWHERE
, pero se puede aplicar a funciones de agregación.
Por supuesto, estos no son todos los operadores, funciones y palabras clave que existen en SQL. Pero este conjunto ya ofrece amplias posibilidades para trabajar con bases de datos.
Qué recordar
- SQL es un lenguaje de programación para trabajar con bases de datos relacionales.
- Las bases de datos más comunes son las relacionales. Se pueden representar como un conjunto de tablas bidimensionales relacionadas entre sí mediante claves.
- SQL no accede a las bases de datos directamente, sino a través de sistemas de gestión de bases de datos, o SGBD.
- Los fabricantes de SGBD escriben extensiones propias para el lenguaje SQL: los dialectos. Pero el sintaxis básico es el mismo para todos ellos.
- Las consultas SQL constan de operadores y se combinan en oraciones completas, similares al inglés natural.