-
Notifications
You must be signed in to change notification settings - Fork 3
07. Bases de Datos Relacionales
Note
Puedes encontrar las actividades relacionadas con esta sección en el siguiente enlace:
GitHub - Actividades de MySQL
Una base de datos es un conjunto organizado de datos que se utiliza para representar y modelar aspectos relevantes de la realidad. Estos datos se mantienen de forma permanente y están destinados a ser procesados y transformados en información útil y significativa.
Una base de datos relacional organiza los datos en tablas compuestas por filas (registros únicos) y columnas (campos de los registros). Estas bases de datos destacan por su:
- Organización eficiente y flexible de los datos.
- Integridad de datos mediante restricciones y reglas.
- Facilidad de manipulación usando SQL para consultas complejas.
Tienen 3 características:
- Modelo relacional: Los datos se organizan en conjuntos de tablas compuestas por columnas y filas.
- Relaciones predefinidas: Permite representar conexiones entre datos de forma estructurada.
- Uso de SQL: Facilita la recuperación, modificación, creación y gestión de datos.
-
Tablas: Representan un conjunto de objetos (entidad).
- Se refiere a un objeto del mundo real con una existencia independiente. Cada entidad posee atributos, que son características particulares que la describen.
- Filas: Representa un objeto con existencia independiente (un registro).
-
Columnas: Representa las características específicas de cada objeto (atributos).
- Representa una característica o propiedad de una entidad en el modelo entidad-relación. Los atributos de una entidad deben cumplir con los siguientes criterios:
- Completos: Deben capturar toda la información relevante del objeto desde la perspectiva del sistema.
- Plenamente desarrollados: Cada atributo debe describir un aspecto distinto de la entidad.
- Mutuamente independientes: Cada atributo debe ser capaz de tomar un valor sin depender de los valores de otros atributos.
- Representa una característica o propiedad de una entidad en el modelo entidad-relación. Los atributos de una entidad deben cumplir con los siguientes criterios:
En el modelo de bases de datos, una relación representa el conjunto de asociaciones entre las instancias de dos entidades.
- Las relaciones son bidireccionales, lo que significa que la conexión entre las entidades funciona en ambas direcciones.
Note
Es fundamental que las relaciones entre tablas estén correctamente definidas para garantizar la integridad y coherencia de la información almacenada.
Un identificador, o clave primaria, es un atributo (o conjunto de atributos) que permite identificar de manera única cada fila en una tabla.
- Ninguna otra fila puede tener el mismo valor en este atributo.
- Ejemplo:
IDde un cliente o producto.
Las claves foráneas son atributos que establecen relaciones entre diferentes tablas:
- Conectan información de una tabla con otra.
- Generalmente, una clave foránea en una tabla corresponde a la clave primaria en otra.
- Por ejemplo: La clave primaria
IDde la tablaUsuariospuede ser clave foránea en la tablaPedidos.
- Por ejemplo: La clave primaria
- Es recomendable utilizar identificadores numéricos siempre que sea posible:
- Son más eficientes y fáciles de manejar en el almacenamiento y recuperación de datos.
- Define correctamente las restricciones de claves primarias y foráneas para garantizar relaciones sólidas entre las tablas.
- SQL (Structured Query Language) es el estándar para interactuar con bases de datos relacionales.
- Permite:
- Filtrar, ordenar y agregar datos.
- Manipular grandes conjuntos de datos eficientemente.
Sublenguajes en SQL
-
DDL (Data Definition Language): Define y modifica estructuras de bases de datos.
Comandos:CREATE,ALTER,DROP. -
DML (Data Manipulation Language): Manipula datos almacenados.
Comandos:SELECT,INSERT,UPDATE,DELETE. -
DCL (Data Control Language): Controla permisos y accesos.
Comandos:GRANT,REVOKE. -
TCL (Transaction Control Language): Maneja transacciones.
Comandos:COMMIT,ROLLBACK,SAVEPOINT.
Un DBMS (Database Management System), administra, organiza y asegura el acceso a los datos.
MySQL es un DBMS popular y de código abierto que implementa SQL.
💡 Script: Archivo ejecutable con instrucciones en SQL u otro lenguaje para realizar tareas específicas.
- Servidor MySQL: Controla la gestión y acceso a bases de datos.
- Base de datos: Contiene datos organizados en tablas.
- Filas y Columnas: Cada fila es un registro único; cada columna representa un atributo específico.
- Estructura Predefinida: Define las columnas y tipos de datos antes de insertar datos.
- Relaciones: Usan claves primarias y foráneas para conectar datos entre tablas.
- Integridad de los Datos: Se aplican restricciones para garantizar la validez y consistencia de los datos.
Ejemplo Tabla "clientes":
| cliente_id | nombre | apellido | correo_electronico | telefono | fecha_registro |
|---|---|---|---|---|---|
| 1 | Juan | Pérez | juan@example.com | 555123456 | 2023-09-26 |
| 2 | María | López | maria@example.com | 555789012 | 2023-09-26 |
Cada fila en la tabla representa un cliente individual, y cada columna almacena un atributo específico de los clientes.
- cliente_id: Identificador único (clave primaria).
- fecha_registro: Fecha en que el cliente se registró.
Note
Las tablas son la base para organizar datos en filas (registros) y columnas (atributos). Al crear tablas, es posible definir restricciones como claves primarias y foráneas para asegurar integridad y organización.
Note
Para ingresar al servidor MySQL: mysql -u tu_usuario -p
- Mostrar bases de datos disponibles:
SHOW DATABASES;
- Incluye bases de datos del sistema como
information_schemaymysql.- Bases de datos de ejemplo para práctica:
sakilayworld.
- Seleccionar una base de datos:
USE sakila;- Listar tablas en la base de datos seleccionada:
SHOW TABLES;-
Consultar datos en tablas:
-
Consulta todas las filas y columnas:
SELECT * FROM nombre_tabla;
-
Mostrar campos específicos:
SELECT campo1, campo2 FROM nombre_tabla;
Ejemplo:
SELECT name FROM category; SELECT name, category_id FROM category; ```
-
*Muestra todos los campos.- Es posible seleccionar campos específicos separados por comas.
El DDL se utiliza para definir y estructurar la arquitectura de una base de datos, incluyendo bases de datos, tablas, campos e índices. A diferencia del DML, se enfoca en la definición y estructura de la base de datos.
Dentro de DDL, se encuentran comandos que definen, modifican o eliminan estructuras de la base de datos, como:
-
CREATE: Crea nuevas bases de datos, tablas, campos e índices.
CREATE DATABASE nombre_base_datos; CREATE TABLE nombre_tabla ( columna1 tipo_dato restriccion_opcional, columna2 tipo_dato restriccion_opcional );
- Ejemplo:
CREATE TABLE empleados (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
edad INT,
salario DECIMAL(10, 2)
);-
DROP: Elimina bases de datos, tablas o índices.
DROP DATABASE nombre_base_datos; DROP TABLE nombre_tabla;
-
ALTER: Modifica tablas agregando o cambiando columnas.
ALTER TABLE nombre_tabla ADD nueva_columna tipo_dato; ALTER TABLE nombre_tabla MODIFY columna_existente nuevo_tipo_dato;
Entre los comunes se encuentran:
- INTEGER (INT): Números enteros.
- VARCHAR(n): Cadenas de texto de longitud variable.
- DECIMAL(p, s): Números decimales con precisión.
-
DATE: Fechas (
YYYY-MM-DD). -
DATETIME: Fechas con hora (
YYYY-MM-DD HH:MM:SS). - BOOLEAN: Valores verdadero/falso.
- BLOB: Datos binarios (imágenes, archivos).
| Tipo de Dato | Descripción |
|---|---|
| INT | Número entero |
| SMALLINT | Entero pequeño |
| TINYINT | Entero muy pequeño |
| BIGINT | Entero grande |
| FLOAT | Número decimal de precisión simple |
| DOUBLE | Número decimal de precisión doble |
| DECIMAL(p, s) | Número decimal con precisión p y escala s
|
| Tipo de Dato | Descripción |
|---|---|
| VARCHAR(n) | Cadena de longitud variable (hasta n caracteres) |
| CHAR(n) | Cadena de longitud fija (exactamente n caracteres) |
| TEXT | Cadena de texto largo (hasta 65,535 caracteres) |
| BLOB | Datos binarios largos (hasta 65,535 bytes) |
| Tipo de Dato | Descripción |
|---|---|
| DATE | Fecha en formato "YYYY-MM-DD" |
| TIME | Hora en formato "HH:MM:SS" |
| DATETIME | Fecha y hora en formato "YYYY-MM-DD HH:MM:SS" |
| TIMESTAMP | Fecha y hora con soporte para zonas horarias |
| Tipo de Dato | Descripción |
|---|---|
| BOOLEAN | Valor booleano (verdadero o falso) |
Las restricciones son reglas aplicadas a las columnas o tablas para garantizar la integridad y consistencia de los datos. Algunas de las restricciones más comunes incluyen:
Una clave primaria garantiza que los valores en esa columna sean únicos. Se agrega después del tipo de dato:
CREATE TABLE estudiantes (
id INT PRIMARY KEY,
nombre VARCHAR(50),
edad INT
);Asegura que los valores en una columna o conjunto de columnas sean únicos.
CREATE TABLE empleados (
id INT PRIMARY KEY,
codigo_empleado INT UNIQUE,
correo VARCHAR(100) UNIQUE
);Garantiza que una columna no pueda contener valores nulos.
CREATE TABLE pedidos (
id INT PRIMARY KEY,
fecha_pedido DATE NOT NULL,
cliente_id INT
);Asigna un valor predeterminado a una columna si no se proporciona un valor.
CREATE TABLE cuentas (
id INT PRIMARY KEY,
saldo DECIMAL(10, 2) DEFAULT 0.00
);Define una condición que debe cumplirse para que los valores en una columna sean válidos.
CREATE TABLE productos (
id INT PRIMARY KEY,
precio DECIMAL(10, 2),
cantidad INT,
CHECK (precio > 0),
CHECK (cantidad >= 0)
);Genera automáticamente un valor único para una columna cada vez que se inserta un nuevo registro.
CREATE TABLE empleados (
empleado_id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50),
salario DECIMAL(10, 2)
);Crea índices en una columna para acelerar las consultas de búsqueda:
CREATE TABLE productos (
producto_id INT PRIMARY KEY,
nombre VARCHAR(100),
categoria VARCHAR(50),
INDEX idx_categoria (categoria)
);Establece una relación entre dos tablas, garantizando que los valores en una columna coincidan con los valores en una columna de otra tabla.
CREATE TABLE pedidos (
id INT PRIMARY KEY,
cliente_id INT,
FOREIGN KEY (cliente_id) REFERENCES clientes(id)
);Restringe los valores de una columna a un conjunto de valores predefinidos.
CREATE TABLE tallas (
id INT PRIMARY KEY,
talla ENUM('XS', 'S', 'M', 'L', 'XL')
);Permite que una columna contenga múltiples valores de un conjunto predefinido.
CREATE TABLE preferencias (
id INT PRIMARY KEY,
opciones SET('Notificaciones', 'Correo', 'SMS', 'Teléfono')
);El comando ALTER TABLE se utiliza para realizar cambios en una tabla existente sin necesidad de eliminarla y volver a crearla. Permite agregar, modificar o eliminar columnas, así como aplicar restricciones adicionales a la tabla.
- Agregar una columna nueva:
ALTER TABLE nombre_tabla ADD nombre_columna tipo_de_dato restriccion_opcional;- Modificar una columna existente:
ALTER TABLE nombre_tabla MODIFY nombre_columna nuevo_tipo_de_dato nueva_restriccion_opcional;- Eliminar una columna:
ALTER TABLE nombre_tabla DROP nombre_columna;- Agregar una restricción CHECK o UNIQUE:
ALTER TABLE nombre_tabla ADD CONSTRAINT nombre_restriccion CHECK (nombre_columna IS NOT NULL);- Agregar una clave foránea:
ALTER TABLE nombre_tabla
ADD FOREIGN KEY (nombre_columna) REFERENCES nombre_tabla_a_referenciar(nombre_campo_a_referenciar);- Eliminar una clave foránea:
ALTER TABLE nombre_tabla DROP FOREIGN KEY nombre_de_la_clave_foranea;Note
Consultar el nombre de una clave foránea:
SELECT constraint_name,
table_name,
column_name,
referenced_table_name,
referenced_column_name
FROM information_schema.key_column_usage
WHERE referenced_table_name IS NOT NULL
AND table_name = "nombre_de_la_tabla";El comando DROP TABLE se utiliza para eliminar una tabla y todos los datos que contiene de forma permanente. Es importante tener precaución al usar este comando, ya que no hay forma de recuperar los datos una vez que se ha ejecutado.
DROP TABLE nombre_de_tabla;📍 Es importante tener precaución al usar DROP TABLE, ya que puede provocar la pérdida irrecuperable de datos.
- CURRENT_DATE: Devuelve la fecha actual sin la hora.
- NOW(): Devuelve la fecha y hora actuales.
Nota: Ambas funciones deben estar entre paréntesis: ...DEFAULT (CURRENT_DATE);
El lenguaje DML se utiliza para manipular datos almacenados en una base de datos. Esto incluye insertar, actualizar, eliminar y consultar registros. Las principales instrucciones DML son: INSERT INTO, UPDATE, DELETE, y SELECT.
-
SHOW DATABASES: Lista las bases de datos disponibles. -
SHOW TABLES: Muestra tablas en la base de datos seleccionada. -
SELECT: Recupera datos. Ejemplo:
SELECT * FROM nombre_tabla; -
INSERT: Agrega registros. Ejemplo:
INSERT INTO tabla (columna1, columna2) VALUES (valor1, valor2); -
UPDATE: Modifica registros existentes. Ejemplo:
UPDATE nombre_tabla SET columna = nuevo_valor WHERE condición; -
DELETE: Elimina registros. Ejemplo:
DELETE FROM nombre_tabla WHERE condición;
Permite agregar nuevos registros a una tabla.
INSERT INTO empleados (nombre, apellido, edad, salario)
VALUES ('Juan', 'Pérez', 30, 2500.50);-
INSERT INTO nombre_tabla (columnas): Especifica la tabla y las columnas a llenar. -
VALUES (valores): Define los valores que se insertarán en las columnas, siguiendo el mismo orden.
Note
Se pueden omitir los nombres de las columnas en la query si se van a añadir valores para todas las columnas de la tabla. Es importante que el orden de los valores sea el mismo que el de las columnas predefinidas en la tabla.
Se utiliza para modificar valores de registros existentes.
UPDATE empleados
SET salario = 2700.00
WHERE nombre = 'Juan';-
UPDATE nombre_tabla: Especifica la tabla a actualizar. -
SET columna1 = valor1: Define qué columna(s) se actualizarán y sus nuevos valores. -
WHERE condición(opcional): Filtra los registros a modificar.
Note
Si se omite la cláusula WHERE, los cambios se aplicarán a todos los registros de la tabla.
💡 Es posible usar operadores lógicos como AND o OR en WHERE para combinar múltiples condiciones.
Permite eliminar registros de una tabla.
DELETE FROM empleados
WHERE nombre = 'Juan';-
DELETE FROM nombre_tabla: Indica la tabla de donde se eliminarán registros. -
WHERE condición(opcional): Filtra los registros a eliminar.
Note
📍 Sin WHERE, todos los registros de la tabla serán eliminados.
Esencial para recuperar y visualizar datos de una base de datos.
SELECT nombre, salario
FROM empleados
WHERE edad > 25;-
SELECT columnas: Define qué columnas serán recuperadas. -
FROM nombre_tabla: Especifica la tabla de donde se obtendrán los datos. -
WHERE condición(opcional): Filtra los registros que se recuperarán.
Ejemplo:
Incrementar el salario en un departamento específico usando el comando SELECT como una subconsulta:
UPDATE empleados
SET salario = salario * 1.07
WHERE departamento_id = (SELECT id FROM departamentos WHERE nombre = 'Ventas');Esto funciona porque la subconsulta devuelve un único valor, en este caso, el id del departamento de ventas.
💡 Nota: Es importante colocar las subconsultas entre paréntesis para que funcionen correctamente.
Puntos importantes:
- La subconsulta se ejecuta dentro de una consulta más grande.
- Se utiliza en lugar de un valor en cláusulas como
WHERE,FROM,HAVING, etc. - Puede colocarse en diversas partes de la consulta principal según los requisitos específicos:
- En la cláusula
WHEREpara filtrar resultados. - En la cláusula
FROMpara actuar como una tabla temporal. - En la cláusula
SELECTpara recuperar un valor específico.
- En la cláusula
- Puede devolver un único valor o una lista de valores.
- Si se espera un único valor, utiliza operadores de comparación como
=en la cláusulaWHERE.
- Si se espera un único valor, utiliza operadores de comparación como
💡En SQL, es posible calcular automáticamente los valores de una columna en función de otras columnas usando columnas generadas. Estas columnas se definen mediante una expresión y pueden ser almacenadas (STORED) o virtuales (calculadas en tiempo real).
Para crear una columna generada:
CREATE TABLE mi_tabla (
id INT AUTO_INCREMENT PRIMARY KEY,
columna_calculada tipo GENERATED ALWAYS AS (expresion) STORED
);Para modificar una columna generada existente:
ALTER TABLE mi_tabla
MODIFY columna_calculada tipo GENERATED ALWAYS AS (expresion) STORED;-
GENERATED ALWAYS AS: Define que el valor de la columna se calcula automáticamente. -
STORED: La columna almacena el resultado del cálculo. También puede usarseVIRTUALsi no se desea almacenar el valor físicamente, solo calcularlo cuando se consulta.
La sentencia SELECT permite:
- Mostrar filas de una base de datos.
- Seleccionar una o varias columnas de una o varias tablas.
Sintaxis básica:
SELECT columnas FROM tablaOrigen;Ejemplo:
SELECT nombre, apellido FROM Alumnos;Dada la tabla:
| Id | Nombre | Apellido | Edad |
|---|---|---|---|
| 1 | Agustín | Cocco | 24 |
| 2 | Martín | Bullón | 21 |
Resultado:
| Nombre | Apellido |
|---|---|
| Agustín | Cocco |
| Martín | Bullón |
Puedes realizar cálculos entre columnas:
SELECT nombre, (salario + comision) FROM empleados;Dada la tabla:
| Id | Nombre | Salario | Comisión |
|---|---|---|---|
| 1 | Agustín | 5000 | 300 |
| 2 | Martín | 2000 | 250 |
Resultado:
| Nombre | (salario + comisión) |
|---|---|
| Agustín | 5300 |
| Martín | 2250 |
Elimina duplicados en los resultados.
SELECT DISTINCT nombre, apellido FROM Alumnos;Dada la tabla:
| Id | Nombre | Apellido | Edad |
|---|---|---|---|
| 1 | Agustín | Cocco | 24 |
| 2 | Martín | Bullón | 21 |
| 3 | Agustín | Cocco | 26 |
Resultado:
| Nombre | Apellido |
|---|---|
| Agustín | Cocco |
| Martín | Bullón |
Filtra resultados según condiciones específicas.
SELECT nombre, apellido FROM Alumnos WHERE nombre = 'Agustín';Operadores Relacionales:
| Operador | Significado | Ejemplo |
|---|---|---|
| > | Mayor que | edad > 21 |
| < | Menor que | edad < 18 |
| = | Igual que | edad = 20 |
| >= | Mayor o igual que | edad >= 30 |
| <= | Menor o igual que | edad <= 10 |
| <> o != | Distinto que | edad <> 5 |
Operadores Lógicos
| Operador | Significado |
|---|---|
| AND | Devuelve resultados cuando todas las condiciones son verdaderas. |
| OR | Devuelve resultados cuando al menos una condición es verdadera. |
| NOT | Devuelve resultados cuando la condición es falsa. |
Ejemplo AND:
SELECT * FROM Alumnos WHERE edad > 18 AND curso = 'Matemáticas';Ejemplo OR:
SELECT * FROM Alumnos WHERE edad > 18 OR curso = 'Historia';Selecciona valores dentro de un rango, inclusive.
SELECT * FROM Alumnos WHERE edad BETWEEN 21 AND 40;Dada la tabla:
| Id | Nombre | Apellido | Edad |
|---|---|---|---|
| 1 | Agustín | Cocco | 24 |
| 2 | Martín | Bullón | 39 |
| 3 | Mariela | Lima | 60 |
Resultado:
| Id | Nombre | Apellido | Edad |
|---|---|---|---|
| 1 | Agustín | Cocco | 24 |
| 2 | Martín | Bullón | 39 |
Selecciona valores específicos.
SELECT * FROM Alumnos WHERE nombre IN ('Agustín', 'Mariela');Resultado:
| Id | Nombre | Apellido | Edad |
|---|---|---|---|
| 1 | Agustín | Cocco | 24 |
| 3 | Mariela | Lima | 20 |
Busca patrones en cadenas de texto.
| Símbolo | Significado |
|---|---|
% |
Cero, uno o más caracteres. |
_ |
Un carácter único. |
Ejemplos:
-
LIKE 'a%'→ Comienza con "a". -
LIKE '%a'→ Termina con "a". -
LIKE '%ar%'→ Contiene "ar". -
LIKE '_e%'→ Tiene "e" en la segunda posición.
Ejemplo:
SELECT nombre FROM Alumnos WHERE nombre LIKE 's%';Dada la tabla:
| Id | Nombre | Apellido | Edad |
|---|---|---|---|
| 1 | Sebastián | Gómez | 24 |
| 2 | Sabrina | Martínez | 15 |
Resultado:
| Nombre |
|---|
| Sebastián |
| Sabrina |
La cláusula ORDER BY organiza los resultados de una consulta según las columnas especificadas, en orden ascendente (ASC) o descendente (DESC). Por defecto, el orden es ascendente si no se especifica.
Ejemplo:
Dada una tabla de alumnos:
| Id | Nombre | Apellido | Edad |
|---|---|---|---|
| 1 | Jerónimo | Wiunkhaus | 24 |
| 2 | Ana | Gadea | 15 |
| 3 | Mariela | Lima | 20 |
Consulta:
SELECT nombre, apellido FROM Alumno ORDER BY nombre ASC;Resultado:
| Nombre | Apellido |
|---|---|
| Ana | Gadea |
| Jerónimo | Wiunkhaus |
| Mariela | Lima |
GROUP BY agrupa filas con valores repetidos en una o más columnas y permite realizar funciones de agregación (como SUM, COUNT, etc.) sobre el grupo.
Ejemplo:
SELECT nombre, SUM(salario) FROM empleados GROUP BY nombre;Dada una tabla de empleados:
| Id | Nombre | Salario |
|---|---|---|
| 1 | Franco | 1000 |
| 2 | Mariela | 2000 |
| 3 | Franco | 1000 |
| 4 | Mariela | 350 |
Resultado:
| Nombre | SUM(Salario) |
|---|---|
| Franco | 2000 |
| Mariela | 2350 |
HAVING filtra los resultados después de aplicar GROUP BY, usando condiciones basadas en funciones agregadas.
Ejemplo:
SELECT COUNT(id), pais FROM personas GROUP BY pais HAVING COUNT(id) > 1;Dada la tabla de personas:
| Id | Nombre | País |
|---|---|---|
| 1 | Franco | Argentina |
| 2 | Juliana | Alemania |
| 3 | Agustín | Argentina |
| 4 | Gastón | Alemania |
| 5 | Mariela | Uruguay |
Resultado:
| COUNT(Id) | País |
|---|---|
| 2 | Argentina |
| 2 | Alemania |
Se agrupan los datos por país, se cuenta el número de personas por grupo y
HAVINGfiltra los países con más de una persona.
Proporcionar un alias temporal a una columna o tabla dentro de una consulta, haciéndola más legible.
- Uso:
SELECT columna AS alias FROM tabla;- Ejemplo:
Tabla Alumnos:
| Id | Nombre | Apellido | Edad |
|---|---|---|---|
| 1 | Xavier | Collado | 24 |
| 2 | Ana | Gadea | 15 |
| 3 | Mariela | Lima | 20 |
| Consulta: |
SELECT nombre AS "Nombre Alumno", apellido AS "Apellido Alumno" FROM Alumnos;Resultado:
| Nombre Alumno | Apellido Alumno |
|---|---|
| Xavier | Collado |
| Ana | Gadea |
| Mariela | Lima |
Note
- El uso de
ASes opcional. Escribir un alias directamente después del nombre de la columna también funciona. - Todas las cláusulas/sentencias pueden ser usadas juntas. No es necesario que se utilicen por separado.
Limitar el número de resultados devueltos por una consulta.
- Uso:
SELECT columnas FROM tabla LIMIT numero;- Ejemplo:
Dada la tabla Alumnos:
| Id | Nombre | Apellido | Edad |
|---|---|---|---|
| 1 | Jerónimo | Wiunkhaus | 24 |
| 2 | Ana | Gadea | 15 |
| 3 | Mariela | Lima | 20 |
Consulta:
SELECT nombre, apellido FROM Alumnos LIMIT 1;Resultado:
| Nombre | Apellido |
|---|---|
| Jerónimo | Wiunkhaus |
Realizar evaluaciones condicionales en SQL.
- Uso:
CASE
WHEN condición THEN resultado
ELSE resultado_predeterminado
END-
Ejemplo:
Dada la tablaempleados:
| Nombre | Salario |
|---|---|
| Ana | 3500 |
| Luis | 2500 |
| Marta | 1500 |
Consulta:
SELECT nombre,
CASE
WHEN salario >= 3000 THEN 'Alto'
WHEN salario >= 2000 THEN 'Medio'
ELSE 'Bajo'
END AS categoria_salario
FROM empleados;Resultado:
| Nombre | categoria_salario |
|---|---|
| Ana | Alto |
| Luis | Medio |
| Marta | Bajo |
En la gestión de bases de datos, una función de agregación es una función en la que los valores de varias filas se agrupan bajo un criterio para formar un valor único más significativo. Estas funciones se ponen en el SELECT Existen 5 tipos de funciones de agregación:
- MAX: Retorna el valor máximo de una columna.
SELECT MAX(salario) FROM empleados;Resultado:
| MAX(salario) |
|---|
| 2000 |
- MIN: Retorna el valor mínimo de una columna.
SELECT MIN(salario) FROM empleados;Resultado:
| MIN(salario) |
|---|
| 1000 |
- AVG: Retorna el promedio de los valores de una columna.
SELECT AVG(salario) FROM empleados;Resultado:
| AVG(salario) |
|---|
| 1325 |
- COUNT: Retorna el número de filas o elementos en una columna.
SELECT COUNT(id) FROM empleados;Resultado:
| COUNT(id) |
|---|
| 3 |
También se puede usar COUNT(*) para contar todas las filas, incluidas las NULL.
5. SUM: Calcula la suma de los valores en una columna.
SELECT SUM(salario) FROM empleados;Tabla empleados:
| Id | Nombre | Salario |
|---|---|---|
| 1 | Franco | 1000 |
| 2 | Agustina | 2000 |
| 3 | Ignacio | 1500 |
Resultado:
| SUM(salario) |
|---|
| 4500 |
La cláusula GROUP BY se utiliza junto con funciones de agregación para agrupar filas con valores repetidos y aplicar cálculos sobre ellas.
Ejemplo: Suma de salarios por nombre
Consulta:
SELECT nombre, SUM(salario) FROM empleados GROUP BY nombre;Tabla empleados:
| Id | Nombre | Salario |
|---|---|---|
| 1 | Franco | 1000 |
| 2 | Mariela | 2000 |
| 3 | Franco | 1000 |
| 4 | Mariela | 350 |
Resultado:
| Nombre | SUM(Salario) |
|---|---|
| Franco | 2000 |
| Mariela | 2350 |
Agrupa las filas por el campo
nombrey suma los valores de la columnasalariopara cada grupo.
Ejemplo: Conteo de personas por país
Consulta:
SELECT COUNT(id), pais FROM personas GROUP BY pais;Tabla personas:
| Id | Nombre | País |
|---|---|---|
| 1 | Franco | Argentina |
| 2 | Juliana | Alemania |
| 3 | Agustín | Argentina |
Resultado:
| COUNT(Id) | País |
|---|---|
| 2 | Argentina |
| 1 | Alemania |
Agrupa las filas por el campo
paisy cuenta cuántosidhay en cada grupo.
Redondea valores numéricos a un número específico de decimales.
SELECT ROUND(columna, decimales) FROM tabla;Si decimales no se indica, redondea al entero más cercano.
-
Ejemplo:
Dada la tabla empleados:
| Id | Nombre | Apellido | Salario |
|---|---|---|---|
| 1 | Franco | Medina | 1000.55 |
| 2 | Agustina | Koch | 2000.35 |
| 3 | Ignacio | Pérez | 1600.75 |
Consulta:
SELECT ROUND(AVG(salario)) FROM Empleados;Resultado:
| ROUND(AVG(salario)) |
|---|
| 1326 |
Cuando se estructuran consultas SQL con múltiples cláusulas, el orden correcto es importante:

- SELECT: Especifica las columnas que se desean recuperar.
- FROM: Indica la tabla de origen.
- WHERE: Filtra filas antes del agrupamiento.
- GROUP BY: Agrupa filas con valores comunes.
- HAVING: Filtra grupos tras el agrupamiento.
- ORDER BY: Ordena los resultados.
- LIMIT: Restringe la cantidad de resultados.
💡 Nota: En subconsultas, este orden se reinicia.
Ejemplo combinando varias cláusulas:
SELECT nombre AS "Nombre Alumno", ROUND(AVG(edad)) AS "Edad Promedio"
FROM Alumnos
WHERE edad > 18
GROUP BY nombre
HAVING COUNT(*) > 1
ORDER BY "Edad Promedio" DESC
LIMIT 3;| Característica | WHERE |
HAVING |
|---|---|---|
| Propósito | Filtra filas antes de que se realicen las operaciones de agrupación o agregación. | Filtra grupos de resultados después de que se hayan realizado las operaciones de agregación. |
| Uso | Se utiliza para establecer condiciones en las columnas individuales. | Se utiliza para establecer condiciones en los resultados de las funciones de agregación. |
| Operaciones | Puede usarse con cualquier columna de la tabla y no requiere una operación de agregación. | Generalmente se utiliza con la cláusula GROUP BY, aunque también puede aplicarse sin ella si se trata de una agregación en toda la tabla. |
| Ejemplos: |
-
Uso de
WHERE:SELECT nombre, salario FROM empleados WHERE salario > 3000;
Filtra los empleados con un salario mayor a 3000 antes de realizar cualquier agrupación._
-
Uso de
HAVING:SELECT departamento, AVG(salario) AS promedio_salario FROM empleados GROUP BY departamento HAVING promedio_salario > 5000;
Agrupa por departamento, calcula el promedio de salario y luego filtra los departamentos con un promedio superior a 5000._
En MySQL es posible combinar datos de múltiples tablas para obtener información más compleja. Esto se logra enumerando las tablas en la cláusula FROM de la consulta, separadas por comas. Este enfoque genera lo que se conoce como el producto cartesiano (todas las filas de una tabla se combinan con todas las filas de las demás tablas).
SELECT * FROM tabla1, tabla2;Si no se define una condición con WHERE, cada fila de la primera tabla se combina con cada fila de la segunda, generando combinaciones innecesarias.
Ejemplo:
SELECT * FROM empleados, departamentos;Resultado: Cada empleado se combina con todos los departamentos, generando un total de 33 filas (11 empleados × 3 departamentos). Este resultado incluye datos irrelevantes y carece de lógica relacional.
Para evitar combinaciones innecesarias, se usa una condición en la cláusula WHERE que relaciona las tablas mediante sus columnas clave. En este caso, se emplea la relación entre empleados.departamento_id y departamentos.id.
Consulta Relacional:
SELECT * FROM empleados, departamentos
WHERE empleados.departamento_id = departamentos.id;De esa forma solo se muestran las combinaciones donde el departamento_id del empleado coincide con el id del departamento, eliminando filas irrelevantes.
Note
- La consulta inicial (antes de
WHERE) genera el producto cartesiano. - La cláusula
WHEREfiltra las combinaciones irrelevantes, dejando solo las que cumplen la condición relacional.
Ejemplo Final:
SELECT e.id, e.nombre, e.apellido, e.salario, d.nombre AS departamento
FROM empleados e, departamentos d
WHERE e.departamento_id = d.id;Cada empleado se muestra solo con su departamento correspondiente.
Para evitar repetir los nombres completos de las tablas, podemos usar alias con la cláusula AS. Esto hace las consultas más legibles y fáciles de manejar.
Ejemplo con Alias:
SELECT *
FROM empleados AS e, departamentos AS d
WHERE e.departamento_id = d.id;El uso de
ASes opcional:
SELECT *
FROM empleados e, departamentos d
WHERE e.departamento_id = d.id;Los JOIN en MySQL permiten combinar datos de varias tablas de manera eficiente y lógica.
- Permiten combinar datos de dos o más tablas en una sola consulta.
- Aunque con las consultas multi tablas se realizan JOINS implícitos, la sintaxis explícita con la cláusula JOIN es más legible y fácil de mantener.
La estructura básica de un JOIN en MySQL es la siguiente:
SELECT *
FROM tabla1
JOIN tabla2
ON tabla1.columna = tabla2.columna;-
SELECT: Define las columnas que se desean recuperar. -
FROM: Especifica la tabla principal de la consulta. -
JOIN: Palabra clave para realizar la operación de unión. -
ON: Condición que relaciona las tablas.

-
INNER JOIN
-
Recupera solo las filas que tienen coincidencias en ambas tablas.
-
Sintaxis:
SELECT clientes.nombre, pedidos.producto FROM clientes INNER JOIN pedidos ON clientes.id = pedidos.cliente_id;
-
Nota:
INNER JOINes equivalente aJOIN. Sin embargo, es buena práctica usarINNER JOINexplícitamente.
-
-
LEFT JOIN (o LEFT OUTER JOIN)
-
Recupera todas las filas de la tabla izquierda y las filas coincidentes de la tabla derecha. Si no hay coincidencia, devuelve
NULLpara las columnas de la tabla derecha. -
Sintaxis:
SELECT e.nombre, d.nombre FROM empleados e LEFT JOIN departamentos d ON e.departamento_id = d.id;
-
-
RIGHT JOIN (o RIGHT OUTER JOIN)
-
Similar al LEFT JOIN, pero devuelve todas las filas de la tabla derecha y las filas coincidentes de la tabla izquierda. Las filas sin coincidencia en la tabla izquierda tienen valores
NULL. -
Sintaxis:
SELECT e.nombre, d.nombre FROM empleados e RIGHT JOIN departamentos d ON e.departamento_id = d.id;
-
Nota: Se recomienda usar LEFT JOIN en lugar de RIGHT JOIN por su mayor compatibilidad con diferentes sistemas de bases de datos.
-
CHAR_LENGTH()/CHARACTER_LENGTH()
Devuelve el número de caracteres de una cadena.
SELECT CHAR_LENGTH('Hola Mundo'); -- Resultado: 10LENGTH()
Devuelve la longitud de una cadena en bytes.
SELECT LENGTH('Hola Mundo'); -- Resultado: 10 (cada carácter = 1 byte en UTF-8)CONCAT()
Combina varias cadenas en una sola.
SELECT CONCAT('Hola', ' ', 'Mundo'); -- Resultado: 'Hola Mundo'CONCAT_WS(separador, ...)
Similar a CONCAT(), pero incluye un separador entre las cadenas.
SELECT CONCAT_WS('-', '2025', '01', '21'); -- Resultado: '2025-01-21'INSERT(cadena, posición, longitud, subcadena)
Inserta una subcadena en una posición específica y reemplaza un número dado de caracteres.
SELECT INSERT('Hola Mundo', 6, 5, 'SQL'); -- Resultado: 'Hola SQL'REPLACE(cadena, buscar, reemplazar)
Reemplaza todas las ocurrencias de una subcadena en una cadena.
SELECT REPLACE('Hola Mundo', 'Mundo', 'SQL'); -- Resultado: 'Hola SQL'REVERSE()
Invierte el orden de los caracteres de una cadena.
SELECT REVERSE('Hola'); -- Resultado: 'aloH'REPEAT(cadena, número)
Repite una cadena el número especificado de veces.
SELECT REPEAT('SQL', 3); -- Resultado: 'SQLSQLSQL'LEFT(cadena, número)
Devuelve los caracteres más a la izquierda de una cadena.
SELECT LEFT('Hola Mundo', 4); -- Resultado: 'Hola'RIGHT(cadena, número)
Devuelve los caracteres más a la derecha de una cadena.
SELECT RIGHT('Hola Mundo', 5); -- Resultado: 'Mundo'MID()/SUBSTR()/SUBSTRING()
Devuelve una subcadena desde una posición dada y de una longitud específica.
SELECT SUBSTRING('Hola Mundo', 6, 5); -- Resultado: 'Mundo'SUBSTRING_INDEX(cadena, delimitador, número)
Devuelve la parte de la cadena antes o después de un número específico de ocurrencias de un delimitador.
SELECT SUBSTRING_INDEX('2025-01-21', '-', 2); -- Resultado: '2025-01'INSTR(cadena, subcadena)/LOCATE(subcadena, cadena)
Devuelve la posición de la primera aparición de una subcadena.
SELECT LOCATE('Mundo', 'Hola Mundo'); -- Resultado: 6MATCH(columnas) AGAINST(texto)
Realiza una búsqueda de texto completo.
SELECT MATCH(titulo) AGAINST('SQL') FROM articulos;LOWER(cadena)/LCASE(cadena)
Convierte una cadena a minúsculas.
SELECT LOWER('HOLA'); -- Resultado: 'hola'UPPER(cadena)/UCASE(cadena)
Convierte una cadena a mayúsculas.
SELECT UPPER('hola'); -- Resultado: 'HOLA'LTRIM(cadena)
Elimina los espacios al inicio de una cadena.
SELECT LTRIM(' Hola'); -- Resultado: 'Hola'RTRIM(cadena)
Elimina los espacios al final de una cadena.
SELECT RTRIM('Hola '); -- Resultado: 'Hola'TRIM(cadena)
Elimina los espacios al inicio y al final de una cadena.
SELECT TRIM(' Hola '); -- Resultado: 'Hola'LPAD(cadena, longitud, relleno)
Rellena la cadena por la izquierda con un carácter hasta alcanzar una longitud específica.
SELECT LPAD('SQL', 6, '*'); -- Resultado: '**SQL'RPAD(cadena, longitud, relleno)
Rellena la cadena por la derecha con un carácter hasta alcanzar una longitud específica.
SELECT RPAD('SQL', 6, '*'); -- Resultado: 'SQL***'FORMAT(numero, decimales)
Formatea un número con el número especificado de decimales.
SELECT FORMAT(1234.5678, 2); -- Resultado: '1,234.57'SPACE(número)
Devuelve una cadena con el número de espacios especificado.
SELECT SPACE(5); -- Resultado: ' ' (5 espacios)STRCMP(cadena1, cadena2)
Compara dos cadenas.
SELECT STRCMP('Hola', 'Mundo'); -- Resultado: -1 (porque 'Hola' < 'Mundo')GROUP_CONCAT(campo SEPARATOR separador)
Concatena valores de un grupo en una sola cadena separada por un delimitador.
SELECT GROUP_CONCAT(nombre SEPARATOR ', ') FROM usuarios;
-- Resultado: 'Juan, María, Pedro'LIKE patrón
Busca cadenas utilizando patrones.
SELECT * FROM usuarios WHERE nombre LIKE 'J%'; -- Nombres que comienzan con 'J'REGEXP patrón
Comprueba si una cadena coincide con una expresión regular.
SELECT * FROM usuarios WHERE nombre REGEXP '^J.*o$'; -- Nombres que comienzan con 'J' y terminan con 'o'ADDDATE(fecha, intervalo)
Agrega un intervalo de tiempo a una fecha.
SELECT ADDDATE('2025-01-21', INTERVAL 5 DAY); -- Resultado: '2025-01-26'ADDTIME(hora, tiempo)
Agrega un tiempo a una hora.
SELECT ADDTIME('10:00:00', '02:30:00'); -- Resultado: '12:30:00'CONVERT_TZ(fecha, zona_origen, zona_destino)
Convierte una fecha de una zona horaria a otra.
SELECT CONVERT_TZ('2025-01-21 12:00:00', 'UTC', 'America/New_York'); -- Resultado: '2025-01-21 07:00:00'CURDATE()/CURRENT_DATE()
Devuelve la fecha actual.
SELECT CURDATE(); -- Resultado: '2025-01-21'CURRENT_TIME()/CURTIME()
Devuelve la hora actual.
SELECT CURTIME(); -- Resultado: '14:35:12'CURRENT_TIMESTAMP()/NOW()
Devuelve la fecha y hora actuales.
SELECT NOW(); -- Resultado: '2025-01-21 14:35:12'DATE(expresión)
Extrae la parte de fecha de una expresión de fecha o datetime.
SELECT DATE('2025-01-21 14:35:12'); -- Resultado: '2025-01-21'DATE_ADD(fecha, intervalo)
Agrega un intervalo de tiempo a una fecha.
SELECT DATE_ADD('2025-01-21', INTERVAL 1 MONTH); -- Resultado: '2025-02-21'DATE_FORMAT(fecha, formato)
Formatea una fecha según un formato.
SELECT DATE_FORMAT('2025-01-21', '%d/%m/%Y'); -- Resultado: '21/01/2025'DATE_SUB(fecha, intervalo)
Resta un intervalo de tiempo de una fecha.
SELECT DATE_SUB('2025-01-21', INTERVAL 7 DAY); -- Resultado: '2025-01-14'-
DATEDIFF(fecha1, fecha2)
Devuelve la diferencia en días entre dos fechas.
SELECT DATEDIFF('2025-01-21', '2025-01-14'); -- Resultado: 7DAY(fecha)/DAYOFMONTH(fecha)
Devuelve el día del mes (0-31).
SELECT DAY('2025-01-21'); -- Resultado: 21DAYNAME(fecha)
Devuelve el nombre del día de la semana.
SELECT DAYNAME('2025-01-21'); -- Resultado: 'Tuesday'DAYOFWEEK(fecha)
Devuelve el índice del día de la semana (1 = domingo, 7 = sábado).
SELECT DAYOFWEEK('2025-01-21'); -- Resultado: 3DAYOFYEAR(fecha)
Devuelve el número del día del año (1-366).
SELECT DAYOFYEAR('2025-01-21'); -- Resultado: 21MONTH(fecha)
Devuelve el mes de la fecha pasada (1-12).
SELECT MONTH('2025-01-21'); -- Resultado: 1MONTHNAME(fecha)
Devuelve el nombre del mes.
SELECT MONTHNAME('2025-01-21'); -- Resultado: 'January'YEAR(fecha)
Devuelve el año de la fecha pasada.
SELECT YEAR('2025-01-21'); -- Resultado: 2025HOUR(hora)
Devuelve la hora de una expresión de tiempo.
SELECT HOUR('14:35:12'); -- Resultado: 14MINUTE(hora)
Devuelve los minutos de una expresión de tiempo.
SELECT MINUTE('14:35:12'); -- Resultado: 35SECOND(hora)
Devuelve los segundos de una expresión de tiempo.
SELECT SECOND('14:35:12'); -- Resultado: 12TIME(expresión)
Extrae la porción de tiempo de una expresión pasada.
SELECT TIME('2025-01-21 14:35:12'); -- Resultado: '14:35:12'TIME_FORMAT(hora, formato)
Formatea una hora según el formato especificado.
SELECT TIME_FORMAT('14:35:12', '%h:%i %p'); -- Resultado: '02:35 PM'TIME_TO_SEC(hora)
Convierte una hora en segundos.
SELECT TIME_TO_SEC('01:02:03'); -- Resultado: 3723SEC_TO_TIME(segundos)
Convierte segundos en formato hh:mm:ss.
SELECT SEC_TO_TIME(3723); -- Resultado: '01:02:03'EXTRACT(parte FROM fecha)
Extrae una parte específica de una fecha.
SELECT EXTRACT(YEAR FROM '2025-01-21'); -- Resultado: 2025FROM_DAYS(días)
Convierte un número de días en una fecha.
SELECT FROM_DAYS(738500); -- Resultado: '2025-01-21'UNIX_TIMESTAMP()
Devuelve la marca de tiempo Unix actual.
SELECT UNIX_TIMESTAMP(); -- Resultado: 1737524312FROM_UNIXTIME(marca_de_tiempo)
Convierte una marca de tiempo Unix en una fecha.
SELECT FROM_UNIXTIME(1737524312); -- Resultado: '2025-01-21 14:35:12'LAST_DAY(fecha)
Devuelve el último día del mes para la fecha dada.
SELECT LAST_DAY('2025-01-21'); -- Resultado: '2025-01-31'Una vista en una base de datos es una consulta almacenada que se comporta como una tabla virtual. Permite a los usuarios consultar y manipular datos de forma estructurada y controlada.
Se usan para:
-
Simplificación de Consultas:
Las vistas pueden ocultar la complejidad de las consultas SQL al proporcionar una capa de abstracción sobre las tablas subyacentes. -
Seguridad de Acceso:
Las vistas permiten limitar el acceso a columnas o filas específicas, facilitando la implementación de políticas de seguridad más estrictas. -
Reutilización de Consultas:
Pueden reutilizarse para evitar redundancia en las consultas y facilitar el mantenimiento del código.
Para crear una vista en una base de datos, se utiliza la declaración CREATE VIEW.
CREATE VIEW nombre_de_la_vista AS
SELECT columnas
FROM tabla
WHERE condiciones;La cláusula OR REPLACE permite reemplazar una vista existente.
- Si la vista no existe,
CREATE OR REPLACE VIEWactúa comoCREATE VIEW. - Si la vista ya existe, esta será reemplazada.
Ejemplo:
CREATE OR REPLACE VIEW nombre_de_la_vista AS
SELECT columnas
FROM tabla
WHERE condiciones;- Actualización de Datos:
Es posible actualizar datos en vistas basadas en una sola tabla que cumplan con ciertas restricciones.
CREATE VIEW nombre_de_la_vista AS
SELECT columnas FROM tabla WHERE condiciones;- Join en Vistas:
Las vistas pueden incluir combinaciones (JOIN) para integrar datos de múltiples tablas.
CREATE VIEW vista_pedidos AS SELECT p.id AS pedido_id, pr.nombre AS producto, p.cantidad
FROM pedidos p
JOIN productos pr ON p.producto_id = pr.id;- Indexación en Vistas:
Se pueden crear índices en vistas para mejorar el rendimiento de consultas frecuentes.
CREATE INDEX idx_nombre ON vista_materializada(nombre)- Seguridad y Permisos:
Es posible configurar los permisos necesarios tanto para las tablas subyacentes como para las vistas.
-- Revocar permisos directos en la tabla
REVOKE SELECT ON empleados FROM usuario;
-- Otorgar permisos en la vista
GRANT SELECT ON vista_segura TO usuario;ABS(valor)
Devuelve el valor absoluto del número dado.
SELECT ABS(-5); -- Resultado: 5ACOS(valor)
Devuelve el arcocoseno del número dado (en radianes).
SELECT ACOS(0.5); -- Resultado: 1.047197551ASIN(valor)
Devuelve el arcoseno del número dado (en radianes).
SELECT ASIN(0.5); -- Resultado: 0.523598776ATAN(valor)
Devuelve el arcotangente del número dado (en radianes).
SELECT ATAN(1); -- Resultado: 0.785398163ATAN2(y, x)
Devuelve el arcotangente de dos valores dados (en radianes).
SELECT ATAN2(1, 2); -- Resultado: 0.463647609CEIL(valor)
Devuelve el entero más pequeño que no sea menor que el número dado.
SELECT CEIL(4.3); -- Resultado: 5CEILING(valor)
Devuelve el entero más pequeño que no sea menor que el número dado (sinónimo de CEIL).
SELECT CEILING(4.3); -- Resultado: 5CONV(numero, base_origen, base_destino)
Convierte un número entre diferentes bases numéricas.
SELECT CONV('A', 16, 10); -- Resultado: 10COS(valor)
Devuelve el coseno del número dado (en radianes).
SELECT COS(PI()); -- Resultado: -1COT(valor)
Devuelve la cotangente del número dado (en radianes).
SELECT COT(PI()/4); -- Resultado: 1CRC32(cadena)
Calcula un valor de comprobación de redundancia cíclica para una cadena dada.
SELECT CRC32('texto'); -- Resultado: 395194957DEGREES(radianes)
Convierte un valor en radianes a grados.
SELECT DEGREES(PI()); -- Resultado: 180EXP(valor)
Devuelve el valor de e elevado a la potencia dada.
SELECT EXP(1); -- Resultado: 2.718281828FLOOR(valor)
Devuelve el entero más grande que no sea mayor que el número dado.
SELECT FLOOR(4.7); -- Resultado: 4LN(valor)
Devuelve el logaritmo natural del número dado.
SELECT LN(2.718281828); -- Resultado: 1LOG(valor)
Devuelve el logaritmo natural del número dado (base e).
SELECT LOG(10); -- Resultado: 2.302585093LOG10(valor)
Devuelve el logaritmo base 10 del número dado.
SELECT LOG10(100); -- Resultado: 2LOG2(valor)
Devuelve el logaritmo base 2 del número dado.
SELECT LOG2(8); -- Resultado: 3MOD(dividendo, divisor)
Devuelve el residuo de la división entre dos números.
SELECT MOD(10, 3); -- Resultado: 1PI()
Devuelve el valor de pi.
SELECT PI(); -- Resultado: 3.141592653POW(base, exponente)
Devuelve el número base elevado a la potencia especificada.
SELECT POW(2, 3); -- Resultado: 8POWER(base, exponente)
Devuelve el número base elevado a la potencia especificada (sinónimo de POW).
SELECT POWER(2, 3); -- Resultado: 8RADIANS(grados)
Convierte un valor en grados a radianes.
SELECT RADIANS(180); -- Resultado: 3.141592653RAND()
Devuelve un valor aleatorio de punto flotante entre 0 y 1.
SELECT RAND(); -- Resultado: 0.548813503 (varía en cada ejecución)ROUND(valor, decimales)
Redondea el número al número especificado de decimales.
SELECT ROUND(3.14159, 2); -- Resultado: 3.14SIGN(valor)
Devuelve el signo del número dado: -1 para negativos, 0 para cero, y 1 para positivos.
SELECT SIGN(-5); -- Resultado: -1SIN(valor)
Devuelve el seno del número dado (en radianes).
SELECT SIN(PI()/2); -- Resultado: 1SQRT(valor)
Devuelve la raíz cuadrada del número dado.
SELECT SQRT(16); -- Resultado: 4TAN(valor)
Devuelve la tangente del número dado (en radianes).
SELECT TAN(PI()/4); -- Resultado: 1TRUNCATE(valor, decimales)
Trunca el número al número especificado de decimales.
SELECT TRUNCATE(3.14159, 2); -- Resultado: 3.14