67 - Minus


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)

5- Se necesitan los nombres de los médicos que también son pacientes de la clínica. Realice una intersección entre las tablas.

6- La clínica necesita los nombres de los pacientes que no son médicos. Realice una operación de resta.

7- Se necesitan los registros que no coinciden en ambas tablas. Realice la operación necesaria.

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 from medicos
  intersect
  select nombre from pacientes;

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

 select nombre from pacientes
  minus
  select nombre from medicos
 union
 (select nombre from medicos
  minus
  select nombre from pacientes);

 

Segundo problema:

Un colegio guarda los datos de los alumnos que están cursando primer año en una tabla denominada "primero", los datos de los alumnos que están cursando segundo año en una tabla llamada "segundo" y en la tabla "inscriptos2" los datos de los alumnos inscriptos para segundo año para el siguiente año.

1- Elimine las tablas:

 drop table primero;
 drop table segundo;
 drop table inscriptos2;

2- Cree las tablas:

 create table primero(
  documento char(8) not null,
  nombre varchar2(30),
  domicilio varchar2(30),
  primary key(documento)
 );

 create table segundo(
  documento char(8) not null,
  nombre varchar2(30),
  domicilio varchar2(30),
  primary key(documento)
 );

 create table inscriptos2(
  documento char(8) not null,
  nombre varchar2(30),
  domicilio varchar2(30),
  primary key(documento)
 );

3- Ingrese algunos registros:

 insert into primero values('40111222','Alicia Acosta','Avellaneda 111');
 insert into primero values('41222333','Bernardo Bustos','Bulnes 222');
 insert into primero values('41555666','Carlos Caseres','Colon 333');
 insert into primero values('41888999','Diana Duarte','Dinamarca 444');
 insert into primero values('42333444','Eduardo Esper','San Martin 555');

 insert into segundo values('43444555','Federico Fuentes','Francia 666');
 insert into segundo values('43666777','Gabriela Gomez','Garzon 777');
 insert into segundo values('44555666','Hector Huerta','Colon 888');
 insert into segundo values('44999000','Ines Irala','Inglaterra 999');
 insert into segundo values('45111444','Juan Juarez','Jamaica 111');

 insert into inscriptos2 values('41555666','Carlos Caseres','Colon 333');
 insert into inscriptos2 values('41888999','Diana Duarte','Dinamarca 444');
 insert into inscriptos2 values('42333444','Eduardo Esper','San Martin 555');
 insert into inscriptos2 values('43444555','Federico Fuentes','Francia 666');
 insert into inscriptos2 values('46777888','Luis Lopez','Lules 222');
 insert into inscriptos2 values('47888999','Marina Moreno','Martin Garcia 333');
 insert into inscriptos2 values('48999000','Nora Nores','Natividad 333');

Tenga en cuenta algunas consideraciones:
- algunos alumnos de primero, se han inscripto en el mismo colegio para cursar segundo año;
- algunos alumnos de primero no están inscriptos en segundo porque repetirán el próximo año o se cambiarán de colegio;
- algunos alumnos que están cursando segundo están inscriptos nuevamente en segundo porque repetirán el curso;
- algunos inscriptos para el año próximo en segundo, no están cursando primero en este colegio.

4- El colegio quiere saber los nombres de los inscriptos a segundo del año próximo que repiten segundo (presentes en "segundo" y en "inscriptos2") (1 registro):

5- El colegio quiere saber los nombres de los alumnos que están cursando primero y están inscriptos para segundo el próximo año (presentes en "inscriptos2" y en "primero") (3 registros)

6- El colegio quiere saber los nombres y domicilios de los alumnos inscriptos para segundo que no están cursando este año en este colegio (presentes en "inscriptos2" y ausentes en "primero" y "segundo") para enviarles una nota con la fecha para una reunión informativa (3 registros)

7- El colegios quiere saber los nombres de los alumnos inscriptos para segundo el próximo año, que están cursando primero o segundo este año (presentes en "inscriptos2" y en "primero" o "segundo). Realice las operaciones necesarias. (4 registros)

8- El colegio necesita los nombres de los alumnos que están cursando primero y no están inscriptos el próximo año en segundo para enviarles un mail preguntando la razón por la cual no se han anotado aún (2 registros)


Ver solución
 drop table primero;
 drop table segundo;
 drop table inscriptos2;

 create table primero(
  documento char(8) not null,
  nombre varchar2(30),
  domicilio varchar2(30),
  primary key(documento)
 );

 create table segundo(
  documento char(8) not null,
  nombre varchar2(30),
  domicilio varchar2(30),
  primary key(documento)
 );

 create table inscriptos2(
  documento char(8) not null,
  nombre varchar2(30),
  domicilio varchar2(30),
  primary key(documento)
 );

 insert into primero values('40111222','Alicia Acosta','Avellaneda 111');
 insert into primero values('41222333','Bernardo Bustos','Bulnes 222');
 insert into primero values('41555666','Carlos Caseres','Colon 333');
 insert into primero values('41888999','Diana Duarte','Dinamarca 444');
 insert into primero values('42333444','Eduardo Esper','San Martin 555');

 insert into segundo values('43444555','Federico Fuentes','Francia 666');
 insert into segundo values('43666777','Gabriela Gomez','Garzon 777');
 insert into segundo values('44555666','Hector Huerta','Colon 888');
 insert into segundo values('44999000','Ines Irala','Inglaterra 999');
 insert into segundo values('45111444','Juan Juarez','Jamaica 111');

 insert into inscriptos2 values('41555666','Carlos Caseres','Colon 333');
 insert into inscriptos2 values('41888999','Diana Duarte','Dinamarca 444');
 insert into inscriptos2 values('42333444','Eduardo Esper','San Martin 555');
 insert into inscriptos2 values('43444555','Federico Fuentes','Francia 666');
 insert into inscriptos2 values('46777888','Luis Lopez','Lules 222');
 insert into inscriptos2 values('47888999','Marina Moreno','Martin Garcia 333');
 insert into inscriptos2 values('48999000','Nora Nores','Natividad 333');

 select nombre from segundo
  intersect
   select nombre from inscriptos2;

 select nombre from inscriptos2
  intersect
 select nombre from primero;

 select nombre from inscriptos2
  minus
   select nombre from primero
  minus
   select nombre from segundo;

 select nombre,domicilio from inscriptos2
  intersect
   select nombre,domicilio from primero
  union
 (select nombre,domicilio from inscriptos2
  intersect
  select nombre,domicilio from segundo);

 select nombre from primero
  minus
 select nombre from inscriptos2;

Retornar