Aprender a usar SQL: introducción con ejemplos

La sintaxis del lenguaje de programación SQL se basa en el álgebra relacional y, por tanto, se distingue de otros lenguajes de programación. Para aprender a usar SQL, se requiere tener conocimientos de la sintaxis del lenguaje y con ejemplos ilustrativos se vuelve más fácil.

Conceptos básicos de la sintaxis SQL

En general, la sintaxis es la “notación” de un lenguaje de programación. La sintaxis determina qué tipos de estructuras básicas de código existen y cómo pueden unirse entre sí. Entender la sintaxis es un requisito fundamental para poder leer y escribir código en el respectivo lenguaje de programación.

Las estructuras sintácticas más importantes de SQL son las sentencias SQL con las respectivas cláusulas que estas puedan contener. Aunque técnicamente no es del todo correcto, ambas se denominan generalmente “comandos SQL”. Además, hay otras construcciones sintácticas que presentamos para una mayor claridad:

Término Equivalente en inglés Explicación Ejemplo
Sentencia Statement Ordena al DBMS que realice una acción; termina con un punto y coma CREATE TABLE People;
Cláusula Clause Modifica una sentencia; solo puede utilizarse dentro de una sentencia WHERE, HAVING
Expresión Expression Al ser evaluada, devuelve un determinado valor 6 * 7
Identificador Identifier Nombre de un objeto, una variable o un procedimiento de la base de datos; puede ser cualificado o no cualificado dbname.tablename / tablename
Predicado Predicate Expresión que se evalúa como TRUE, FALSE o UNKNOWN Age < 42
Consulta Query Sentencia especial; retorna el conjunto de resultados de los registros SELECT Name FROM People WHERE Age < 42;
Función Function Procesa uno o más valores; normalmente crea un nuevo valor UPPER('text') -- Devuelve 'TEXT'
Comentario Comment Se utiliza para realizar comentarios en el código SQL; el RBDMS lo ignora -- Comentario hasta el final de la línea / /*Si procede, comentario de varias líneas*/
Nota

Los comandos SQL, como SELECT y CREATE TABLE, suelen ir en mayúsculas. Sin embargo, SQL no distingue entre mayúsculas y minúsculas. Se trata únicamente de una convención muy extendida.

¿Cómo se ejecuta el código SQL?

El código SQL existe como código fuente dentro de un archivo de texto, y solo puede cobrar vida en un entorno de ejecución adecuado. Un intérprete de SQL lee el código fuente y lo convierte en acciones de un RDBMS. Hay dos enfoques principales al respecto:

  1. Ejecutar código SQL en una sesión interactiva

Con este enfoque, el código SQL se introduce o se copia y pega directamente en una ventana de texto. Entonces, se ejecuta el código SQL y se muestra el resultado. Ahí, el usuario tiene la oportunidad de modificar el código y volver a ejecutarlo. La rápida secuencia de manipulación del código y visualización de los resultados hace que este enfoque sea el más adecuado para aprender y crear consultas complejas.

  1. Ejecutar el código SQL como script

Con este enfoque, se ejecuta línea por línea todo un archivo con código SQL. El feedback solo se transmite al usuario al final de la ejecución. Este enfoque es el más adecuado para automatizar procesos e importar copias de seguridad de bases de datos MySQL con MySQL Dump.

Interfaz Descripción Ejemplos
Interfaz de línea de comandos (CLI) Interfaz basada en texto; el código SQL se introduce y ejecuta, el resultado se muestra en forma de texto mysql, psql, mysqlsh
Interfaz gráfica de usuario (GUI) El código SQL se introduce en una ventana de texto y/o se genera en respuesta a la interacción del usuario; el código SQL se ejecuta, el resultado se muestra en forma de tablas phpMyAdmin, MySQL Workbench, HeidiSQL
Interfaz de programación de aplicaciones (API) Permite la comunicación directa con un RDBMS; el código SQL se introduce como string en el código del respectivo lenguaje de programación y se ejecuta; los resultados están disponibles como estructuras de datos para su posterior uso PHP Data Objects (PDO), Connector/J (Java), Connector/Python, C API

Utilizar SQL como ejemplo para configurar la gestión de productos

