93 - Subconsultas con in |
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- Elimine las tablas "clientes" y "ciudades", si existen: if (object_id('ciudades')) is not null drop table ciudades; if (object_id('clientes')) is not null drop table clientes; 2- 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 y una "foreing key" para validar que el campo "codigociudad" exista en "ciudades" con actualización en cascada: create table ciudades( codigo tinyint identity, nombre varchar(20), primary key (codigo) ); create table clientes ( codigo int identity, nombre varchar(30), domicilio varchar(30), codigociudad tinyint not null, primary key(codigo), constraint FK_clientes_ciudad foreign key (codigociudad) references ciudades(codigo) on update cascade, ); 3- 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 values ('Lopez Marcos','Colon 111',1); insert into clientes values ('Lopez Hector','San Martin 222',1); insert into clientes values ('Perez Ana','San Martin 333',2); insert into clientes values ('Garcia Juan','Rivadavia 444',3); insert into clientes values ('Perez Luis','Sarmiento 555',3); insert into clientes values ('Gomez Ines','San Martin 666',4); insert into clientes values ('Torres Fabiola','Alem 777',5); insert into clientes values ('Garcia Luis','Sucre 888',5); 4- Necesitamos conocer los nombres de las ciudades de aquellos clientes cuyo domicilio es en calle "San Martin", empleando subconsulta. 3 registros. 5- Obtenga la misma salida anterior pero empleando join. 6- Obtenga los nombre de las ciudades de los clientes cuyo apellido no comienza con una letra específica, empleando subconsulta. 2 registros. 7- Pruebe la subconsulta del punto 6 separada de la consulta exterior para verificar que retorna una lista de valores de un solo campo.Ver solución
if (object_id('ciudades')) is not null drop table ciudades; if (object_id('clientes')) is not null drop table clientes; create table ciudades( codigo tinyint identity, nombre varchar(20), primary key (codigo) ); create table clientes ( codigo int identity, nombre varchar(30), domicilio varchar(30), codigociudad tinyint not null, primary key(codigo), constraint FK_clientes_ciudad foreign key (codigociudad) references ciudades(codigo) on update cascade, ); 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 values ('Lopez Marcos','Colon 111',1); insert into clientes values ('Lopez Hector','San Martin 222',1); insert into clientes values ('Perez Ana','San Martin 333',2); insert into clientes values ('Garcia Juan','Rivadavia 444',3); insert into clientes values ('Perez Luis','Sarmiento 555',3); insert into clientes values ('Gomez Ines','San Martin 666',4); insert into clientes values ('Torres Fabiola','Alem 777',5); insert into clientes values ('Garcia Luis','Sucre 888',5); select nombre from ciudades where codigo in (select codigociudad from clientes where domicilio like 'San Martin %'); select distinct ci.nombre from ciudades as ci join clientes as cl on codigociudad=ci.codigo where domicilio like 'San Martin%'; select nombre from ciudades where codigo not in (select codigociudad from clientes where nombre like 'G%'); select codigociudad from clientes where nombre like 'G%';