martes, 19 de agosto de 2008

Bases de Datos Tercera Parte (ejercicios)

Continuando con el tutorial de bases de datos (ver parte 1, ver parte 2) en esta tercera parte me enfocare solo a la creación de ejercicios con sus respectivos resultados para que puedan servir de ejemplo.

11.- Obtener un listado de artículos, incluyendo por cada articulo los datos de su nombre, precio y el nombre de su fabricante.
Sentencia SQL:
SELECT art.NOMBRE, art.PRECIO, fab.NOMBRE Nombre_Fabricante from ARTICULOS art, fabricantes fab where art.CODFRABICANTE = fab.CODIGO;

Resultado de la consulta


12.- Obtener el precio medio de los productos de cada fabricante, mostrando el Código del fabricante.
Sentencia SQL:
select CODFRABICANTE, AVG(PRECIO) as promedio from ARTICULOS GROUP by CODFRABICANTE;
NOTA: En esta sentencia se ha incluido un nuevo concepto GROUP by que sirve para agrupar la información, es esta caso se agrupo por fabricantes los cuales son diferenciados por si ID o codigo de fabricante.

Resultado de la consulta


13.- Obtener el precio medio de los productos de cada fabricante, mostrando el nombre del fabricante.
Sentencia SQL:
select FABRICANTES.NOMBRE, AVG(PRECIO) as promedio from ARTICULOS , FABRICANTES WHERE ARTICULOS.CODFRABICANTE = FABRICANTES.CODIGO GROUP by FABRICANTES.NOMBRE;
Resultado de la consulta


14.- Obtener el nombre de los fabricantes que ofrezcan productos cuyo precio medio sea igual a $5445.

Nota: He seleccionado la cantidad de $5445 porque la consulta anterior me devolvió los valores promedio y en consultas anteriores se que insumos nacionales posee mas de un articulo. De lo contrario no se reflejaría la sentencia si un fabricante posee un solo articulo puesto que su promedio seria el mismo valor del articulo
Sentencia SQL:

select fab.NOMBRE as EMPRESA from fabricantes fab inner JOIN articulos art on fab.CODIGO = art.CODFRABICANTE GROUP BY EMPRESA HAVING AVG(precio) = 5445;


Descripción ampliada: (Aqui he incluido nuevos comandos)

