66 - Intersección


Primer problema:

Una clínica almacena los datos de los médicos en una tabla llamada "medicos" y los datos de los pacientes en otra denominada "pacientes".

1- Eliminamos ambas tablas:

 drop table medicos;
 drop table pacientes;

2- Creamos las tablas:

 create table medicos(
  legajo number(3),
  documento varchar2(8) not null,
  nombre varchar2(30),
  domicilio varchar2(30),
  especialidad varchar2(30),
  primary key(legajo)
 );

 create table pacientes(
  documento varchar2(8) not null,
  nombre varchar2(30),
  domicilio varchar2(30),
  obrasocial varchar2(20),
  primary key(documento)
 );

3- Ingresamos algunos registros:

 insert into medicos values(1,'20111222','Ana Acosta','Avellaneda 111','clinica');
 insert into medicos values(2,'21222333','Betina Bustos','Bulnes 222','clinica');
 insert into medicos values(3,'22333444','Carlos Caseros','Colon 333','pediatria');
 insert into medicos values(4,'23444555','Daniel Duarte','Duarte Quiros 444','oculista');
 insert into medicos values(5,'24555666','Estela Esper','Esmeralda 555','alergia');

 insert into pacientes values('24555666','Estela Esper','Esmeralda 555','IPAM');
 insert into pacientes values('23444555','Daniel Duarte','Duarte Quiros 444','OSDOP');
 insert into pacientes values('30111222','Fabiana Fuentes','Famatina 666','PAMI');
 insert into pacientes values('30111222','Gaston Gonzalez','Guemes 777','PAMI');

4- La clínica necesita el nombre y domicilio de médicos y pacientes para enviarles una tarjeta de invitación a la inauguración de un nuevo establecimiento. Emplee el operador "union" para obtener dicha información de ambas tablas (7 registros)
Note que existen dos médicos que también están presentes en la tabla "pacientes"; tales registros aparecen una sola vez en el resultado de "union".

5- La clínica necesita el nombre y domicilio de los pacientes que también son médicos para enviarles una tarjeta de descuento para ciertas prácticas. Emplee el operador "intersect" para obtener dicha información de ambas tablas

Ver solución

 drop table medicos;
 drop table pacientes;

 create table medicos(
  legajo number(3),
  documento varchar2(8) not null,
  nombre varchar2(30),
  domicilio varchar2(30),
  especialidad varchar2(30),
  primary key(legajo)
 );

 create table pacientes(
  documento varchar2(8) not null,
  nombre varchar2(30),
  domicilio varchar2(30),
  obrasocial varchar2(20),
  primary key(documento)
 );

 insert into medicos values(1,'20111222','Ana Acosta','Avellaneda 111','clinica');
 insert into medicos values(2,'21222333','Betina Bustos','Bulnes 222','clinica');
 insert into medicos values(3,'22333444','Carlos Caseros','Colon 333','pediatria');
 insert into medicos values(4,'23444555','Daniel Duarte','Duarte Quiros 444','oculista');
 insert into medicos values(5,'24555666','Estela Esper','Esmeralda 555','alergia');

 insert into pacientes values('24555666','Estela Esper','Esmeralda 555','IPAM');
 insert into pacientes values('23444555','Daniel Duarte','Duarte Quiros 444','OSDOP');
 insert into pacientes values('30111222','Fabiana Fuentes','Famatina 666','PAMI');
 insert into pacientes values('30111222','Gaston Gonzalez','Guemes 777','PAMI');

 select nombre, domicilio from medicos
  union
  select nombre, domicilio from pacientes;

 select nombre, domicilio from medicos
  intersect
  select nombre, domicilio from pacientes;

 

Segundo problema:

Un supermercado almacena en una tabla denominada "proveedores" los datos de las compañías que le proveen de mercaderías; en una tabla llamada "clientes", los datos de los comercios que le compran y en otra tabla "empleados" los datos de los empleados.

1- Elimine las tablas:

 drop table clientes;
 drop table proveedores;
 drop table empleados;

