Informática: Partes de Una PC

Resumen de Instrucciones del Lenguaje SQL Cursos Tutorial SQL

Resumen de Instrucciones del Lenguaje SQL

Sentencias SQL en Visual Basic

logo sql

 I n d i c e de los temas tratados:
1. Introducción

2. ¿Qué es SQL?
3. La sentencia select y la cláusula from
4. Programación SQL desde el control data
5. Eliminación Dinámica De Registros
6. Contar Registros
7. Grupos De Registros
8. Combinación De Datos

  1. Introducción
    Visual Basic es un lenguaje de programación de propósito general, con una gran potencia en toda su estructura. Su implementación en el sistema operativo Windows y sus herramientas visuales, han hecho de este lenguaje un líder indiscutible en lo que a desarrollo de aplicaciones se refiere. Con la versión 3.0. se implementó la gestión de bases de datos a muy alto nivel, pudiendo gestionar bases de datos de tipo Access, Paradox, dBASE, FoxPro, etc.

Este paso de gigante ha hecho de Visual Basic uno de los lenguajes favoritos por los desarrolladores de aplicaciones de bases de datos, en especial el hecho de que Visual Basic implemente el lenguaje SQL, uno de los más potentes y sencillos lenguajes de bases de datos.

  1. ¿Qué es sql?

SQL (Structured Query Language ó Lenguaje Estructurado de Consulta), es un lenguaje bastante sencillo, principalmente orientado a bases de datos y, sobre todo, al manejo de consultas. Visual Basic incorpora esta extensión junto a nuestras bases de datos, obteniendo potentes resultados. De hecho, las consultas que se realizan en Access, están desarrolladas o basadas en este lenguaje, por lo que su implementación en Visual Basic no es complicada.

El objetivo principal de SQL es la realización de consultas y cálculos con los datos de una o varias tablas.