* A la tabla Fabricantes le he asignado un alias fab (para no escribir fabrica.nombre)
* A la tabla Articulos le he asignado un alias art (para no escribir articulos.codfrabicante)
* Al campo Fabrica.NOMBRE ó fab.NOMBRE le asige un alias EMPRESA.
* INNER JOIN devuelve todas las filas de ambas tablas, donde hay un Claves en común.
(En las consultas anteriores he escrito todos los componetes de ambas tablas ejemplo:
Select articulos.nombre , articulos.codfrabicante, articulos.precio, fabricantes.codigo, fabricantes.nombre from articulos, fabricantes where ........
* GROUP BAY agrupa los resultado por un nombre de campo.
* HAVING similar al where pero es tratado como función.
* AVG devuelve el promedio.
Resultado de la consulta



14.- Obtener el nombre y precio del producto mas barato.
Sentencia SQL:
select nombre, precio from articulos order by precio limit 1;
Resultado de la consulta


Nota: Podríamos haber hecho subconsultas en el where y enredarnos bastante pero aquí lo mejor es utilizar LIMIT por defecto el ordenamiento es ascendente es por ello que nos entrega el precio mas bajo... si ordenamos descendente "order by nombre desc" nos entregara el producto mas caro.

16.- Obtener una lista con los nombres y precio de los artículos mas caro de cada proveedor (Incluyendo el nombre del proveedor)
Sentencia SQL:
select a.nombre, a.precio, f.NOMBRE as Fabricante from articulos a inner join fabricantes f on a.codfrabicante = codigo group by f.nombre order by precio desc;
Resultado de la consulta


Nota: Aquí nuevamente utilice el limit en orden descendente y además agrupe por fabricantes para mostrar sus productos mas caros.. el inner join me ayuda a traer los registros de la tabla relacionada (fabricantes) el as Fabricantes es solo para darle nombre a la columna.

17.- Añadir un nuevo producto del fabricante 2 lampara USB $7990.
Sentencia SQL:
insert into articulos (codigoart, nombre, precio, codfrabicante)
values (114, 'Lampara USB', 7990, 2);

Resultado de la consulta
Para ver el resultado ahora aremos un select del fabricante 2 con sus productos

select f.codigo, f.nombre, a.nombre, a.precio from fabricantes f inner join articulos a on f.codigo = codfrabicante where f.codigo = 2;

(Este select es muy completo pero solo de referencia para mostrar el registro insertado)

18.- Cambiar el nombre del articulo 108 a Impresora Láser.
select * from articulos where codigoart = 108;

Sentencia SQL:
UPDATE articulos set nombre = 'Impresora Laser' where codigoart = 8;
Resultado de la consulta


19.- Aplicar un descuento de un 10% a todos los productos.
Sentencia SQL:
update articulos set precio = precio * 0.9;

Nota: No necesita explicación todos los productos fueron rebajados en un 10%.

20.- Aplicar un descuento de un $1777 cuyo precio sea mayor o igual $20000.
Sentencia SQL:
update articulos set precio = precio - 1777 where precio >= 20000;

Eso es todo
... Pronto segundo set de 20 ejercicios mas.


lunes, 18 de agosto de 2008

Google busca más seguridad a través de la criptografía

La compañía ha implementado KeyCzar, una herramienta de código abierto que permite a los desarrolladores utilizar la codificación en sus aplicaciones.

El objetivo final de KeyCzar es ofrecer a los desarrolladores una herramienta segura y fiable que pueda insertarse fácilmente en su código. Como ha destacado Steve Weiss, ingeniero de software de seguridad de Google, que ha ayudado a desarrollar KeyCzar, “es difícil utilizar la criptografía y, de hacerse mal, puede crear serios agujeros de seguridad”.

Weiss ha explicado que los errores comunes, como utilizar algoritmos no actualizados o no ser capaz de alternar con nuevas claves de codificación pueden llevar a que las herramientas sean completamente inútiles. El objetivo de KeyCzar es simplificar estos actos y permitir que los desarrolladores no sólo coloquen las herramientas de codificación en su lugar, sino que gestionen y cambien las claves si fuera necesario.

Es decir que KeyCzar facilita la rotación y suspensión de las claves sin que el desarrollador tenga que preocuparse por la compatibilidad o que los cambios afecten al código fuente.

Google ha advertido, no obstante, que KeyCzar no debe verse como un completo sistema de codificación, ya que no contiene librerías ni ejecuta la mayoría de las tareas de codificación, pero es un primer paso.

La primera versión de KeyCzar está disponible para su descarga desde el servicio Google Code de la compañía. La herramienta está actualmente limitada a los lenguajes de programación Java y Python, pero Google ya está preparando una versión para C++.


(fuente www.vnunet.es)

domingo, 17 de agosto de 2008

Lenguage de Manipulación de Datos (LMD) Parte 2 Tutorial Bases de Datos

Continuando con el tutorial de bases de datos (ver la primera parte) es esta segunda parte introduciremos registros a nuestras bases de datos para luego trabajar manipulando esos registros con los archi conocidos comandos SQL INSERT, SELECT, UPDATE y DELETE..

Paso 1: INSERT (estos datos son de demostracción ).
ingresaremos 10 registros en la tabla FABRICANTES.

INSERT INTO `FABRICANTES`
(CODIGO, NOMBRE)
VALUES
(1, 'Isumos Nacionales y cía.'),
(2, 'HP Computer'),
(3, 'Dell Computer Inc.'),
(4, 'Acer internacional'),
(5, 'Genius'),
(6, 'PC Tronix'),
(7, 'Sony'),
(8, 'Kensignton'),
(9, 'Logitech'),
(10, 'Importadora Nacional');

PASO 2 INSERT a la tabla Articulos

INSERT INTO `ARTICULOS`
(CODIGOART, NOMBRE, PRECIO, CODFRABICANTE)
VALUES
(100, 'Mouse USB', 4700, 5),
(101, 'Notebook DELL', 490000, 3),
(102, 'Torre 50 DVD +R', 7900, 1),
(103, 'Impresora Laser Color', 157000, 2),
(104, 'Base para notebook', 26990, 8),
(105, 'Computador Ensamblado PIV', 199990, 10),
(106, 'Teclado Multimedia PS/2', 4990, 6),
(107, 'Notebook Aspire 5610', 520000, 4),
(108, 'Webcam Sony', 13990, 7),
(109, 'Audifonos y microfono Gamer', 23000, 9),
(110, 'lampara USB notebook', 10000, 5),
(111, 'mouse pad', 990, 10),
(112, 'Key PAD', 2990, 1);

Ahora si como ya podemos registros podremos comenzar a trabajar con el LMD.
Comenzando con los Ejercicios

1.- Obtener los nombres de los productos de la tabla artículos.

Sentencia SQL:
select NOMBRE from ARTICULOS;
Resultado de la consulta

2.- Obtener los nombres y los precios de los productos de la tabla artículos.

Sentencia SQL:
select NOMBRE, PRECIO from ARTICULOS;
Resultado de la consulta

3.- Obtener los nombres y los precios de los productos de la tabla artículos cuyos precios sean mayores a $15000.

Sentencia SQL:
select NOMBRE, PRECIO from ARTICULOS where Precio > 15000;
Resultado de la consulta


4.- Obtener los nombres y los precios de los productos de la tabla artículos cuyos precios esten entre $5000 y $35000 ambas cantidades incluidas. Realizar 2 Consultas una utilizando AND y la otra utilizando BETWEEN.

Sentencia SQL:
select NOMBRE, PRECIO from ARTICULOS where Precio >= 5000 and Precio <=35000;
Resultado de la consulta

Insertemos 2 nuevos registros con los precios mencionados para que al ejecutar el Select veamos si realmente considera los valores $5000 y $35000 (:-D .... jeje).

INSERT INTO `ARTICULOS`
(CODIGOART, NOMBRE, PRECIO, CODFRABICANTE)
VALUES
(112, 'Limpiador de Pantallas', 5000, 8),
(1113, 'Mochila de Notebook', 35000, 6);


La segunda sentencia sería:
select NOMBRE, PRECIO from ARTICULOS where Precio BETWEEN 5000 and 35000;

(Esto devolverá el mismo resultado anterior.... compruébenlo)

5.- Obtener los nombres y los precios de los productos de la tabla artículos aumentando los precios en un 33%.

Sentencia SQL:
select NOMBRE, PRECIO + (PRECIO * 0.33) from ARTICULOS;
Resultado de la consulta

Ahora a tomar la calculadora y comprobar el aumento de los precios en un 33%.

Antes de seguir con el siguiente ejemplo explicare algo en pocas lineas, si nos fijamos en el ejemplo 4 la tabla correspondiente a precios dice ADD como encabezado, en otros motores de bases de datos como mysql pondría un encabezado como este PRECIO + (PRECIO * 0.33) o tal vez en SQL server diría default, aclarando el concepto es que el motor de bases de datos asume un nombre por defecto que obviamente ya no es PRECIO.

Para mostrar un nombre personalizado debemos asignarle un nombre a la operación agregando la palabra AS en el select. (En el ejemplo pondré el nombre de aumentar_porcentaje al encabezado).
SELECT NOMBRE, PRECIO + (PRECIO * 0.33) AS aumentar_porcentaje from ARTICULOS;


6.- Seleccionar el precio (promedio) de todos los artículos.
Aquí entraremos a otros conceptos de SQL ya que existen diversas maneras para sacar el promedio considero que la mejor opcion es utilizar la palabra AVERANGE (Devuelve el valor medio de una columna) al encabezado de la columna le pondremos promedio.
Sentencia SQL:
select AVG(PRECIO) as promedio from ARTICULOS;
Resultado de la consulta

(Personalmente desconocida esta función sql... agradezco a mis colegas por su aporte)

7.- Seleccionar el precio (promedio) de todos los artículos cuyo codigo de fabricante sea 2.
Sentencia SQL:
select AVG(PRECIO) as promedio_ID2 from ARTICULOS where CODFRABICANTES = 2;
Resultado de la consulta
Nota: para los que siguen el tutorial desde la creación de las tablas, me acabo de dar cuenta que en lugar de escribir CODFABRICANTE escribí CODFRABICANTE por lo que seguiré de esa forma en las consultas)

