Ejercicios para bajar el abdomen - Ejercicios para el abdomen
Ejercicios
description
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