1
Curso de SQL Database and
query optimization
Profesor: Nicole Agila
jueves, 28 de agosto de 2025
2
AGENDA
• Tipos de datos
• ¿Cómo crear tablas? - Definición
• [Actividad] Construyendo mi segunda tabla
• Restricciones (CONSTRAINTS)
• Comandos y Consultas
jueves, 28 de agosto de 2025
3
Tipos de datos
La gestión de bases de datos requiere comprender los diferentes tipos de datos disponibles
en MySQL.
● Cadenas (CHAR, VARCHAR, TEXT)
● Numéricos (INT, FLOAT, DECIMAL)
● Fechas y tiempos (DATE, DATETIME, TIMESTAMP)
• Los diferentes tipos de datos se almacenan de forma diferente y ocupan distintos espacios.
• Algunas operaciones sólo se aplican a determinados tipos de datos.
jueves, 28 de agosto de 2025
4
Strings
• Comparación de tipos
Tipo Descripción Capacidad • CHAR reserva un espacio fijo incluso si el
valor es corto.
CHAR Longitud fija, se rellena con Hasta 255
espacios caracteres • VARCHAR ajusta su tamaño al contenido,
optimizando almacenamiento.
VARCHAR Longitud variable, almacena Hasta 65 535 • TEXT se usa para contenidos extensos como
sólo lo necesario caracteres notas o descripciones.
TEXT Campo de texto largo para Hasta 65 535
grandes fragmentos caracteres
• Un string es una secuencia de caracteres, como letras o signos de puntuación.
• VARCHAR es un tipo de datos de cadena flexible y popular en SQL.
jueves, 28 de agosto de 2025
5
Numéricos
Tamaños de almacenamiento
9
Tipos de enteros
8
7 • TINYINT/SMALLINT/INT/BIGINT representan
6 números enteros de diferente rango.
Tamaño (bytes)
4
• Se pueden especificar como UNSIGNED
para permitir sólo valores positivos.
3
Tipos reales
2
1 • FLOAT y DOUBLE almacenan números en
0 coma flotante; DECIMAL guarda
TINYINT SMALLINT INT BIGINT FLOAT DOUBLE DECIMAL decimales exactos.
Tipo numérico
• Integers almacenan números enteros.
• INT es un tipo de datos entero flexible y popular en SQL.
jueves, 28 de agosto de 2025
6
Dates
DATE DATETIME TIMESTAMP
Guarda sólo la fecha Fecha y hora Fecha y hora relativas a la
(aaaa-mm-dd) (aaaa-mm-dd hh:mm:ss) zona UTC
Rango: 1000-01-01 00:00:00 a 9999-12-31 Rango: 1970-01-01 00:00:01 a 2038-01-19
Rango: 1000-01-01 a 9999-12-31
23:59:59 03:14:07
jueves, 28 de agosto de 2025
7
Resumen: Tipos de Datos
Elección de tipo de dato
• Usa CHAR para campos cortos y de longitud fija como códigos.
• Usa VARCHAR para textos variables (nombres, direcciones).
• Usa tipos numéricos apropiados al rango necesario; emplea DECIMAL para importes exactos.
• Elige DATE/DATETIME/TIMESTAMP según requieras sólo fecha, fecha y hora o marca temporal
relativa a UTC.
jueves, 28 de agosto de 2025
8
Actividad 1
Actividad publicada en el aula virtual:
1. Crea una base de datos llamada practica_sql.
2. Accede a la base de datos practica_sql.
3. Crea una tabla llamada estudiantes con las siguientes columnas:
• id (número entero).
• nombre (cadena de máximo 50 caracteres).
• promedio (número decimal con 2 decimales)
• email (cadena de máximo 80 caracteres)
• fecha_inscripcion (fecha y hora)
jueves, 28 de agosto de 2025
9
Restricciones y Claves
Clave primaria NOT NULL UNIQUE
Identifica de manera Obliga a proporcionar Evita duplicados en una
única cada fila un valor columna
jueves, 28 de agosto de 2025
10
Detalles de las restricciones
CLAVE PRIMARIA
• Un campo (o combinación) que identifica de
forma única cada registro.
CREATE TABLE clientes (
• Implica unicidad y valores NOT NULL. id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE NOT NULL,
nombre VARCHAR(50) NOT NULL
UNIQUE );
• Asegura valores distintos, pero permite un
único valor NULL.
NOT NULL
• Obliga a insertar un valor; no se permiten
registros incompletos.
jueves, 28 de agosto de 2025
11
Ejemplo
id email nombre Resultado
1 juan@[Link] Juan ✔ insertado
2 ana@[Link] Ana ✔ insertado
2 pedro@[Link] Pedro ✖ error (clave duplicada)
3 ana@[Link] Luis ✖ error (email único)
4 ✖ error (NOT NULL)
Observaciones
• Cada valor de id debe ser único y no puede repetirse.
• El email es único: duplicar produce error.
• NOT NULL obliga a insertar nombre y email.
jueves, 28 de agosto de 2025
12
Resumen: Restricciones
• La clave primaria asegura la unicidad de cada registro y no admite valores nulos.
• UNIQUE garantiza que no haya duplicados; puede permitir un valor NULL.
• NOT NULL obliga a proporcionar información, evitando datos incompletos.
• Diseñar tablas con estas restricciones mejora la calidad y coherencia de la información.
jueves, 28 de agosto de 2025
13
Actividad 2
Actividad publicada en el aula virtual (parte 2):
1. Elimina la tabla estudiante y créala nuevamente con las mismas columnas, pero agregando las siguientes
restricciones:
• La columna id debe ser clave primaria y auto incrementable
• La columna nombre no debe aceptar valores nulos
• La columna email debe ser única
• La columna promedio debe ser mayor que 0
2. Inserta tres registros en la tabla estudiantes con los siguientes datos:
• Registro 1: Nombre: Ana López, Promedio: 85.75, Email: [Link]@[Link], Fecha: 2025-01-15 09:30:00
• Registro 2: Nombre: Carlos Pérez, Promedio: 92.50, Email: [Link]@[Link], Fecha: 2025-01-20 14:15:00
• Registro 3: Nombre: María Gómez, Promedio: 78.25, Email: [Link]@[Link], Fecha: 2025-01-18
11:45:00
jueves, 28 de agosto de 2025
14
Comandos y Consultas
• Definición de tablas (CREATE TABLE) y carga eficiente de datos.
• Exploración de la estructura con DESCRIBE.
• Recuperación de información con SELECT: *, columnas, DISTINCT y WHERE
jueves, 28 de agosto de 2025
15
Create, Load
CREATE TABLE LOAD DATA INFILE
Importa rápidamente grandes
Define la estructura: nombre de la
volúmenes desde archivos CSV u otros
tabla, columnas, tipos y restricciones.
Ejemplo: formatos.
CREATE TABLE productos ( id INT PRIMARY KEY, precio Permite opciones como REPLACE,
DECIMAL(8,2) NOT NULL );
IGNORE, FIELDS TERMINATED BY ','.
jueves, 28 de agosto de 2025
16
LOAD DATA INFILE
Tiene 3 variantes: Sintaxis Básica
1. LOAD DATA INFILE (servidor) - Archivo en
el servidor MySQL. LOAD DATA INFILE 'ruta/[Link]'
INTO TABLE nombre_tabla
2. LOAD DATA LOCAL INFILE (cliente) - FIELDS TERMINATED BY ','
Archivo en tu computadora. LINES TERMINATED BY '\n'
IGNORE 1 ROWS; -- Si tiene encabezados
3. Table Import Wizard - Interfaz gráfica de
Workbench
En entornos corporativos, LOCAL INFILE está
deshabilitado por seguridad.
La alternativa práctica es el Import Wizard.
jueves, 28 de agosto de 2025
17
Explorar tablas con DESCRIBE
DESCRIBE tabla
Field Type Null Key Default Extra
Muestra metadatos de una tabla: nombre del
campo, tipo de dato, si acepta nulos y claves. id int NO PRI auto_increment
email varchar(100) NO UNI
nomb varchar(50) NO
Utilidad re
• Permite verificar la estructura antes de insertar
datos.
• Ayuda a entender tablas existentes en un
proyecto colaborativo.
jueves, 28 de agosto de 2025
18
Consultas SELECT
SELECT *
Devuelve todas las columnas de la tabla. Útil para exploración inicial.
SELECT columnas
Permite especificar las columnas necesarias, optimizando ancho de banda.
SELECT DISTINCT
Elimina duplicados y muestra valores únicos.
WHERE
Filtra registros que cumplen una condición (>, =, LIKE, BETWEEN, etc.).
jueves, 28 de agosto de 2025
19
Consultas SELECT - Ejemplos
-- Seleccionar todas las columnas
SELECT * FROM clientes;
-- Seleccionar columnas específicas
SELECT nombre, email FROM clientes;
-- Obtener valores únicos
SELECT DISTINCT email FROM clientes;
-- Filtrar registros
SELECT * FROM clientes WHERE id > 10;
jueves, 28 de agosto de 2025
20
Aspectos importantes
• DEFINE: Utiliza CREATE TABLE para establecer columnas, tipos y restricciones.
• CARGA: Emplea LOAD DATA INFILE para importar volúmenes de datos de forma eficiente.
• EXPLORA: Revisa la estructura con DESCRIBE para entender la tabla antes de trabajar.
• CONSULTA: Usa SELECT y WHERE para recuperar y filtrar la información necesaria.
jueves, 28 de agosto de 2025
21
Aspectos importantes
• Selecciona cuidadosamente los tipos de datos para optimizar almacenamiento y
rendimiento.
• Aplica restricciones (PRIMARY KEY, UNIQUE, NOT NULL) para mantener la coherencia
de los datos.
• Usa CREATE, DESCRIBE y LOAD DATA para gestionar y poblar tus tablas de manera
eficiente.
• Aprovecha SELECT y WHERE para obtener información precisa y útil.
jueves, 28 de agosto de 2025
22
Actividad 3
Actividad publicada en el aula virtual (parte 3):
1. Utiliza DESCRIBE para ver la estructura de la tabla estudiantes
2. Realiza una consulta que muestre todos los registros de la tabla estudiantes
3. Realiza una consulta que muestre únicamente las columnas nombre y promedio
4. Realiza una consulta que muestre únicamente los estudiantes con promedio mayor a 80
jueves, 28 de agosto de 2025
23
Preguntas y dudas
jueves, 28 de agosto de 2025
24
Próxima Clase
1. Subir la actividad 1, 2 y 3 al aula virtual.
2. Material por revisar previo a la sesión 3: Comandos WHERE, Operadores de lógica (Control
de Lectura)
jueves, 28 de agosto de 2025