Problema:
Una empresa tiene registrados sus clientes en una tabla llamada "clientes", también tiene una
tabla "provincias" donde registra los nombres de las provincias.
1- Elimine la tabla "clientes" y "provincias", si existen:
drop table if exists clientes, provincias;
2- Créelas con las siguientes estructuras:
create table clientes (
codigo int unsigned auto_increment,
nombre varchar(30) not null,
domicilio varchar(30),
ciudad varchar(20),
codigoprovincia tinyint unsigned,
telefono varchar(11),
primary key(codigo)
);
create table provincias(
codigo tinyint unsigned auto_increment,
nombre varchar(20),
primary key (codigo)
);
En este ejemplo, el campo "codigoprovincia" de "clientes" es una clave foránea, se emplea para
enlazar la tabla "clientes" con "provincias".
3- Ingrese algunos registros para ambas tablas:
insert into provincias(codigo,nombre) values(1,'Cordoba');
insert into provincias(codigo,nombre) values(2,'Santa Fe');
insert into provincias(codigo,nombre) values(30,'Misiones');
insert into provincias(codigo,nombre) values(13,'Salta');
insert into provincias(codigo,nombre) values(15,'Buenos Aires');
insert into provincias(codigo,nombre) values(20,'Neuquen');
insert into clientes (nombre,domicilio,ciudad,codigoProvincia,telefono)
values ('Lopez Marcos', 'Colon 111', 'Córdoba',1,'null');
insert into clientes (nombre,domicilio,ciudad,codigoProvincia,telefono)
values ('Perez Ana', 'San Martin 222', 'Cruz del Eje',1,'4578585');
insert into clientes (nombre,domicilio,ciudad,codigoProvincia,telefono)
values ('Garcia Juan', 'Rivadavia 333', 'Villa Maria',1,'4578445');
insert into clientes (nombre,domicilio,ciudad,codigoProvincia,telefono)
values ('Perez Luis', 'Sarmiento 444', 'Rosario',2,null);
insert into clientes (nombre,domicilio,ciudad,codigoProvincia,telefono)
values ('Ramos Betina', 'San Martin 999', 'Bahia Blanca',15,'4223366');
insert into clientes (nombre,domicilio,ciudad,codigoProvincia,telefono)
values ('Lopez Lucas', 'San Martin 1010', 'Posadas',30,'0457858745');
4- Enlace las tablas:
select c.nombre,c.ciudad,p.nombre
from clientes as c
left join provincias as p
on c.codigoprovincia=p.codigo;
5- Modifique el campo "codigoprovincia" a "char(1)":
alter table clientes
modify codigoprovincia char(1);
6- Vea cómo afectó el cambio a la tabla "clientes":
select * from clientes;
El cliente de "Bahia Blanca" con código de provincia "15" ("Buenos Aires") ahora tiene "1"
("Cordoba") y el cliente con código de provincia "30" ("Misiones") ahora almacena "3" (valor
inexistente en "provincias").
7- Realice un "left join" buscando coincidencia de códigos en la tabla "provincias":
select c.nombre,c.ciudad,p.nombre
from clientes as c
left join provincias as p
on c.codigoprovincia=p.codigo;
El resultado es erróneo.
8- Intente modificar la clave primaria en "provincias" para que se corresponda
con "codigoprovincia" de "clientes":
alter table provincias
modify codigo char(1);
No lo permite porque si la modifica los valores para el campo clave quedan repetidos.
Otros problemas:
Un club dicta clases de distintos deportes. En una tabla llamada "deportes" guarda la información
de los distintos deportes que se enseñan y en una tabla denominada "inscriptos" almacena la
información necesaria para las inscripciones a los distintos deportes.
1- Elimine las tablas si existen.
2- Cree las tablas:
create table deportes(
codigo tinyint unsigned,
nombre varchar(20),
profesor varchar(30),
primary key(codigo)
);
create table inscriptos(
documento char(8) not null,
codigodeporte tinyint unsigned not null,
año year,
matriculapaga char(1),/* 's' si está paga, 'n' si no está paga*/
primary key(documento,codigodeporte,año)
);
3- Ingrese algunos registros para ambas tablas:
insert into deportes values(1,'Tenis','Juan Lopez');
insert into deportes values(2,'Natacion','Maria Lopez');
insert into deportes values(3,'Basquet','Antonio Juarez');
insert into inscriptos values ('22333444',2,'2005','s');
insert into inscriptos values ('22333444',2,'2006','n');
insert into inscriptos values ('23333444',2,'2005','s');
insert into inscriptos values ('23333444',1,'2005','s');
insert into inscriptos values ('23333444',1,'2006','s');
insert into inscriptos values ('24333444',2,'2006','n');
insert into inscriptos values ('24333444',3,'2006','n');
4- Muestre el nombre del deporte y todos los campos de la tabla "inscriptos":
select d.nombre,i.*
from deportes as d
join inscriptos as i
on d.codigo=i.codigodeporte;
5- Modifique el campo "codigo" de "deportes" para que almacene 1 caracter:
alter table deportes modify codigo char(1);
6- Actualice la tabla "deportes" almacenando en "codigo" el primer caracter del nombre del deporte:
update deportes set codigo=left(nombre,1);
7- Vea cómo cambió la tabla:
select * from deportes;
8- Realice un "join":
select d.nombre,i.*
from deportes as d
join inscriptos as i
on d.codigo=i.codigodeporte;
No encuentra coincidencia.