Problema:
Una empresa tiene registrados sus clientes en una tabla llamada "clientes", también tiene una tabla
"ciudades" donde registra los nombres de las ciudades.
1- Cree la tabla "clientes" (codigo, nombre, domicilio, ciudad, codigociudad) y "ciudades" (codigo,
nombre). Agregue una restricción "primary key" para el campo "codigo" de ambas tablas):
drop table if exists ciudades;
drop table if exists clientes;
create table ciudades(
codigo int auto_increment,
nombre varchar(20),
primary key (codigo)
);
create table clientes (
codigo int auto_increment,
nombre varchar(30),
domicilio varchar(30),
codigociudad smallint not null,
primary key(codigo)
);
2- Ingrese algunos registros para ambas tablas:
insert into ciudades (nombre) values('Cordoba');
insert into ciudades (nombre) values('Cruz del Eje');
insert into ciudades (nombre) values('Carlos Paz');
insert into ciudades (nombre) values('La Falda');
insert into ciudades (nombre) values('Villa Maria');
insert into clientes(nombre,domicilio,codigociudad) values ('Lopez Marcos','Colon 111',1);
insert into clientes(nombre,domicilio,codigociudad) values ('Lopez Hector','San Martin 222',1);
insert into clientes(nombre,domicilio,codigociudad) values ('Perez Ana','San Martin 333',2);
insert into clientes(nombre,domicilio,codigociudad) values ('Garcia Juan','Rivadavia 444',3);
insert into clientes(nombre,domicilio,codigociudad) values ('Perez Luis','Sarmiento 555',3);
insert into clientes(nombre,domicilio,codigociudad) values ('Gomez Ines','San Martin 666',4);
insert into clientes(nombre,domicilio,codigociudad) values ('Torres Fabiola','Alem 777',5);
insert into clientes(nombre,domicilio,codigociudad) values ('Garcia Luis','Sucre 888',5);
3- Necesitamos conocer los nombres de las ciudades de aquellos clientes cuyo domicilio es en calle
"San Martin", empleando subconsulta.
select nombre
from ciudades
where codigo in
(select codigociudad
from clientes
where domicilio like 'San Martin %');
4- Obtenga la misma salida anterior pero empleando join.
select distinct ci.nombre
from ciudades as ci
join clientes as cl
on codigociudad=ci.codigo
where domicilio like 'San Martin%';
5- Obtenga los nombre de las ciudades de los clientes cuyo apellido no comienza con una letra
específica, empleando subconsulta.
select nombre
from ciudades
where codigo not in
(select codigociudad
from clientes
where nombre like 'G%');
6- Pruebe la subconsulta del punto 5 separada de la consulta exterior para verificar que retorna
una lista de valores de un solo campo.
select codigociudad
from clientes
where nombre like 'G%';