IFCD0210/Practicas/Practicas_SQL/codigo/INTRO_SQL_comandos_DML_2.sql
2024-03-11 13:53:37 +01:00

193 lines
6.2 KiB
SQL

-- Principales comandos DML (Data Manipulation Language) se utilizan para manipular los datos en una base de datos.
--SELECT: Se utiliza para recuperar datos de una o más tablas de la base de datos.
SELECT columna1, columna2 FROM tabla WHERE condicion;
--INSERT: Se utiliza para agregar nuevos registros a una tabla.
INSERT INTO tabla (columna1, columna2) VALUES (valor1, valor2);
--UPDATE: Se utiliza para actualizar registros existentes en una tabla. ¡¡¡¡¡¡¡WHERE!!!!!!!
UPDATE tabla SET columna1 = valor1, columna2 = valor2 WHERE condicion;
--DELETE: Se utiliza para eliminar registros de una tabla.
DELETE FROM tabla WHERE condicion;
--REPLACE: En MySQL, REPLACE es similar a INSERT, pero si hay un registro existente con la misma clave primaria o única, se elimina antes de insertar el nuevo registro. Si no hay conflicto, se comporta igual que INSERT.
REPLACE INTO tabla (columna1, columna2) VALUES (valor1, valor2);
--LOAD DATA INFILE: Se utiliza para cargar datos de un archivo CSV o de texto en una tabla de la base de datos.
LOAD DATA INFILE 'archivo.csv' INTO TABLE tabla;
--SELECT
--SELECT DISTINCT solo valores diferentes, no repetidos.
--Operadores WHERE establecer una condición (puede ser múltiple AND OR) y WHERE NOT.
= Igual
<> No igual (en algunas versiones de SQL es !=)
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
BETWEEN Entre un rango de valores
LIKE Buscar un patrón
IN Especifica múltiples posibles valores para una columna
LIMIT establecer un límite de filas
--LIKE para establecer patrones en combinación con WHERE
% Sustituye por cero o más caracteres por% %es
_ Sustituye por un sólo carácter prue_a
[caracteres] Establece y crea rangos de caracteres a encontrar
[^caracteres] ó [!caracteres] Establece y crea rangos de caracteres a evitar
SELECT *
FROM productos
WHERE precio BETWEEN 50 AND 100; -- Rango entre 50 y 100
SELECT * FROM Clientes
WHERE Ciudad LIKE '%[a-j]' --Que terminen en un rango entre a-j
SELECT *
FROM clientes
WHERE pais IN ('USA', 'Canadá', 'México'); -- Si coinciden con alguno de los valores
SELECT *
FROM clientes
WHERE id IN (SELECT cliente_id FROM pedidos WHERE total > 1000); -- Combinando dos SELECT
SELECT *
FROM productos
LIMIT 5 OFFSET 5; -- Limitidado a 5 registros y descartando los 5 primeros
-- LIMIT 10,5 o esta LIMIT 5 OFFSET 10
--ORDER BY (ASC|DESC)
--Ordenados según orden ascendente de NombreCliente y descendente de Ciudad
SELECT * FROM Clientes
ORDER BY NombreCliente DESC;
SELECT * FROM Clientes
ORDER BY NombreCliente ASC, Ciudad DESC;
-- ***********Más contenido************* --
--ALIAS: para abreviar nombres de tablas y columnas, o para renombrar columnas.
--COLUMNAS
SELECT nombre
AS nombre_ciudad
FROM ciudad;
--TABLAS
SELECT ci.nombre
FROM ciudad AS ci;
--ALIAS sin AS
SELECT nombre primer_nombre, apellido
FROM empleados;
--*******************
--FUNCIONES DE AGREGACIÓN
COUNT: Calcula el número de filas en un conjunto de resultados. No cuenta los nulos.
SUM: Calcula la suma de los valores en una columna.
AVG: Calcula el promedio de los valores en una columna.
MAX: Devuelve el valor máximo en una columna.
MIN: Devuelve el valor mínimo en una columna.
| id_empleado | nombre | departamento | salario |
|-------------|----------|--------------|---------|
| 1 | Juan | Ventas | 3000 |
| 2 | María | Ventas | 3500 |
| 3 | Pedro | Recursos Hum | 4000 |
| 4 | Ana | Finanzas | 3800 |
| 5 | José | Ventas | 3200 |
--COUNT Calcula el número de filas en un conjunto de resultados. No cuenta los nulos.
SELECT COUNT(*) AS total_empleados
FROM empleados;
| total_empleados |
|-----------------|
| 5 |
--SUM Calcula la suma de los valores en una columna.
SELECT SUM(salario) AS salarios_empleados
FROM empleados;
| salarios_empleados |
|--------------------|
| 17500 |
--AVG Calcula el promedio de los valores en una columna.
SELECT AVG(salario) AS salario_promedio
FROM empleados;
| salario_promedio |
|------------------|
| 3500 |
--MAX Devuelve el valor máximo en una columna.
SELECT MAX(salario) AS salario_maximo
FROM empleados;
| salario_maximo |
|------------------|
| 4000 |
--MIN Devuelve el valor mínimo en una columna.
SELECT MIN(salario) AS salario_minimo
FROM empleados;
| salario_minimo |
|------------------|
| 3000 |
--**************
--GROUP BY
-- Para agrupar filas que comparten un valor común en una o más columnas y para aplicar funciones de agregación.
--Agregación de datos - Salario promedio por departamento:
SELECT departamento, AVG(salario) AS salario_promedio
FROM empleados
GROUP BY departamento;
| departamento | salario_promedio |
|----------------|------------------|
| Ventas | 3233.33 |
| Recursos Hum | 4000.00 |
| Finanzas | 3800.00 |
--Agrupación por departamentos
SELECT departamento, COUNT(*) AS cantidad_empleados
FROM empleados
GROUP BY departamento;
| departamento | cantidad_empleados |
|----------------|--------------------|
| Ventas | 3 |
| Recursos Hum | 1 |
| Finanzas | 1 |
--HAVING filtrar los resultados de una consulta que incluye una cláusula GROUP BY
--Filtrado de resultados
SELECT departamento, AVG(salario) AS salario_promedio --4
FROM empleados --1
GROUP BY departamento --2
HAVING AVG(salario) > 3500; --3
| departamento | salario_promedio |
|----------------|------------------|
| Recursos Hum | 4000 |
| Finanzas | 3800 |
------------*********ORDEN*********-----------
--Orden de escritura Orden de ejecución
SELECT FROM
DISTINCT JOIN
FROM WHERE
JOIN GROUP BY
WHERE HAVING
GROUP BY SELECT
HAVING DISTINCT
ORDER BY ORDER BY
LIMIT OFFSET LIMIT OFFSET