8.- Obtener el número de artículos cuyo precio sea menor o igual a $22000.
Sentencia SQL:
SELECT COUNT(*) as total_articulos FROM articulos where precio <= 22000;
Resultado de la consulta

COUNT (*) función que devuelve el número de filas seleccionadas en una consulta.


9.- Obtener el nombre y precio de los artículos cuyo precio sea mayor o igual a $22000 y ordenararlos descendente por precio, y luego ascendentemente por nombre .

Sentencia SQL:
SELECT NOMBRE, PRECIO from articulos where precio >=22000 order by PRECIO DESC;
Resultado de la consulta

Precios ordenados de forma descendente
SELECT NOMBRE, PRECIO from articulos where precio >=22000 order by NOMBRE ASC;
Nombres ordenados de forma Ascendente

10.- Obtener un listado completo de artículos, incluyendo por cada articulo todos los datos del artículo (todas las columnas) y de su fabricante.
Sentencia SQL:
SELECT art.CODIGOART, art.NOMBRE, art.PRECIO, art.CODFRABICANTE, fab.CODIGO, fab.NOMBRE from ARTICULOS art, fabricantes fab where art.CODFRABICANTE = fab.CODIGO;

Nota: En esta sentencia he asignado los alias art y fab esto con el fin de evitar escribir los nombres completos de las tablas para cada campo. (ejemplo articulos.NOMBRE = art.NOMBRE)
Resultado de la consulta

NOTA: Esta consulta nos devuelve toda la información almacenada en nuestras tablas aunque existe un pero.... (:-O)

Poseemos 2 campos llamado Nombre el de Fabricantes.Nombre y el Articulos.Nombre si ampliamos la imagen veremos a se le asigno automáticamente el encabezado NOMBRE1 a los Fabricantes, si yo implemento esto tal cual en PHP o otro lenguaje de programación tal vez se nos genere un error por que el lenguaje no discriminara la diferencia de los campos, para ello crearmos un alias a ese nombre de campo.

Sentencia SQL:
SELECT art.CODIGOART, art.NOMBRE, art.PRECIO, art.CODFRABICANTE, fab.CODIGO, fab.NOMBRE Nombre_Fabricante from ARTICULOS art, fabricantes fab where art.CODFRABICANTE = fab.CODIGO;

Ahora nuestro campo Nombre.Fabricante se mostrara como Nombre_Fabricante.

Clic sobre imagen para ampliar

Ahora si he concluido esta segunda parte del tutorial ... espero les sea de ayuda... publiquen sus comentarios.

Próximamente la tercera parte con 10 ejemplos más.

ir a tercera parte (ánimo si no es tan complicado)