MySQL: Proyecto Empresa
This commit is contained in:
parent
be3c77ca05
commit
df2356fda8
@ -91,11 +91,11 @@ condiciones es verdadera
|
|||||||
- **Operación NAND(NOT AND)**: Negación de la operación **AND**
|
- **Operación NAND(NOT AND)**: Negación de la operación **AND**
|
||||||
|
|
||||||
| Verdadero | Falso |
|
| Verdadero | Falso |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| 1 | 0 |
|
| 1 | 0 |
|
||||||
|
|
||||||
| A | B | OR | AND | NOR | NAND |
|
| A | B | OR | AND | NOR | NAND |
|
||||||
| - | - | - | - | - | - |
|
| :-: | :-: | :-: | :-: | :-: | :-: |
|
||||||
| 0 | 0 | 0 | 0 | 1 | 1 |
|
| 0 | 0 | 0 | 0 | 1 | 1 |
|
||||||
| 0 | 1 | 1 | 0 | 0 | 1 |
|
| 0 | 1 | 1 | 0 | 0 | 1 |
|
||||||
| 1 | 0 | 1 | 0 | 0 | 1 |
|
| 1 | 0 | 1 | 0 | 0 | 1 |
|
||||||
@ -118,7 +118,7 @@ condiciones es verdadera
|
|||||||
### Ejemplo
|
### Ejemplo
|
||||||
|
|
||||||
| A | B | A=B | A<=B |
|
| A | B | A=B | A<=B |
|
||||||
| - | - | - | - |
|
| :-: | :-: | :-: | :-: |
|
||||||
| 3 | 5 | 0 | 1 | 0 | 1 |
|
| 3 | 5 | 0 | 1 | 0 | 1 |
|
||||||
| 5 | 23 | 0 | 1 | 0 | 1 |
|
| 5 | 23 | 0 | 1 | 0 | 1 |
|
||||||
| 7 | 7 | 1 | 1 | 1 | 1 |
|
| 7 | 7 | 1 | 1 | 1 | 1 |
|
||||||
@ -333,7 +333,7 @@ SELECT * FROM tabla_de_productos WHERE sabor LIKE '%manzana%' AND envase = 'bote
|
|||||||
Devuelve solo registros con valores diferentes
|
Devuelve solo registros con valores diferentes
|
||||||
|
|
||||||
| CAMPO_1 | CAMPO_2 |
|
| CAMPO_1 | CAMPO_2 |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| A | B |
|
| A | B |
|
||||||
| Z | C |
|
| Z | C |
|
||||||
| Z | Q |
|
| Z | Q |
|
||||||
@ -352,7 +352,7 @@ SELECT DISTINCT * FROM tb;
|
|||||||
Retorna:
|
Retorna:
|
||||||
|
|
||||||
| CAMPO_1 | CAMPO_2 |
|
| CAMPO_1 | CAMPO_2 |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| A | B |
|
| A | B |
|
||||||
| Z | C |
|
| Z | C |
|
||||||
| Z | Q |
|
| Z | Q |
|
||||||
@ -596,7 +596,7 @@ ORDER BY total DESC LIMIT 10;
|
|||||||
## GROUP BY
|
## GROUP BY
|
||||||
|
|
||||||
| X | Y |
|
| X | Y |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| A | 3 |
|
| A | 3 |
|
||||||
| Z | 5 |
|
| Z | 5 |
|
||||||
| Z | 1 |
|
| Z | 1 |
|
||||||
@ -612,7 +612,7 @@ SELECT x, SUM(y) FROM tb GROUP BY X;
|
|||||||
```
|
```
|
||||||
|
|
||||||
| X | Y |
|
| X | Y |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| A | 4 |
|
| A | 4 |
|
||||||
| E | 4 |
|
| E | 4 |
|
||||||
| T | 4 |
|
| T | 4 |
|
||||||
@ -642,7 +642,7 @@ SELECT x, MAX(y) FROM tb GROUP BY X;
|
|||||||
```
|
```
|
||||||
|
|
||||||
| X | Y |
|
| X | Y |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| A | 3 |
|
| A | 3 |
|
||||||
| E | 4 |
|
| E | 4 |
|
||||||
| T | 3 |
|
| T | 3 |
|
||||||
@ -660,7 +660,7 @@ SELECT x, MIN(y) FROM tb GROUP BY X;
|
|||||||
```
|
```
|
||||||
|
|
||||||
| X | Y |
|
| X | Y |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| A | 1 |
|
| A | 1 |
|
||||||
| E | 4 |
|
| E | 4 |
|
||||||
| T | 1 |
|
| T | 1 |
|
||||||
@ -678,7 +678,7 @@ SELECT x, AVG(y) FROM tb GROUP BY X;
|
|||||||
```
|
```
|
||||||
|
|
||||||
| X | Y |
|
| X | Y |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| A | 2 |
|
| A | 2 |
|
||||||
| E | 4 |
|
| E | 4 |
|
||||||
| T | 2 |
|
| T | 2 |
|
||||||
@ -696,7 +696,7 @@ SELECT x, COUNT(y) FROM tb GROUP BY X;
|
|||||||
```
|
```
|
||||||
|
|
||||||
| X | Y |
|
| X | Y |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| A | 2 |
|
| A | 2 |
|
||||||
| E | 1 |
|
| E | 1 |
|
||||||
| T | 2 |
|
| T | 2 |
|
||||||
@ -832,7 +832,7 @@ SELECT COUNT(*) FROM items_facturas
|
|||||||
Filtro que se aplica sobre el resultado de una agregación
|
Filtro que se aplica sobre el resultado de una agregación
|
||||||
|
|
||||||
| X | Y |
|
| X | Y |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| A | 3 |
|
| A | 3 |
|
||||||
| Z | 5 |
|
| Z | 5 |
|
||||||
| Z | 1 |
|
| Z | 1 |
|
||||||
@ -850,7 +850,7 @@ SELECT x, SUM(y) FROM tb
|
|||||||
```
|
```
|
||||||
|
|
||||||
| X | Y |
|
| X | Y |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| Z | 16 |
|
| Z | 16 |
|
||||||
|
|
||||||
|
|
||||||
@ -955,7 +955,7 @@ CASE
|
|||||||
ej. Tabla `tb`
|
ej. Tabla `tb`
|
||||||
|
|
||||||
| X | Y |
|
| X | Y |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| Cliente_1 | 8 |
|
| Cliente_1 | 8 |
|
||||||
| Cliente_2 | 6 |
|
| Cliente_2 | 6 |
|
||||||
| Cliente_3 | 3 |
|
| Cliente_3 | 3 |
|
||||||
@ -979,7 +979,7 @@ FROM tb;
|
|||||||
Resultado:
|
Resultado:
|
||||||
|
|
||||||
| X | Y |
|
| X | Y |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| Cliente_1 | Muy bueno |
|
| Cliente_1 | Muy bueno |
|
||||||
| Cliente_2 | Regular |
|
| Cliente_2 | Regular |
|
||||||
| Cliente_3 | Inferior |
|
| Cliente_3 | Inferior |
|
||||||
@ -1093,7 +1093,7 @@ Permite unir dos o más tablas a través de un campo en común
|
|||||||
### Tabla A
|
### Tabla A
|
||||||
|
|
||||||
| Nombre | Id |
|
| Nombre | Id |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| Alejandro | 2 |
|
| Alejandro | 2 |
|
||||||
| Zaida | 7 |
|
| Zaida | 7 |
|
||||||
| Ximena | 8 |
|
| Ximena | 8 |
|
||||||
@ -1104,7 +1104,7 @@ Permite unir dos o más tablas a través de un campo en común
|
|||||||
### Tabla B
|
### Tabla B
|
||||||
|
|
||||||
| Id | Hobby |
|
| Id | Hobby |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| 4 | Lectura |
|
| 4 | Lectura |
|
||||||
| 5 | Futbol |
|
| 5 | Futbol |
|
||||||
| 6 | Tenis |
|
| 6 | Tenis |
|
||||||
@ -1124,7 +1124,7 @@ INNER JOIN
|
|||||||
```
|
```
|
||||||
|
|
||||||
| Nombre | Hobby |
|
| Nombre | Hobby |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| Zaida | Alpinismo |
|
| Zaida | Alpinismo |
|
||||||
| Ximena | Fotografía |
|
| Ximena | Fotografía |
|
||||||
| Penélope | Hípica |
|
| Penélope | Hípica |
|
||||||
@ -1142,7 +1142,7 @@ LEFT JOIN
|
|||||||
```
|
```
|
||||||
|
|
||||||
| Nombre | Hobby |
|
| Nombre | Hobby |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| Alejandro | `NULL` |
|
| Alejandro | `NULL` |
|
||||||
| Zaida | Alpinismo |
|
| Zaida | Alpinismo |
|
||||||
| Ximena | Fotografía |
|
| Ximena | Fotografía |
|
||||||
@ -1163,7 +1163,7 @@ RIGHT JOIN
|
|||||||
```
|
```
|
||||||
|
|
||||||
| Nombre | Hobby |
|
| Nombre | Hobby |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| `NULL`| Lectura |
|
| `NULL`| Lectura |
|
||||||
| `NULL` | Futbol |
|
| `NULL` | Futbol |
|
||||||
| `NULL` | Tenis |
|
| `NULL` | Tenis |
|
||||||
@ -1183,7 +1183,7 @@ FULL JOIN
|
|||||||
```
|
```
|
||||||
|
|
||||||
| Nombre | Hobby |
|
| Nombre | Hobby |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| `NULL`| Lectura |
|
| `NULL`| Lectura |
|
||||||
| `NULL` | Futbol |
|
| `NULL` | Futbol |
|
||||||
| `NULL` | Tenis |
|
| `NULL` | Tenis |
|
||||||
@ -1206,7 +1206,7 @@ Devuelve 36 registros con todas las combinaciónes de todos los hobbies y nombre
|
|||||||
|
|
||||||
|
|
||||||
| Nombre | Hobby |
|
| Nombre | Hobby |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| Alejandro | Lectura |
|
| Alejandro | Lectura |
|
||||||
| Zaida | Lectura |
|
| Zaida | Lectura |
|
||||||
| Ximena | Lectura |
|
| Ximena | Lectura |
|
||||||
@ -1420,14 +1420,14 @@ El número de campos en las tabls de ser iguales (mismos campos y tipos)
|
|||||||
ej.
|
ej.
|
||||||
|
|
||||||
| Id | Hobby |
|
| Id | Hobby |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| 4 | Lectura |
|
| 4 | Lectura |
|
||||||
| 5 | Futbol |
|
| 5 | Futbol |
|
||||||
| 6 | Tenis |
|
| 6 | Tenis |
|
||||||
| 7 | Alpinismo |
|
| 7 | Alpinismo |
|
||||||
|
|
||||||
| Id | Hobby |
|
| Id | Hobby |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| 8 | Fotografía |
|
| 8 | Fotografía |
|
||||||
| 9 | Hípica |
|
| 9 | Hípica |
|
||||||
| 5 | Futbol |
|
| 5 | Futbol |
|
||||||
@ -1444,7 +1444,7 @@ UNION
|
|||||||
Retorna:
|
Retorna:
|
||||||
|
|
||||||
| Id | Hobby |
|
| Id | Hobby |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| 4 | Lectura |
|
| 4 | Lectura |
|
||||||
| 5 | Futbol |
|
| 5 | Futbol |
|
||||||
| 6 | Tenis |
|
| 6 | Tenis |
|
||||||
@ -1464,7 +1464,7 @@ UNION ALL
|
|||||||
Retorna:
|
Retorna:
|
||||||
|
|
||||||
| Id | Hobby |
|
| Id | Hobby |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| 4 | Lectura |
|
| 4 | Lectura |
|
||||||
| 5 | Futbol |
|
| 5 | Futbol |
|
||||||
| 6 | Tenis |
|
| 6 | Tenis |
|
||||||
@ -1609,7 +1609,7 @@ FROM tabla_de_clientes
|
|||||||
Realizar una consulta al interior de otra
|
Realizar una consulta al interior de otra
|
||||||
|
|
||||||
| X | Y |
|
| X | Y |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| A | 3 |
|
| A | 3 |
|
||||||
| Z | 5 |
|
| Z | 5 |
|
||||||
| Z | 1 |
|
| Z | 1 |
|
||||||
@ -1621,7 +1621,7 @@ Realizar una consulta al interior de otra
|
|||||||
| T | 1 |
|
| T | 1 |
|
||||||
|
|
||||||
| Y |
|
| Y |
|
||||||
| - |
|
| :-: | :-: |
|
||||||
| 1 |
|
| 1 |
|
||||||
| 2 |
|
| 2 |
|
||||||
|
|
||||||
@ -1633,7 +1633,7 @@ WHERE y IN (
|
|||||||
```
|
```
|
||||||
|
|
||||||
| X | Y |
|
| X | Y |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| A | 3 |
|
| A | 3 |
|
||||||
| Z | 1 |
|
| Z | 1 |
|
||||||
| A | 1 |
|
| A | 1 |
|
||||||
@ -1647,7 +1647,7 @@ FROM tb1 GROUP BY X
|
|||||||
```
|
```
|
||||||
|
|
||||||
| X | NEW_Y |
|
| X | NEW_Y |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| A | 4 |
|
| A | 4 |
|
||||||
| E | 4 |
|
| E | 4 |
|
||||||
| T | 4 |
|
| T | 4 |
|
||||||
@ -1661,7 +1661,7 @@ SELECT z.x, z.new_y FROM
|
|||||||
```
|
```
|
||||||
|
|
||||||
| X | NEW_Y |
|
| X | NEW_Y |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| A | 4 |
|
| A | 4 |
|
||||||
| E | 4 |
|
| E | 4 |
|
||||||
| T | 4 |
|
| T | 4 |
|
||||||
@ -1744,7 +1744,7 @@ La vista tiene un costo de procesamiento, cada vez que es invocada se ejecuta
|
|||||||
su consulta.
|
su consulta.
|
||||||
|
|
||||||
| X | Y |
|
| X | Y |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| A | 3 |
|
| A | 3 |
|
||||||
| Z | 5 |
|
| Z | 5 |
|
||||||
| Z | 1 |
|
| Z | 1 |
|
||||||
@ -1764,7 +1764,7 @@ FROM tb1 GROUP BY x
|
|||||||
VW_VIEW
|
VW_VIEW
|
||||||
|
|
||||||
| X | Y |
|
| X | Y |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| A | 4 |
|
| A | 4 |
|
||||||
| E | 4 |
|
| E | 4 |
|
||||||
| T | 4 |
|
| T | 4 |
|
||||||
@ -1776,7 +1776,7 @@ Al almacenar una consulta, se crea una **VIEW**, en este caso llamada
|
|||||||
tb3
|
tb3
|
||||||
|
|
||||||
| W | Y |
|
| W | Y |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| F | 4 |
|
| F | 4 |
|
||||||
| H | 4 |
|
| H | 4 |
|
||||||
| H | 5 |
|
| H | 5 |
|
||||||
@ -1795,7 +1795,7 @@ SELECT VW_VIEW.x, tb3.w FROM VW_VIEW
|
|||||||
```
|
```
|
||||||
|
|
||||||
| X | W |
|
| X | W |
|
||||||
| - | - |
|
| :-: | :-: |
|
||||||
| Z | P |
|
| Z | P |
|
||||||
|
|
||||||
### Prácticas VIEW
|
### Prácticas VIEW
|
||||||
|
461
011_mysql/proyecto_mysql.md
Normal file
461
011_mysql/proyecto_mysql.md
Normal file
@ -0,0 +1,461 @@
|
|||||||
|
# Proyecto Empresa
|
||||||
|
|
||||||
|
#### Entidades
|
||||||
|
|
||||||
|
- **Cliente**
|
||||||
|
- **Vendedor**
|
||||||
|
- **Producto**
|
||||||
|
- **Factura**
|
||||||
|
- **Items**
|
||||||
|
|
||||||
|
<style>div.mermaid{text-align: center;}</style>
|
||||||
|
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
erDiagram
|
||||||
|
Producto {
|
||||||
|
CODIGO varchar PK
|
||||||
|
DESCRIPCION varchar
|
||||||
|
SABOR varchar
|
||||||
|
TAMANO varchar
|
||||||
|
ENVASE varchar
|
||||||
|
PRECIO_LISTA float
|
||||||
|
}
|
||||||
|
Vendedor {
|
||||||
|
MATRICULA varchar PK
|
||||||
|
NOMBRE varchar
|
||||||
|
BARRIO varchar
|
||||||
|
COMISION float
|
||||||
|
FECHA_ADMISION date
|
||||||
|
VACACIONES bit
|
||||||
|
}
|
||||||
|
Cliente {
|
||||||
|
DNI varchar PK
|
||||||
|
NOMBRE varchar
|
||||||
|
BARRIO varchar
|
||||||
|
CIUDAD varchar
|
||||||
|
ESTADO varchar
|
||||||
|
FECHA_NACIMIENTO date
|
||||||
|
EDAD int
|
||||||
|
SEXO varchar
|
||||||
|
LIMITE_CREDITO int
|
||||||
|
VOLUMEN_COMPRA int
|
||||||
|
PRIMERA_COMPRA bit
|
||||||
|
}
|
||||||
|
Factura {
|
||||||
|
NUMERO varchar PK
|
||||||
|
DNI varchar FK
|
||||||
|
FECHA date
|
||||||
|
MATRICULA varchar FK
|
||||||
|
IMPUESTO float
|
||||||
|
}
|
||||||
|
Items {
|
||||||
|
CODIGO varchar FK
|
||||||
|
PRECIO float
|
||||||
|
CANTIDAD bigint
|
||||||
|
}
|
||||||
|
Vendedor ||--|{ Ventas : realiza
|
||||||
|
Clientes ||--|{ Ventas : involucra
|
||||||
|
Productos ||--|{ Items_Vendidos : contiene
|
||||||
|
Ventas ||--|{ Items_Vendidos : posee
|
||||||
|
```
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE clientes (
|
||||||
|
dni VARCHAR(11) NOT NULL,
|
||||||
|
nombre VARCHAR(100) NULL,
|
||||||
|
direccion VARCHAR(150),
|
||||||
|
barrio VARCHAR(50),
|
||||||
|
ciudad VARCHAR(50),
|
||||||
|
estado VARCHAR(20),
|
||||||
|
cp VARCHAR(10),
|
||||||
|
fecha_nacimiento DATE,
|
||||||
|
edad SMALLINT,
|
||||||
|
limite_credito FLOAT,
|
||||||
|
volumen_compra FLOAT,
|
||||||
|
primera_compra BIT,
|
||||||
|
PRIMARY KEY (dni)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE vendedores (
|
||||||
|
matricula VARCHAR(5) NOT NULL,
|
||||||
|
nombre VARCHAR(100),
|
||||||
|
barrio VARCHAR(50),
|
||||||
|
comision float,
|
||||||
|
fecha_admision DATE,
|
||||||
|
vacaciones BIT(1),
|
||||||
|
PRIMARY KEY (matricula)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE productos (
|
||||||
|
codigo VARCHAR(10) NOT NULL,
|
||||||
|
descripcion VARCHAR(100),
|
||||||
|
sabor VARCHAR(50),
|
||||||
|
tamano VARCHAR(50),
|
||||||
|
envase VARCHAR(50),
|
||||||
|
precio FLOAT,
|
||||||
|
PRIMARY KEY (codigo)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE facturas (
|
||||||
|
numero VARCHAR(5) NOT NULL,
|
||||||
|
fecha DATE,
|
||||||
|
dni VARCHAR(5) NOT NULL,
|
||||||
|
matricula VARCHAR(11) NOT NULL,
|
||||||
|
impuesto FLOAT,
|
||||||
|
PRIMARY KEY (numero),
|
||||||
|
FOREIGN KEY (dni) REFERENCES clientes(dni),
|
||||||
|
FOREIGN KEY (matricula) REFERENCES vendedores(matricula)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE items (
|
||||||
|
numero VARCHAR(5) NOT NULL,
|
||||||
|
codigo VARCHAR(10) NOT NULL,
|
||||||
|
cantidad INT,
|
||||||
|
precio FLOAT,
|
||||||
|
PRIMARY KEY (numero, codigo),
|
||||||
|
FOREIGN KEY (numero) REFERENCES facturas(numero),
|
||||||
|
FOREIGN KEY (codigo) REFERENCES productos(codigo)
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
## Poblar tablas
|
||||||
|
|
||||||
|
### Script insertar productos, vendedores y clientes
|
||||||
|
|
||||||
|
[insert](./proyecto_scripts/populate_tables.sql)
|
||||||
|
|
||||||
|
### Importar registros de facturas e items desde `jugos_ventas`
|
||||||
|
|
||||||
|
[./proyecto_scripts/import_records.sql](./proyecto_scripts/import_records.sql)
|
||||||
|
|
||||||
|
```sql
|
||||||
|
USE empresa;
|
||||||
|
|
||||||
|
INSERT INTO facturas
|
||||||
|
SELECT numero, fecha_venta as fecha, dni, matricula, impuesto
|
||||||
|
FROM jugos_ventas.facturas;
|
||||||
|
|
||||||
|
INSERT INTO items
|
||||||
|
SELECT numero, codigo_del_producto AS codigo, cantidad, precio
|
||||||
|
FROM jugos_ventas.items_facturas;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Funcion RAND
|
||||||
|
|
||||||
|
Devuelve un número aleatorio entre 0 y 1
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT RAND();
|
||||||
|
+---------------------+
|
||||||
|
| rand() |
|
||||||
|
+---------------------+
|
||||||
|
| 0.20842885617951756 |
|
||||||
|
+---------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT FLOOR(RAND() * (MAX-MIN+1)+MIN) AS ALEATORIO;
|
||||||
|
```
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- MIN = 20, MAX = 250
|
||||||
|
SELECT FLOOR(RAND() * (250-20+1)+20) AS ALEATORIO;
|
||||||
|
+-----------+
|
||||||
|
| ALEATORIO |
|
||||||
|
+-----------+
|
||||||
|
| 28 |
|
||||||
|
+-----------+
|
||||||
|
|
||||||
|
-- MIN = 1, MAX = 10
|
||||||
|
SELECT FLOOR(RAND() * (10-1+1)+1) AS ALEATORIO;
|
||||||
|
+-----------+
|
||||||
|
| ALEATORIO |
|
||||||
|
+-----------+
|
||||||
|
| 5 |
|
||||||
|
+-----------+
|
||||||
|
```
|
||||||
|
|
||||||
|
### Funcion número aleatorio
|
||||||
|
|
||||||
|
#### Activar creación de funciones
|
||||||
|
|
||||||
|
En el caso de MySQL puede ser requerido lo sgte.
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SET GLOBAL log_bin_trust_function_creators = 1;
|
||||||
|
```
|
||||||
|
|
||||||
|
```sql
|
||||||
|
DROP FUNCTION IF EXISTS f_aleatorio;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE FUNCTION f_aleatorio(min INT, max INT)
|
||||||
|
RETURNS INT
|
||||||
|
BEGIN
|
||||||
|
DECLARE vresultado INT;
|
||||||
|
SELECT FLOOR(RAND() * (MAX-MIN+1)+MIN) INTO vresultado;
|
||||||
|
RETURN vresultado;
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Función Cliente Aleatorio
|
||||||
|
|
||||||
|
```sql
|
||||||
|
DROP FUNCTION IF EXISTS f_cliente_aleatorio;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE FUNCTION f_cliente_aleatorio()
|
||||||
|
RETURNS VARCHAR(11)
|
||||||
|
BEGIN
|
||||||
|
DECLARE vresultado VARCHAR(11);
|
||||||
|
DECLARE vmax, vrand INT;
|
||||||
|
SELECT COUNT(*) INTO vmax FROM clientes;
|
||||||
|
SET vrand = f_aleatorio(1, vmax);
|
||||||
|
SET vrand = vrand-1;
|
||||||
|
SELECT dni INTO vresultado FROM clientes LIMIT vrand, 1;
|
||||||
|
RETURN vresultado;
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
```
|
||||||
|
|
||||||
|
***Crear una función para obtener un producto y otra para obtener un***
|
||||||
|
***vendedor, usando como base la función `f_aleatorio()`***
|
||||||
|
|
||||||
|
#### Función Producto Aleatorio
|
||||||
|
|
||||||
|
```sql
|
||||||
|
DROP FUNCTION IF EXISTS f_producto_aleatorio;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE FUNCTION f_producto_aleatorio()
|
||||||
|
RETURNS VARCHAR(11)
|
||||||
|
BEGIN
|
||||||
|
DECLARE vresultado VARCHAR(11);
|
||||||
|
DECLARE vmax, vrand INT;
|
||||||
|
SELECT COUNT(*) INTO vmax FROM productos;
|
||||||
|
SET vrand = f_aleatorio(1, vmax);
|
||||||
|
SET vrand = vrand-1;
|
||||||
|
SELECT codigo INTO vresultado FROM productos LIMIT vrand, 1;
|
||||||
|
RETURN vresultado;
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Función Vendedor Aleatorio
|
||||||
|
|
||||||
|
```sql
|
||||||
|
DROP FUNCTION IF EXISTS f_vendedor_aleatorio;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE FUNCTION f_vendedor_aleatorio()
|
||||||
|
RETURNS VARCHAR(11)
|
||||||
|
BEGIN
|
||||||
|
DECLARE vresultado VARCHAR(11);
|
||||||
|
DECLARE vmax, vrand INT;
|
||||||
|
SELECT COUNT(*) INTO vmax FROM vendedores;
|
||||||
|
SET vrand = f_aleatorio(1, vmax);
|
||||||
|
SET vrand = vrand-1;
|
||||||
|
SELECT matricula INTO vresultado FROM vendedores LIMIT vrand, 1;
|
||||||
|
RETURN vresultado;
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Funciones aleatorias
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT f_cliente_aleatorio() AS cliente,
|
||||||
|
f_producto_aleatorio() AS producto,
|
||||||
|
f_vendedor_aleatorio() AS vendedor;
|
||||||
|
+-------------+----------+----------+
|
||||||
|
| cliente | producto | vendedor |
|
||||||
|
+-------------+----------+----------+
|
||||||
|
| 94387575700 | 243083 | 00235 |
|
||||||
|
+-------------+----------+----------+
|
||||||
|
```
|
||||||
|
|
||||||
|
```sql
|
||||||
|
DROP PROCEDURE IF EXISTS sp_venta;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE PROCEDURE sp_venta(fecha DATE, max_items INT, max_cantidad INT)
|
||||||
|
BEGIN
|
||||||
|
DECLARE vcliente VARCHAR(11);
|
||||||
|
DECLARE vproducto VARCHAR(10);
|
||||||
|
DECLARE vvendedor VARCHAR(5);
|
||||||
|
DECLARE vcantidad INT;
|
||||||
|
DECLARE vprecio FLOAT;
|
||||||
|
DECLARE vitems INT;
|
||||||
|
DECLARE vnfactura INT;
|
||||||
|
DECLARE vcontador INT DEFAULT 1;
|
||||||
|
SELECT MAX(numero)+1 INTO vnfactura FROM facturas;
|
||||||
|
SET vcliente = f_cliente_aleatorio();
|
||||||
|
SET vvendedor = f_vendedor_aleatorio();
|
||||||
|
INSERT INTO facturas (numero, fecha, dni, matricula, impuesto)
|
||||||
|
VALUES (vnfactura, fecha, vcliente, vvendedor, 0.16);
|
||||||
|
SET vitems = f_aleatorio(1, max_items);
|
||||||
|
WHILE vcontador <= vitems DO
|
||||||
|
SET vproducto = f_producto_aleatorio();
|
||||||
|
SET vcantidad = f_aleatorio(1,max_cantidad);
|
||||||
|
SELECT precio INTO vprecio FROM productos WHERE codigo = vproducto;
|
||||||
|
INSERT INTO items(numero, codigo, cantidad, precio)
|
||||||
|
VALUES(vnfactura, vproducto, vcantidad, vprecio);
|
||||||
|
SET vcontador = vcontador+1;
|
||||||
|
END WHILE;
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
```
|
||||||
|
|
||||||
|
- Script [funciones_y_procedimientos](./proyecto_scripts/funcs_sp.sql)
|
||||||
|
|
||||||
|
### Corrigiendo campos numero en tablas `items` y `facturas`
|
||||||
|
|
||||||
|
[re_create_tables](./proyecto_scripts/re_create_tables.sql)
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CALL sp_venta('20210619', 3, 100);
|
||||||
|
Query OK, 27 rows affected (0.023 sec)
|
||||||
|
|
||||||
|
select * from facturas
|
||||||
|
where numero = (select max(numero) from facturas);
|
||||||
|
+--------+------------+------------+-----------+----------+
|
||||||
|
| numero | fecha | dni | matricula | impuesto |
|
||||||
|
+--------+------------+------------+-----------+----------+
|
||||||
|
| 87977 | 2021-06-19 | 5648641702 | 00236 | 0.16 |
|
||||||
|
+--------+------------+------------+-----------+----------+
|
||||||
|
```
|
||||||
|
|
||||||
|
***Calcular la facturación para la fecha '20210619'***
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT F.fecha, SUM(I.cantidad*I.precio) AS Facturacion
|
||||||
|
FROM facturas F
|
||||||
|
INNER JOIN
|
||||||
|
items I
|
||||||
|
ON F.numero = I.numero
|
||||||
|
WHERE F.fecha = '20210619' GROUP BY F.fecha;
|
||||||
|
```
|
||||||
|
|
||||||
|
***Calcular el valor del impuesto pago por año redondeado al mayor entero***
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT YEAR(fecha) AS "AÑO", CEIL(SUM((cantidad*precio)*impuesto))AS RESULTADO
|
||||||
|
FROM facturas F
|
||||||
|
INNER JOIN items I ON F.numero = I.numero
|
||||||
|
GROUP BY YEAR(fecha);
|
||||||
|
+------+-----------+
|
||||||
|
| AÑO | RESULTADO |
|
||||||
|
+------+-----------+
|
||||||
|
| 2015 | 4382250 |
|
||||||
|
| 2016 | 4656938 |
|
||||||
|
| 2017 | 4879519 |
|
||||||
|
| 2018 | 1211812 |
|
||||||
|
| 2021 | 9228 |
|
||||||
|
+------+-----------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## Triggers INSERT DELETE UPDATE
|
||||||
|
|
||||||
|
[Triggers.sql](./proyecto_scripts/triggers.sql.old)
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE facturacion(
|
||||||
|
fecha DATE NULL,
|
||||||
|
venta_total FLOAT
|
||||||
|
);
|
||||||
|
|
||||||
|
DELIMITER //
|
||||||
|
CREATE TRIGGER tg_facturacion_insert
|
||||||
|
AFTER INSERT ON items
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
DELETE FROM facturacion;
|
||||||
|
INSERT INTO facturacion
|
||||||
|
SELECT A.FECHA, SUM(B.cantidad * B.precio) AS VENTA_TOTAL
|
||||||
|
FROM facturas A
|
||||||
|
INNER JOIN
|
||||||
|
items B
|
||||||
|
ON A.NUMERO = B.NUMERO
|
||||||
|
GROUP BY A.FECHA;
|
||||||
|
END //
|
||||||
|
|
||||||
|
DELIMITER //
|
||||||
|
CREATE TRIGGER tg_facturacion_delete
|
||||||
|
AFTER DELETE ON items
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
DELETE FROM facturacion;
|
||||||
|
INSERT INTO facturacion
|
||||||
|
SELECT A.fecha, SUM(B.cantidad * B.precio) AS VENTA_TOTAL
|
||||||
|
FROM facturas A
|
||||||
|
INNER JOIN
|
||||||
|
items B
|
||||||
|
ON A.numero = B.numero
|
||||||
|
GROUP BY A.fecha;
|
||||||
|
END //
|
||||||
|
|
||||||
|
DELIMITER //
|
||||||
|
CREATE TRIGGER tg_facturacion_update
|
||||||
|
AFTER UPDATE ON items
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
DELETE FROM facturacion;
|
||||||
|
INSERT INTO facturacion
|
||||||
|
SELECT A.fecha, SUM(B.cantidad * B.precio) AS VENTA_TOTAL
|
||||||
|
FROM facturas A
|
||||||
|
INNER JOIN
|
||||||
|
items B
|
||||||
|
ON A.numero = B.numero
|
||||||
|
GROUP BY A.fecha;
|
||||||
|
END //
|
||||||
|
|
||||||
|
DELIMITER ;
|
||||||
|
```
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CALL sp_venta('20210622', 3, 10);
|
||||||
|
SELECT * FROM facturacion WHERE fecha = '20210622';
|
||||||
|
+------------+-------------+
|
||||||
|
| fecha | venta_total |
|
||||||
|
+------------+-------------+
|
||||||
|
| 2021-06-22 | 14528.2 |
|
||||||
|
+------------+-------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
Cambio de rutinas en comun de los triggers por un SP
|
||||||
|
|
||||||
|
```sql
|
||||||
|
DROP PROCEDURE IF EXISTS sp_triggers;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE PROCEDURE sp_triggers()
|
||||||
|
BEGIN
|
||||||
|
DELETE FROM facturacion;
|
||||||
|
INSERT INTO facturacion
|
||||||
|
SELECT A.fecha, SUM(B.cantidad * B.precio) AS VENTA_TOTAL
|
||||||
|
FROM facturas A
|
||||||
|
INNER JOIN
|
||||||
|
items B
|
||||||
|
ON A.numero = B.numero
|
||||||
|
GROUP BY A.fecha;
|
||||||
|
END $$
|
||||||
|
|
||||||
|
|
||||||
|
DROP TRIGGER tg_facturacion_insert $$
|
||||||
|
DROP TRIGGER tg_facturacion_delete $$
|
||||||
|
DROP TRIGGER tg_facturacion_update $$
|
||||||
|
|
||||||
|
CREATE TRIGGER tg_facturacion_insert
|
||||||
|
AFTER INSERT ON items
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
CALL sp_triggers;
|
||||||
|
END $$
|
||||||
|
|
||||||
|
CREATE TRIGGER tg_facturacion_delete
|
||||||
|
AFTER DELETE ON items
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
CALL sp_triggers;
|
||||||
|
END $$
|
||||||
|
|
||||||
|
CREATE TRIGGER tg_facturacion_update
|
||||||
|
AFTER UPDATE ON items
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
CALL sp_triggers;
|
||||||
|
END $$
|
||||||
|
|
||||||
|
DELIMITER ;
|
||||||
|
```
|
59
011_mysql/proyecto_scripts/create_tables.sql
Normal file
59
011_mysql/proyecto_scripts/create_tables.sql
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
USE empresa;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS clientes (
|
||||||
|
dni VARCHAR(11) NOT NULL,
|
||||||
|
nombre VARCHAR(100) NULL,
|
||||||
|
direccion VARCHAR(150),
|
||||||
|
barrio VARCHAR(50),
|
||||||
|
ciudad VARCHAR(50),
|
||||||
|
estado VARCHAR(20),
|
||||||
|
cp VARCHAR(10),
|
||||||
|
fecha_nacimiento DATE,
|
||||||
|
edad SMALLINT,
|
||||||
|
sexo VARCHAR(1),
|
||||||
|
limite_credito FLOAT,
|
||||||
|
volumen_compra FLOAT,
|
||||||
|
primera_compra BIT,
|
||||||
|
PRIMARY KEY (dni)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS vendedores (
|
||||||
|
matricula VARCHAR(5) NOT NULL,
|
||||||
|
nombre VARCHAR(100),
|
||||||
|
barrio VARCHAR(50),
|
||||||
|
comision float,
|
||||||
|
fecha_admision DATE,
|
||||||
|
vacaciones BIT(1),
|
||||||
|
PRIMARY KEY (matricula)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS productos (
|
||||||
|
codigo VARCHAR(10) NOT NULL,
|
||||||
|
descripcion VARCHAR(100),
|
||||||
|
sabor VARCHAR(50),
|
||||||
|
tamano VARCHAR(50),
|
||||||
|
envase VARCHAR(50),
|
||||||
|
precio FLOAT,
|
||||||
|
PRIMARY KEY (codigo)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS facturas (
|
||||||
|
numero VARCHAR(5) NOT NULL,
|
||||||
|
fecha DATE,
|
||||||
|
dni VARCHAR(11) NOT NULL,
|
||||||
|
matricula VARCHAR(5) NOT NULL,
|
||||||
|
impuesto FLOAT,
|
||||||
|
PRIMARY KEY (numero),
|
||||||
|
FOREIGN KEY (dni) REFERENCES clientes(dni),
|
||||||
|
FOREIGN KEY (matricula) REFERENCES vendedores(matricula)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS items (
|
||||||
|
numero VARCHAR(5) NOT NULL,
|
||||||
|
codigo VARCHAR(10) NOT NULL,
|
||||||
|
cantidad INT,
|
||||||
|
precio FLOAT,
|
||||||
|
PRIMARY KEY (numero, codigo),
|
||||||
|
FOREIGN KEY (numero) REFERENCES facturas(numero),
|
||||||
|
FOREIGN KEY (codigo) REFERENCES productos(codigo)
|
||||||
|
);
|
151
011_mysql/proyecto_scripts/funcs_sp.sql
Normal file
151
011_mysql/proyecto_scripts/funcs_sp.sql
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
USE empresa;
|
||||||
|
|
||||||
|
/*
|
||||||
|
MySQL
|
||||||
|
SET GLOBAL log_bin_trust_function_creators = 1
|
||||||
|
*/
|
||||||
|
|
||||||
|
DROP FUNCTION IF EXISTS f_aleatorio;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE FUNCTION f_aleatorio(min INT, max INT)
|
||||||
|
RETURNS INT
|
||||||
|
BEGIN
|
||||||
|
DECLARE vresultado INT;
|
||||||
|
SELECT FLOOR(RAND() * (MAX-MIN+1)+MIN) INTO vresultado;
|
||||||
|
RETURN vresultado;
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
|
||||||
|
DROP FUNCTION IF EXISTS f_cliente_aleatorio;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE FUNCTION f_cliente_aleatorio()
|
||||||
|
RETURNS VARCHAR(11)
|
||||||
|
BEGIN
|
||||||
|
DECLARE vresultado VARCHAR(11);
|
||||||
|
DECLARE vmax, vrand INT;
|
||||||
|
SELECT COUNT(*) INTO vmax FROM clientes;
|
||||||
|
SET vrand = f_aleatorio(1, vmax);
|
||||||
|
SET vrand = vrand-1;
|
||||||
|
SELECT dni INTO vresultado FROM clientes LIMIT vrand, 1;
|
||||||
|
RETURN vresultado;
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
|
||||||
|
DROP FUNCTION IF EXISTS f_producto_aleatorio;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE FUNCTION f_producto_aleatorio()
|
||||||
|
RETURNS VARCHAR(11)
|
||||||
|
BEGIN
|
||||||
|
DECLARE vresultado VARCHAR(11);
|
||||||
|
DECLARE vmax, vrand INT;
|
||||||
|
SELECT COUNT(*) INTO vmax FROM productos;
|
||||||
|
SET vrand = f_aleatorio(1, vmax);
|
||||||
|
SET vrand = vrand-1;
|
||||||
|
SELECT codigo INTO vresultado FROM productos LIMIT vrand, 1;
|
||||||
|
RETURN vresultado;
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
|
||||||
|
DROP FUNCTION IF EXISTS f_vendedor_aleatorio;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE FUNCTION f_vendedor_aleatorio()
|
||||||
|
RETURNS VARCHAR(11)
|
||||||
|
BEGIN
|
||||||
|
DECLARE vresultado VARCHAR(11);
|
||||||
|
DECLARE vmax, vrand INT;
|
||||||
|
SELECT COUNT(*) INTO vmax FROM vendedores;
|
||||||
|
SET vrand = f_aleatorio(1, vmax);
|
||||||
|
SET vrand = vrand-1;
|
||||||
|
SELECT matricula INTO vresultado FROM vendedores LIMIT vrand, 1;
|
||||||
|
RETURN vresultado;
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
|
||||||
|
SELECT "Test Funciones aleatorias" AS '';
|
||||||
|
SELECT f_cliente_aleatorio() AS cliente,
|
||||||
|
f_producto_aleatorio() AS producto,
|
||||||
|
f_vendedor_aleatorio() AS vendedor;
|
||||||
|
|
||||||
|
|
||||||
|
DROP PROCEDURE IF EXISTS sp_venta;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE PROCEDURE sp_venta(fecha DATE, max_items INT, max_cantidad INT)
|
||||||
|
BEGIN
|
||||||
|
DECLARE vcliente VARCHAR(11);
|
||||||
|
DECLARE vproducto VARCHAR(10);
|
||||||
|
DECLARE vvendedor VARCHAR(5);
|
||||||
|
DECLARE vcantidad INT;
|
||||||
|
DECLARE vprecio FLOAT;
|
||||||
|
DECLARE vitems INT;
|
||||||
|
DECLARE vnfactura INT;
|
||||||
|
DECLARE vcontador INT DEFAULT 1;
|
||||||
|
DECLARE vitem_repetido INT;
|
||||||
|
SELECT MAX(numero)+1 INTO vnfactura FROM facturas;
|
||||||
|
SET vcliente = f_cliente_aleatorio();
|
||||||
|
SET vvendedor = f_vendedor_aleatorio();
|
||||||
|
INSERT INTO facturas (numero, fecha, dni, matricula, impuesto)
|
||||||
|
VALUES (vnfactura, fecha, vcliente, vvendedor, 0.16);
|
||||||
|
SET vitems = f_aleatorio(1, max_items);
|
||||||
|
WHILE vcontador <= vitems DO
|
||||||
|
SET vproducto = f_producto_aleatorio();
|
||||||
|
SET vcantidad = f_aleatorio(1,max_cantidad);
|
||||||
|
SELECT COUNT(*) INTO vitem_repetido FROM items
|
||||||
|
WHERE codigo = vproducto AND numero = vnfactura;
|
||||||
|
IF vitem_repetido = 0 THEN
|
||||||
|
SELECT precio INTO vprecio FROM productos WHERE codigo = vproducto;
|
||||||
|
INSERT INTO items(numero, codigo, cantidad, precio)
|
||||||
|
VALUES(vnfactura, vproducto, vcantidad, vprecio);
|
||||||
|
SET vcontador = vcontador+1;
|
||||||
|
ELSE
|
||||||
|
SELECT precio INTO vprecio FROM productos WHERE codigo = vproducto;
|
||||||
|
UPDATE items SET cantidad = ((SELECT cantidad FROM items
|
||||||
|
WHERE codigo=vproducto AND numero=vnfactura) + vcantidad)
|
||||||
|
WHERE codigo=vproducto AND numero=vnfactura;
|
||||||
|
SET vcontador = vcontador+1;
|
||||||
|
END IF;
|
||||||
|
END WHILE;
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
/*
|
||||||
|
SP Venta Mentor
|
||||||
|
|
||||||
|
DELIMITER $$
|
||||||
|
|
||||||
|
CREATE PROCEDURE `sp_venta`(fecha DATE, maxitems INT, maxcantidad INT)
|
||||||
|
BEGIN
|
||||||
|
DECLARE vcliente VARCHAR(11);
|
||||||
|
DECLARE vproducto VARCHAR(10);
|
||||||
|
DECLARE vvendedor VARCHAR(5);
|
||||||
|
DECLARE vcantidad INT;
|
||||||
|
DECLARE vprecio FLOAT;
|
||||||
|
DECLARE vitens INT;
|
||||||
|
DECLARE vnfactura INT;
|
||||||
|
DECLARE vcontador INT DEFAULT 1;
|
||||||
|
DECLARE vnumitems INT;
|
||||||
|
SELECT MAX(NUMERO) + 1 INTO vnfactura FROM facturas;
|
||||||
|
SET vcliente = f_cliente_aleatorio();
|
||||||
|
SET vvendedor = f_vendedor_aleatorio();
|
||||||
|
INSERT INTO facturas (NUMERO, FECHA, DNI, MATRICULA, IMPUESTO)
|
||||||
|
VALUES (vnfactura, fecha, vcliente, vvendedor, 0.16);
|
||||||
|
SET vitens = f_aleatorio(1, maxitems);
|
||||||
|
WHILE vcontador <= vitens
|
||||||
|
DO
|
||||||
|
SET vproducto = f_producto_aleatorio();
|
||||||
|
SELECT COUNT(*) INTO vnumitems FROM items
|
||||||
|
WHERE CODIGO = vproducto AND NUMERO = vnfactura;
|
||||||
|
IF vnumitems = 0 THEN
|
||||||
|
SET vcantidad = f_aleatorio(1, maxcantidad);
|
||||||
|
SELECT PRECIO INTO vprecio FROM productos WHERE CODIGO = vproducto;
|
||||||
|
INSERT INTO items(NUMERO, CODIGO, CANTIDAD, PRECIO) VALUES(vnfactura, vproducto, vcantidad, vprecio);
|
||||||
|
END IF;
|
||||||
|
SET vcontador = vcontador+1;
|
||||||
|
END WHILE;
|
||||||
|
END $$
|
||||||
|
|
||||||
|
DELIMITER ;
|
||||||
|
*/
|
9
011_mysql/proyecto_scripts/import_records.sql
Normal file
9
011_mysql/proyecto_scripts/import_records.sql
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
USE empresa;
|
||||||
|
|
||||||
|
INSERT INTO facturas
|
||||||
|
SELECT numero, fecha_venta as fecha, dni, matricula, impuesto
|
||||||
|
FROM jugos_ventas.facturas;
|
||||||
|
|
||||||
|
INSERT INTO items
|
||||||
|
SELECT numero, codigo_del_producto AS codigo, cantidad, precio
|
||||||
|
FROM jugos_ventas.items_facturas;
|
75
011_mysql/proyecto_scripts/manage_db.sh
Executable file
75
011_mysql/proyecto_scripts/manage_db.sh
Executable file
@ -0,0 +1,75 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
VersionStr='2023-10-29'
|
||||||
|
BASEDIR=$(dirname $(realpath -s $BASH_SOURCE))
|
||||||
|
|
||||||
|
while read LINE; do
|
||||||
|
declare "$LINE" 2>/dev/null
|
||||||
|
done < $BASEDIR/.env
|
||||||
|
|
||||||
|
connect_db(){
|
||||||
|
mariadb -u ${DBUSER} \
|
||||||
|
-p${DBPASS} \
|
||||||
|
-h ${DBADDR%%:*} ${DBNAME} \
|
||||||
|
-P ${DBADDR##*:} || \
|
||||||
|
echo "Ocurrio un error al intentar conectar con la DB"
|
||||||
|
}
|
||||||
|
|
||||||
|
create_tables(){
|
||||||
|
mariadb -u ${DBUSER} \
|
||||||
|
-p${DBPASS} \
|
||||||
|
-h ${DBADDR%%:*} ${DBNAME} \
|
||||||
|
-P ${DBADDR##*:} < ./create_tables.sql &>/dev/null && \
|
||||||
|
echo "DB creada" || \
|
||||||
|
echo "Ocurrio un error al intentar crear las tablas"
|
||||||
|
}
|
||||||
|
|
||||||
|
populate_tables(){
|
||||||
|
echo "Poblando tablas: Clientes, Vendedores y Productos"
|
||||||
|
mariadb -u ${DBUSER} \
|
||||||
|
-p${DBPASS} \
|
||||||
|
-h ${DBADDR%%:*} ${DBNAME} \
|
||||||
|
-P ${DBADDR##*:} < ./populate_tables.sql &>/dev/null && \
|
||||||
|
echo "DB poblada" || \
|
||||||
|
echo "Ocurrio un error al intentar poblar la DB"
|
||||||
|
}
|
||||||
|
|
||||||
|
import_records(){
|
||||||
|
echo "Importando registros de jugos_ventas, tablas -> Facturas e Items"
|
||||||
|
mariadb -u ${DBUSER} \
|
||||||
|
-p${DBPASS} \
|
||||||
|
-h ${DBADDR%%:*} ${DBNAME} \
|
||||||
|
-P ${DBADDR##*:} < ./import_records.sql &>/dev/null && \
|
||||||
|
echo "DB poblada" || \
|
||||||
|
echo "Ocurrio un error al intentar poblar la DB"
|
||||||
|
}
|
||||||
|
|
||||||
|
re_create_tables(){
|
||||||
|
mariadb -u ${DBUSER} \
|
||||||
|
-p${DBPASS} \
|
||||||
|
-h ${DBADDR%%:*} ${DBNAME} \
|
||||||
|
-P ${DBADDR##*:} < ./re_create_tables.sql
|
||||||
|
}
|
||||||
|
|
||||||
|
create_f_sp(){
|
||||||
|
mariadb -u ${DBUSER} \
|
||||||
|
-p${DBPASS} \
|
||||||
|
-h ${DBADDR%%:*} ${DBNAME} \
|
||||||
|
-P ${DBADDR##*:} < ./funcs_sp.sql
|
||||||
|
}
|
||||||
|
|
||||||
|
create_triggers(){
|
||||||
|
mariadb -u ${DBUSER} \
|
||||||
|
-p${DBPASS} \
|
||||||
|
-h ${DBADDR%%:*} ${DBNAME} \
|
||||||
|
-P ${DBADDR##*:} < ./triggers.sql
|
||||||
|
}
|
||||||
|
|
||||||
|
deactivate_session(){
|
||||||
|
unset DBNAME DBUSER DBPASS DBADDR PEPPER
|
||||||
|
unset VersionStr BASEDIR
|
||||||
|
unset connect_db create_populate_tables
|
||||||
|
unset populate_tables import_records
|
||||||
|
unset re_create_tables create_f_sp
|
||||||
|
unset create_triggers deactivate_session
|
||||||
|
}
|
57
011_mysql/proyecto_scripts/populate_tables.sql
Normal file
57
011_mysql/proyecto_scripts/populate_tables.sql
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
USE empresa;
|
||||||
|
|
||||||
|
INSERT INTO clientes (DNI, NOMBRE, DIRECCION, BARRIO, CIUDAD, ESTADO, CP, FECHA_NACIMIENTO, EDAD, SEXO, LIMITE_CREDITO, VOLUMEN_COMPRA, PRIMERA_COMPRA) VALUES ('9283760794', 'Edson Calisaya', 'Sta Úrsula Xitla', 'Barrio del Niño Jesús', 'Ciudad de México', 'EM', '22002002', '1995-01-07', 25, 'M', 150000, 250000, 1);
|
||||||
|
INSERT INTO clientes (DNI, NOMBRE, DIRECCION, BARRIO, CIUDAD, ESTADO, CP, FECHA_NACIMIENTO, EDAD, SEXO, LIMITE_CREDITO, VOLUMEN_COMPRA, PRIMERA_COMPRA) VALUES ('7771579779', 'Marcelo Perez', 'F.C. de Cuernavaca 13', 'Carola', 'Ciudad de México', 'EM', '88202912', '1992-01-25', 29, 'M', 120000, 200000, 1);
|
||||||
|
INSERT INTO clientes (DNI, NOMBRE, DIRECCION, BARRIO, CIUDAD, ESTADO, CP, FECHA_NACIMIENTO, EDAD, SEXO, LIMITE_CREDITO, VOLUMEN_COMPRA, PRIMERA_COMPRA) VALUES ('5576228758', 'Patricia Olivera', 'Pachuca 75', 'Condesa', 'Ciudad de México', 'EM', '88192029', '1995-01-14', 25, 'F', 70000, 160000, 1);
|
||||||
|
INSERT INTO clientes (DNI, NOMBRE, DIRECCION, BARRIO, CIUDAD, ESTADO, CP, FECHA_NACIMIENTO, EDAD, SEXO, LIMITE_CREDITO, VOLUMEN_COMPRA, PRIMERA_COMPRA) VALUES ('8502682733', 'Luis Silva', 'Prol. 16 de Septiembre 1156', 'Contadero', 'Ciudad de México', 'EM', '82122020', '1995-01-07', 25, 'M', 110000, 190000, 0);
|
||||||
|
INSERT INTO clientes (DNI, NOMBRE, DIRECCION, BARRIO, CIUDAD, ESTADO, CP, FECHA_NACIMIENTO, EDAD, SEXO, LIMITE_CREDITO, VOLUMEN_COMPRA, PRIMERA_COMPRA) VALUES ('1471156710', 'Erica Carvajo', 'Heriberto Frías 1107', 'Del Valle', 'Ciudad de México', 'EM', '80012212', '1990-01-01', 30, 'F', 170000, 245000, 0);
|
||||||
|
INSERT INTO clientes (DNI, NOMBRE, DIRECCION, BARRIO, CIUDAD, ESTADO, CP, FECHA_NACIMIENTO, EDAD, SEXO, LIMITE_CREDITO, VOLUMEN_COMPRA, PRIMERA_COMPRA) VALUES ('2600586709', 'Raúl Meneses', 'Estudiantes 89', 'Centro', 'Ciudad de México', 'EM', '22002012', '1999-08-13', 21, 'M', 120000, 210000, 1);
|
||||||
|
INSERT INTO clientes (DNI, NOMBRE, DIRECCION, BARRIO, CIUDAD, ESTADO, CP, FECHA_NACIMIENTO, EDAD, SEXO, LIMITE_CREDITO, VOLUMEN_COMPRA, PRIMERA_COMPRA) VALUES ('3623344710', 'Marcos Rosas', 'Av. Universidad', 'Del Valle', 'Ciudad de México', 'EM', '22002012', '1995-01-13', 26, 'M', 110000, 220000, 1);
|
||||||
|
INSERT INTO clientes (DNI, NOMBRE, DIRECCION, BARRIO, CIUDAD, ESTADO, CP, FECHA_NACIMIENTO, EDAD, SEXO, LIMITE_CREDITO, VOLUMEN_COMPRA, PRIMERA_COMPRA) VALUES ('50534475787', 'Abel Pintos', 'Carr. México-Toluca 1499', 'Cuajimalpa', 'Ciudad de México', 'EM', '22000212', '1995-01-11', 25, 'M', 170000, 260000, 0);
|
||||||
|
INSERT INTO clientes (DNI, NOMBRE, DIRECCION, BARRIO, CIUDAD, ESTADO, CP, FECHA_NACIMIENTO, EDAD, SEXO, LIMITE_CREDITO, VOLUMEN_COMPRA, PRIMERA_COMPRA) VALUES ('5840119709', 'Gabriel Roca', 'Eje Central Lázaro Cárdenas 911', 'Del Valle', 'Ciudad de México', 'EM', '80010221', '1985-01-16', 36, 'M', 140000, 210000, 1);
|
||||||
|
INSERT INTO clientes (DNI, NOMBRE, DIRECCION, BARRIO, CIUDAD, ESTADO, CP, FECHA_NACIMIENTO, EDAD, SEXO, LIMITE_CREDITO, VOLUMEN_COMPRA, PRIMERA_COMPRA) VALUES ('8719655770', 'Carlos Santivañez', 'Calz. del Hueso 363', 'Floresta Coyoacán', 'Ciudad de México', 'EM', '81192002', '1983-01-20', 37, 'M', 200000, 240000, 0);
|
||||||
|
INSERT INTO clientes (DNI, NOMBRE, DIRECCION, BARRIO, CIUDAD, ESTADO, CP, FECHA_NACIMIENTO, EDAD, SEXO, LIMITE_CREDITO, VOLUMEN_COMPRA, PRIMERA_COMPRA) VALUES ('19290992743', 'Rodrigo Villa', 'Libertadores 65', 'Héroes', 'Ciudad de México', 'EM', '21002020', '1998-05-30', 22, 'M', 120000, 220000, 0);
|
||||||
|
INSERT INTO clientes (DNI, NOMBRE, DIRECCION, BARRIO, CIUDAD, ESTADO, CP, FECHA_NACIMIENTO, EDAD, SEXO, LIMITE_CREDITO, VOLUMEN_COMPRA, PRIMERA_COMPRA) VALUES ('5648641702', 'Paolo Mendez', 'Martires de Tacubaya 65', 'Héroes de Padierna', 'Ciudad de México', 'EM', '21002020', '1991-01-30', 29, 'M', 120000, 220000, 0);
|
||||||
|
INSERT INTO clientes (DNI, NOMBRE, DIRECCION, BARRIO, CIUDAD, ESTADO, CP, FECHA_NACIMIENTO, EDAD, SEXO, LIMITE_CREDITO, VOLUMEN_COMPRA, PRIMERA_COMPRA) VALUES ('492472718', 'Jorge Castro', 'Federal México-Toluca 5690', 'Locaxco', 'Ciudad de México', 'EM', '22012002', '1994-01-19', 26, 'M', 75000, 95000, 1);
|
||||||
|
INSERT INTO clientes (DNI, NOMBRE, DIRECCION, BARRIO, CIUDAD, ESTADO, CP, FECHA_NACIMIENTO, EDAD, SEXO, LIMITE_CREDITO, VOLUMEN_COMPRA, PRIMERA_COMPRA) VALUES ('9275760794', 'Alberto Rodriguez', 'Circunvalación Oblatos 690', 'Oblatos', 'Guadalajara', 'JC', '44700000', '1991-12-28', 26, 'M', 75000, 95000, 1);
|
||||||
|
INSERT INTO clientes (DNI, NOMBRE, DIRECCION, BARRIO, CIUDAD, ESTADO, CP, FECHA_NACIMIENTO, EDAD, SEXO, LIMITE_CREDITO, VOLUMEN_COMPRA, PRIMERA_COMPRA) VALUES ('94387575700', 'María Jimenez', 'Av. Libertadores 457', 'Barragán Hernández', 'Guadalajara', 'JC', '44469000', '1995-05-13', 26, 'F', 120000, 300000, 1);
|
||||||
|
INSERT INTO clientes (DNI, NOMBRE, DIRECCION, BARRIO, CIUDAD, ESTADO, CP, FECHA_NACIMIENTO, EDAD, SEXO, LIMITE_CREDITO, VOLUMEN_COMPRA, PRIMERA_COMPRA) VALUES ('95939180787', 'Ximena Gómez', 'Jaguares 822', 'Alcalde Barranquitas', 'Guadalajara', 'JC', '44270000', '1992-01-05', 16, 'F', 90000, 18000, 0);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('773912', 'Clean', '1 Litro', 'Naranja', 'Botella PET', 8.01);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('838819', 'Clean', '1,5 Litros', 'Naranja', 'Botella PET', 12.01);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('1037797', 'Clean', '2 Litros', 'Naranja', 'Botella PET', 16.01);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('812829', 'Clean', '350 ml', 'Naranja', 'Lata', 2.81);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('479745', 'Clean', '470 ml', 'Naranja', 'Botella de Vidrio', 3.77);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('695594', 'Festival de Sabores', '1,5 Litros', 'Asaí', 'Botella PET', 28.51);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('243083', 'Festival de Sabores', '1,5 Litros', 'Maracuyá', 'Botella PET', 10.51);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('1022450', 'Festival de Sabores', '2 Litros', 'Asái', 'Botella PET', 38.01);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('231776', 'Festival de Sabores', '700 ml', 'Asaí', 'Botella de Vidrio', 13.31);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('723457', 'Festival de Sabores', '700 ml', 'Maracuyá', 'Botella de Vidrio', 4.91);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('746596', 'Light', '1,5 Litros', 'Sandía', 'Botella PET', 19.51);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('1040107', 'Light', '350 ml', 'Sandía', 'Lata', 4.56);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('1002334', 'Línea Citrus', '1 Litro', 'Lima/Limón', 'Botella PET', 7);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('1088126', 'Línea Citrus', '1 Litro', 'Limón', 'Botella PET', 7);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('1041119', 'Línea Citrus', '700 ml', 'Lima/Limón', 'Botella de Vidrio', 4.9);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('1042712', 'Línea Citrus', '700 ml', 'Limón', 'Botella de Vidrio', 4.9);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('520380', 'Pedazos de Frutas', '1 Litro', 'Manzana', 'Botella PET', 12.01);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('788975', 'Pedazos de Frutas', '1,5 Litros', 'Manzana', 'Botella PET', 18.01);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('229900', 'Pedazos de Frutas', '350 ml', 'Manzana', 'Lata', 4.21);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('1101035', 'Refrescante', '1 Litro', 'Frutilla/Limón', 'Botella PET', 9.01);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('1086543', 'Refrescante', '1 Litro', 'Mango', 'Botella PET', 11.01);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('326779', 'Refrescante', '1,5 Litros', 'Mango', 'Botella PET', 16.51);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('826490', 'Refrescante', '700 ml', 'Frutilla/Limón', 'Botella de Vidrio', 6.31);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('1096818', 'Refrescante', '700 ml', 'Mango', 'Botella de Vidrio', 7.71);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('394479', 'Sabor da Montaña', '700 ml', 'Cereza', 'Botella de Vidrio', 8.41);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('783663', 'Sabor da Montaña', '700 ml', 'Frutilla', 'Botella de Vidrio', 7.71);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('1000889', 'Sabor da Montaña', '700 ml', 'Uva', 'Botella de Vidrio', 6.31);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('544931', 'Verano', '350 ml', 'Limón', 'Lata', 2.46);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('235653', 'Verano', '350 ml', 'Mango', 'Lata', 3.86);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('1051518', 'Verano', '470 ml', 'Limón', 'Botella de Vidrio', 3.3);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('1078680', 'Verano', '470 ml', 'Mango', 'Botella de Vidrio', 5.18);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('1004327', 'Vida del Campo', '1,5 Litros', 'Sandía', 'Botella PET', 19.51);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('1013793', 'Vida del Campo', '2 Litros', 'Cereza/Manzana', 'Botella PET', 24.01);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('290478', 'Vida del Campo', '350 ml', 'Sandía', 'Lata', 4.56);
|
||||||
|
INSERT INTO productos (CODIGO, DESCRIPCION, TAMANO, SABOR, ENVASE, PRECIO) VALUES ('1002767', 'Vida del Campo', '700 ml', 'Cereza/Manzana', 'Botella de Vidrio', 8.41);
|
||||||
|
INSERT vendedores (MATRICULA, NOMBRE, COMISION, FECHA_ADMISION, VACACIONES, BARRIO) VALUES ('00235','Miguel Pavón Silva',0.08,'2014-08-15', 0,'Condesa');
|
||||||
|
INSERT vendedores (MATRICULA, NOMBRE, COMISION, FECHA_ADMISION, VACACIONES, BARRIO) VALUES ('00236', 'Claudia Morales',0.08,'2013-09-17', 1,'Del Valle');
|
||||||
|
INSERT vendedores (MATRICULA, NOMBRE, COMISION, FECHA_ADMISION, VACACIONES, BARRIO) VALUES ('00237', 'Concepción Martinez',0.11,'2017-03-18', 1,'Contadero');
|
||||||
|
INSERT vendedores (MATRICULA, NOMBRE, COMISION, FECHA_ADMISION, VACACIONES, BARRIO) VALUES ('00238', 'Patricia Sánchez',0.11,'2016-08-21', 0,'Oblatos');
|
33
011_mysql/proyecto_scripts/re_create_tables.sql
Normal file
33
011_mysql/proyecto_scripts/re_create_tables.sql
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
USE empresa;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS items;
|
||||||
|
DROP TABLE IF EXISTS facturas;
|
||||||
|
|
||||||
|
CREATE TABLE facturas (
|
||||||
|
numero INT NOT NULL,
|
||||||
|
fecha DATE,
|
||||||
|
dni VARCHAR(11) NOT NULL,
|
||||||
|
matricula VARCHAR(5) NOT NULL,
|
||||||
|
impuesto FLOAT,
|
||||||
|
PRIMARY KEY (numero),
|
||||||
|
FOREIGN KEY (dni) REFERENCES clientes(dni),
|
||||||
|
FOREIGN KEY (matricula) REFERENCES vendedores(matricula)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE items (
|
||||||
|
numero INT NOT NULL,
|
||||||
|
codigo VARCHAR(10) NOT NULL,
|
||||||
|
cantidad INT,
|
||||||
|
precio FLOAT,
|
||||||
|
PRIMARY KEY (numero, codigo),
|
||||||
|
FOREIGN KEY (numero) REFERENCES facturas(numero),
|
||||||
|
FOREIGN KEY (codigo) REFERENCES productos(codigo)
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO facturas
|
||||||
|
SELECT numero, fecha_venta as fecha, dni, matricula, impuesto
|
||||||
|
FROM jugos_ventas.facturas;
|
||||||
|
|
||||||
|
INSERT INTO items
|
||||||
|
SELECT numero, codigo_del_producto AS codigo, cantidad, precio
|
||||||
|
FROM jugos_ventas.items_facturas;
|
38
011_mysql/proyecto_scripts/triggers.sql
Normal file
38
011_mysql/proyecto_scripts/triggers.sql
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
DROP PROCEDURE IF EXISTS sp_triggers;
|
||||||
|
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE PROCEDURE sp_triggers()
|
||||||
|
BEGIN
|
||||||
|
DELETE FROM facturacion;
|
||||||
|
INSERT INTO facturacion
|
||||||
|
SELECT A.fecha, SUM(B.cantidad * B.precio) AS VENTA_TOTAL
|
||||||
|
FROM facturas A
|
||||||
|
INNER JOIN
|
||||||
|
items B
|
||||||
|
ON A.numero = B.numero
|
||||||
|
GROUP BY A.fecha;
|
||||||
|
END $$
|
||||||
|
|
||||||
|
DROP TRIGGER tg_facturacion_insert $$
|
||||||
|
DROP TRIGGER tg_facturacion_delete $$
|
||||||
|
DROP TRIGGER tg_facturacion_update $$
|
||||||
|
|
||||||
|
CREATE TRIGGER tg_facturacion_insert
|
||||||
|
AFTER INSERT ON items
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
CALL sp_triggers;
|
||||||
|
END $$
|
||||||
|
|
||||||
|
CREATE TRIGGER tg_facturacion_delete
|
||||||
|
AFTER DELETE ON items
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
CALL sp_triggers;
|
||||||
|
END $$
|
||||||
|
|
||||||
|
CREATE TRIGGER tg_facturacion_update
|
||||||
|
AFTER UPDATE ON items
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
CALL sp_triggers;
|
||||||
|
END $$
|
||||||
|
|
||||||
|
DELIMITER ;
|
49
011_mysql/proyecto_scripts/triggers.sql.old
Normal file
49
011_mysql/proyecto_scripts/triggers.sql.old
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
|
||||||
|
CREATE TABLE facturacion(
|
||||||
|
fecha DATE NULL,
|
||||||
|
venta_total FLOAT
|
||||||
|
);
|
||||||
|
|
||||||
|
DELIMITER //
|
||||||
|
CREATE TRIGGER tg_facturacion_insert
|
||||||
|
AFTER INSERT ON items
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
DELETE FROM facturacion;
|
||||||
|
INSERT INTO facturacion
|
||||||
|
SELECT A.FECHA, SUM(B.cantidad * B.precio) AS VENTA_TOTAL
|
||||||
|
FROM facturas A
|
||||||
|
INNER JOIN
|
||||||
|
items B
|
||||||
|
ON A.NUMERO = B.NUMERO
|
||||||
|
GROUP BY A.FECHA;
|
||||||
|
END //
|
||||||
|
|
||||||
|
DELIMITER //
|
||||||
|
CREATE TRIGGER tg_facturacion_delete
|
||||||
|
AFTER DELETE ON items
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
DELETE FROM facturacion;
|
||||||
|
INSERT INTO facturacion
|
||||||
|
SELECT A.fecha, SUM(B.cantidad * B.precio) AS VENTA_TOTAL
|
||||||
|
FROM facturas A
|
||||||
|
INNER JOIN
|
||||||
|
items B
|
||||||
|
ON A.numero = B.numero
|
||||||
|
GROUP BY A.fecha;
|
||||||
|
END //
|
||||||
|
|
||||||
|
DELIMITER //
|
||||||
|
CREATE TRIGGER tg_facturacion_update
|
||||||
|
AFTER UPDATE ON items
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
DELETE FROM facturacion;
|
||||||
|
INSERT INTO facturacion
|
||||||
|
SELECT A.fecha, SUM(B.cantidad * B.precio) AS VENTA_TOTAL
|
||||||
|
FROM facturas A
|
||||||
|
INNER JOIN
|
||||||
|
items B
|
||||||
|
ON A.numero = B.numero
|
||||||
|
GROUP BY A.fecha;
|
||||||
|
END //
|
||||||
|
|
||||||
|
DELIMITER ;
|
Loading…
Reference in New Issue
Block a user