Mostrando entradas con la etiqueta AND. Mostrar todas las entradas
Mostrando entradas con la etiqueta AND. Mostrar todas las entradas

miércoles, 19 de diciembre de 2012

Resolución ejercicio final (29) - Listar ventas de artículos entre fechas a un cliente determinado a partir de su id.




RESOLUCIÓN DEL PUNTO 27 DEL ENUNCIADO DEL EJERCICIO FINAL.

En esta entrada resolveremos el punto 27:
Listar ventas de artículos entre fechas a un cliente determinado a partir de su id.


Se trata de generar un listado con las cantidades de artículos vendidos entre dos fechas.

Es una consulta a dos o tres tablas dependiendo de si se desea obtener el id del artículo (2 tablas) o también su descripción (3 tablas).


Se filtrarán mediante la cláusula WHERE las líneas de factura que no cumplan con las fechas, luego estos datos serán agrupados mediante el id del artículo, a este filtro se le añadirá mediante una Y lógica (AND) la condición para que salgan datos solo de un cliente por id.

select lin_fv.id_articulo, articulos.nombre, sum(lin_fv.cantidad) as total
from lin_fv inner join cab_fv
on lin_fv.id_fv = cab_fv.id_fv
left join articulos
on lin_fv.id_articulo = articulos.id_articulo
where cab_fv.fecha between "2012-11-01" and "2012-12-01" and
cab_fv.id_cliente = 1
group by id_articulo
order by total desc;


NOTA: Se ordena el resultado de forma descendiente, mediante ORDER BY TOTAL DESC, para tener de primero el artículo más vendido.

viernes, 7 de diciembre de 2012

Resolución ejercicio final (12) - Listar Facturas entre fechas.



RESOLUCIÓN DEL PUNTO 9 DEL ENUNCIADO DEL EJERCICIO FINAL.

En esta entrada resolveremos el punto 9:
Listar Facturas entre fechas.



Se trata de filtrar cabeceras de factura entre fechas, indicando una fecha mayor y una menor.

En este caso se pueden comparar las fechas con los operadores mayor o igual que o menor o igual que.

Otra opción es utilizar el operador BETWEEN.

Opción 1 - Mayor o igual que y menor o igual que:

select * from cab_fv where fecha >= "2012-11-22" AND  fecha <= "2012-11-22"; 



NOTA: Se ha usado la comparación mayor o igual y menor o igual, aunque se podrían usar otras comparaciones. Se ha hecho así porque la segunda opción, mediante BETWEEN, implica que la primera fecha debe ser menor que la segunda y ambas inclusive salen en el resultado.


Opción 2 - Mayor o igual que y menor o igual que:

select * from cab_fv where fecha BETWEEN "2012-11-22" AND "2012-11-22"; 



NOTA: Se debe hacer notar que para indicar fechas, se pasa una cadena a la consulta en la que la fecha se indica de la forma año-mes-dia. De la siguiente manera "AAAA-MM-DD". Este formato de fechas es convertido entre tipo cadena y tipo fecha directamente por MySQL.

jueves, 6 de diciembre de 2012

Resolución ejercicio final (9) - Crear un único listado que incluya los emails de Clientes y Proveedores.


RESOLUCIÓN DEL PUNTO 6 DEL ENUNCIADO DEL EJERCICIO FINAL.

En esta entrada resolveremos el punto 6:
Crear un único listado que incluya los emails de Clientes y Proveedores.



Al igual que al localizar los clientes sin email, para localizar los clientes con email será preciso comprobar dos condiciones.

Por un lado que el campo no es nulo.
select * from clientes where email is not NULL; 

Sin embargo con esta condición aparecerán en el listado los clientes a los que se les ha borrado el email o a los que se les ha inicializado el email a una cadena vacía.

Por lo tanto será preciso comprobar también aquellos campos que sean distintos de la cadena vacía.

select * from clientes where email <> "";

Para que la consulta conjunta funcione es preciso unirlas mediante el operador AND.

select nombre, email from clientes 
    where email is not NULL AND email <> "";



Pero el enunciado pide un único listado en el que se incluyan también los emails de los proveedores.

Para obtener un listado de emails de proveedores se usará la siguiente sentencia:


select nombre, email from proveedores
    where email is not NULL AND email <> "";


Para responder correctamente al enunciado, se deberá obtener una salida en la que se muestren los resultados de las dos consultas anteriores.

Para obtener ese resultado es posible unir las dos consultas mediante el operador UNION ALL o UNION (dependiendo de si deseamos que se muestren los datos repetidos o no.

NOTA: En este caso al querer obtener un listado de emails, no sería lógico obtener datos repetidos, por lo que usaremos el operador UNION.


select nombre, email from proveedores
    where email is not NULL AND email <> ""
UNION
select nombre, email from clientes
    where email is not NULL AND email <> "";



NOTA: En la imagen anterior se ven, en un recuadro en rojo los emails correspondientes a los proveedores, y en un recuadro verde parte de los emails correspondientes a los clientes.

Resolución ejercicio final (8) - Listar Proveedores sin email.


RESOLUCIÓN DEL PUNTO 5 DEL ENUNCIADO DEL EJERCICIO FINAL.


En esta entrada resolveremos el punto 5:
Listar Proveedores sin email.





El proceso para localizar a los proveedores sin email, es idéntico al realizado para obtener los clientes sin email.

Por lo tanto el campo podrá contener el valor NULL  o el valor cadena vacía, por lo tanto será necesario utilizar el operador OR.

select * from clientes where email = "" OR email is NULL;


En este caso el resultado es un Empty set (un DataSet vacío), debido a que todos los clientes tienen email.

Resolución ejercicio final (8)



RESOLUCIÓN DEL PUNTO 5 DEL ENUNCIADO DEL EJERCICIO FINAL.


En esta entrada resolveremos el punto 5:
Listar Clientes con email.





Al igual que al localizar los clientes sin email, para localizar los clientes con email será preciso comprobar dos condiciones.

Por un lado que el campo no es nulo.
select * from clientes where email is not NULL; 

Sin embargo con esta condición aparecerán en el listado los clientes a los que se les ha borrado el email o a los que se les ha inicializado el email a una cadena vacía.

Por lo tanto será preciso comprobar también aquellos campos que sean distintos de la cadena vacía.

select * from clientes where email <> "";

Para que la consulta conjunta funcione es preciso unirlas mediante el operador AND.

select * from clientes where email is not NULL AND email <> "";