Apuntes sobre Mysql

“SET PASSWORD has no significance for user 'root'@'localhost'”

1. ¿Qué es SQL?

SQL (Structured Query Language) es un lenguaje creado por IBM, estándar de facto que usamos para operar con bases de datos relacionales. No es un lenguaje de programación en sentido estricto, pero sí nos permite decirle a la base de datos qué datos queremos ver, modificar o eliminar, y cómo queremos organizarlos.

En esta lección trabajaremos con Sakila, una base de datos de ejemplo que simula un videoclub ficticio con películas, actores, clientes y alquileres. Es perfecta para experimentar en un entorno realista sin riesgos.

2. Cómo se lee una sentencia SQL

Una consulta SQL se construye como una frase bien ordenada: primero decimos qué queremos (como SELECT), luego de dónde y, si hace falta, bajo qué condiciones.

Por ejemplo:

SELECT title, rental_rate FROM film WHERE rental_rate < 1.00;

Se puede leer como: "Muestra el título y el precio de alquiler de las películas cuya tarifa sea menor a 1 dólar".

Las sentencias suelen terminar en punto y coma (;), especialmente si estás ejecutando varias en bloque.

3. Errores comunes al empezar

Antes de empezar a escribir consultas, es importante conocer estos errores típicos para evitarlos:

  • Usar comillas dobles (" ") para textos, cuando deben ir entre comillas simples ('Texto').
  • Elegir nombres problemáticos, como select o order, para columnas o tablas.
  • Confundir el orden de ejecución: aunque escribas SELECT ... WHERE ... ORDER BY, internamente se ejecuta primero el FROM, luego el WHERE, etc.

Nota: El orden lógico de ejecución en SQL es: FROMWHEREGROUP BYHAVINGSELECTORDER BYLIMIT. No coincide con el orden en que lo escribes. Entender esto explica por qué no puedes usar un alias del SELECT dentro del WHERE.

4. SELECT - Tu primera consulta

SELECT es el comando más usado de SQL: con él pedimos a la base datos que nos muestre información.

Sintaxis básica

SELECT columna1, columna2, columna3
FROM nombre_tabla;

Ejemplos prácticos

Consulta simple:

SELECT first_name, last_name FROM customer;

Esto recupera los nombres y apellidos de todos los clientes.

Seleccionar todas las columnas:

SELECT * FROM actor;

El asterisco (*) es una abreviatura para seleccionar todas las columnas de la tabla.

Cálculos básicos:

SELECT AVG(rental_rate) FROM film;

Aquí obtenemos el precio medio de alquiler entre todas las películas.

DISTINCT - Eliminar duplicados

DISTINCT filtra los resultados para que cada valor aparezca una sola vez. Es útil cuando quieres saber qué valores diferentes existen en una columna.

-- Sin DISTINCT: devuelve una fila por cada película (con clasificaciones repetidas)
SELECT rating FROM film;

-- Con DISTINCT: devuelve solo los valores únicos
SELECT DISTINCT rating FROM film;

El segundo ejemplo devuelve únicamente las clasificaciones que existen: G, PG, PG-13, R, NC-17. Sin DISTINCT obtendrías 1000 filas, una por película.

-- ¿Cuántos países distintos tienen nuestros clientes?
SELECT DISTINCT country_id FROM address;

5. WHERE - Filtrar resultados

Para limitar qué datos queremos ver, usamos la cláusula WHERE. Esta se aplica a cada fila verificando valores específicos para determinar si deben incluirse en los resultados.

Sintaxis

SELECT columna1, columna2
FROM tabla
WHERE condicion
AND/OR otra_condicion;

Operadores de comparación

Operador Descripción Ejemplo
= Igual a precio = 100
!= o <> Distinto de stock != 0
< Menor que edad < 18
<= Menor o igual que cantidad <= 10
> Mayor que salario > 2000
>= Mayor o igual que puntuacion >= 8.5

Ejemplos prácticos

Filtro simple:

SELECT first_name, last_name
FROM customer
WHERE active = 1;

Muestra solo los clientes activos.

Filtro con texto:

SELECT title, rental_rate
FROM film
WHERE rating = 'PG-13';

Muestra películas con clasificación PG-13.

Múltiples condiciones:

SELECT title, rental_rate
FROM film
WHERE rental_rate > 2.00 AND rating = 'R';

Películas con tarifa mayor a $2 Y clasificación R.

6. Operadores especiales

BETWEEN - Rangos de valores

