Trabajamos con las tablas "libros" de una librería.
No nos interesa el precio exacto de cada libro, sino si el precio es menor o mayor a $50. Podemos utilizar estas sentencias:
select titulo from libros where precio<50; select titulo from libros where precio >=50;
En la primera sentencia mostramos los libros con precio menor a 50 y en la segunda los demás.
También podemos usar la función "if".
"if" es una función a la cual se le envían 3 argumentos: el segundo y tercer argumento corresponden a los valores que retornará en caso que el primer argumento (una expresión de comparación) sea "verdadero" o "falso"; es decir, si el primer argumento es verdadero, retorna el segundo argumento, sino retorna el tercero.
Veamos el ejemplo:
select titulo, if (precio>50,'caro','economico') from libros;
Si el precio del libro es mayor a 50 (primer argumento del "if"), coloca "caro" (segundo argumento del "if"), en caso contrario coloca "economico" (tercer argumento del "if").
Veamos otros ejemplos.
Queremos mostrar los nombres de los autores y la cantidad de libros de cada uno de ellos; para ello especificamos el nombre del campo a mostrar ("autor"), contamos los libros con "autor" conocido con la función "count()" y agrupamos por nombre de autor:
select autor, count(*) from libros group by autor;
El resultado nos muestra cada autor y la cantidad de libros de cada uno de ellos. Si solamente queremos mostrar los autores que tienen más de 1 libro, es decir, la cantidad mayor a 1, podemos usar esta sentencia:
select autor, count(*) from libros group by autor having count(*)>1;
Pero si no queremos la cantidad exacta sino solamente saber si cada autor tiene más de 1 libro, podemos usar "if":
select autor, if (count(*)>1,'Más de 1','1') from libros group by autor;
Si la cantidad de libros de cada autor es mayor a 1 (primer argumento del "if"), coloca "Más de 1" (segundo argumento del "if"), en caso contrario coloca "1" (tercer argumento del "if").
Queremos saber si la cantidad de libros por editorial supera los 4 o no:
select editorial, if (count(*)>4,'5 o más','menos de 5') as cantidad from libros group by editorial order by cantidad;
Si la cantidad de libros de cada editorial es mayor a 4 (primer argumento del "if"), coloca "5 o más" (segundo argumento del "if"), en caso contrario coloca "menos de 5" (tercer argumento del "if").
PROBLEMA RESUELTO
Trabajamos con las tablas "libros" de una librería.
Eliminamos la tabla, si existe.
Creamos la tabla:
create table libros( codigo int unsigned auto_increment, titulo varchar(40) not null, autor varchar(30), editorial varchar(30), precio decimal(5,2) unsigned, primary key (codigo) );
Ingresamos algunos registros:
insert into libros (titulo, autor,editorial,precio) values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',50.5); insert into libros (titulo, autor,editorial,precio) values('Alicia a traves del espejo','Lewis Carroll','Emece',25); insert into libros (titulo, autor,editorial,precio) values('El aleph','Borges','Paidos',15); insert into libros (titulo, autor,editorial,precio) values('Matemática estas ahi','Paenza','Paidos',10); insert into libros (titulo, autor,editorial) values('Antologia','Borges','Paidos'); insert into libros (titulo, editorial) values('El gato con botas','Paidos'); insert into libros (titulo, autor,editorial,precio) values('Martin Fierro','Jose Hernandez','Emece',90);
No nos interesa el precio exacto de cada libro, sino si el precio es menor o mayor a $50. Podemos utilizar estas sentencias:
select titulo from libros where precio<50; select titulo from libros where precio >=50;
En la primera sentencia mostramos los libros con precio menor a 50 y en la segunda los demás.
Usamos la función "if":
select titulo, if (precio>50,'caro','economico') from libros;
Si el precio del libro es mayor a 50 (primer argumento del "if"), coloca "caro" (segundo argumento del "if"), en caso contrario coloca "economico" (tercer argumento del "if").
Queremos mostrar los nombres de los autores y la cantidad de libros de cada uno de ellos; para ello especificamos el nombre del campo a mostrar ("autor"), contamos los libros con "autor" conocido con la función "count()" y agrupamos por nombre de autor:
select autor, count(*) from libros group by autor;
El resultado nos muestra cada autor y la cantidad de libros de cada uno de ellos. Si solamente queremos mostrar los autores que tienen más de 1 libro, es decir, la cantidad mayor a 1, podemos usar esta sentencia:
select autor, count(*) from libros group by autor having count(*)>1;
Pero si no queremos la cantidad exacta sino solamente saber si cada autor tiene más de 1 libro, podemos usar "if":
select autor, if (count(*)>1,'Más de 1','1') from libros group by autor;
Si la cantidad de libros de cada autor es mayor a 1 (primer argumento del "if"), coloca "Más de 1" (segundo argumento del "if"), en caso contrario coloca "1" (tercer argumento del "if").
Podemos ordenar por la columna del "if":
select autor, if (count(*)>1,'Más de 1','1') as cantidad from libros group by autor order by cantidad;
Para saber si la cantidad de libros por editorial supera los 4 o es menor:
select editorial, if (count(*)>4,'5 o más','menos de 5') as cantidad from libros group by editorial order by cantidad;
Si la cantidad de libros de cada editorial es mayor a 4 (primer argumento del "if"), coloca "5 o más" (segundo argumento del "if"), en caso contrario coloca "menos de 5" (tercer argumento del "if").
Además, la sentencia ordena la salida por el alias "cantidad".
PROBLEMA PROPUESTO
Una empresa registra los datos de sus empleados en una tabla llamada "empleados". 1- Elimine la tabla "empleados" si existe: 2- Cree la tabla: create table empleados( documento char(8) not null, nombre varchar(30) not null, sexo char(1), domicilio varchar(30), fechaingreso date, fechanacimiento date, sueldobasico decimal(5,2) unsigned, primary key(documento) ); 3- Ingrese algunos registros: insert into empleados (documento,nombre,sexo,domicilio,fechaingreso,fechanacimiento,sueldobasico,hijos) values ('22333111','Juan Perez','m','Colon 123','1990-02-01','1970-05-10',550,0); insert into empleados (documento,nombre,sexo,domicilio,fechaingreso,fechanacimiento,sueldobasico,hijos) values ('25444444','Susana Morales','f','Avellaneda 345','1995-04-01','1975-11-06',650,2); insert into empleados (documento,nombre,sexo,domicilio,fechaingreso,fechanacimiento,sueldobasico,hijos) values ('20111222','Hector Pereyra','m','Caseros 987','1995-04-01','1965-03-25',510,1); insert into empleados (documento,nombre,sexo,domicilio,fechaingreso,fechanacimiento,sueldobasico,hijos) values ('30000222','Luis LUque','m','Urquiza 456','1980-09-01','1980-03-29',700,3); insert into empleados (documento,nombre,sexo,domicilio,fechaingreso,fechanacimiento,sueldobasico,hijos) values ('20555444','Maria Laura Torres','f','San Martin 1122','2000-05-15','1965-12-22',400,3); insert into empleados (documento,nombre,sexo,domicilio,fechaingreso,fechanacimiento,sueldobasico,hijos) values ('30000234','Alberto Soto','m','Peru 232','2003-08-15','1989-10-10',420,1); insert into empleados (documento,nombre,sexo,domicilio,fechaingreso,fechanacimiento,sueldobasico,hijos) values ('20125478','Ana Gomez','f','Sarmiento 975','2004-06-14','1976-09-21',350,2); insert into empleados (documento,nombre,sexo,domicilio,fechaingreso,fechanacimiento,sueldobasico,hijos) values ('24154269','Ofelia Garcia','f','Triunvirato 628','2004-09-23','1974-05-12',390,0); insert into empleados (documento,nombre,sexo,domicilio,fechaIngreso,fechaNacimiento,sueldoBasico,hijos) values ('304154269','Oscar Torres','m','Hernandez 1234','1996-04-10','1978-05-02',400,0); 4- Es política de la empresa festejar cada fin de mes, los cumpleaños de todos los empleados que cumplen ese mes. Si los empleados son de sexo femenino, se les regala un ramo de rosas, si son de sexo masculino, una corbata. La secretaria de la Gerencia necesita saber cuántos ramos de rosas y cuántas corbatas debe comprar para el mes de mayo: 5- Además, si el empleado cumple 10,20,30,40... años de servicio, se le regala una placa recordatoria. La secretaria de Gerencia necesita saber la cantidad de años de servicio que cumplen los empleados que ingresaron en el mes de abril para encargar dichas placas: 6- La empresa paga un sueldo adicional por hijos a cargos. para un sueldo básico menor o igual a $500 el salario familiar por hijo es de $300, para un sueldo superior, el monto es de $150 por hijo. Muestre el nombre del empleado, el sueldo básico, la cantidad de hijos a cargo, el valor del salario por hijo, el valor total del salario familiar y el sueldo final con el salario familiar incluido de todos los empleados con hijos a cargo:
Otros problemas:
A) La empresa que provee de luz a los usuarios de un municipio, almacena en una tabla algunos datos de los usuarios y el monto a cobrar: - documento, - domicilio, - monto a pagar, - fecha de vencimiento. Si la boleta no se paga hasta el día del vencimiento, inclusive, se incrementa al monto, un 1% del monto cada día de atraso. 1- Elimine la tabla "luz", si existe. 2- Cree la tabla: create table luz( documento char(8) not null, domicilio varchar(30), monto decimal(5,2) unsigned, vencimiento date ); 3- Ingrese algunos registros con fechas de vencimiento anterior a la fecha actual (vencidas) y posteriores a la fecha actual (no vencidas). 4- Ingrese para el mismo usuario (igual documento) 2 boletas vencidas. 5- Muestre el documento del usuario, la fecha de vencimiento, la fecha actual (en que efectúa el pago) y si debe pagar recargo o no.: La función "datediff()" retorna la cantidad de días de diferencia entre las fecha enviadas como argumento, si el primer argumento es anterior al segundo, el valor retornado es negativo, por ello, colocamos como condición que el valor retornado por esta función sea mayor a cero, es decir, que la fecha actual sea posterior a la del vencimiento, así las vencidas mostrarán "Si" y las que no hayan vencido "No". 6- Si un usuario tiene más de una boleta vencida se le corta el servicio. Muestre el documento y la cantidad de boletas vencidas de cada usuario que tenga boletas vencidas y muestre un mensaje "Cortar servicio" si tiene 2 o más vencidas: B) Un profesor guarda los promedios de sus alumnos de un curso en una tabla llamada "alumnos". 1- Elimine la tabla si existe. 2- cree la tabla: create table alumnos( legajo char(5) not null, nombre varchar(30), promedio decimal(4,2) ); 3- Ingrese los siguientes registros: insert into alumnos values(3456,'Perez Luis',8.5); insert into alumnos values(3556,'Garcia Ana',7.0); insert into alumnos values(3656,'Ludueña Juan',9.6); insert into alumnos values(2756,'Moreno Gabriela',4.8); insert into alumnos values(4856,'Morales Hugo',3.2); 4- Si el alumno tiene un promedio superior o igual a 4, muestre un mensaje "aprobado" en caso contrario "reprobado": 5- Es política del profesor entregar una medalla a quienes tengan un promedio igual o superior a 9. Muestre los nombres y promedios de los alumnos y un mensaje "medalla" a quienes cumplan con ese requisito: C) Una playa de estacionamiento guarda cada día los datos de los vehículos que ingresan a la playa en una tabla llamada "vehiculos". 1- Elimine la tabla, si existe. 2- Cree la tabla: create table vehiculos( patente char(6) not null, tipo char(4), horallegada time not null, horasalida time, primary key(patente,horallegada) ); 3- Ingrese algunos registros: insert into vehiculos (patente,tipo,horallegada,horasalida) values('ACD123','auto','8:30','9:40'); insert into vehiculos (patente,tipo,horallegada,horasalida) values('AKL098','auto','8:45','15:10'); insert into vehiculos (patente,tipo,horallegada,horasalida) values('HGF123','auto','9:30','18:40'); insert into vehiculos (patente,tipo,horallegada,horasalida) values('DRT123','auto','15:30',null); insert into vehiculos (patente,tipo,horallegada,horasalida) values('FRT545','moto','19:45',null); insert into vehiculos (patente,tipo,horallegada,horasalida) values('GTY154','auto','20:30','21:00'); 4- Muestre la patente, la hora de llegada y de salida de todos los vehículos, más una columna que calcule la cantidad de horas que estuvo cada vehículo en la playa, sin considerar los que aún no se retiraron de la playa: 5- Se cobra 1 peso por hora. Pero si un vehículo permanece en la playa 4 horas, se le cobran 3 pesos, es decir, no se le cobra la cuarta hora; si está 8 horas, se cobran 6 pesos, y así sucesivamente. Muestre la patente, la hora de llegada y de salida de todos los vehículos, más la columna que calcule la cantidad de horas que estuvo cada vehículo en la playa (sin considerar los que aún no se retiraron de la playa) y otra columna utilizando "if" que muestre la cantidad de horas gratis: D) Un teatro con varias salas guarda la información de las entradas vendidas en una tabla llamada "entradas". 1- Elimine la tabla, si existe. 2- Cree la tabla: create table entradas( sala tinyint unsigned, fecha date, hora time, capacidad smallint unsigned, entradasvendidas smallint unsigned, primary key(sala,fecha,hora) ); 3- Ingrese algunos registros: insert into entradas values(1,'2006-05-10','20:00',300,50); insert into entradas values(1,'2006-05-10','23:00',300,250); insert into entradas values(2,'2006-05-10','20:00',400,350); insert into entradas values(2,'2006-05-11','20:00',400,380); insert into entradas values(2,'2006-05-11','23:00',400,400); insert into entradas values(3,'2006-05-12','20:00',350,350); insert into entradas values(3,'2006-05-12','22:30',350,100); insert into entradas values(4,'2006-05-12','20:00',250,0); 4- Muestre todos los registros y un mensaje si las entradas para una función están agotadas: 5- Muestre todos los datos de las funciones que tienen vendidad entradas y muestre un mensaje si se vendió más o menos de la mitad de la capacidad de la sala:
buen dia, alguien tendrá los resultados de estos ejercicios
ResponderEliminarProfesor Gurrola no use esta pagina para dejar trabajos atte:Jose Luis Salazar Serrano :v
ResponderEliminarNo c crea profe me hackiaron :v
EliminarNo c crea profe me hackiaron :v
EliminarProfesor Gurrola no use esta pagina para dejar trabajos atte:Jose Luis Salazar Serrano :v
ResponderEliminar