La forma más fácil de aprender un lenguaje de programación es escribir y ejecutar el código uno mismo. Para ello, primero debemos crear una minibase de datos para poder ejecutar consultas en ella. Después, utilizaremos el Online SQL interpreter del sitio web sql.js. Accede al enlace del sitio web y sustituye el código SQL ya introducido por el código de nuestros ejemplos. Ejecuta el código fragmento a fragmento para obtener los resultados mostrados.

Procedimiento básico para configurar una base de datos SQL

A modo de ejemplo, vamos a crear un sistema de gestión de productos comerciales, tal y como se utilizaría en una tienda física u online. Para ello, vamos a definir los requisitos a grandes rasgos:

  • Hay una serie de productos de los que tenemos un número determinado de existencias en todo momento.
  • Nuestra cartera consta de varios clientes.
  • Un cliente realiza un pedido que puede contener varios productos.
  • Guardamos la fecha y la persona que realiza cada pedido, además de los productos y la cantidad que se ha pedido de cada uno.

Primero convertimos estos requisitos en una descripción abstracta y luego en código SQL. Seguimos el siguiente guion:

  1. Crear el modelo
  2. Definir el esquema
  3. Introducir los registros de datos
  4. Definir las consultas

Crear un modelo de entidades y relaciones

El primer paso se realiza en papel o con herramientas específicas de modelado. Recogemos información sobre el sistema que vamos a modelar y extraemos sus entidades y relaciones de él. Esto suele hacerse con un diagrama de Entity Relationship (ER).

¿Qué entidades hay y cómo se relacionan? Las entidades son clases de cosas. En nuestro ejemplo de gestión de productos existen las entidades producto, cliente y pedido. Cada entidad requiere una tabla. Debido a las características especiales del modelo relacional, pueden añadirse otras tablas para modelar las relaciones. Para entender todo esto bien y aplicarlo correctamente, hace falta experiencia.

Una cuestión fundamental es cómo se relacionan las entidades entre sí. Para ello, han de considerarse los dos sentidos de una relación y distinguir entre singular y plural. Utilizando el ejemplo de la relación propietario-coche:

  1. “Un propietario es potencialmente dueño de varios coches”
  2. “Un coche pertenece únicamente a un propietario”

Surgen tres posibles modelos de relación entre dos entidades:

Relación Entidades Desde la izquierda Desde la derecha
Relación 1:1 Coche:Matrícula „Un coche tiene únicamente una matrícula“ „Una matrícula pertenece únicamente a un coche“
Relación 1:n Propietario:Coche „Un propietario es potencialmente dueño de varios coches“ „Un coche pertenece únicamente a un propietario“
Relación m:n Coche:Carretera „Un coche circula por varias carreteras“ „En una carretera circulan varios coches“

Implementar productos

El primer paso es implementar la tabla de productos. Para ello, hay que definir un esquema, introducir los registros de datos y ejecutar algunas consultas sencillas a modo de prueba. Entremos en detalle para cada uno de los pasos.

Definir el esquema

El principal comando SQL utilizado para definir las tablas de la base de datos es CREATE TABLE. Este comando crea una tabla, le asigna un nombre y define las propiedades de las columnas. Al mismo tiempo, se definen los tipos de datos y, si es necesario, las limitaciones de los valores que se van a almacenar:

DROP TABLE IF EXISTS Products;
CREATE TABLE Products ( product_id int, product_name text, stocked int, price int );
sql
Nota

Echa mano de una sentencia DROP TABLE IF EXISTS antes de definir la tabla para eliminar cualquier tabla que existiera previamente y permitir que el mismo código SQL pueda ejecutarse varias veces sin generar mensajes de error.

Introducir registros de datos

Crea varios registros de prueba y luego utiliza tanto el comando SQL INSERT INTO como la función VALUES para rellenar los campos:

INSERT INTO Products VALUES (10, 'ABC Product', 74, 1050);
INSERT INTO Products VALUES (20, 'KLM Product', 23, 750);
INSERT INTO Products VALUES (30, 'XYZ Product', 104, 350);
sql

Definir las consultas

Redacta una consulta sencilla para comprobar el estado de la tabla de productos. Usa el comando SELECT FROM y emite la tabla completa:

