63 - Clave foránea. |
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.
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.