Consejos Para Escribir Mandatos En SQL
He aquí una serie de consejos (a veces normas), que hay que tener en cuenta a la hora de escribir mandatos SQL en nuestras aplicaciones en Visual Basic:
1. Un mandato en SQL se expresa en una cadena de caracteres o String.
2. Dicho mandato se puede escribir en la propiedad RecordSource de un control Data (más adelante, podremos prescindir del control Data para realizar nuestras consultas), con el fin de crear una consulta en la interfaz.
3. Los nombres de los campos especificados (y de las tablas), que contengan más de una palabra, han de encerrarse entre corchetes ([nombre]). Como norma general, se suelen escribir siempre entre corchetes.
4. Para especificar un determinado campo de una determinada tabla, se ha de escribir primero el nombre de la tabla, un punto y, a continuación, el nombre del campo
(nombre_tabla.nombre_campo).
5. Al especificar una expresión de búsqueda, si ésta se refiere a una expresión de caracteres, éstos han de encerrarse entre comillas simples (‘expresión_a_buscar’).
6. Para especificar una fecha en una búsqueda, ésta debe encerrarse entre signos numeral
(#fecha#) en Access, Dbase X, etc., y entre comillas simples (‘fecha’) para bases Sql Server, Informix, etc.
7. Si se utiliza la propiedad RecordSource del control Data, para crear nuestras consultas en SQL, tras introducir el mandato SQL (siempre como una expresión de cadena) es necesario refrescar el control Data (control_data.Refresh).

Mandato Sql Estándar

El lenguaje SQL está compuesto por una serie de sentencias y de cláusulas muy reducidas en número, pero muy potentes en efectividad. De entre todas las palabras, existen cuatro que son las más utilizadas, estando compuestas por una sentencia y por tres cláusulas:

SELECT lista_campos FROM lista_tablas [WHERE criterios [ORDER BY lista_campos]]

  1. La sentencia select y la cláusula from

La sentencia SELECT «selecciona» los campos que conformarán la consulta, es decir, que establece los campos que se visualizarán o compondrán la consulta. El parámetro ‘lista_campo’ está compuesto por uno o más nombres de campos, separados por comas, pudiéndose especificar también el nombre de la tabla a la cual pertenecen, seguido de un punto y del nombre del campo correspondiente. Si el nombre del campo o de la tabla está compuesto de más de una palabra, este nombre ha de escribirse entre corchetes ([nombre]). Si se desea seleccionar todos los campos de una tabla, se puede utilizar el asterisco (*) para indicarlo.

Una sentencia SELECT no puede escribirse sin la cláusula FROM. Una cláusula es una extensión de un mandato que complementa a una sentencia o instrucción, pudiendo complementar también a otras sentencias. Es, por decirlo así, un accesorio imprescindible en una determinada máquina, que puede también acoplarse a otras máquinas. En este caso, la cláusula FROM permite indicar en qué tablas o en qué consultas (queries) se encuentran los campos especificados en la sentencias SELECT. Estas tablas o consultas se separan por medio de comas (,), y, si sus nombres están compuestos por más de una palabra, éstos se escriben entre corchetes ([nombre]).

He aquí algunos ejemplos de mandatos SQL en la estructura SELECT…FROM…:

SELECT nombre,apellidos FROM clientes;

Selecciona los campos ‘nombre’ y ‘apellidos’ de la tabla ‘clientes’.

SELECT clientes.nombre, producto FROM clientes, productos;

elecciona el campo ‘nombre’ de la tabla ‘clientes’, y el campo ‘producto’ de la tabla productos.

Hay que tener en cuenta que si dos tablas poseen el mismo nombre de campo (un ‘nombre’ de cliente y un ‘nombre’ de producto, hay que especificar también la tabla a la cual pertenece dicho campo, ya, que de lo contrario, seleccionaría ambos nombres).

SELECT pedidos.* FROM pedidos;

Selecciona todos los campos de la tabla ‘pedidos’.

SELECT * FROM pedidos;

Selecciona todos los campos de la tabla ‘pedidos’.

SELECT nombre, apellidos, telefono FROM clientes;

Selecciona los campos ‘nombre’, ‘apellidos’ y ‘telefono’ de la tabla ‘clientes’. De esta manera obtenemos una agenda telefónica de nuestros clientes.

SELECT [codigo postal] FROM [tabla morosos];

Selecciona el campo ‘codigo postal’ de la tabla ‘tabla morosos’.

Claúsula Where

La claúsula WHERE es opcional, y permite seleccionar qué registros aparecerán en la consulta (si no se especifica aparecerán todos los registros). Para indicar este conjunto de registros se hace uso de criterios o condiciones, que no es más que una comparación del contenido de un campo con un determinado valor (este valor puede ser constante (valor predeterminado), el contenido de un campo, una variable, un control, etc.).

He aquí algunos ejemplos que ilustran el uso de esta cláusula:

SELECT * FROM clientes WHERE nombre=’ALFREDO’;

Selecciona todos los campos de la tabla ‘clientes’, pero los registros de todos aquellos clientes que se llamen ‘ALFREDO’.

SELECT * FROM abonados WHERE provincia=’MADRID’ OR provincia=’VALENCIA OR provincia=’BARCELONA’;

Selecciona todos los campos de la tabla ‘abonados’, pero los registros de todos los abonados de las provincias de ‘MADRID’, ‘VALENCIA’ o ‘BARCELONA’.

SELECT nombre, apellidos FROM abonados WHERE edad>=18;

Selecciona los campos ‘nombre’ y ‘apellidos’ de la tabla abonados, escogiendo a aquellos abonados que sean mayor de edad (a partir de 18 años).

SELECT * FROM abonados WHERE edad>=18 AND edad<=45;

Selecciona todos los abonados con edades comprendidas entre los 18 y los 45 años.

SELECT * FROM abonados WHERE edad BETWEEN 18 AND 45;

Selecciona todos los abonados con edades comprendidas entre los 18 y los 45 años.

SELECT * FROM diario WHERE fecha=#7/1/97#;

Selecciona los apuntes de ‘diario’ realizados el 1 de Julio de 1.997 (la fecha ha de indicarse en inglés (mes/día/año)).

SELECT * FROM diario WHERE fecha<=#12/31/96#;

Selecciona los apuntes de ‘diario’ realizados antes del 1 de Enero de 1.997.

SELECT * FROM diario WHERE fecha BETWEEN #7/1/97# AND #7/31/97#;

Selecciona los apuntes de ‘diario’ realizados en Julio de 1.997.

SELECT * FROM clientes WHERE nombre LIKE ‘AL*’;

Selecciona los clientes cuyo nombre comience con los caracteres ‘AL’.

SELECT * FROM clientes WHERE apellidos LIKE ‘*EZ’;

Selecciona los clientes cuyos apellidos terminen con los caracteres ‘EZ’.

SELECT * FROM clientes WHERE apellidos LIKE ‘*ZAMO*’

Selecciona los clientes cuyos apellidos contengan, en cualquier posición, los caracteres ‘ZAMO’.

SELECT * FROM clientes WHERE provincia IN (‘MADRID’, ‘BARCELONA’,

‘VALENCIA’,’TOLEDO’, ‘AVILA’);

Selecciona todos los clientes de las provincias de MADRID, BARCELONA, VALENCIA,

TOLEDO o AVILA.

Cláusula Order By

La cláusula ORDER BY suele escribirse al final de un mandato en SQL. Dicha cláusula establece un criterio de ordenación de los datos de la consulta, por los campos que se especifican en dicha cláusula. La potencia de ordenación de dicha cláusula radica en la especificación de los campos por los que se ordena, ya que el programador puede indicar cuál será el primer criterio de ordenación, el segundo, etc., así como el tipo de ordenación por ese criterio: ascendiente o descendiente.
(…) ORDER BY campo1 [ASC/DESC][,campo2 [ASC/DESC]…]
La palabra reservada ASC es opcional e indica que el orden del campo será de tipo ascendiente (0-9 A-Z), mientras que, si se especifica la palabra reservada DESC, se indica que el orden del campo es descendiente (9-0 Z-A). Si no se especifica ninguna de estas palabras reservadas, la cláusula ORDER BY toma, por defecto, el tipo ascendiente [ASC].

He aquí algunos ejemplos:

SELECT nombre, apellidos, telefono FROM clientes ORDER BY apellidos, nombre;

Crea una agenda telefónica de ‘clientes’ ordenada por ‘apellidos’ y ‘nombre’.

SELECT * FROM pedidos ORDER BY fecha DESC;

Relación de ‘pedidos’ ordenados desde el más antiguo hasta el más moderno.

SELECT * FROM abonados ORDER BY apellidos, nombre, fecha_nacimiento DESC;

Relación de ‘abonados’ por ‘apellidos’ y ‘nombre’ ascendiente, y por ‘fecha_nacimiento’ en orden descendiente (del más viejo al más joven).

  1. Programación SQL desde el control data

Gracias al control ‘Data’ podremos hacer nuestros primeros pinitos en SQL. Lo primero que hay que tener en cuenta es que la consulta realizada en SQL posea los mismos campos que la interfaz diseñada, y que los controles encargados de mostrar o modificar la base de datos, estén perfectamente vinculados al control Data. Por ejemplo: realizamos una ficha de ‘clientes’, por lo que diseñamos una interfaz con diversas Text Box vinculadas a un control Data que contendrá los datos. Estas Text Box se vinculan gracias a las propiedades ‘DataSource’ y ‘DataField’. La propiedad ‘DataSource’ corresponde a la fuente de los datos, en este caso, el nombre del control ‘Data’. En la propiedad ‘DataField’ se especifica el nombre del campo a tratar por cada Text Box (‘nombre’, ‘direccion’, ‘nif’, ‘telefono’, etc.). Por otro lado, en la propiedad ‘DatabaseName’ del control ‘Data’, se ha de especificar la ruta completa de la base de datos (fichero .MDB), y la propiedad ‘RecordSource’ se reservará para indicar, en una cadena o String, el mandato en SQL correspondiente cuando sea necesario.

Siguiendo con este ejemplo, esta ficha se reservará para consultas determinadas, y la Form será mostrada desde una Form anterior, desde la que se establece las condiciones de la consulta (‘que sean de Madrid’, ‘que hayan nacido antes de 1960’, ‘que habiten en Peñaranda de Bracamonte’, etc.). Se podría crear una variable de tipo String en un módulo, e insertar el mandato en SQL correspondiente antes de llamar a la ficha. Al llamar a la ficha, la Form correspondiente tendrá un evento Load, donde se insertará un código parecido a éste:

control_data.RecordSource = variable_SQL
control_data.Refresh

Obviamente, dependiendo del caso, la programación se hará diferente. Pero la norma común es crear una interfaz en concreto, con unos campos concretos y, cuando sea necesario, establecer como valor de la propiedad ‘RecordSource’ el mandato en SQL, y refrescar el control Data correspondiente. De esta manera, el control Data contendrá el resultado de la consulta.

  1. Eliminación Dinámica De Registros

¿Quién no ha sentido la necesidad de eliminar de un golpe un grupo de registros en común, en lugar de hacerlo uno por uno?. Esta operación puede ser mucho más habitual de lo que parece en un principio y, por ello, el lenguaje SQL nos permitirá eliminar registros que cumplan las condiciones o criterios que nosotros le indiquemos a través de la sentencia DELETE, cuya sintaxis es la siguiente:

DELETE FROM tablas WHERE criterios
Donde el parámetro ‘tablas’ indica el nombre de las tablas de las cuales se desea eliminar los registros, y, el parámetro ‘criterios’, representa las comparaciones o criterios que deben cumplir los registros a eliminar, respetando a aquellos registros que no los cumplan. Si – por ejemplo – quisiéramos eliminar todos los pedidos realizados por el cliente cuyo código sea 4 en el día de hoy, utilizaríamos la siguiente sentencia:
DELETE FROM pedidos WHERE [codigo cliente]=4 AND fecha=Now();

Aritmética Con Sql
¿Quién no ha echado en falta el saber el total de ingresos o de gastos de esta fecha a esta otra?.
¿Quién no ha deseado saber la media de ventas de los comerciales en este mes?. ¡Tranquilos!: el lenguaje SQL nos permitirá resolver estas y otras cuestiones de forma muy sencilla, ya que posee una serie de funciones de carácter aritmético:

Sumas O Totales
Para sumar las cantidades numéticas contenidas en un determinado campo, hemos de utilizar la función SUM, cuya sintaxis es la siguiente:
SUM(expresión)
Donde ‘expresión’ puede representar un campo o una operación con algún campo.
La función SUM retorna el resultado de la suma de la expresión indicada en todos los registros que son afectados por la consulta. Veamos algunos ejemplos:
SELECT SUM(unidades) FROM pedidos;
Retorna el total de unidades pedidas (la suma de todos los valores almacenados en el campo ‘unidades’ de la tabla ‘pedidos’). Este resultado se toma como un nuevo campo en el RecordSet.
SELECT SUM(ingresos-gastos) AS saldo FROM diario;
Retorna el saldo final de una tabla llamada ‘diario’. Este resultado se toma como un nuevo campo en el RecordSet y se le llama ‘saldo’.
SELECT SUM(unidades) AS total FROM pedidos WHERE fecha=Now();
Retorna el total de unidades pedidas hoy. Este resultado se toma como un nuevo campo en el RecordSet y se le llama ‘total’.

Promedios O Medias Aritméticas
Para averiguar el promedio de unas cantidades utilizaremos la función AVG, cuya sintaxis es la siguiente:
AVG(expresión)
La función AVG retorna el promedio o media aritmética de la expresión especificada, en todos los registros afectados por la consulta. Esto es lo mismo que realizar una suma (SUM) y, después, dividir el resultado entre el número de registros implicados.

He aquí algunos ejemplos:
SELECT AVG(unidades) FROM PEDIDOS;
Retorna el promedio de unidades pedidas (la media de todos los valores almacenados en el campo ‘unidades’ de la tabla ‘pedidos’). Este resultado se toma como un nuevo campo en el RecordSet.
SELECT AVG(ingresos-gastos) AS saldo_medio FROM diario;
Retorna el saldo medio de una tabla llamada ‘diario’. Este resultado se toma como un nuevo campo en el RecordSet y se le llama ‘saldo_medio’.
SELECT AVG(unidades) AS media FROM pedidos WHERE fecha=Now();
Retorna el promedio de unidades pedidas hoy. Este resultado se toma como un nuevo campo en el RecordSet y se le llama
‘media’.

Valores Mínimos Y Máximos

También es posible conocer el valor mínimo o máximo de un campo, mediante las funciones MIN y MAX, cuyas sintaxis son las siguientes:

MIN(expresión)

MAX(expresión)

He aquí algunos ejemplos:

SELECT MIN(unidades) AS minimo FROM pedidos;

Retorna el pedido más pequeño y lo refleja en el campo ‘minimo’.

SELECT MAX(unidades) AS maximo FROM pedidos WHERE fecha=Now();

Retorna el pedido más grande de hoy y lo refleja en el campo ‘maximo’.

SELECT MAX(gastos) AS maximo FROM diario;

Retorna el gasto más costoso reflejado en el diario contable, y lo representa en el campo ‘maximo’.

  1. Contar Registros

Otra operación muy común es realizar un recuento de registros. Aunque a primera vista pueda parecer poco práctico, la realidad es bien distinta. ¿Q quién no le gustaría conocer cuántos pedidos se han realizado hoy?. ¿O comprobar cuántos pagos se han realizado por una determinada cantidad?. ¿O saber cuántos clientes cumplen hoy años, se jubilan, son menores o mayores de edad, tienen alguna deuda, viven en esta ciudad o en tal otra, tienen teléfono móvil, están casados o solteros, etc.?. Para conocer cuántos registros hay utilizaremos la función COUNT, cuya sintaxis es la siguiente:
COUNT(expresión)
La función COUNT retorna el número de registros indicados en la expresión.

He aquí algunos ejemplos:

SELECT COUNT(*) AS num_pedidos FROM pedidos WHERE fecha=Now();

Retorna el número de pedidos realizados hoy. Este resultado se toma como un nuevo campo en el RecordSet y se le llama ‘num_pedidos’.

SELECT COUNT(*) AS casados FROM clientes WHERE casado=True;

Retorna el número de clientes casados. Este resultado se toma como un nuevo campo y se le llama ‘casados’.

SELECT COUNT(*) AS num_pagos FROM diario WHERE gastos=25594;

Retorna el número de pagos por un importe equivalente a 25594. Este resultado se toma como un nuevo campo en el RecordSet, y se le llama ‘num_pagos’.

SELECT SUM(unidades) AS total, AVG(unidades) AS media, COUNT(*) AS registros, MAX(unidades) AS maximo, MIN(unidades) AS minimo FROM pedidos WHERE fecha BETWEEN #1/1/97# AND #6/30/97#;

Retorna el total, la media, el máximo y el mínimo de unidades pedidas, y el número de pedidos realizados, durante el primer semestre de 1.997.

Omisión De Registros Duplicados

En una consulta podría ser útil omitir registros que estén duplicados. Por ejemplo, en nuestros pedidos hay duplicación, puesto que un cliente realiza varios pedidos en el mismo día. Quizá necesitemos una historia para conocer los días y los clientes que realizaron algún pedido, pero no necesitaremos toda la lista, si no que nos diga, únicamente, mediante una línea, qué cliente realizó algún pedido y en qué día. Para ello, utilizaremos el predicado DISTINCT, cuya sintaxis es la siguiente:

SELECT DISTINCT lista_campos …
El predicado DISTINCT omite aquellos registros duplicados en los campos especificados. En el problema expuesto, utilizaremos la siguiente sentencia:
SELECT DISTINCT [codigo cliente],fecha FROM pedidos;
Si deseamos que la consulta sea más completa y nos visualice también el nombre y los apellidos correspondientes del cliente en cuestión (estos datos están en la tabla ‘clientes’ y no en ‘pedidos’), escribiríamos este mandato:
SELECT DISTINCT pedidos.fecha, pedidos.[codigo cliente], clientes.nombre, clientes.apellidos
FROM pedidos, clientes WHERE clientes.[codigo cliente] = pedidos.[codigo cliente];

Reemplazar Datos
Imaginemos por un momento que el precio de los productos ha subido un 10%, y que tenemos que actualizar nuestra tabla de productos con el nuevo importe. La solución más primitiva sería acceder a la tabla y, el precio de cada producto multiplicarlo por 1.1 y reemplazarlo a mano. Con diez productos, la inversión de tiempo podría llegar al cuarto de hora, y no estaremos exentos de fallos al tipear el importe o al realizar el cálculo en la calculadora. Si la tabla de productos superase la cantidad de 100 productos (algo muy probable y fácil de cumplir), la cosa ya no es una pequeña molestia y un poco de tiempo perdido.

El lenguaje SQL nos permite solucionar este problema en cuestión de pocos segundos, ya que posee una sentencia llamada Update, que se ocupa de los cálculos y reemplazos. Su sintaxis es la siguiente:
UPDATE lista_tablas SET campo=nuevo_valor [,campo=nuevo_valor] [WHERE…]
Donde lista_tablas representa el nombre de las tablas donde se realizarán las sustituciones o reemplazos. El parámetro campo indica el campo que se va a modificar, y el parámetro nuevo_valor representa una expresión (constante, valor directo, un cálculo, etc.) cuyo resultado o valor será el nuevo valor del campo.

En el problema expuesto anteriormente escribiríamos la siguiente sentencia:
UPDATE productos SET pvc=pvc*1.1;
Si este incremento de precio de costo debe afectar al precio de venta al público un 30% de beneficio, podríamos escribir la siguiente línea para ahorrar trabajo y tiempo:
UPDATE productos SET pvc=pvc*1.1, pvp=pvp*1.3;
La sentencia UPDATE es muy versátil y potente, por lo que podemos realizar reemplazos condicionantes, ya que permite la cláusula WHERE. De ello se deduce que – por ejemplo -, si se desea bajar un 10% el importe del seguro a aquellos asegurados que cumplan más de dos años de carnet de conducir, y que tengan más de 22 años de edad, tendríamos que escribir la siguiente sentencia:
UPDATE asegurados SET importe=importe/1.1 WHERE edad>22 AND YEAR(Now)-YEAR(expedicion)>2;
Pero ahí no queda la cosa, porque es posible utilizar varias tablas y sustituir el valor de un campo de una de las tablas con el valor del campo de otra tabla, o bien reemplazar el valor de unos campos de alguna tabla si el valor de los campos de otras tablas cumple una serie de requisitos. Estos casos no son tan frecuentes, pero en el caso de haberlos se agradecerá un buen planteamiento en el diseño inicial de la base de datos.

 

  1. Grupos De Registros

A veces, puede ser necesario mostrar un resumen de los datos que tenemos, especificando el total – por ejemplo -, de los ingresos y de los gastos de cada día, en lugar de visualizar todos los ingresos y gastos realizados al detalle. Para llevar a cabo esta tarea hemos de tener en cuenta, en primer lugar, bajo qué campo se van a agrupar los datos (en lo expuesto, sería el campo fecha), y, a continuación, realizar la consulta mediante la cláusula GROUP BY, cuya sintaxis es la siguiente:
SELECT … FROM … [WHERE …] GROUP BY lista_campos
Básicamente, la cláusula GROUP BY agrupa o combina registros con idéntico valor en los campos especificados, en un único registro. Esto significa que en un sólo registro se mostrará la información común a muchos registros, como si dijésemos, al terminar las cuentas: «hoy se ha ingresado tanto y se ha gastado tanto, con lo que hay un beneficio de tanto», sin necesidad de especificar cada movimiento (cada ingreso, cada cobro, cada pago, cada factura, cada transferencia bancaria, etc.).

Imaginemos que queremos hacer un resumen de nuestros pedidos, y queremos saber cuántos pedidos y unidades han realizado cada uno de nuestros clientes. Para ello, se escribiría una sentencia como ésta:
SELECT codigo_cliente, count(codigo_cliente) AS num_pedidos, SUM(unidades) AS cantidad FROM pedidos GROUP BY codigo_cliente;

Para saber cuántos pedidos se realizaron cada día, escribiríamos esta línea:

SELECT fecha, count(fecha) AS num_pedidos FROM pedidos GROUP BY fecha;

Para conocer cuántas unidades se pidieron cada día, tipearíamos esta sentencia:

SELECT fecha, SUM(unidades) AS cantidad FROM pedidos GROUP BY fecha;

En la siguiente sentencia se muestra para cada cliente aquellos días en que se realizó un pedido, resumiéndose el número de pedidos realizados así como el total de unidades pedidas:

SELECT fecha, codigo_cliente, COUNT(codigo_cliente) AS num_pedidos, SUM(unidades) AS cantidad FROM pedidos GROUP BY fecha, codigo_cliente HAVING fecha<#1/6/97#;

Como se puede apreciar, se ha especificado una condición a través de la cláusula HAVING, que indica los criterios o condiciones a cumplir por los registros a visualizar en un agrupamiento. En esta ocasión, la condición era de aquellos pedidos realizados antes del seis de Enero de 1.997.

Para conocer una estadítica de pedidos diaria, utilizaremos la siguiente sentencia:

SELECT fecha, COUNT(fecha) AS pedidos, SUM(unidades) AS subtotal, MIN(unidades) AS minimo, MAX(unidades) AS maximo, AVG(unidades) AS promedio FROM pedidos GROUP BY fecha;

Un resultado de ejemplo sería el siguiente:
FECHA PEDIDOS UNIDADES MINIMO MAXIMO PROMEDIO
—– ——- ——– —— —— ——–
2/01/97 9 1599 2 1500 177,6
3/01/97 5 113 1 100 22,6
4/01/97 3 33 3 25 11,0
6/01/97 6 90 5 50 15,0
7/01/97 1 1 1 1 1,0

  1. Combinación De Datos

Las consultas realizadas hasta ahora requerían de una dosis de habilidad para conseguir crear un conjunto de datos que tuviese información combinada de dos tablas. Pero, podemos combinar datos de una manera mucho más sencilla y eficaz: mediante las operaciones JOIN, las cuales permiten combinar datos de dos tablas. La operación JOIN más común es INNER JOIN, cuya sintaxis es:
tabla1 INNER JOIN tabla2 ON tabla1.campo_común=tabla2.campo_común
Donde tabla1 y tabla2 representan el nombre de las tablas a combinar. Ambas tablas han de tener un campo común o igual para poder realizar correctamente la combinación de los datos. Pero veamos un ejemplo para entenderlo mejor:
SELECT * FROM pedidos INNER JOIN clientes ON pedidos.codigo_cliente =clientes.codigo_cliente;
El resultado será un conjunto de registros con los datos de las dos tablas. Este conjunto poseerá el nombre de todos los campos de la tabla pedidos y de todos los campos de la tabla clientes. En cada registro aparecerán los datos relacionados, es decir, que en un pedido aparecerán los datos del mismo y los datos personales del cliente que realizó el pedido.
La operación INNER JOIN combina los datos de las dos tablas siempre que haya valores coincidentes en los campos comunes o enlazados.

Existen también otras dos formas de combinar: LEFT JOIN y RIGHT JOIN. Ambas tienen la misma sintaxis que INNER JOIN, pero estas operaciones incluyen todos los registros de una tabla y aquellos registros de la otra en que los campos comunes sean iguales. En la operación LEFT JOIN, incluye todos los registros de la primera tabla (parámetro tabla1) y aquellos registros de la segunda tabla (parámetro tabla2) en que los campos comunes sean iguales. En la operación RIGHT JOIN ocurre lo contrario: incluye todos los registros de la segunda tabla y aquellos registros de la primera tabla en que los campos comunes sean iguales.

Aunque la diferencia entre las tres operaciones parezca inexistente, en realidad sí existe. La operación INNER JOIN realiza una combinación con todos aquellos registros de las dos tablas en que el campo común de ambas tenga el mismo valor, mientras que las operaciones LEFT JOIN y RIGHT JOIN realizan la combinación de todos los registros de la tabla que combinan (ya sea la primera para LEFT JOIN o la segunda para RIGHT JOIN), aunque en la otra tabla, en el campo común no haya coincidencia. La prueba se ve rápidamente si se introduce un código de cliente en el campo campo_cliente de la tabla pedidos que no exista:
SELECT * FROM pedidos INNER JOIN clientes ON pedidos.codigo_cliente =clientes.codigo_cliente;
El registro que contiene el pedido del cliente que no existe no aparece, puesto que no hay coincidencia. Si escribimos:
SELECT * FROM pedidos LEFT JOIN clientes ON pedidos.codigo_cliente =clientes.codigo_cliente;
Observaremos que aparecen todos los registros de la tabla pedidos, incluido aquel donde indicamos que el pedido fue solicitado por el cliente inexistente, pero en los campos relacionados (campos de la tabla clientes) no habrá ningún dato relacionado o combinado. Si ahora escribimos lo siguiente:
SELECT * FROM pedidos LEFT JOIN clientes ON pedidos.codigo_cliente =clientes.codigo_cliente; obtendremos el mismo resultado que con la operación INNER JOIN, puesto que se visualizan todos aquellos registros que existen en clientes y aquellos que coincidan con el campo clave en la tabla pedidos. Como el código inexistente no existe en la tabla clientes, este registro no aparece. Para comprobar el efecto aún mejor, modificar el código inexistente en el registro de la tabla pedidos por uno que sí exista. Tras ello, volver a introducir las sentencias SQL para comprobar la diferencia.

Lo más normal es utilizar la operación INNER JOIN para omitir aquellos registros no coincidentes, aunque las operaciones LEFT JOIN y RIGHT JOIN nos pueden servir para descubrir entradas erróneas en códigos.

Veamos algunos ejemplos más:
SELECT fecha, codigo_producto, unidades, apellidos, nombre FROM pedidos INNER JOIN clientes ON pedidos.codigo_cliente = clientes.codigo_cliente WHERE fecha<#1/6/97#;
Combina pedidos y clientes, visualizando aquellos pedidos realizados antes del 6 de Enero de 1997 por los campos fecha, codigo_producto, unidades, apellidos y nombre.
SELECT fecha, unidades, productos.* FROM pedidos INNER JOIN productos ON pedidos.codigo_producto = productos.codigo_producto;
Combina pedidos y productos, visualizando los pedidos por los campos fecha y unidades, y por todos los campos de la tabla productos.
SELECT fecha, unidades, productos.* FROM pedidos INNER JOIN productos ON pedidos.codigo_producto = productos.codigo_producto ORDER BY fecha, producto;

El resultado será el mismo que con el anterior ejemplo, salvo que la presentación de los registros se realizará ordenada por la fecha y el nombre del producto

 

Evolucion de las Microcomputadoras Historia y Evolucion Tecnologica

Evolución de las Microcomputadoras
Historia y Evolución Tecnológica

microcomputadora

1965
La corporación Honeywell presenta la «computadora para cocina» H316. Es la primera computadora para el hogar y en el catálogo de Neiman Marcus se ofrece a 10 600 dólares.

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1970
Ken Thompson y Denis Ritchie
crean el sistema operativo UNIX en Bell Labs. UNIX se convierte en el sistema operativo dominante para aplicaciones decisivas en los servidores, estaciones de trabajo y microcomputadoras complejas

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1971
En 1971, Ted Hoff integró a todos los elementos de un procesador para computadora en un solo circuito integrado de silicio un poco más grande que un cuadro de una pulgada por lado. El resultado de sus esfuerzos es el Intel 4004, el primer microprocesador del mundo disponible en el mercado. El circuito integrado es una computadora de 4 bit que contiene 2 300 transistores, inventados en 1948, que puede ejecutar 60 000 instrucciones por segundo. Está diseñado para que se instale en calculadoras, y se vende a 200 dólares. Intel vende más de 100 000 calculadoras que llevan el microprocesador 4004. Casi de la noche a la mañana, a este circuito integrado se le encontraron miles de aplicaciones, con lo cual se abrió el camino para el mundo orientado hacia las computadoras que conocemos hoy, así como a la producción en masa de microprocesadores para computadora, los cuales contienen en la actualidad millones de transistores. Steve Wozniak y Bill Fernandez crearon una computadora a partir de circuitos integrados que rechazaban las compañías locales de semiconductores. La computadora se llama Cream Soda Computer porque sus constructores bebían bebidas carbonatadas Cragmont mientras la construían.

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1972
Dennis Ritchie y Brian Kernighan
crearon el lenguaje de programación C en los Bell Labs. El sistema operativo UNIX se vuelve a escribir, pero ahora en C.
El lenguaje C se vuelve uno de los lenguajes de programación más populares en lo tocante al desarrollo de los programas para computadora.
Se presentan los disquetes de 5 1/4 pulg, que representan una manera portátil de almacenar información y pasarla entre máquinas.

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1973
La compañía IBM presenta dispositivos nuevos para guardar gran cantidad de información: el disco de 8 pulgadas con los dos lados útiles, en el que se pueden almacenar 400 KB de datos y el disco duro Winchester de 8 pulgadas con cuatro tableros de interconexión que puede almacenar la sorprendente cantidad de 70 MB de información.
Bob Metcalfe, que trabajaba en Xerox PARC, crea una metodología para conectar computadoras llamada Ethernet.

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1974
Intel da a conocer un circuito integrado 8080. Este dispositivo funciona a 2 MHz y es de 8 bit, puede tener acceso a 64 KB de memoria usando una estructura de direccionamiento de 2 bytes. Tiene más de 6 000 transistores. Es capaz de ejecutar 640 000 instrucciones por segundo.
Motorola lanza el microprocesador 6800. También es un procesador de 8 bit, que se utiliza principalmente en instrumentos industriales y de automotores. Se convertirá en el circuito integrado preferido para las computadoras Apple, lo cual desencadena una batalla entre los seguidores de los microprocesadores Intel y los de Motorola.

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1975
La primera microcomputadora que se encuentra en el comercio, la Altair 880, es la primera máquina en ser llamada «computadora personal». Posee 64 KB de memoria y una estructura de bus de 100 líneas. Se vende en 397 dólares en un estuche para armar, o bien, en 439 dólares ya ensamblada. El nombre de Altair lo sugirió la hija de 12 años del editor de Popular Electronics porque Altair era aquella tarde el destino del Enterprise, la nave espacial de Star Trek, el programa de televisión que se conoce como Viaje a las estrellas. Dos jóvenes estudiantes universitarios, Paul Alien y Bill Gates, dan a conocer el intérprete del lenguaje BASIC de la computadora Altair. Durante las vacaciones de verano, estos estudiantes forman una compañía a la que denominan Microsoft, la cual, con el paso del tiempo, crece hasta convertirse en una de las compañías de software más grandes del mundo.

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1976
Steve Wozniak y Steve Jobs
construyen la computadora Apple I. Es menos potente que la Altair, pero también menos cara y menos complicada. Los usuarios pueden conectar su propio teclado y su propia pantalla, y, además, tienen la opción de montar la tarjeta madre de la computadora en cualquier gabinete que ellos elijan, como una caja de metal, de madera o un portafolios. Jobs y Wozniak forman la AppleComputer Company el día primero de abril. April Fool’s Day, y el nombre de la empresa se debe a que la manzana era su fruta predilecta.

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1977
Se da a conocer la computadora Apple II. Ya viene ensamblada dentro de un gabinete y tiene además un teclado integrado. Los usuarios la deben conectar a sus televisores.
Las microcomputadoras totalmente ensambladas pegan con fuerza en el mercado, en el que Radio Shack, Commodore y Apple venden sus modelos. Las ven tas son bajas porque nadie sabe que hacen exactamente estas máquinas. La Datapoint Corporation anuncia la Attached Resource ComputincNetwork (ARCnet), la primera técnica LAN comercial cuya pretensión e¿ que la aprovechen las aplicaciones de las microcomputadoras.

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1978
Intel lanza el circuito integrado 8086 de 16 bit que fija una nueva norma en cuanto a potencia, capacidad y rapidez dentro de los microprocesadores. Epson anuncia la impresora de matriz de puntos MX80, en la que se conjunta un alto rendimiento y relativamente bajo precio. (Epson de orígenes japoneses, inicia sus operaciones en Estados Unidos en 1975 como Epson America, Inc., y se convierte en una de las primeras de muchas compañías extranjeras en Estados Unidos que contribuye al crecimiento de la industria de las computadoras personales. Hasta este momento sólo habían estado presentes puras compañías estadounidenses. Según Epson, la compañía absorbió 60% del mercado de las impresoras de matriz de puntos con la MX80.)

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1979
Intel introduce el microprocesador 8088, que ofrece una arquitectura interna de 16 bit y un bus externo de 8 bit. Motorola presenta el circuito integrado 60000; contiene 60.000 transistores, de donde se tomó su nombre. Se usará en las primeras computadoras Machintoch. Software Arts, Inc. da a conocer VisiCalc, el primer programa comercial que es una hoja de cálculo y que se puede utilizar en las computadoras personales. Siempre se considera que VisiCalc es el que abrió el camino a las computadoras personales en el mundo de los negocios.
Bob Metcalfe, el creador de Ethernet, forma 3Com Corp, para perfeccionar productos basados en Ethernet. Con el tiempo, Ethernet evolucionó en el sistema de interconexión en redes más usado del mundo.MicroPro International introduce WordStar, el primer programa comercialmente exitoso para procesar palabras que se puede usar en microcomputadoras compatibles con IBM.

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1980
La compañía IBM escoge a Microsoft (fundada por Bill Gates y Paul Allen) para que proporcione el sistema operativo de su próxima computadora personal. Microsoft compra un programa que desarrollóSeattle Computer Products, llamado QDOS (Quick and Dirty Operating Systems) y lo modifica para correrlo en el hardware de IBM. Bell Eaboratories inventa el Bellmac32, el primer microprocesador de un solo circuito integrado con una arquitectura interna de 32 bit un bus de datos de 32 bit. Ea Eotus Development Corporation da a conocer el programa con hoja de cálculo integrada Eotus 123. el cual combina hoja de cálculo, gráficos y base de datos en un solo paquete.

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1981
Adam Osborne fue el creador de la primera computadora portátil del mundo, la Osborne 1. Pesa casi 22 libras, cuenta con dos unidades de disco de 5 1/4 pulg, 64 KB de RAM y un monitor de 5 pulg y carece de disco duro. Se basa en un procesador z80, trabaja con el sistema operativo CP/M y se vende en 1 795 dólares. WordStar (una aplicación para procesar palabras) está incorporado en la Osborne 1, así como SuperCalc, que es una hoja de cálculo. Es un logro enorme.La compañía IBM presenta la IBMPC con un CPU Intel 8088 que funciona a 4.77 MHz, tiene 16 KB de memoria, un teclado, un monitor, una o dos unidades de disco de 5 1/4 pulg y un precio de 2 495 dólares.Por otro lado, Hayes Microcomputer Products, Inc., presenta la SmartModern 300, que se vuelve con rapidez el patrón de la industria.Xerox da a conocer la computadora Xerox Star. A la larga, su alto precio la condenó al fracaso comercial, pero sus características inspiran toda una nueva dirección en el diseño de computadoras. Una pequeña caja sobre ruedas el primer mouse ejecuta órdenes sobre la pantalla, la primera interfaz de gráficos para el usuario.

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1982
La compañía Intel da a conocer el microprocesador 80286 de 16 bit. Se forma Sun Mycrosystems, y empieza a montar la estación de trabajo Sun1. Dan a conocer AutoCAD, un programa para diseñar objetos en dos o tres dimensiones. AutoCAD revolucionará las industrias de la arquitectura y la ingeniería.
Work empieza a trabajar sobre TCOP/IP. Se usa por primera vez el término Internet para describir la red de redes mundial, que proviene de ARPANET.

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1983
La revista Time califica a la computadora como «La Máquina del Año» 1982, con lo cual reconoce el nuevo papel de la computadora en la sociedad. La compañía Apple presenta a Lisa, una computadora con un sistema operativo puramente gráfico y un ratón. La industria ha recibido un gran estímulo, pero el precio de Lisa de 10 000 dólares desanima a los compradores.
La compañía IBM da a conocer la IBMPC XT, que, en esencia, es un PC con un disco duro y más memoria. La KT puede almacenar programas y datos en su disco duro de 10 Mb. incorporado.Crean la primera versión del lenguaje de programación C++, el cual permite escribir programas en piezas independientes reutilizables, llamadas objetos.Lanzan la computadora portátil Compaq, el primer clon de PC exitoso 100% compatible. (El término clon se refiere a cualquier PC que se base en la misma arquitectura usada en las computadoras personales de IBM.) A pesar de 28 libras de peso, casi 13 kg de peso, se vuelve una de las primeras computadoras en ser jalada por los aeropuertos.

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1984
Adobe Systems libera su sistema PostScript, el cual permite que las impresoras generen impresiones muy bien definidas con diversos tipos de letras, así como imágenes muy complejas. Richard Stallmanabandona el Instituto Tecnológico de Massachusetts para iniciar el proyecto de software gratis (GNU no es Unix). Este proyecto crece luego de que se le añaden miles de programas a la biblioteca de software gratis de acceso libre, disponible mediante una licencia especial.
La Free Software Foundation, una opción ante los programas caros de acceso restringido. Apple presenta la microcomputadora Macintosh la cual ofrece una interfaz «amigable con el usuario».La compañía IBM monta la IBMPC AT, una computadora de 6 MHz en la que está incorporado el procesador 80286, que fija el estándar de las computadoras personales que funcionan con DOS.IBM presenta su sistema de redes Token Ring. Es un sistema confiable y redundante que puede enviar paquetes a 4 Mbps; varios años más tarde esta velocidad aumentaría hasta 16 Mbps.La compañía Satellite Software International presenta el programa procesador de palabras WordPerfect.

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1985
Intel lanza el procesador 80386 (también conocido como 386), que es un procesador de 32 bit. Puede direccionar más de 4 mil millones de bytes de memoria y funcionar 10 veces más rápido que el 80286. Aldus lanzaPageMaker para las Macintosh, el primer programa para edición en el escritorio, utilizable en microcomputadoras. PageMaker se acomoda acoplado con la impresora LaserWriter de Apple y el sistema PostScriptde Adobe en la era de la edición en el escritorio.

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1986
La compañía IBM presenta la PC convertible, la primera computadora portátil de IBM y la primera computadora fabricada con Intel que cuenta con una unidad de disco de 3 1/2 pulg. Microsoft vende su primera reserva pública a 21 dólares la acción, y reúne 61 millones de dólares en la oferta pública inicial.
Se efectúa la primera conferencia internacional sobre la técnica del CDROM en Seattle, convocada por Microsoft. Los discos compactos se consideran como el medio de almacenamiento del futuro para los usuarios de computadoras.

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1987
La compañía IBM presenta la nueva línea PS/2 de computadoras, cuyas características son un procesador de 20 MHz 80386. Esta línea de productos incluye el bus MicroChannel, pero no es un gran éxito porque los consumidores no quieren reemplazar los periféricos estándar de la industria. Para competir con la arquitectura MicroChannel de IBM, un grupo de otros fabricantes de computadoras introduce el bus EISA (Extended Industry Standard Architecture).
La IBM lanza su monitor Video Graphics Array (VGA) que ofrece 256 colores a una resolución de 320 x 200 y 16 colores a 640 x 480.
Apple Computer lanza la computadora Macintosh II, dirigida al mercado de la edición de textos. Comprende un monitor VGA. Apple Computer presenta HyperCard, un lenguaje de programación para las Macintosh, el cual aplica la metáfora de encimar tarjetas de índice para representar un programa una clase de lenguaje de programación visual. HyperCard permite enlaces con diferentes partes de un programa o con diferentes programas. Este concepto dará origen al desarrollo de HTML (hypertext markup language). Motorola da a conocer su microprocesador 68030.
Novell presenta su sistema operativo de redes, llamado NetWare.

https://historiaybiografias.com/linea_divisoria6.jpg

microcomputadora

1988
La IBM y Microsoft montan OS/2 1.0, el primer sistema operativo de escritorio que ejecuta varias tareas. Su alto precio, una curva de aprendizaje de pendiente elevada y la incompatibilidad con las computadoras personales existentes contribuyen a la falta de participación en el mercado. Apple Computer entabla el único juicio más grande en la industria de las computadoras contra Microsoft yHewlettPackard, en el que reclama violaciones a los derechos de autor de su sistema operativo y su interfaz de gráficos para el usuario.

https://historiaybiografias.com/linea_divisoria6.jpg

Hewlett Packard introduce la popular primera impresora de inyección de tinta, la HP Deskjet. La nueva compañía de Steve Job, NeXT, Inc., da a conocer la computadora NeXT, que posee un procesador Motorola 68030 de 25 MHz. Ea NeXT es la primera computadora en usar una programación orientada a objetos en su sistema operativo y un impulsor óptico, en lugar de uno flexible. Apple introduce el Apple CD SC, un dispositivo de almacenamiento CDROM que permite el acceso de hasta 650 MB de datos. Un virus llamado Internet worm es liberado en la Internet, y ocasiona que 10% de todas las computadoras conectadas a Internet queden incapacitadas.

microcomputadora

1989
Intel lanza el circuito integrado 80486, que también se conoce como 486, el primer microprocesador de un millón de transistores del mundo. Este circuito integrado comprende un CPU 386 y un coprocesador matemático dentro del mismo circuito. Tim Berners Lee elabora un software alrededor del concepto de hipertexto, que permite al usuario hacer clic en una palabra o una frase de un documento y saltar a otro lugar del mismo documento o a otro archivo. Este software proporciona los fundamentos para el desarrollo de la World Wide Web y es la base de los primeros buscadores de la Web.