によって Luis Fernando Imbacuan Ruales 3日前.
35
もっと見る
Ejemplo: SELECT columna1, columna2 FROM tabla_externa AS alias WHERE columnaX OP (SELECT columnaY FROM tabla_interna WHERE tabla_externa.columnaZ = tabla_interna.columnaW); La subconsulta usa una columna de la consulta externa (tabla_externa.columnaZ).
Ejemplo 1: Obtener empleados con un salario superior al promedio de su departamento SELECT e.nombre, e.salario, e.departamento FROM empleados e WHERE e.salario > ( SELECT AVG(salario) FROM empleados WHERE departamento = e.departamento ); ¿Qué hace? • Para cada empleado (e), la subconsulta calcula el salario promedio de su departamento. • Luego, compara el salario del empleado con ese promedio. • Solo se devuelven los empleados con un salario superior al promedio de su departamento. Ejemplo 2: Obtener productos con un precio mayor al precio promedio de su categoría SELECT p.nombre, p.precio, p.categoria FROM productos p WHERE p.precio > ( SELECT AVG(precio) FROM productos WHERE categoria = p.categoria ); ¿Qué hace? • Para cada producto (p), la subconsulta calcula el precio promedio de su categoría. • Devuelve los productos que tienen un precio superior a dicho promedio. Ejemplo 3: Encontrar clientes que hayan realizado más pedidos que el promedio de pedidos de todos los clientes SELECT c.nombre, (SELECT COUNT(*) FROM pedidos p WHERE p.id_cliente = c.id) AS total_pedidos FROM clientes c WHERE (SELECT COUNT(*) FROM pedidos p WHERE p.id_cliente = c.id) > ( SELECT AVG(total_pedidos) FROM (SELECT id_cliente, COUNT(*) AS total_pedidos FROM pedidos GROUP BY id_cliente) AS tabla_temporal ); ¿Qué hace? • Para cada cliente, la subconsulta cuenta cuántos pedidos ha realizado. • Luego, se compara con el número promedio de pedidos de todos los clientes. • Devuelve solo los clientes con más pedidos que el promedio. Ejemplo 4: Listar empleados que ganan más que el salario promedio de su equipo SELECT e.nombre, e.salario, e.id_equipo FROM empleados e WHERE e.salario > ( SELECT AVG(salario) FROM empleados WHERE id_equipo = e.id_equipo ); ¿Qué hace? • Para cada empleado (e), calcula el salario promedio de su equipo (id_equipo). • Devuelve los empleados que ganan más que ese promedio. Ejemplo 5: Obtener clientes que han gastado más que el promedio de todos los clientes SELECT c.nombre, (SELECT SUM(total) FROM pedidos p WHERE p.id_cliente = c.id) AS gasto_total FROM clientes c WHERE (SELECT SUM(total) FROM pedidos p WHERE p.id_cliente = c.id) > ( SELECT AVG(gasto_total) FROM (SELECT id_cliente, SUM(total) AS gasto_total FROM pedidos GROUP BY id_cliente) AS temp ); ¿Qué hace? • Calcula cuánto ha gastado cada cliente (SUM(total)). • Compara ese total con el promedio gastado por todos los clientes. • Devuelve los clientes que han gastado más que el promedio.
5. Usando CROSS JOIN para Producto Cartesiano Este JOIN combina todas las filas de ambas tablas. Ejemplo: Crear combinaciones de empleados y proyectos SELECT empleados.nombre, proyectos.nombre AS proyecto FROM empleados CROSS JOIN proyectos; Genera una combinación de cada empleado con cada proyecto.
4. Usando UNION para Unir Resultados de Consultas El operador UNION une los resultados de dos consultas con la misma estructura. Ejemplo: Combinar empleados activos e inactivos en un solo resultado SELECT nombre, salario, 'Activo' AS estado FROM empleados_activos UNION SELECT nombre, salario, 'Inactivo' AS estado FROM empleados_inactivos; Une los datos de empleados activos e inactivos en una sola tabla.
3. Usando Subconsultas para Combinar Tablas Otra manera de combinar datos es con subconsultas dentro de SELECT, WHERE o FROM. Ejemplo: Obtener empleados con un salario mayor al promedio de su departamento SELECT nombre, salario FROM empleados e WHERE salario > (SELECT AVG(salario) FROM empleados WHERE id_departamento = e.id_departamento); Filtra empleados que ganan más que el promedio de su departamento.
2. JOIN en SQL
1. LEFT JOIN (Mostrar empleados y sus departamentos, incluso si no tienen uno) SELECT empleados.nombre, empleados.salario, departamentos.nombre AS departamento FROM empleados LEFT JOIN departamentos ON empleados.id_departamento = departamentos.id; Devuelve todos los empleados, incluso aquellos que no tienen un departamento asignado.
2. RIGHT JOIN (Mostrar todos los departamentos, aunque no tengan empleados) SELECT empleados.nombre, departamentos.nombre AS departamento FROM empleados RIGHT JOIN departamentos ON empleados.id_departamento = departamentos.id; Muestra todos los departamentos, aunque no tengan empleados asignados.
3. FULL JOIN (Unir todos los datos de ambas tablas, incluso sin coincidencias) SELECT empleados.nombre, departamentos.nombre AS departamento FROM empleados FULL JOIN departamentos ON empleados.id_departamento = departamentos.id; Muestra todos los empleados y departamentos, aunque no tengan relación entre sí.
1. Usando JOIN (Unión de Tablas) Los JOINs permiten combinar datos de diferentes tablas en función de una columna en común. Ejemplo de INNER JOIN (Unir empleados con sus departamentos) SELECT empleados.nombre, empleados.salario, departamentos.nombre AS departamento FROM empleados INNER JOIN departamentos ON empleados.id_departamento = departamentos.id; Devuelve solo los empleados que tienen un departamento asociado.
1. Subconsulta en WHERE (Buscar el salario más alto) SELECT nombre, salario FROM empleados WHERE salario = (SELECT MAX(salario) FROM empleados); 🔹 Muestra los empleados con el salario más alto. 2. Subconsulta en SELECT (Mostrar el salario promedio junto con cada empleado) SELECT nombre, salario, (SELECT AVG(salario) FROM empleados) AS salario_promedio FROM empleados; 🔹 Agrega el salario promedio de la empresa en cada fila. 3. Subconsulta en FROM (Tabla temporal con promedios de salario por departamento) SELECT depto, promedio FROM (SELECT departamento AS depto, AVG(salario) AS promedio FROM empleados GROUP BY departamento) AS tabla_temporal; 🔹 Muestra el salario promedio por departamento. 4. Subconsulta con IN (Empleados de los departamentos con más de 5 empleados) SELECT nombre FROM empleados WHERE departamento IN (SELECT departamento FROM empleados GROUP BY departamento HAVING COUNT(*) > 5); 🔹 Filtra empleados de departamentos con más de 5 trabajadores. 5. Subconsulta con EXISTS (Empleados que tienen proyectos asignados) SELECT nombre FROM empleados e WHERE EXISTS (SELECT 1 FROM proyectos p WHERE p.id_empleado = e.id); 🔹 Devuelve solo los empleados que tienen al menos un proyecto asignado. 6. Subconsulta en HAVING (Departamentos con un salario promedio mayor a 4000) SELECT departamento FROM empleados GROUP BY departamento HAVING AVG(salario) > (SELECT AVG(salario) FROM empleados); 🔹 Muestra departamentos donde el salario promedio es mayor al salario promedio de toda la empresa. 7. Subconsulta con NOT IN (Empleados sin proyectos asignados) SELECT nombre FROM empleados WHERE id NOT IN (SELECT id_empleado FROM proyectos); 🔹 Filtra empleados que no están asignados a ningún proyecto. 8. Subconsulta con UPDATE (Aumentar salario de empleados que ganan menos que el promedio) UPDATE empleados SET salario = salario * 1.10 WHERE salario < (SELECT AVG(salario) FROM empleados); 🔹 Aumenta el salario en un 10% a quienes ganan menos que el promedio. 9. Subconsulta con DELETE (Eliminar empleados sin proyectos asignados) DELETE FROM empleados WHERE id NOT IN (SELECT id_empleado FROM proyectos); 🔹 Borra empleados que no tienen proyectos asignados. 10. Subconsulta con JOIN (Obtener el nombre del jefe de cada empleado) SELECT e.nombre AS Empleado, (SELECT j.nombre FROM empleados j WHERE j.id = e.id_jefe) AS Jefe FROM empleados e; 🔹 Devuelve el nombre del empleado junto con su jefe.
1. Operadores aritméticos Se utilizan para realizar operaciones matemáticas. Operador Descripción Ejemplo + Suma SELECT 10 + 5;→ 15 - Resto SELECT 10 - 5;→ 5 * Multiplicación SELECT 10 * 5;→ 50 / División SELECT 10 / 5;→ 2 % Módulo (resto de división) SELECT 10 % 3;→ 1
2. Operadores de comparación Sirven para comparar dos valores y devuelven un valor booleano ( TRUE o FALSE ). Operador Descripción Ejemplo = Igual a SELECT * FROM empleados WHERE salario = 3000; <>o!= Distinto de SELECT * FROM empleados WHERE salario <> 3000; > Alcalde que SELECT * FROM empleados WHERE salario > 3000; < Menor que SELECT * FROM empleados WHERE salario < 3000; >= Mayor o igual SELECT * FROM empleados WHERE salario >= 3000; <= Menor o igual SELECT * FROM empleados WHERE salario <= 3000; BETWEEN Dentro de un rango SELECT * FROM empleados WHERE salario BETWEEN 2000 AND 4000; IN Busca un valor dentro de una lista SELECT * FROM empleados WHERE departamento IN ('Ventas', 'IT'); LIKE Búsqueda por patrón SELECT * FROM empleados WHERE nombre LIKE 'A%'; IS NULL Verifica si el valor es nulo SELECT * FROM empleados WHERE correo IS NULL;
3. Operadores lógicos Permiten combinar varias condiciones. Operador Descripción Ejemplo AND Todas las condiciones deben ser verdaderas. SELECT * FROM empleados WHERE salario > 3000 AND departamento = 'IT'; OR Al menos una condición debe ser verdadera. SELECT * FROM empleados WHERE salario > 3000 OR departamento = 'IT'; NOT Niega una condición SELECT * FROM empleados WHERE NOT departamento = 'Ventas';
4. Operadores de Asignación (en algunos motores como SQL Server o PL/SQL) Permiten asignar un valor a una variable. Operador Descripción Ejemplo = Asigna un valor SET @salario = 3000;
1. Funciones de Agregación Estas funciones trabajan sobre varios registros. y devuelven un único valor . Se usan normalmente.y devuelven un único valor. Se usan normalmente con GROUP BY. Función Descripción Ejemplo COUNT() Cuenta la cantidad de registros. SELECT COUNT(*) FROM empleados; SUM() Suma SELECT SUM(salario) FROM empleados; AVG() Calcula SELECT AVG(salario) FROM empleados; MAX() Devuelve el valor máximo. SELECT MAX(salario) FROM empleados; MIN() Devuelve SELECT MIN(salario) FROM empleados; 2. Funciones Escalares Trabajan sobre un solo valor y devuelven un resultado. a) Funciones de Texto (Funciones de Cadena) Función Descripción Ejemplo UPPER() Convertir texto a mayúsculas. SELECT UPPER(nombre) FROM empleados; LOWER() Convertir texto a minúsculas. SELECT LOWER(nombre) FROM empleados; LENGTH()/LEN() Devuelve la longitud de una cadena. SELECT LENGTH(nombre) FROM empleados; SUBSTRING() Extraer parte de un texto. SELECT SUBSTRING(nombre, 1, 3) FROM empleados; CONCAT() Unas varias cadenas de texto. SELECT CONCAT(nombre, ' ', apellido) FROM empleados; b) Funciones numéricas Función Descripción Ejemplo ROUND() Redondea un número SELECT ROUND(salario, 2) FROM empleados; ABS() Devuelve el valor SELECT ABS(-150); CEIL()/CEILING() Redondea hacia SELECT CEIL(4.3); FLOOR() Redondea hacia abajo. SELECT FLOOR(4.7); c) Funciones de Fecha y Hora Función Descripción Ejemplo NOW() Devuelve la fecha y hora actual. SELECT NOW(); CURDATE() Devuelve la fecha actual. SELECT CURDATE(); YEAR() Extrae el año de una fecha. SELECT YEAR(fecha_contrato) FROM empleados; MONTH() Extrae el mes de una fecha. SELECT MONTH(fecha_contrato) FROM empleados; DATEDIFF() Calcula la diferencia de días entre dos fechas. SELECT DATEDIFF(NOW(), fecha_contrato) FROM empleados;
COMMIT: Guarda los cambios realizados. ROLLBACK: Revierte los cambios si ocurre un error. SAVEPOINT: Define puntos intermedios en una transacción.
BEGIN; UPDATE usuarios SET nombre = 'Ana' WHERE id = 1; ROLLBACK;
GRANT: Concede permisos a usuarios. REVOKE: Revoca permisos previamente concedidos.
GRANT SELECT, INSERT ON usuarios TO juan;
SELECT: Consulta datos en una tabla. INSERT: Inserta datos en una tabla. UPDATE: Modifica datos en una tabla. DELETE: Elimina datos de una tabla.
INSERT INTO usuarios (id, nombre, correo) VALUES (1, 'Carlos', 'carlos@mail.com');
CREATE: Crea bases de datos, tablas, vistas, etc. ALTER: Modifica la estructura de una tabla. DROP: Elimina bases de datos, tablas o vistas. TRUNCATE: Borra todos los datos de una tabla sin eliminar su estructura.
CREATE TABLE usuarios ( id INT PRIMARY KEY, nombre VARCHAR(50), correo VARCHAR(100) );