diff --git a/Practicas/Practicas_SQL/codigo/COMANDOS SQL.jpg b/Practicas/Practicas_SQL/codigo/COMANDOS SQL.jpg new file mode 100644 index 0000000..474c169 Binary files /dev/null and b/Practicas/Practicas_SQL/codigo/COMANDOS SQL.jpg differ diff --git a/Practicas/Practicas_SQL/codigo/INTRO_SQL_comandos_DDL.sql b/Practicas/Practicas_SQL/codigo/INTRO_SQL_comandos_DDL.sql new file mode 100644 index 0000000..70c0966 --- /dev/null +++ b/Practicas/Practicas_SQL/codigo/INTRO_SQL_comandos_DDL.sql @@ -0,0 +1,83 @@ + +-- Principales comandos DDL (Data Definition Language): Utilizado para definir estructuras de bases de datos y objetos como tablas, índices, y vistas. + +-- CREATE DATABASE: permite crear una base de datos + +CREATE DATABASE MiBaseDeDatos + CHARACTER SET utf8mb4 + COLLATE utf8mb4_unicode_ci; + + +-- CREATE TABLE: Se utiliza para crear una nueva tabla en la base de datos. + +USE MiBaseDeDatos; -- indicamos que tabla vamos a usar + +CREATE TABLE departamentos ( + id INT PRIMARY KEY, + nombre VARCHAR(50) + ); + + +CREATE TABLE Empleados ( + id INT AUTO_INCREMENT PRIMARY KEY, + nombre VARCHAR(50), + dni VARCHAR(50) UNIQUE, + salario DECIMAL(10, 2), + fecha_contratacion DATE, + departamento_id INT, + CHECK (salario < 10000), + CONSTRAINT fk_departamento + FOREIGN KEY (departamento_id) + REFERENCES departamentos(id) +); + +-- Restricciones +Restricción Descripción +NOT NULL Indica que una columna no puede contener un valor NULL +UNIQUE Indica que cada fila de la columna debe tener un valor único +PRIMARY KEY Combinación entre NOT NULL y UNIQUE. Asegura que una o más columnas tienen una identidad única +FOREIGN KEY Asegura la integridad referencial de los datos +CHECK Asegura que el valor de una columna cumple con una condición específica +DEFAULT Establece un valor por defecto en una columna + + + +-- ALTER TABLE: Se utiliza para modificar una tabla existente, agregando, modificando o eliminando columnas. + +ALTER TABLE Empleados +ADD COLUMN departamento VARCHAR(50), -- Añade +MODIFY COLUMN salario DECIMAL(12, 2), -- Modifica el tipo +DROP COLUMN fecha_contratacion, --Elimina +RENAME TO Empleados2; -- Renombra la tabla + + +-- Añadir una restricción + +ALTER TABLE orders -- Tabla sobre la que actuamos +ADD CONSTRAINT fk_customerNumber -- Nombre restricción +FOREIGN KEY (customerNumber) -- Restricción +REFERENCES customers(customerNumber); -- Tabla de la clave primaria + +-- CREATE INDEX: Se utiliza para crear un índice en una tabla para acelerar la búsqueda de registros. +CREATE INDEX idx_nombre ON Empleados(nombre); +-- DROP INDEX: Se utiliza para eliminar un índice existente de la base de datos. +DROP INDEX idx_nombre ON Empleados; + +--CREATE VIEW: Se utiliza para crear una vista, que es una tabla virtual basada en los resultados de una consulta +CREATE VIEW VistaEmpleados AS +SELECT id, nombre, salario FROM Empleados WHERE departamento = 'Ventas'; +--DROP VIEW VistaEmpleados; para borrarla + +--CREATE PROCEDURE: Se utiliza para crear un procedimiento almacenado, que es un conjunto de instrucciones SQL que se pueden ejecutar de forma repetida. + +DELIMITER // +CREATE PROCEDURE ObtenerPedidosUsuario(usu_id INT ) +BEGIN + SELECT * FROM pedidos WHERE cliente_id = usu_id; +END// +DELIMITER ; + +--Para ejecutarlo +CALL ObtenerPedidosUsuario('ID_DEL_USUARIO'); +--Para borrarlo +DROP PROCEDURE ObtenerPedidosUsuario; \ No newline at end of file diff --git a/Practicas/Practicas_SQL/codigo/INTRO_SQL_comandos_DML.sql b/Practicas/Practicas_SQL/codigo/INTRO_SQL_comandos_DML.sql new file mode 100644 index 0000000..b50a7e4 --- /dev/null +++ b/Practicas/Practicas_SQL/codigo/INTRO_SQL_comandos_DML.sql @@ -0,0 +1,78 @@ + +-- 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 +_ Sustituye por un sólo carácter +[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 + + diff --git a/Practicas/Practicas_SQL/codigo/INTRO_SQL_comandos_DML_2.sql b/Practicas/Practicas_SQL/codigo/INTRO_SQL_comandos_DML_2.sql new file mode 100644 index 0000000..285809c --- /dev/null +++ b/Practicas/Practicas_SQL/codigo/INTRO_SQL_comandos_DML_2.sql @@ -0,0 +1,192 @@ + +-- 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 + diff --git a/Practicas/Practicas_SQL/codigo/INTRO_SQL_pasos_consulta_PHP_INSERT.php b/Practicas/Practicas_SQL/codigo/INTRO_SQL_pasos_consulta_PHP_INSERT.php new file mode 100644 index 0000000..6214a2b --- /dev/null +++ b/Practicas/Practicas_SQL/codigo/INTRO_SQL_pasos_consulta_PHP_INSERT.php @@ -0,0 +1,41 @@ + + + +La inserción ha sido realizada

