Ejercicios

138
Ejercicios DDL-DML Profesor: Ernesto Vivanco Tapia

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

Page 1: Ejercicios

Ejercicios

DDL-DMLProfesor:Ernesto Vivanco Tapia

Page 2: Ejercicios

Ejercicios Resueltos

Page 3: Ejercicios

Ejercicio Nº 1:Consultas “DDL”

Page 4: Ejercicios

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…

Page 5: Ejercicios

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

Page 6: Ejercicios

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));

Page 7: Ejercicios

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)

);

Page 8: Ejercicios

Modifique las siguientes tablas

ALTER TABLE PRODUCTOADD CANTIDAD INT;

DDLAlter…

Page 9: Ejercicios

Modifique las siguientes tablas

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

DDLAlter…

Page 10: Ejercicios

Modifique las siguientes tablas

ALTER TABLE PRODUCTO ADD PRIMARY KEY(N_SERIE);

DDLAlter…

Page 11: Ejercicios

Modifique las siguientes tablas

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

DDLAlter…

Page 12: Ejercicios

Modifique las siguientes tablas

ALTER TABLE PRODUCTO MODIFY DESCRIPCION VARCHAR(20);

DDLAlter…

Page 13: Ejercicios

Modifique las siguientes tablas

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

DDLAlter…

Page 14: Ejercicios

Modifique las siguientes tablas

ALTER TABLE GERENTEDROP EDAD;

DDLAlter…

Page 15: Ejercicios

Modifique las siguientes tablas

ALTER TABLE GERENTEDROP PRIMARY KEY;

DDLAlter…

Page 16: Ejercicios

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.

Page 17: Ejercicios

Borre la siguiente tabla

DROP TABLE PRODUCTO;

DDLDrop…

Page 18: Ejercicios

Borre la siguientes tablas

DROP TABLE GERENTE, JEFE;

DDLDrop…

Page 19: Ejercicios

Ejercicio Nº 2: Consultas“Insert, Update,

Delete”

Page 20: Ejercicios

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);

Page 21: Ejercicios

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);

Page 22: Ejercicios

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');

Page 23: Ejercicios

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

Page 24: Ejercicios

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.

Page 25: Ejercicios

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

Page 26: Ejercicios

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

Page 27: Ejercicios

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’]

Page 28: Ejercicios

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';

Page 29: Ejercicios

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’]

Page 30: Ejercicios

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

Page 31: Ejercicios

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

Page 32: Ejercicios

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

Page 33: Ejercicios

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;

Page 34: Ejercicios

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);

Page 35: Ejercicios

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;

Page 36: Ejercicios

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;

Page 37: Ejercicios

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

Page 38: Ejercicios

Ejercicio Nº 3:Consultas “SELECT”

ModeloDatos

Backup.rar

Backup

Page 39: Ejercicios

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

SELECT * FROM usuario;

Page 40: Ejercicios

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

SELECT Apellido_Pat, Apellido_Mat, Saldo

FROM usuario;

Page 41: Ejercicios

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

1 Tabla 0 Condicion

SELECT RUT, Fecha_Nacimiento

FROM usuario;

Page 42: Ejercicios

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

1 Tabla 1 condicion

SELECT SaldoFROM usuarioWHERE RUT = '5-5';

Page 43: Ejercicios

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

1 Tabla 1 condicion

SELECT * FROM usuarioWHERE Comuna = 'Puente Alto';

Page 44: Ejercicios

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';

Page 45: Ejercicios

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');

Page 46: Ejercicios

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';

Page 47: Ejercicios

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;

Page 48: Ejercicios

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;

Page 49: Ejercicios

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';

Page 50: Ejercicios

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%');

Page 51: Ejercicios

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';

Page 52: Ejercicios

¿Cuantos usuarios se encuentran registrados?

1 Tabla 1 funcion

SELECT COUNT(*)FROM usuario;

Page 53: Ejercicios

Muestre el saldo MAXIMO de todos los usuarios

1 Tabla 1 funcionSELECT MAX(Saldo)FROM usuario;

Page 54: Ejercicios

Muestre el saldo MINIMO de todos los usuarios

1 Tabla 1 funcionSELECT MIN(Saldo)FROM usuario;

Page 55: Ejercicios

Muestre la SUMA de los saldos de los usuarios