2- Cree las tablas:

 create table proveedores(
  codigo number(3) not null,
  nombre varchar2(30),
  domicilio varchar2(30),
  primary key(codigo)
 );
 create table clientes(
  codigo number(4),
  nombre varchar2(30),
  domicilio varchar2(30),
  primary key(codigo)
 );
 create table empleados(
  documento char(8) not null,
  nombre varchar2(20),
  apellido varchar2(20),
  domicilio varchar2(30),
  primary key(documento)
 );

3- Ingrese algunos registros:

 insert into proveedores values(1,'Valeria Vazquez','Colon 123');
 insert into proveedores values(2,'Carnes Unica','Caseros 222');
 insert into proveedores values(3,'Blanca Bustos','San Martin 987');
 insert into proveedores values(4,'Luis Luque','San Martin 1234');
 insert into clientes values(100,'Supermercado Lopez','Avellaneda 34');
 insert into clientes values(101,'Almacen Anita','Colon 987');
 insert into clientes values(102,'Juan Garcia','Sucre 345');
 insert into clientes values(103,'Luis Luque','San Martin 1234');
 insert into clientes values(104,'Valeria Vazquez','Colon 123');
 insert into clientes values(105,'Federico Ferreyra','Colon 987');
 insert into empleados values('23333333','Federico','Ferreyra','Colon 987');
 insert into empleados values('28888888','Ana','Marquez','Sucre 333');
 insert into empleados values('30111111','Pedro','Perez','Caseros 956');
 insert into empleados values('31222333','Juan','Garcia','Sucre 345');
 insert into empleados values('32333444','Luis','Luque','San Martin 1234');
 insert into empleados values('33444555','Valeria','Vazquez','Colon 123');
 insert into empleados values('34555666','Blanca','Bustos','San Martin 987');

4- El supermercado quiere enviar un bono de descuento a todos los empleados que son clientes. Realice una combinación de intersección entre las tablas "clientes" y "empleados" (4 registros)

5- Se necesitan los nombres de aquellos proveedores que son clientes y también empleados del supermercado (presentes en las tres tablas). Realice las operaciones necesarias (2 registros)


Ver solución
 drop table clientes;
 drop table proveedores;
 drop table empleados;

 create table proveedores(
  codigo number(3) not null,
  nombre varchar2(30),
  domicilio varchar2(30),
  primary key(codigo)
 );
 create table clientes(
  codigo number(4),
  nombre varchar2(30),
  domicilio varchar2(30),
  primary key(codigo)
 );
 create table empleados(
  documento char(8) not null,
  nombre varchar2(20),
  apellido varchar2(20),
  domicilio varchar2(30),
  primary key(documento)
 );

 insert into proveedores values(1,'Valeria Vazquez','Colon 123');
 insert into proveedores values(2,'Carnes Unica','Caseros 222');
 insert into proveedores values(3,'Blanca Bustos','San Martin 987');
 insert into proveedores values(4,'Luis Luque','San Martin 1234');
 insert into clientes values(100,'Supermercado Lopez','Avellaneda 34');
 insert into clientes values(101,'Almacen Anita','Colon 987');
 insert into clientes values(102,'Juan Garcia','Sucre 345');
 insert into clientes values(103,'Luis Luque','San Martin 1234');
 insert into clientes values(104,'Valeria Vazquez','Colon 123');
 insert into clientes values(105,'Federico Ferreyra','Colon 987');
 insert into empleados values('23333333','Federico','Ferreyra','Colon 987');
 insert into empleados values('28888888','Ana','Marquez','Sucre 333');
 insert into empleados values('30111111','Pedro','Perez','Caseros 956');
 insert into empleados values('31222333','Juan','Garcia','Sucre 345');
 insert into empleados values('32333444','Luis','Luque','San Martin 1234');
 insert into empleados values('33444555','Valeria','Vazquez','Colon 123');
 insert into empleados values('34555666','Blanca','Bustos','San Martin 987');

 select nombre, domicilio from clientes
  intersect
   select nombre||' '||apellido, domicilio from empleados;

 select nombre from proveedores
  intersect
 select nombre from clientes
  intersect
 select nombre||' '||apellido from empleados;

Retornar