SELECT * FROM Products;
sql

Haz también una consulta algo más compleja que calcule el valor total de los productos almacenados:

SELECT product_name AS 'Name', (stocked * price) AS 'Value' FROM Products;
sql

Implementar el resto de tablas

En la siguiente sección tendrás que crear el resto de tablas necesarias. Procede de la misma manera que para la tabla de productos. Primero, hay que crear la tabla de clientes:

DROP TABLE IF EXISTS Customers;
CREATE TABLE Customers ( customer_id int, customer_name text, contact text );
sql

Guarda los registros de datos de los clientes. En este ejemplo, guardamos los de dos clientes:

INSERT INTO Customers VALUES (100, 'EDC Customer', 'ED@example.com');
INSERT INTO Customers VALUES (200, 'WVU Customer', 'WV@example.com');
sql

Para verificarlo, emite la tabla de clientes:

SELECT * FROM Customers;
sql

El siguiente paso es crear la tabla de pedidos:

DROP TABLE IF EXISTS Orders;
CREATE TABLE Orders ( order_id int, customer_id int, order_date text );
sql

Aquí, introducimos tres pedidos a modo de ejemplo. Fíjate que asignamos un identificador de clave primaria como primer valor de los registros. Sin embargo, el segundo valor es el identificador de clientes ya existentes a modo de claves externas. Además, también almacenamos la fecha del pedido:

INSERT INTO Orders VALUES (1000, 100, '2022-05-03');
INSERT INTO Orders VALUES (1001, 100, '2022-05-04');
INSERT INTO Orders VALUES (1002, 200, '2022-05-08');
sql

Emite los pedidos para comprobar:

SELECT * FROM Orders;
sql

Por último, hace falta una tabla para los productos contenidos en un pedido y su número. Se trata de una relación m:n ya que un pedido puede contener varios productos y un producto puede aparecer en varios pedidos. Define una tabla que contenga los identificadores de los pedidos y los productos como claves externas:

DROP TABLE IF EXISTS OrderItems;
CREATE TABLE OrderItems ( orderitem_id int, order_id int, product_id int, count int );
sql

Introduce algunos productos pedidos. Selecciona los identificadores (ID) de los pedidos y los productos para que haya un pedido con dos productos y otro con un solo producto:

INSERT INTO OrderItems VALUES (10001, 1000, 10, 3);
INSERT INTO OrderItems VALUES (10002, 1000, 20, 2);
INSERT INTO OrderItems VALUES (10003, 1002, 30, 12);
sql

Emite los productos pedidos a modo de comprobación:

SELECT * FROM OrderItems;
sql

Realizar consultas complejas

Si has ejecutado todos los fragmentos de código mostrados hasta el momento, deberías ser capaz de entender la estructura de nuestra base de datos de prueba. Pasemos ahora a consultas más complejas que demuestran el potencial del lenguaje SQL. Primero, haremos una consulta que unifique datos repartidos por varias tablas. Utilizaremos un comando SQL JOIN para unir los datos de la tabla de clientes con la de pedidos. Al hacerlo, nombramos algunas de las columnas y establecemos que el identificador del cliente coincida como una condición JOIN. Ten en cuenta que utilizamos identificadores cualificados para distinguir las columnas de las dos tablas:

SELECT customers.customer_name as 'Customer', customers.customer_id, orders.order_id, orders.order_date AS 'Date' FROM Customers JOIN Orders ON Orders.customer_id = Customers.customer_id ORDER BY Customers.customer_id;
sql

Por último, pero no por ello menos importante, utilizamos otro comando JOIN para calcular el coste total de los productos pedidos:

SELECT OrderItems.order_id, OrderItems.orderitem_id AS 'Order Item', Products.product_name AS 'Product', Products.price AS 'Unit Price', OrderItems.count AS 'Count', (OrderItems.count * Products.price) AS 'Total' FROM OrderItems JOIN Products ON OrderItems.product_id = Products.product_id;
sql
Consejo

Si deseas saber qué es SQL, necesitas ayuda con problemas específicos del lenguaje de bases de datos o simplemente quieres ampliar tus conocimientos, te recomendamos los siguientes artículos:

¿Le ha resultado útil este artículo?
Page top