58 - Tipo de dato set.


Problema:
Una academia de enseñanza dicta distintos cursos de informática. Los cursos se dictan por la mañana 
(de 8 a 12 hs.) o por la tarde (de 16 a 20 hs.), distintos días a la semana. La academia guarda los 
datos de los cursos en una tabla llamada "cursos" en la cual almacena el código del curso, el tema, 
los días de la semana que se dicta, el horario, por la mañana (AM) o por la tarde (PM), la cantidad 
de clases que incluye cada curso (clases), la fecha de inicio y el costo del curso.

1- Elimine la tabla "cursos", si existe.

2- Cree la tabla "cursos" con la siguiente estructura:
 create table cursos(
  codigo tinyint unsigned auto_increment,
  tema varchar(20) not null,
  dias set ('lunes','martes','miercoles','jueves','viernes','sabado') not null,
  horario enum ('AM','PM') not null,
  clases tinyint unsigned default 1,
  fechainicio date,
  costo decimal(5,2) unsigned,
  primary key(codigo)
 );

3- Ingrese los siguientes registros:
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('PHP básico','lunes,martes,miercoles','AM',18,'2006-08-07',200);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('PHP básico','lunes,martes,miercoles','PM',18,'2006-08-14',200);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('PHP básico','sabado','AM',18,'2006-08-05',280);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('PHP avanzado','martes,jueves','AM',20,'2006-08-01',350);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('JavaScript','lunes,martes,miercoles','PM',15,'2006-09-11',150);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('Paginas web','martes,jueves','PM',10,'2006-08-08',250);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('Paginas web','sabado','AM',10,'2006-08-12',280);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('Paginas web','lunes,viernes','AM',10,'2006-08-21',200);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('Paginas web','lunes,martes,miercoles,jueves,viernes','AM',10,'2006-09-18',180);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('Paginas web','lunes,viernes','PM',10,'2006-09-25',280);
 insert into cursos (tema, dias,horario,clases,fechainicio,costo)
  values('JavaScript','lunes,martes,viernes,sabado','PM',12,'2006-09-18',150);

4- Una persona quiere inscribirse en un curso de "PHP" y sólo tiene disponibles los sábados. 
Localice los cursos de "PHP" que se dictan solamente los sábados:
 select * from cursos
  where tema like '%PHP%' and
  dias='sabado';

5- Otra persona quiere aprender a diseñar páginas web, tiene disponibles todas las mañanas excepto 
los miércoles. Vea si existe algún curso que cumpla con sus necesidades:
 select * from cursos
  where tema like '%paginas web%' and
  horario='AM' and
  dias not like '%miercoles%';

6- Otra persona necesita aprender JavaScript, tiene disponibles todos las tardes excepto los jueves 
y quiere un curso que no supere las 15 clases para el mes de setiembre. Busque algún curso para 
esta persona:
 select * from cursos
  where tema='%javascript%' and
  horario='PM' and
  not find_in_set('jueves',dias)>0 and
  clases<=15 and
  month(fechainicio)=9;



 

Otros problemas:
A) Trabaje con la tabla "inmuebles" en la cual una inmobiliaria almacena la información referente a 
sus departamentos en venta.

1- Elimine la tabla "inmuebles" si existe.

2- Cree la tabla "inmuebles":
 create table inmuebles(
  detalles set ('estacionamiento','terraza','pileta','patio','ascensor'),
  domicilio varchar(30),
  propietario varchar(30),
  precio decimal (9,2) unsigned
 );

3- Ingrese algunos registros:
 insert into inmuebles (detalles,precio) 
  values('terraza,pileta',50000);
 insert into inmuebles (detalles,precio) 
  values('patio,terraza,pileta',60000);
 insert into inmuebles (detalles,precio) 
  values('ascensor,terraza,pileta',80000);
 insert into inmuebles (detalles,precio) 
  values('patio,estacionamiento',65000);
 insert into inmuebles (detalles,precio) 
  values('estacionamiento',90000);

4- Seleccione todos los datos de los departamentos con terraza:
 select * from inmuebles
  where find_in_set('terraza',detalles)>0;

5- Seleccione los departamentos que no tiene ascensor:
 select * from inmuebles
  where detalles not like '%ascensor%';

6- Muestre los inmuebles que tengan terraza y pileta solamente:
   select *from inmuebles
   where detalles='terraza,pileta';

7- Muestre los inmuebles que no tengan ascensor y si estacionamiento, además de otros detalles:
 select * from inmuebles
  where detalles not like '%ascensor%' and
  detalles like '%estacionamiento%';

8- Ingrese un registro con valor inexistente en "detalles":
 insert into inmuebles (detalles,precio) 
  values('gimnasio',90000);

9 Ingrese un registro sin valor para "detalles":
 insert into inmuebles (domicilio,precio) 
  values('Colon 354',90000);


B) Una empresa de turismo vende paquetes de viajes a México y almacena la información referente a 
los mismos en una tabla llamada "viajes":

1- Elimine la tabla si existe.

2- Cree la tabla:
 create table viajes(
  codigo int unsigned auto_increment,
  nombre varchar(50),
  pension enum ('no','media','completa') not null,
  ciudades set ('Acapulco','DF','Cancun','Puerto Vallarta','Cuernavaca') not null,
  dias tinyint unsigned,
  salida date,
  precioporpersona decimal(8,2) unsigned,
  primary key(codigo)
 );

3- Ingrese los siguientes registros:
 insert into viajes (nombre,pension,ciudades,dias,salida)
  values ('Mexico mágico','completa','DF,Acapulco',15,'2005-12-01');
 insert into viajes (nombre,pension,ciudades,dias,salida)
  values ('Mexico especial','media','DF,Acapulco,Cuernavaca',28,'2005-05-10');
 insert into viajes (nombre,pension,ciudades,dias,salida)
  values ('Mexico unico','no','Acapulco,Puerto Vallarta',7,'2005-11-15');
 insert into viajes (nombre,pension,ciudades,dias,salida)
  values ('Mexico DF','no','DF',5,'2005-10-25');
 insert into viajes (nombre,pension,ciudades,dias,salida)
  values ('Mexico caribeño','completa','Cancun',15,'2005-10-25');

4- Ingrese un registro sin valor para el campo "ciudades":
 insert into viajes (nombre,pension,dias,salida)
  values ('Mexico maravilloso','completa',5,'2005-10-25');

5- Seleccione todos los viajes que incluyan "Acapulco":
 select * from viajes
  where find_in_set('acapulco',ciudades)>0;

6- Seleccione todos los viajes que no incluyan "Acapulco" y que incluyan pensión completa:
 select * from viajes
  where ciudades not like '%Acapulco%' and
  pension='completa';

7- Muestre los viajes que incluyan "Puerto Vallarta" o "Cuernavaca":
 select * from viajes
  where find_in_set('Cuernavaca',ciudades)>0 or
  find_in_set('Puerto Vallarta',ciudades)>0;

Retornar