Ejercicios

Post on 24-Feb-2016

47 views 0 download

description

Ejercicios. DD L -D M L. Profesor: Ernesto Vivanco Tapia. Ejercicios Resueltos. Ejercicio Nº 1:. Consultas “ DDL ”. Create …. DDL. Cree la siguiente tabla. CREATE TABLE PERSONA ( RUT VARCHAR(12) NOT NULL, NOMBRE VARCHAR(30), - PowerPoint PPT Presentation

Transcript of Ejercicios

Ejercicios

DDL-DMLProfesor:Ernesto Vivanco Tapia

Ejercicios Resueltos

Ejercicio Nº 1:Consultas “DDL”

Cree la siguiente tabla

CREATE TABLE PERSONA( RUT VARCHAR(12) NOT NULL, NOMBRE VARCHAR(30), APELLIDO VARCHAR(20), FECHA_NACIMIENTO DATE, PRIMARY KEY (RUT));

DDLCreate…

Cree la siguiente tabla

create table PRUEBA( ID int not null auto_increment, ALUMNO varchar(30), RAMO text, NOTA int, primary key (ID));

DDLCreate…

Auto Incrementable

Cree la siguientes tablas

create table JEFE( RUT varchar(12) not null, NOMBRE varchar(30), primary key (RUT));

DDLCreate…

CREATE TABLE EMPLEADO( RUT VARCHAR(12) NOT NULL, NOMBRE VARCHAR(30), APELLIDO VARCHAR(30), JEFE_RUT VARCHAR(12), PRIMARY KEY (RUT), FOREIGN KEY(JEFE_RUT)

REFERENCES JEFE(RUT));

Cree la siguientes tablas

CREATE TABLE BODEGA( LETRA CHAR

NOT NULL, PISO INT, PRIMARY KEY (LETRA));

DDLCreate…

CREATE TABLE PRODUCTO( N_SERIE INT NOT NULL, NOMBRE VARCHAR(20), DESCRIPCION TEXT, LETRA_BODEGA CHAR, PRIMARY KEY (N_SERIE), FOREIGN KEY

(LETRA_BODEGA) REFERENCES BODEGA(LETRA)

);

Modifique las siguientes tablas

ALTER TABLE PRODUCTOADD CANTIDAD INT;

DDLAlter…

Modifique las siguientes tablas

ALTER TABLE PERSONA ADD DIRECCION VARCHAR(20), ADD SEXO CHAR;

DDLAlter…

Modifique las siguientes tablas

ALTER TABLE PRODUCTO ADD PRIMARY KEY(N_SERIE);

DDLAlter…

Modifique las siguientes tablas

ALTER TABLE PRODUCTO ADD FOREIGN KEY(LETRA_BODEGA) REFERENCES BODEGA(LETRA);

DDLAlter…

Modifique las siguientes tablas

ALTER TABLE PRODUCTO MODIFY DESCRIPCION VARCHAR(20);

DDLAlter…

Modifique las siguientes tablas

ALTER TABLE JEFE MODIFY NOMBRE TEXT, ADD APELLIDOS TEXT, ADD PRIMARY KEY(RUT);

DDLAlter…

Modifique las siguientes tablas

ALTER TABLE GERENTEDROP EDAD;

DDLAlter…

Modifique las siguientes tablas

ALTER TABLE GERENTEDROP PRIMARY KEY;

DDLAlter…

Modifique las siguientes tablas

ALTER TABLE EMPLEADO DROP INDEX FK_EMPLEADOR, ADD FOREIGN KEY(RUT_EMPLEADOR) REFERENCES GERENTE(RUT);

DDLAlter…

NOTA: Para borrar una relación (FK), tenemos que borrar directamente la relación en si (INDEX), no el campos que lo relaciona.

Borre la siguiente tabla

DROP TABLE PRODUCTO;

DDLDrop…

Borre la siguientes tablas

DROP TABLE GERENTE, JEFE;

DDLDrop…

Ejercicio Nº 2: Consultas“Insert, Update,

Delete”

DMLINSERT…

RUT Nombres Ap_Paterno Ap_Materno Fecha_Nacimiento Fono

1-9 Carlos Victor Carmona Castro 1991-10-21 6651010

Ingrese los siguientes datos.

INSERT INTO Persona VALUES('1-9',

'Carlos Victor', 'Carmona', 'Castro', '1991-10-21', 6651010);

DMLINSERT…

RUT Nombres Ap_Paterno Ap_Materno Fecha_Nacimiento Fono

2-8 Hector Oscar Rodriguez Reberendo 1990-12-01 7780010

3-7 Betzabe Rut Noemi Carrera 1985-05-30 6004020

Ingrese los siguientes datos.

INSERT INTO PERSONA VALUES('2-8', 'Hector Oscar', 'Rodriguez', 'Reberendo',

'1990-12-01', 7780010), ('3-7', 'Betzabe Rut', 'Noemi', 'Carrera', '1985-05-

30', 6004020);

DMLINSERT…

RUT Ap_Paterno Ap_Materno

4-6 Bustos Burgos

Ingrese los siguientes datos.

INSERT INTO PERSONA(RUT, Ap_Paterno, Ap_Materno)VALUES('4-6', 'Bustos', 'Burgos');

DMLINSERT…

Ingrese los siguientes datos.

INSERT INTO PERSONA(RUT, Nombres, Ap_Paterno, AP_Materno, Fecha_Nacimiento) VALUES('5-5', 'Fernando', 'Garcia', 'Vazquez', '1980-03-19');

INSERT INTO PERSONA(RUT, Nombres, Ap_Paterno, AP_Materno, Fono) VALUES('6-4', 'Maria Eugenia', 'Zaravia', 'Vazquez', 1230090);

RUT Nombres Ap_Paterno Ap_Materno Fecha_Nacimiento Fono

5-5 Fernando Garcia Vazquez 1980-03-19

6-4 Maria Eugenia Zaravia Vazquez 1230090

DMLINSERT…

Fecha_Nacimiento Ap_Paterno RUT Ap_Materno Fono Nombres

1990-01-24 Castillo 7-3 Castilla 9905050 Adrian

Ingrese los siguientes datos.

INSERT INTO PERSONA(Fecha_Nacimiento, Ap_Paterno, RUT, Ap_Materno, Fono, Nombres) VALUES('1990-01-24', 'Castillo', '7-3', 'Castilla', 9905050, 'Adrian');

NOTA: Cuando aun asi ingresando todos los campos, pero de forma ‘Desordenada’, se tiene que especificar el orden de ingreso.

DMLUPDATE…

RUT Nombres Ap_Paterno Ap_Materno Fecha_Nacimiento Fono

1-9 Carlos Victor Carmona Castro 1991-10-21 6651010

Actualiza los siguientes datos

UPDATE persona SET Ap_Paterno = 'Carcamo'

Carcamo

DMLUPDATE…

Actualiza los siguientes datos

UPDATE persona SET Fono = 1234567

1234567

RUT Nombres Ap_Paterno Ap_Materno Fecha_Nacimiento Fono

5-5 Fernando Garcia Vazquez 1980-03-19

4-6 Bustos Burgos

5-5 Fernando Garcia Vazquez 1980-03-19 1234567

4-6 Bustos Burgos 1234567

DMLUPDATE…

Actualiza los siguientes datos

UPDATE PERSONA SET Nombres = 'Bastian' WHERE RUT = '4-6';

Bastian

RUT Nombres Ap_Paterno Ap_Materno Fecha_Nacimiento Fono

5-5 Fernando Garcia Vazquez 1980-03-19 1234567

4-6 Bustos Burgos 1234567

RUT Nombres Ap…...

4-6 Bastian Bus……

RECORDATORIO: La instrucción UPDATE actualiza TODOS LOS REGISTROS de la tabla, pero con la condición WHERE podemos actualizar el registro especificado (con la PK de la tabla) [‘4-6’]

DMLUPDATE…

Actualiza los siguientes datos

UPDATE PERSONA SET Fecha_Nacimiento = '1995-11-20' WHERE RUT = '4-6';

1992-04-18

RUT Nombres Ap_Paterno Ap_Materno Fecha_Nacimiento Fono

4-6 Bastian Bustos Burgos (NULL) 1234567

6-4 Maria Eugenia Zaravia Vazquez (NULL) 1230090

1995-11-20

UPDATE PERSONA SET Fecha_Nacimiento = '1992-04-18' WHERE RUT = '6-4';

DMLDELETE…

Elimina los siguientes registros

RUT Nombres Ap_Paterno Ap_Materno Fecha_Nacimiento Fono

8-8 Z Z Z 2011-09-12 123

DELETE FROM Persona;

RECORDATORIO: La instrucción DELETE (al igual que UPDATE) elimina TODOS LOS REGISTROS de la tabla, pero con la condición WHERE podemos eliminar un registro específico (con la PK de la tabla) [‘8-8’]

DMLDELETE…

Elimina los siguientes registros

DELETE FROM PersonaWHERE RUT = ’9-9’;

RUT Nombres Ap_Paterno Ap_Materno Fecha_Nacimiento Fono

5-5 Fernando Garcia Vazquez 1980-03-19 1234567

9-9 Fernando Garcia Basques 1980-03-18 1234567

RUT Nombres Ap_Paterno Ap_Materno Fecha_Nacimiento Fono

5-5 Fernando Garcia Vazquez 1980-03-19 1234567

DMLDELETE…

Elimina todos los registros que en el fono, parten con el numero ‘9’

DELETE FROM PersonaWHERE Fono Like ’9%’;

RUT Nombres Ap_Paterno Ap_Materno Fecha_Nacimiento Fono

2-8 Hector Oscar Rodriguez Reberendo 1990-12-01 9103454

5-5 Fernando Garcia Vazquez 1980-03-19 1234567

8-2 Andres Felipe Oyanedel Carrera 1991-11-30 9500123

RUT Nombres Ap_Paterno Ap_Materno Fecha_Nacimiento Fono

5-5 Fernando Garcia Vazquez 1980-03-19 1234567

DMLANALISIS…La tabla [PRODUCTOS] han sido modificados en

muchas cosas, analiza y guarda el historial de consultas que llevaron a modificar la tabla

ID Nombre Tipo Cantidad

1 Mouse Entrada 50

2 Teclado Entrada 25

3 Impresora Entrada 75

4 Pantalla Salida 40

5 Parlantes Salida 25

ID Nombre Tipo Cantidad

1 Mouse Entrada 66

2 Teclado Entrada 66

3 Impresora Salida 66

4 Pantalla Salida 40

6 Pendrive Entrada 40

A B

DMLANALISIS…ID Nombre Tipo Cantidad

1 Mouse Entrada 50

2 Teclado Entrada 25

3 Impresora Entrada 75

4 Pantalla Salida 40

5 Parlantes Salida 25

ID Nombre Tipo Cantidad

1 Mouse Entrada 66

2 Teclado Entrada 66

3 Impresora Salida 66

4 Pantalla Salida 40

6 Pendrive Entrada 51

1.- Los ‘Parlantes’ se ELIMINARON

DELETE FROM PRODUCTOSWHERE ID = 5;

DMLANALISIS…ID Nombre Tipo Cantidad

1 Mouse Entrada 50

2 Teclado Entrada 25

3 Impresora Entrada 75

4 Pantalla Salida 40

5 Parlantes Salida 25

ID Nombre Tipo Cantidad

1 Mouse Entrada 66

2 Teclado Entrada 66

3 Impresora Salida 66

4 Pantalla Salida 40

6 Pendrive Entrada 51

2.- ‘Pendrive’ es un NUEVO PRODUCTO

INSERT INTO PRODUCTO VALUES(6, ’Pendrive’, ’Entrada’, 51);

DMLANALISIS…ID Nombre Tipo Cantidad

1 Mouse Entrada 50

2 Teclado Entrada 25

3 Impresora Entrada 75

4 Pantalla Salida 40

5 Parlantes Salida 25

ID Nombre Tipo Cantidad

1 Mouse Entrada 66

2 Teclado Entrada 66

3 Impresora Salida 66

4 Pantalla Salida 40

6 Pendrive Entrada 51

3.- Se actualizo la ‘Cantidad’ de ProductosNOTA: ¿que tienen en común?

La ID de los productos son

todos menores a 4UPDATE PRODUCTOS SET Cantidad = 66 WHERE ID < 4;

DMLANALISIS…ID Nombre Tipo Cantidad

1 Mouse Entrada 50

2 Teclado Entrada 25

3 Impresora Entrada 75

4 Pantalla Salida 40

5 Parlantes Salida 25

ID Nombre Tipo Cantidad

1 Mouse Entrada 66

2 Teclado Entrada 66

3 Impresora Salida 66

4 Pantalla Salida 40

6 Pendrive Entrada 51

4.- Se actualizo el ‘Tipo’ de ProductoNOTA: ¿Se actualizo otro ‘Tipo’?

¡NO!, Entonces tenemos que

borrar este único registro, por PK

UPDATE PRODUCTOS SET Tipo = ’Salida’ WHERE ID = 3;

RESUMENANALISIS

DMLANALISIS…ID Nombre Tipo Cantidad

1 Mouse Entrada 50

2 Teclado Entrada 25

3 Impresora Entrada 75

4 Pantalla Salida 40

5 Parlantes Salida 25

ID Nombre Tipo Cantidad

1 Mouse Entrada 66

2 Teclado Entrada 66

3 Impresora Salida 66

4 Pantalla Salida 40

6 Pendrive Entrada 51

1.- Los ‘Parlantes’ se ELIMINARON

2.- ‘Pendrive’ es un NUEVO PRODUCTO3.- Se ACTUALIZO la ‘Cantidad’ de Productos4.- Se ACTUALIZO el ‘Tipo’ de Producto

Ejercicio Nº 3:Consultas “SELECT”

ModeloDatos

Backup.rar

Backup

1 Tabla 0 CondicionMostrar todos los registros de la tabla [USUARIO].

SELECT * FROM usuario;

1 Tabla 0 CondicionMostrar el Ap. Paterno, el Ap. Materno y su saldo.

SELECT Apellido_Pat, Apellido_Mat, Saldo

FROM usuario;

Mostrar el RUT, y la fecha de nacimiento de una persona.

1 Tabla 0 Condicion

SELECT RUT, Fecha_Nacimiento

FROM usuario;

Muestre el Saldo del usuario con RUT ‘5-5’

1 Tabla 1 condicion

SELECT SaldoFROM usuarioWHERE RUT = '5-5';

Mostrar todos los datos de los usuarios que vivan en la COMUNA ‘Puente Alto’

1 Tabla 1 condicion

SELECT * FROM usuarioWHERE Comuna = 'Puente Alto';

Mostrar el RUT, y la Comuna de los usuarios que tienen de apellido materno ‘Flores’

1 Tabla 1 condicion

SELECT RUT, ComunaFROM usuarioWHERE Apellido_Mat = 'Flores';

Mostrar los Nombres y los Apellidos de los usuarios que NO sean del sexo Femenino (‘F’)

1 Tabla 1 condicion

SELECT Nombres, Apellido_Pat, Apellido_MatFROM usuarioWHERE NOT(sexo = 'F');

Muestre el RUT, el Apellido Paterno y la fecha de nacimientos de las personas que tengan de segundo nombre ‘Carlos’

1 Tabla 1 condicion

SELECT RUT, Apellido_Pat, Fecha_Nacimiento

FROM usuarioWHERE Nombres LIKE '%Carlos';

Mostrar el RUT y Apellido Paterno (con su respectivo saldo) de los usuarios que tienen un saldo MAYOR a $10.000

1 Tabla 1 condicion

SELECT rut, Apellido_Pat, SaldoFROM usuarioWHERE saldo > 10000;

Mostrar todos los datos de los usuarios que tienen un saldo entre $4.000 y $9.000

1 Tabla 2 condiciones

SELECT *FROM usuarioWHERE saldo BETWEEN 4000 AND 9000;

Muestre todos los datos del usuario que vive en ‘Renca’, y que además sea un usuario ‘Femenino’

1 Tabla 2 condiciones

SELECT *FROM usuarioWHERE Comuna = 'Renca'AND sexo = 'F';

Mostrar todos los nombres de los usuarios que NO partan con la letra ‘P’, ni con la letra ‘A’ en el 1er nombre.

1 Tabla 2 condiciones

SELECT NombresFROM usuarioWHERE NOT( Nombres LIKE 'P%')AND NOT( Nombres LIKE 'A%');

Mostrar el RUT y los nombres de los usuarios que viven en la comuna de ‘RENCA’ o en la comuna de ‘Puente Alto’

1 Tabla 2 condiciones

SELECT RUT, NombresFROM usuarioWHERE Comuna = 'Renca'OR Comuna = 'Puente Alto';

¿Cuantos usuarios se encuentran registrados?

1 Tabla 1 funcion

SELECT COUNT(*)FROM usuario;

Muestre el saldo MAXIMO de todos los usuarios

1 Tabla 1 funcionSELECT MAX(Saldo)FROM usuario;

Muestre el saldo MINIMO de todos los usuarios

1 Tabla 1 funcionSELECT MIN(Saldo)FROM usuario;

Muestre la SUMA de los saldos de los usuarios

1 Tabla 1 funcionSELECT SUM(Saldo)FROM usuario;

Muestre el PROMEDIO de los saldos de los usuarios (Redondeado en un NUMERO ENTERO)

1 Tabla 1 funcion

SELECT ROUND(AVG(Saldo))FROM usuario;

Promedio Promedio Redondeado

¿Cuantos usuarios viven en RENCA? (Ocupe sobre-nombre ‘Renquinos’)

1 Tabla 1 funcion

SELECT COUNT(*) AS RenquinosFROM usuarioWHERE Comuna = 'Renca';

1 condicion

Sin alias Con alias

¿Cuánto seria la suma de los Saldos (alias ‘ahorros’) de las personas que viven en la comuna que parte con el nombre ‘Puente’?

1 Tabla 1 funcion

SELECT SUM(Saldo) AS ahorrosFROM usuarioWHERE Comuna LIKE 'Puente%';

1 condicion

¿Cuál es el promedio de los saldos (Redondeado) de los usuarios con apellido materno ‘Flores’?

1 Tabla 1 funcion

SELECT ROUND(AVG(Saldo)) AS promedioFROM usuarioWHERE Apellido_Mat = 'Flores';

1 condicion

Es recomendable que los campos de funciones, le asignamos un ‘sobrenombre’ (alias) para un mejor uso y visibilidad.

1 Tabla 1 Agrupación1 Función ¿Cuantas personas hay por comuna?

SELECT Comuna, COUNT(*) AS cantidadFROM usuarioGROUP BY Comuna;

1 Tabla 1 Agrupación1 Función Muestre la suma de los saldos de cada sexo

SELECT Sexo, SUM(saldo) AS sumaFROM usuarioGROUP BY sexo;

Ordenamiento1 Tabla Muestre todos los datos de los usuarios ordenados desde

el usuario que tiene mas saldo hasta el que tiene menor saldo. SELECT * FROM usuario

ORDER BY Saldo DESC;

Ordenamiento1 Tabla Muestre los nombres y los apellidos de todos los

usuarios ordenados alfabéticamente por ‘Nombre’SELECT nombres, Apellido_Pat, Apellido_MatFROM usuarioORDER BY nombres ASC;

ASC: Ascendente.DESC: Descendente.

Ordenamiento1 Tabla Muestre el RUT de los usuarios desde el usuario mas

joven, hasta el usuario mas viejoSELECT rutFROM usuarioORDER BY Fecha_nacimiento DESC;

Ordenamiento1 Tabla AgrupaciónFunción ¿Cual es el promedio de los saldo por COMUNA (alias

‘Liquido’)? Ordene de menor a mayor.SELECT comuna, AVG(Saldo) AS promedioFROM usuarioGROUP BY ComunaORDER BY promedio ASC;

NOTA: El uso de un alias (promedio) puede ser usado despues para llamar al resultado de la funcion hecha, sin necesidad de pedirla nuevamente

Ordenamiento1 Tabla AgrupaciónFunción Ordenado alfabéticamente, ¿Cuántas personas tienen el

mismo Apellido Materno?SELECT Apellido_Mat, COUNT(*) AS cantidadFROM usuarioGROUP BY Apellido_MatORDER BY Apellido_Mat ASC;

1 Tabla Limites Muestre los 2 mayores Saldos que se encuentran en la

tabla usuario

SELECT SaldoFROM usuarioORDER BY Saldo DESCLIMIT 2;

Ordenamiento

Muestre los Nombres (con su fecha nacimiento) de los primeros 3 usuarios mas jóvenes.

SELECT Nombres, Fecha_NacimientoFROM usuarioORDER BY Fecha_Nacimiento DESCLIMIT 3;

1 Tabla LimitesOrdenamiento

Muestre el Año en que nació cada usuario (Muestre solo RUT)

SELECT RUT, YEAR(Fecha_Nacimiento) AS año

FROM usuario;

1 Tabla Fechas

Muestre el Apellido Paterno del los usuarios, con su Mes y el Día (Por separado) en que nacieron cada uno

SELECT Apellido_Pat, MONTH(Fecha_Nacimiento) AS mes, DAY(Fecha_Nacimiento) AS dia

FROM usuario;

1 Tabla Fechas

Muestre la fecha Actual, junto con la fecha de Nacimiento de cada persona, y su RUT.

SELECT CURRENT_DATE AS ahora, fecha_Nacimiento, RUT

FROM usuario;

1 Tabla Fechas

Mostrando cada RUT, ¿Cuántos AÑOS hay de diferencia entre la fecha actual, y la fecha de nacimiento?

SELECT RUT, (YEAR(CURRENT_DATE) - YEAR(Fecha_Nacimiento)) AS diferenciaFROM usuario;

1 Tabla Campo Combinado

Año Actual 2011

Año Nacimiento ‘1-9’ 1991

RESULTADO 20

Mostrando cada RUT, ¿Cuántos DIAS hay de diferencia entre la fecha actual, y la fecha de nacimiento?

SELECT DATEDIFF (CURRENT_DATE, Fecha_Nacimiento) AS diferencia, RUTFROM usuario;

1 Tabla Campo Combinado

Fecha Actual 2011-09-14

Fecha RUT ‘9-1’ 1990-02-24

Fecha Actual2011 09 14

Nacimiento 9-11990 02 24

2011 – 1990 = 21 años

21 años * 365 = 7665 Dias

09/14 – 02/24 = 202 Dias

7665

202

7867 5

años bisiestos7872

En cada fecha de nacimiento, ¿Cuántas semanas faltaron para que llegaran A FIN DE AÑO (31/Diciembre)?

SELECT RUT, WEEK('2011-12-31') AS fin, WEEK(Fecha_Nacimiento) AS N_Semana,WEEK('2011-12-31') - WEEK(Fecha_Nacimiento) AS diferenciaFROM usuario;

1 Tabla Campo Combinado

Fecha RUT ‘9-1’ 1989-05-01

Fecha FINAL 2011-12-31

Mes 12Dia 31:

NºSemana: 52

Mes: 05Dia: 01Nº Semana18

52 18 34

Muestre la cantidad de personas que nacieron por año

1 Tabla función

SELECT YEAR(Fecha_Nacimiento) AS año, COUNT(*) AS cantidad

FROM usuarioGROUP BY YEAR(Fecha_Nacimiento);

Fechas Agrupación

Muestre el promedio de los sueldos separados por el MES de nacimiento de cada usuario.

SELECT MONTH(Fecha_NAcimiento) AS Mes, ROUND(AVG(Saldo)) AS promedioFROM usuarioGROUP BY Mes;

1 Tabla función Fechas Agrupación

De las personas que nacieron en el año ‘1991’ ¿Cuánto seria la suma de los saldos de ellos?

1 Tabla funcion

SELECT SUM(Saldo) AS sumaFROM usuarioWHERE YEAR(Fecha_Nacimiento) = 1991;

condicion Fechas

¿Cuántas ‘Mujeres’ nacieron el año 1990?

1 Tabla funcion

SELECT COUNT(*) AS mujeresFROM usuarioWHERE Sexo='F'AND YEAR(Fecha_Nacimiento) = 1990;

condicion Fechas

Muestre la suma de los saldos de los usuarios que nacieron el mismo año, mostrándolo con su respectivo año. Solo muestre los 2 primeros saldos mayores. Anule el año ‘1991’.

1 Tabla funcion

SELECT YEAR(Fecha_Nacimiento) AS año, SUM(Saldo) AS suma_año

FROM usuarioWHERE NOT (YEAR(Fecha_Nacimiento) = 1991)GROUP BY añoORDER BY suma_año DESCLIMIT 2;

condicion FechasOrdenamiento Limites Agrupación

Ejercicio Nº 4:Consultas ‘SELECT’ con

“INNER JOIN”

1

1

2

3

4

Modelo Ejercicios [1] INNER JOIN

Datos

Tabla [Bodega]

Datos

Tabla [Producto]

Datos

Tabla [Almacenaje]

Datos

Tabla [Ventas]

Backup

Se recomienda generar el script de la bases de datos, y trabajar junto al gestor de base de datos (ejemplo: SQLYog) para poder así comprobar realmente los comandos, y las tablas resultantes.

Ejercicio N4,1 - Inner Join.rar

2 Tablas Una las tablas ‘ALMACENAJE’ y la tabla ‘BODEGA’.

SELECT *FROM bodega INNER JOIN almacenajeON bodega.letra = almacenaje.bodega_letra;

2 Tablas Muestre todos los datos de los productos, y las letras de

las bodegas en donde están almacenadas cada 1.SELECT producto.ID, producto.nombre, producto.categoria,

producto.precio, almacenaje.Bodega_LetraFROM producto INNER JOIN almacenajeON producto.ID = almacenaje.producto_ID;

2 Tablas Muestre las ventas (n_boleta, cantidad) que se han

hecho junto con sus productos (nombre, categoría)SELECT ventas.n_boleta, ventas.id_producto, producto.nombre, producto.categoria, ventas.cantidadFROM ventas INNER JOIN productoON ventas.id_producto = producto.id;

2 Tablas Muestre todos los productos que se encuentran en la

bodega con la letra ‘B’SELECT p.nombre, p.categoria, p.precio, a.bodega_letra, a.cantidadFROM producto AS p INNER JOIN almacenaje AS aON p.id = a.producto_idWHERE a.bodega_letra = 'B';

Condición

El Alias ‘p’ se usa muchas veces, pero debería haberse declarado por lo menos una

vez en toda la instrucción

2 Tablas Muestre todas las ID de los productos que estén

guardado en una bodega que no se encuentre en el primer piso

SELECT a.producto_id, b.pisoFROM almacenaje AS a INNER JOIN bodega AS bON a.bodega_letra = b.letraWHERE b.piso > 1;

Condición

2 Tablas Muestre todas las ID de los productos (junto con las

letras de las bodegas) que NO se almacenan en una avenida (Avda.)

SELECT a.producto_id, b.letraFROM almacenaje AS a INNER JOIN bodega AS bON a.bodega_letra = b.letraWHERE NOT(b.calle LIKE 'Avda.%');

Condición

2 Tablas ¿Cuántos productos se guardan en RENCA?

SELECT COUNT(*) AS cantidadFROM almacenaje AS a INNER JOIN bodega AS bON a.bodega_letra = b.letraWHERE Comuna = 'Renca';

Condición Función

2 Tablas ¿Cuánto es la suma de los precios de los productos que

se encuentran en la bodega ‘A’ mas la bodega ‘H’?SELECT SUM(precio) AS sumaFROM producto p INNER JOIN almacenaje aON a.producto_id = p.idWHERE (a.bodega_letra = 'A') OR (a.bodega_letra = 'H');

Condición Función

2 Tablas Muestre la suma de la cantidad de productos que se

encuentras por ‘Comuna’?SELECT SUM(a.cantidad) AS suma, b.ComunaFROM almacenaje a INNER JOIN bodega bON a.bodega_letra = b.letraGROUP BY Comuna;

Función Agrupación

2 Tablas ¿ Cuantos TIPOS de productos se almacenan por ‘Piso’ ?

SELECT COUNT(*) AS cantidad, b.pisoFROM almacenaje a INNER JOIN bodega bON a.bodega_letra = b.letraGROUP BY Piso;

Función Agrupación

2 Tablas Sume los precios de los productos que se encuentran en

la bodega ‘A’SELECT SUM(p.precio) AS sumaFROM Almacenaje a INNER JOIN producto pON p.ID = a.Producto_IDWHERE a.Bodega_letra = 'A'GROUP BY Bodega_Letra;

Condición Función Agrupación

2 Tablas Sume todas las ventas de los productos tipo

‘Computación’SELECT SUM(v.cantidad) AS suma, p.categoriaFROM ventas AS v INNER JOIN producto AS pON v.ID_producto = p.IDWHERE p.Categoria = 'Computacion'GROUP BY p.categoria;

Condición Función Agrupación

2 Tablas Muestre los 2 tipos de productos (categoría) menos

vendidos.SELECT SUM(v.cantidad) AS suma, p.categoriaFROM ventas AS v INNER JOIN producto AS pON v.ID_producto = p.IDGROUP BY p.categoriaORDER BY suma ASCLIMIT 2;

Condición Otros…Agrupación

3 Tablas Muestre los nombres de los productos que solo se

guardan en la comuna de ‘puente alto’.SELECT p.Nombre, b.ComunaFROM (Producto p INNER JOIN Almacenaje aON p.ID = a.producto_id ) INNER JOIN Bodega bON a.bodega_letra = b.letraWHERE b.Comuna = 'Puente Alto';

Condición

Cuando se hacen INNER JOIN con mas de 2 tablas, tenemos que unir

primero un par, y el resultado unirla con otra

1 2

3 Tablas El producto ‘Mouse’ ¿En que bodegas están guardados

estos tipos de productos?SELECT b.*, P.NombreFROM (bodega b INNER JOIN Almacenaje aON a.bodega_letra = b.letra ) INNER JOIN Producto pON p.ID = a.producto_idWHERE p.Nombre = 'Mouse';

Condición

3 Tablas En la venta Nº 1014, se vendio cierto producto: ¿Cual(es)

es(son) la(s) bodega(s) en que se almacena ese producto vendido?

SELECT v.n_boleta, v.id_producto, p.nombre, a.bodega_letraFROM (ventas v INNER JOIN producto pON v.id_producto = p.id) INNER JOIN almacenaje aON a.producto_id = p.idWHERE v.n_boleta = '1014';

Condición

Muestre la suma de los precios de los productos agrupados por dirección (calle y numero).

SELECT SUM(p.precio) AS suma, CONCAT(b.calle, ' ',b.numero) AS direccionFROM (bodega b INNER JOIN Almacenaje aON a.bodega_letra = b.letra ) INNER JOIN Producto pON p.ID = a.producto_idGROUP BY direccion;

3 Tablas Función Agrupación

La funcion CONCAT une caracteres.

Ejemplo: CONCAT(“Chao” “Mundo” “Cruel”);Resultado: [ChaoMundoCruel]

3 Tablas De los productos que se guardan en cada bodega,

¿Cuántos productos he vendido de cada una?NOTA: No muestre ni la bodega ‘Z’ ni la bodega ‘Y’SELECT COUNT(*) AS cantidad, a.bodega_letraFROM (ventas v INNER JOIN producto pON v.id_producto = p.id) INNER JOIN almacenaje aON a.producto_id = p.idWHERE NOT(a.bodega_letra = 'Z') AND NOT(a.bodega_letra = 'Y')GROUP BY a.bodega_letra;

Condición Función Agrupación

4 Tablas Muestre la direccion, y el piso de cada producto vendido

SELECT v.n_boleta, b.calle, b.numero, b.pisoFROM ((ventas v INNER JOIN producto pON v.id_producto = p.id) INNER JOIN Almacenaje aON a.producto_id = p.id) INNER JOIN Bodega bON b.letra = a.bodega_letra;

4 Tablas Condición Función Agrupación En el año 2010, ¿cuantos productos de han vendido,

agrupándolos por dirección (Calle + Numero)?SELECT SUM(v.cantidad) AS vendidos, p.nombre, b.calle, b.numeroFROM ((ventas v INNER JOIN producto pON v.id_producto = p.id) INNER JOIN Almacenaje aON a.producto_id = p.id) INNER JOIN Bodega bON b.letra = a.bodega_letraWHERE YEAR(v.fecha_venta) = '2010'GROUP BY b.calle, b.numero;

Modelo Ejercicios [2]INNER JOIN

Datos

Tabla [Cliente]

Datos

Tabla [Vendedor]

Datos

Tabla [Producto]

Datos

Tabla [Venta]

Backup

Ejercicio N4 - Inner Join.rar

Se recomienda generar el script de la bases de datos, y trabajar junto al gestor de base de datos (ejemplo: SQLYog) para poder así comprobar realmente los comandos, y las tablas resultantes.

2 Tablas Muestre el vendedor, junto con los productos (solo ID)

con su cantidad vendida.

SELECT vendedor.nombres, vendedor.apellidos, venta.producto_id, venta.cantidad

FROM vendedor INNER JOIN ventaON vendedor.rut = venta.vendedor_rut;

2 Tablas Muestre el nombre del producto vendido en cada venta.

SELECT v.id, p.nombreFROM venta v INNER JOIN producto pON v.producto_id = p.id;

Muestra las ventas del señor ‘Carrasco’

SELECT vt.id, vt.producto_id, vt.cantidad, vd.apellidos

FROM venta vt INNER JOIN vendedor vdON vt.vendedor_rut = vd.rutWHERE apellidos = 'Carrasco';

2 Tablas Condición

Muestra las compras de ‘Juan Carlos’

SELECT v.id, v.producto_id, v.cantidad, c.nombresFROM venta v INNER JOIN cliente cON v.cliente_rut = c.rutWHERE c.nombres = 'Juan Carlos';

2 Tablas Condición

cuantas compras a hecho el cliente con apellidos ‘Pérez Castro’

SELECT COUNT(*) AS compras, c.Apellidos FROM venta v INNER JOIN cliente c ON v.cliente_rut = c.rut WHERE Apellidos = 'Perez Castro';

2 Tablas Condición Función

¿Cual es el promedio de cantidad de productos comprados de los clientes que tiene celular ENTEL (‘E’)?

SELECT ROUND(AVG(v.cantidad)) AS prom, c.Compania FROM venta v INNER JOIN cliente c ON v.cliente_rut = c.rut WHERE c.compania = 'E';

2 Tablas Condición Función

Ahora muestre el promedio de cantidad de productos comprados de los clientes por cada compañía de celular.

SELECT ROUND(AVG(v.cantidad)) AS promedio, c.Compania

FROM venta v INNER JOIN cliente c ON v.cliente_rut = c.rut GROUP BY C.compania;

2 Tablas Función Agrupación

Muestre la cantidad de ventas que a hecho cada vendedor (Muestre solo Nombre y Apellido)

SELECT vd.nombres, vd.apellidos, COUNT(*) AS ventasFROM venta vt INNER JOIN vendedor vdON vt.vendedor_rut = vd.rutGROUP BY vd.rut;

2 Tablas Función Agrupación

¿Cuantas veces se ha vendido un producto que sirve (descripcion) por lo menos para ‘escuchar’ (similar), y otro producto que sirva para ‘Ingresar Palabras’ (textual)?

SELECT COUNT(*) AS ventas, p.DescripcionFROM producto p INNER JOIN venta vON p.ID = v.producto_idWHERE p.Descripcion LIKE 'Escuchar%'OR p.Descripcion = 'Ingresa Palabras'GROUP BY p.Descripcion;

2 Tablas Condición Función Agrupación

Muestre las 5 primeras ventas con menos ganancia[Ganancia = precio * cantidad]

SELECT v.id, v.vendedor_rut, (v.cantidad * p.precio) AS total

FROM producto p INNER JOIN venta vON p.id = v.producto_idORDER BY total ASCLIMIT 5;

2 TablasOtros usos con…

Muestre la 3ra y 4ta venta con mas ganancia[Ganancia = precio * cantidad]

SELECT v.id, (v.cantidad * p.precio) AS totalFROM producto p INNER JOIN venta v ON p.id = v.producto_idORDER BY total DESC LIMIT 2,2;

2 TablasOtros usos con…

NOTA: cuando se escribe ‘LIMIT X’ hace referencia a ‘x’ cantidad de registros. Pero con ‘LIMIT X, Y’ hace referencia ‘X’ el numero de registro donde empesara, ‘Y’ hace referencia a cuantos registros a partir de ‘X’ mostrara.

Muestre el numero de cada venta, junto al nombre del comprador con el del vendedor.

SELECT vt.id, vd.Nombres AS vendedor, c.nombres AS cliente

FROM (venta vt INNER JOIN cliente c ON

vt.cliente_rut = c.rut) INNER JOIN vendedor vd

ON vd.rut = vt.vendedor_rut;

3 Tablas

¿Cuántos Mouse compro el cliente ‘Felipe Carlos’?

SELECT COUNT(*) AS cantidad, c.NombresFROM (venta vt INNER JOIN cliente c ON vt.cliente_rut = c.rut) INNER JOIN producto pON p.id = vt.producto_idWHERE c.Nombres = 'Felipe Carlos'AND p.nombre = 'Mouse';

3 Tablas Condición Función

Un cliente por su celular, pudo efectuar muchas ventas. El numero del cliente es ‘78787878’. Muestre todos los productos que compro, y cuantos compro.

SELECT v.id, p.nombre AS producto, v.cantidadFROM (producto p INNER JOIN venta vON p.ID = v.producto_id) INNER JOIN cliente c ONc.rut = v.cliente_rutWHERE c.celular = 78787878;

3 Tablas Condición Función

Muestre un informe detallado de la VENTA Nº 15: El comprador, el vendedor, el producto vendido, su precio unitario, la cantidad de productos vendidos, el precio final de la venta. (NOTA: Mostrar los nombres y apellidos CONCADENADOS)

SELECT vt.id,CONCAT (c.nombres, ' ', c.apellidos) AS cliente,CONCAT (vd.nombres, ' ', vd.apellidos) AS vendedor,p.nombre AS producto, p.precio AS precio_unitario,vt.cantidad, (vt.cantidad * p.precio) AS precio_finalFROM ((venta vt INNER JOIN producto pON p.id = vt.producto_id) INNER JOIN cliente c ONc.rut = vt.cliente_rut) INNER JOIN vendedor vd ONvd.rut = vt.vendedor_rutWHERE vt.id = 15;

4 Tablas Condición

Fin de: Ejercicios RESUELTOS

Ejercicios PROPUESTOS

Ejercicio Nº 1:Consultas “DDL”

Analisa los cambios, y modifique las

siguientes tablas

Consultas “DDL”

Tabla PERSONA

RUT Varchar(3)

Nombre Varchar(30)

Apellido Varchar(30)

Tabla PERSONA

RUT Varchar(3)

Nombre Varchar(30)

Apellido Varchar(30)

Fecha_Nacimiento date

Antes Despues

Consultas “DDL”

Antes DespuesTabla USUARIOID Int

Username Varchar(12)

Nombre Varchar(30)

Apellido Varchar(30)

Tabla USUARIOID Int

Nombre Varchar(30)

Apellido Varchar(30)

Consultas “DDL”

Antes DespuesTabla PRODUCTON_Serie int

Nombre Varchar(30)

Descripcion Text

Cantidad Int

Precio Int

Tabla PRODUCTON_Serie int

Nombre Varchar(30)

Cantidad Int

Precio Int

Bod_Letra char

Tabla BODEGALetra Char

Tabla BODEGALetra Char

FK

Consultas “DDL”

Antes DespuesTabla PRODUCTON_Serie int

Nombre Varchar(30)

Cantidad Int

Precio Int

Bod_Letra char

Tabla BODEGALetra Char

FK

Tabla PRODUCTON_Serie int

Nombre Varchar(30)

Cantidad Int

Precio Int

Identificador int

Ejercicio Nº 2:

. ……………………………….

……………………………….

…………… ………………………………

…………………………………..

Consultas“Insert, Update,

Delete”

Analiza la tabla, sufrirá muchos cambios de datos. Fíjate, y

aplicas los comandos necesarios para modificar la tabla

(Use los menos comandos posibles)

Consultas “DML”

Antes

Después

Tabla PERSONA

RUT Nombre Apellido Edad

1 Felipe Carrasco 41

2 Diego Castro 47

3 Sebastian Carrera 60

4 Bart Pedrero 26

5 Marisol Burgos 70

6 Katherine Pallero 68

Tabla PERSONA

RUT Nombre Apellido Edad

1 Felipe Carrasco 99

2 Diego Castro 99

3 Sebastian Carrera 99

4 Bartolomeo Pedrero 26

6 Kathy Pallero 68

9 Lisa Simpsons 13

Consultas “DML”

Antes

Después

Tabla DIRECCION

ID Pais Ciudad Comuna Calle Piso Numero

10001 Chile Santiago Las Condes Libra 4 1004

10002 China Taiwan Cocha Kong Hyo 1 54208

10003 España Santiago Libertador Carrera 2 345

10004 Peru La Paz La poz Estadio 1 6489

10005 China Hong Kong Xalong Kopum 2 567

10006 Mexico Guadalajara Central Vespucio 1 9910

Tabla DIRECCION

ID Pais Ciudad Comuna Calle Piso Numero

10001 Chile Santiago Las Condes Geminis 4 1004

10003 España Santiago Libertador Carrera 2 345

10004 Peru La Paz -Pendiente- Estadio 7 6489

10006 Mexico Guadalajara -Pendiente- Vespucio 7 9910

10010 USA Washington Forever 3 54

10011 USA Poor Alone 2 62

Ejercicio Nº 3:Consultas “SELECT”

. ……………………………….

……………………………….

…………… ………………………………

…………………………………..

Jesus te ama

Tien

es u

na e

zper

anza

SQL