"; +} + +// Cerrar la conexión +mysqli_close($conexion); +?> + diff --git a/Practicas/Practicas_SQL/codigo/db-relaciontabla.jpg b/Practicas/Practicas_SQL/codigo/db-relaciontabla.jpg new file mode 100644 index 0000000..a8c7527 Binary files /dev/null and b/Practicas/Practicas_SQL/codigo/db-relaciontabla.jpg differ diff --git a/Practicas/Practicas_SQL/codigo/mapaconceptual_SQL.jpg b/Practicas/Practicas_SQL/codigo/mapaconceptual_SQL.jpg new file mode 100644 index 0000000..b455f94 Binary files /dev/null and b/Practicas/Practicas_SQL/codigo/mapaconceptual_SQL.jpg differ diff --git a/Practicas/Practicas_SQL/ejercicios/tienda/Ejercicio Productos Alumno04.txt b/Practicas/Practicas_SQL/ejercicios/tienda/Ejercicio Productos Alumno04.txt new file mode 100644 index 0000000..a93a794 --- /dev/null +++ b/Practicas/Practicas_SQL/ejercicios/tienda/Ejercicio Productos Alumno04.txt @@ -0,0 +1,23 @@ +Alumno 04 + + +- Precio medio de los productos(tienda) + SELECT AVG(precio) AS 'Precio medio' FROM `productos`; + +- Precio total de los productos de la tienda disponibles + SELECT SUM(precio) AS 'Precio total' FROM `productos`; + +- Productos que están por debajo de 100 Euros + SELECT * FROM `productos` WHERE precio<100 ORDER BY precio DESC; + +- Productos que contienen "inalámbrico" + SELECT * FROM `productos` WHERE nombre like '%inalámbrico%'; + +- Productos cuyo precio termina en 5 + SELECT * FROM `productos` WHERE precio like '%5'; + +- Lista de productos con precio con IVA en una columna + SELECT *,(precio*1.21) as 'Precio con iva' FROM `productos`; + +- Producto con segundo mayor precio + SELECT * FROM `productos` ORDER BY precio DESC LIMIT 1 OFFSET 1; \ No newline at end of file diff --git a/Practicas/Practicas_SQL/ejercicios/tienda/estilo.css b/Practicas/Practicas_SQL/ejercicios/tienda/estilo.css new file mode 100644 index 0000000..bee9ae6 --- /dev/null +++ b/Practicas/Practicas_SQL/ejercicios/tienda/estilo.css @@ -0,0 +1,58 @@ + +* { + box-sizing: border-box; +} +/* Estilos generales */ +body { + font-family: Arial, sans-serif; + background-color: #f4f4f4; + padding: 20px; +} + +form { + background-color: #fff; + padding: 20px; + border-radius: 5px; + box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); +} + +p { + background-color: #fff; + padding: 20px; + color: #4CAF50; +} + +h2 { + color: #333; +} + +/* Estilos para etiquetas y campos de entrada */ +label { + display: block; + margin-bottom: 5px; + color: #666; +} + +input[type="text"], +input[type="email"], +input[type="password"] { + width: 100%; + padding: 10px; + margin-bottom: 20px; + border: 1px solid #ccc; + border-radius: 4px; +} + +input[type="submit"] { + background-color: #4CAF50; + color: white; + padding: 15px 20px; + border: none; + border-radius: 4px; + cursor: pointer; +} + +input[type="submit"]:hover { + background-color: #45a049; +} + diff --git a/Practicas/Practicas_SQL/ejercicios/tienda/productos.csv b/Practicas/Practicas_SQL/ejercicios/tienda/productos.csv new file mode 100644 index 0000000..ea32881 --- /dev/null +++ b/Practicas/Practicas_SQL/ejercicios/tienda/productos.csv @@ -0,0 +1,11 @@ +1,Destornillador electrico,19.95 +2,Teléfono móvil,299.94 +3,Tablet,199.99 +4,Ordenador portátil,799.85 +5,Smartwatch,149.25 +6,Cámara digital,249.99 +7,Auriculares inalámbricos,99.50 +8,Altavoz Bluetooth,78.00 +9,Cargador USB,19.45 +10,Teclado inalámbrico,49.35 +11,Ratón óptico,29.75 diff --git a/Practicas/Practicas_SQL/ejercicios/tienda/registro_productos.php b/Practicas/Practicas_SQL/ejercicios/tienda/registro_productos.php new file mode 100644 index 0000000..cd49a97 --- /dev/null +++ b/Practicas/Practicas_SQL/ejercicios/tienda/registro_productos.php @@ -0,0 +1,52 @@ + + + + + + + + Regsitro Productos + + + +
+
+

+ +
+

+ + +
+ + + +La inserción ha sido realizada

"; + } + mysqli_close($conexion); +} + + +?> + + \ No newline at end of file