1 Tabla 1 funcionSELECT SUM(Saldo)FROM usuario;

Page 56: Ejercicios

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

Page 57: Ejercicios

¿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

Page 58: Ejercicios

¿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

Page 59: Ejercicios

¿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.

Page 60: Ejercicios

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

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

Page 61: Ejercicios

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;

Page 62: Ejercicios

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;

Page 63: Ejercicios

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.

Page 64: Ejercicios

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

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

Page 65: Ejercicios

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

Page 66: Ejercicios

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;

Page 67: Ejercicios

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

tabla usuario

SELECT SaldoFROM usuarioORDER BY Saldo DESCLIMIT 2;

Ordenamiento

Page 68: Ejercicios

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

Page 69: Ejercicios

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

Page 70: Ejercicios

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

Page 71: Ejercicios

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

Page 72: Ejercicios

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

Page 73: Ejercicios

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

Page 74: Ejercicios

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

Page 75: Ejercicios

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

Page 76: Ejercicios

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

Page 77: Ejercicios

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

Page 78: Ejercicios

¿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

Page 79: Ejercicios

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

Page 80: Ejercicios

Ejercicio Nº 4:Consultas ‘SELECT’ con

“INNER JOIN”

1

1

2

3

4

Page 81: Ejercicios

Modelo Ejercicios [1] INNER JOIN

Page 82: Ejercicios

Datos

Tabla [Bodega]

Page 83: Ejercicios

Datos

Tabla [Producto]

Page 84: Ejercicios

Datos

Tabla [Almacenaje]

Page 85: Ejercicios

Datos

Tabla [Ventas]

Page 86: Ejercicios

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

Page 87: Ejercicios

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

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

Page 88: Ejercicios

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;

Page 89: Ejercicios

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;

Page 90: Ejercicios

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

Page 91: Ejercicios

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

Page 92: Ejercicios

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

Page 93: Ejercicios

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

Page 94: Ejercicios

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

Page 95: Ejercicios

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

Page 96: Ejercicios

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

Page 97: Ejercicios

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

Page 98: Ejercicios

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

Page 99: Ejercicios

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

Page 100: Ejercicios

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

Page 101: Ejercicios

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

Page 102: Ejercicios

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

Page 103: Ejercicios

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]

Page 104: Ejercicios

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

Page 105: Ejercicios

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;

Page 106: Ejercicios

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;

Page 107: Ejercicios

Modelo Ejercicios [2]INNER JOIN

Page 108: Ejercicios

Datos

Tabla [Cliente]

Page 109: Ejercicios

Datos

Tabla [Vendedor]

Page 110: Ejercicios

Datos

Tabla [Producto]

Page 111: Ejercicios

Datos

Tabla [Venta]

Page 112: Ejercicios

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.

Page 113: Ejercicios

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;

Page 114: Ejercicios

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;

Page 115: Ejercicios

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

Page 116: Ejercicios

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

Page 117: Ejercicios

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

Page 118: Ejercicios

¿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

Page 119: Ejercicios

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

Page 120: Ejercicios

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

Page 121: Ejercicios

¿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

Page 122: Ejercicios

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…

Page 123: Ejercicios

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.

Page 124: Ejercicios

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

Page 125: Ejercicios

¿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

Page 126: Ejercicios

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

Page 127: Ejercicios

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

Page 128: Ejercicios

Fin de: Ejercicios RESUELTOS

Page 129: Ejercicios

Ejercicios PROPUESTOS

Page 130: Ejercicios

Ejercicio Nº 1:Consultas “DDL”

Analisa los cambios, y modifique las

siguientes tablas

Page 131: Ejercicios

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

Page 132: Ejercicios

Consultas “DDL”

Antes DespuesTabla USUARIOID Int

Username Varchar(12)

Nombre Varchar(30)

Apellido Varchar(30)

Tabla USUARIOID Int

Nombre Varchar(30)

Apellido Varchar(30)

Page 133: Ejercicios

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

Page 134: Ejercicios

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

Page 135: Ejercicios

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)

Page 136: Ejercicios

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

Page 137: Ejercicios

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

Page 138: Ejercicios

Ejercicio Nº 3:Consultas “SELECT”

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

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

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

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

Jesus te ama

Tien

es u

na e

zper

anza

SQL