74 - Subconsultas con in


Primer 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- Elimine las tablas "clientes" y "ciudades":

  drop table clientes;
  drop table ciudades;

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 eliminación en cascada:

 create table ciudades(
  codigo number(2),
  nombre varchar2(20),
  primary key (codigo)
 );

 create table clientes (
  codigo number(4),
  nombre varchar2(30),
  domicilio varchar2(30),
  codigociudad number(2) not null,
  primary key(codigo),
  constraint FK_clientes_ciudad
   foreign key (codigociudad)
   references ciudades(codigo)
   on delete cascade
 );

3- Ingrese algunos registros para ambas tablas:

 insert into ciudades values(1,'Cordoba');
 insert into ciudades values(2,'Cruz del Eje');
 insert into ciudades values(3,'Carlos Paz');
 insert into ciudades values(4,'La Falda');
 insert into ciudades values(5,'Villa Maria');

 insert into clientes values (100,'Lopez Marcos','Colon 111',1);
 insert into clientes values (101,'Lopez Hector','San Martin 222',1);
 insert into clientes values (105,'Perez Ana','San Martin 333',2);
 insert into clientes values (106,'Garcia Juan','Rivadavia 444',3);
 insert into clientes values (107,'Perez Luis','Sarmiento 555',3);
 insert into clientes values (110,'Gomez Ines','San Martin 666',4);
 insert into clientes values (111,'Torres Fabiola','Alem 777',5);
 insert into clientes values (112,'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.

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 (letra "G"), empleando subconsulta.

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

  drop table clientes;
  drop table ciudades;

 create table ciudades(
  codigo number(2),
  nombre varchar2(20),
  primary key (codigo)
 );

 create table clientes (
  codigo number(4),
  nombre varchar2(30),
  domicilio varchar2(30),
  codigociudad number(2) not null,
  primary key(codigo),
  constraint FK_clientes_ciudad
   foreign key (codigociudad)
   references ciudades(codigo)
   on delete cascade
 );

 insert into ciudades values(1,'Cordoba');
 insert into ciudades values(2,'Cruz del Eje');
 insert into ciudades values(3,'Carlos Paz');
 insert into ciudades values(4,'La Falda');
 insert into ciudades values(5,'Villa Maria');

 insert into clientes values (100,'Lopez Marcos','Colon 111',1);
 insert into clientes values (101,'Lopez Hector','San Martin 222',1);
 insert into clientes values (105,'Perez Ana','San Martin 333',2);
 insert into clientes values (106,'Garcia Juan','Rivadavia 444',3);
 insert into clientes values (107,'Perez Luis','Sarmiento 555',3);
 insert into clientes values (110,'Gomez Ines','San Martin 666',4);
 insert into clientes values (111,'Torres Fabiola','Alem 777',5);
 insert into clientes values (112,'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 ci
  join clientes 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%';

 


Retornar