SELECT title, rental_rate
FROM film
WHERE rental_rate BETWEEN 2.00 AND 4.00;

Películas con tarifa entre 2 y 4 (inclusive).

IN - Lista de valores

SELECT title, rating
FROM film
WHERE rating IN ('G', 'PG', 'PG-13');

Películas con cualquiera de estas tres clasificaciones.

NOT - Negación

SELECT title, rating
FROM film
WHERE rating NOT IN ('NC-17', 'R');

Películas que NO tienen clasificación NC-17 o R.

LIKE - Buscar por patrón

LIKE permite buscar valores de texto que coincidan con un patrón, usando dos comodines:

  • %: representa cero o más caracteres (cualquiera)
  • _: representa exactamente un carácter (cualquiera)
-- Películas cuyo título empiece por 'ACE'
SELECT title FROM film WHERE title LIKE 'ACE%';

-- Películas cuyo título termine en 'DINOSAUR'
SELECT title FROM film WHERE title LIKE '%DINOSAUR';

-- Películas que contienen 'GOLD' en cualquier posición
SELECT title FROM film WHERE title LIKE '%GOLD%';

-- Clientes cuyo nombre tiene exactamente 4 caracteres
SELECT first_name FROM customer WHERE first_name LIKE '____';

LIKE no distingue mayúsculas de minúsculas con la mayoría de collations (como utf8mb4_spanish_ci, donde la ci significa case insensitive).

¿Cuándo usar LIKE y cuándo =? Usa = cuando sepas el valor exacto. Usa LIKE cuando solo sepas una parte del valor, o cuando necesites patrones.

Nota: LIKE '%texto%' con un comodín al inicio no puede usar índices, así que en tablas grandes es lento. Si necesitas búsquedas de texto frecuentes y rápidas, considera FULLTEXT INDEX con MATCH ... AGAINST, que está diseñado para eso.

IS NULL / IS NOT NULL - Valores vacíos

NULL en SQL no es cero, ni una cadena vacía, ni falso. Es la ausencia de valor: significa "desconocido" o "no aplicable". Y tiene una particularidad importante: no se puede comparar con =.

-- INCORRECTO: esto nunca devuelve resultados
SELECT title FROM film WHERE description = NULL;

-- CORRECTO: para buscar valores vacíos usa IS NULL
SELECT title FROM film WHERE description IS NULL;

-- Para buscar valores que SÍ tienen dato
SELECT title FROM film WHERE description IS NOT NULL;

¿Por qué = NULL no funciona? Porque NULL significa "desconocido", y MySQL no puede saber si un valor desconocido es igual a otro valor desconocido. La comparación devuelve siempre NULL (ni verdadero ni falso), por lo que ninguna fila pasa el filtro.

-- Películas sin fecha de estreno registrada
SELECT title FROM film WHERE release_year IS NULL;

-- Clientes con dirección registrada
SELECT first_name, last_name FROM customer WHERE address_id IS NOT NULL;

7. ORDER BY - Ordenar resultados

Para organizar los resultados usamos ORDER BY:

Sintaxis

SELECT columnas
FROM tabla
WHERE condiciones
ORDER BY columna ASC/DESC;

Ejemplos

Orden ascendente (por defecto):

SELECT title, rental_rate
FROM film
ORDER BY rental_rate;

Películas ordenadas por precio de menor a mayor.

Orden descendente:

SELECT title, rental_rate
FROM film
ORDER BY rental_rate DESC;

Películas ordenadas por precio de mayor a menor.

Múltiples criterios:

SELECT title, rating, rental_rate
FROM film
ORDER BY rating, rental_rate DESC;

Primero por clasificación (A-Z), luego por precio (mayor a menor).

8. LIMIT - Limitar resultados

Para obtener solo un número específico de resultados:

SELECT title, rental_rate
FROM film
ORDER BY rental_rate DESC
LIMIT 5;

Muestra las 5 películas más caras de alquilar.

Resumen

En esta lección has aprendido:

  • La sintaxis básica de SQL y cómo leer una consulta
  • A usar SELECT para obtener datos de una tabla
  • DISTINCT para eliminar duplicados en los resultados
  • A filtrar con WHERE, BETWEEN, IN, LIKE e IS NULL
  • A ordenar y limitar resultados con ORDER BY y LIMIT

En la próxima lección: Modificación de datos: cómo insertar, actualizar y eliminar registros con INSERT, UPDATE y DELETE.

TOP