Saltar al contenido
PROGRAMAR EN VBA MACROS DE EXCEL

Excel y SQL principales sentencias

.

Anteriormente mostre como conectar Excel con Access, en esa oportunidad se ingresaron datos desde Excel y se guardaron en Access usando el comando recorset; en esa oportunidad había mencionado que se puede obtener el mismo resultado ejecutando sentencias SQL, en esta entrega te muestro algunas de las sentencias SQL más comunes, esto nos servirá de apoyo para las siguientes presentaciones, donde se mostrará como conectar Excel con Access, pudiendo manipular desde Excel los registros de Access, es decir se podrá, insertar, modificar, borrar o consultar registros de la tabla de Access mediante SQL y mostrarlos en una hoja de Excel, en otras palabras se podrá manipular tablas de Access desde Excel.

Si estás usando macros, o necesitas modificar alguna de ellas para automatizar tu libro de Excel seguramente te es necesario saber seleccionar o referenciar celdas, en FORMAS DE SELECCIONAR O REFERENCIAR CELDAS CON VBA (Spanish Edition) encontrarás una excelente ayuda; si trabajas con fechas en Excel, fíjate en el siguiente link que te puede ser de utilidad FORMATOS Y FUNCIONES DE FECHA Y HORA DE MICROSOFT EXCEL (Spanish Edition)

  

Antes de profundizar te recomiendo que leas un excelente libro sobre Excel el que te ayudará operar las planillas de cálculo, haz click acá, si quieres un libro sobre Excel, en inglés, entonces debes hacer click acá. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

Desde el link final podrás descargar el ejemplo que conecta Excel con Access y cientos de ejemplos totalmente GRATUITO, recordando que si este o alguno de los ejemplos publicados te fueron de utilidad y puedes, aporta a seguir manteniendo esta página.

Como había mencionado más arriba estas son algunas de las sentencias SQL que se pueden utilizar en Excel al trabajar con Access, en las siguientes entregas mostraré como filtrar datos trabajando con el comando SELECT y como insertar o agregar datos, modificar y eliminar datos.

Antes que nada es preciso definir que es SQL, bien SQL es un lenguaje de consulta estructurado, se podría decir que es un lenguaje de base de datos normalizado que es utilizado por el motor de base de datos de Microsoft Jet.

Se utiliza SQL para crear objetos QueryDef que son el argumento de origen de datos del método OpenRecorsSet y como la propiedad RecordSource de un control de datos, también es usado para crear y manipular directamente una base de datos con el método Execute o crear consultas SQL de paso para manipular bases de datos remotas.

Que compone el lenguaje SQL, la respuesta es un conjunto de comandos, cláusulas, operadores y funciones de agregado, que se combinan entre si en las denominadas sentencias SQL para poder  manipular una base de datos, es decir crear, actualizar o consultar la misma.

Existen dos tipos de
comandos SQL los denominados DLL y DML los permiten crear una nueva base de
datos, definir campos e índices; los DLL permiten generar consultas para
filtrar y extraer datos de la base.
COMANDOS

 COMANDOS DLL
Comando
Descripción
CREATE
Crear
nuevas tablas, campos e índices.
DROP
Eliminar
tablas e índices.
ALTER
Modifica
tablas agregando campos o cambiando la definición.
 COMANDOS DML
Comando
Descripción
SELECT
Sirve
para consultar registros que cumplan un criterio determinado.
INSERT
Sirve
para cargar lotes de datos en la base de datos en una única operación.
UPDATE
Sirve
para modificar los valores de los campos y registros especificados.
DELETE
Utilizado
para eliminar registros de una tabla de una base de datos.
CLÁUSULAS
Son condiciones
que se utilizan para definir que datos se desea seleccionar o manejar.

Cláusula
Descripción
FROM
Determina
la tabla de la cual se van a seleccionar los registros.
WHERE
Sirve
para especificar que registros se deben seleccionar.
GROUP BY
Utilizada
para separar los registros seleccionados en grupos específicos.
HAVING
Utilizada
para expresar la condición que debe satisfacer cada grupo.
ORDER BY
Sirve
para ordenar registros de acuerdo a un criterio seleccionado.


OPERADORES
LÓGICOS
Son los
siguientes:
Operador
Descripción
AND
Es el
«y» lógico. Evalúa dos condiciones y devuelve un valor de
verdad sólo si ambas son ciertas.
OR
Es el
«y» ó «o» lógico. Evalúa dos condiciones y devuelve un
valor de verdad si alguna de las dos es cierta.
NOT
Negación lógica.
Devuelve el valor contrario de la expresión.
XOR
Es el
«o» lógico devuelve los registros que cumplan una u otra condición
pero no amas condiciones como en el caso de or.
EQV
Devuelve
verdadero si dos expresiones son verdaderas o son las dos falsas.
IMP
Compara
dos objetos, también es denominada IS

 

OPERADORES
DE COMPARACIÓN
Permiten comparar
dos o más expresiones.
Operador
Descripción
Menor que
Mayor que
<> 
Distinto
de
<=
Menor ó
Igual que
>=
Mayor ó
Igual que
=
Igual que
BETWEEN
Utilizado
para especificar un intervalo de valores.
LIKE
Utilizado
en la comparación de un modelo
IN
Utilizado
para especificar registros de una base de datos
FUNCIONES
DE AGREGADO
Estas funciones
se usan dentro de una cláusula SELECT en grupos de registros para devolver un
único valor que se aplica al grupo de registros a los que se refiere.
Función
Descripción
AVG
Calcula
el promedio de los valores de un campo determinado
COUNT
Devuelve
el número de registros de la selección
SUM
Suma de
todos los valores de un campo determinado
MAX
Devuelve
el valor más alto de un campo especificado
MIN
Devuelve
el valor más bajo de un campo especificado

PREDICADO
El predicado,
sirve para se debe incluir o debe ir entre la cláusula y el primer nombre del
campo del cual se desean recuperar los datos, a final del tutorial  en el título
Subconsultas, se usan, los predicados ANY y SOME, entre los predicados aparte
de los mencionados, tenemos:
  
Predicado
Descripción
ALL
Devuelve
todos los campos de la tabla
TOP
Devuelve
un determinado número de registros de la tabla
ANY
Hace
referencia a alguno de los registros de la tabla
SOME
Hace
referencia a alguno de los registros de la tabla
DISTINCT
Omite los
registros cuyos campos seleccionados coincidan totalmente
DISTINCTROW
Omite los
registros duplicados basándose en la totalidad
del registro y no sólo en los campos seleccionados.



OPERADOR LIKE
Este operador se usa para comparar una expresión de cadena con un modelo en una expresión SQL, tipos de coincidencia.

Tipo de coincidencia
Modelo Planteado
Coincide
No coincide
Varios caracteres
‘a*a’
‘aa’, ‘aBa’, ‘aBBBa’
‘aBC’
Carácter especial
‘a[*]a’
‘a*a’
‘aaa’
Varios caracteres
‘ab*’
‘abcdefg’, ‘abc’
‘cab’, ‘aab’
Un solo carácter
‘a?a’
‘aaa’, ‘a3a’, ‘aBa’
‘aBBBa’
Un solo dígito
‘a#a’
‘a0a’, ‘a1a’, ‘a2a’
‘aaa’, ‘a10a’
Rango de caracteres
‘[a-z]’
‘f’, ‘p’, ‘j’
‘2’, ‘&’
Fuera de un rango
‘[!a-z]’
‘9’, ‘&’, ‘%’
‘b’, ‘a’
Distinto de un dígito
‘[!0-9]’
‘A’, ‘a’, ‘&’, ‘~’
‘0’, ‘1’, ‘9’
Combinada
‘a[!b-m]#’
‘An9’, ‘az0’, ‘a99’
‘abc’, ‘aj0’





TIPO DE
DATOS

Los tipos de datos
que se manejan con SQL son trece tipos denominados primarios y varios sinónimos
que son reconocidos por dichos tipos de datos, en el cuadro que sigue se
exponen los datos primarios y en el que sigue los sinónimos que reconoce.
Tipo de Datos
Longitud
Descripción
BINARY
1 byte
Para consultas sobre
tabla adjunta de productos de bases de datos que definen un tipo de datos
Binario.
BIT
1 byte
Valores Si/No ó
True/False
BYTE
1 byte
Un valor entero entre
0 y 255.
COUNTER
4 bytes
Un número
incrementado automáticamente (de tipo Long)
CURRENCY
8 bytes
Un entero escalable
entre 922.337.203.685.477,5808 y 922.337.203.685.477,5807.
DATETIME
8 bytes
Un valor de fecha u
hora entre los años 100 y 9999.
SINGLE
4 bytes
Un valor en punto
flotante de precisión simple con un rango de -3.402823*1038 a -1.401298*10-45
para valores negativos, 1.401298*10-45 a 3.402823*1038 para valores
positivos, y 0.
DOUBLE
8 bytes
Un valor en punto
flotante de doble precisión con un rango de -1.79769313486232*10308 a
-4.94065645841247*10-324 para valores negativos, 4.94065645841247*10-324 a
1.79769313486232*10308 para valores positivos, y 0.
SHORT
2 bytes
Un entero corto entre
-32,768 y 32,767.
LONG
4 bytes
Un entero largo entre
-2,147,483,648 y 2,147,483,647.
LONGTEXT
1 byte por carácter
De cero a un máximo
de 1.2 gigabytes.
LONGBINARY
Según se necesite
De cero 1 gigabyte.
Utilizado para objetos OLE.
TEXT
1 byte por caracter
De cero a 255
caracteres.
La tabla muestra los
tipos de datos sinónimos:
Tipo de
Dato
Sinónimos
BINARY
VARBINARY
BIT
BOOLEAN
LOGICAL
LOGICAL1
YESNO
BYTE
INTEGER1
COUNTER
AUTOINCREMENT
CURRENCY
MONEY
DATETIME
DATE
TIME
TIMESTAMP
SINGLE
FLOAT4
IEEESINGLE
REAL
DOUBLE
FLOAT
FLOAT8
IEEEDOUBLE
NUMBER
NUMERIC
SHORT
INTEGER2
SMALLINT
LONG
INT
INTEGER
INTEGER4
LONGBINARY
GENERAL
OLEOBJECT
LONGTEXT
LONGCHAR
MEMO
NOTE
TEXT
ALPHANUMERIC
CHAR
CHARACTER
STRING
VARCHAR
VARIANT
(No Admitido)
VALUE
CLÁUSULA
FROM
Esta cláusula no
tiene mayores análisis, determina en que tabla se buscarán o harán las distintas
operaciones.

El siguiente ejemplo permite seleccionar todos los campos de la tabla Ventas.
SELECT * FROM
Ventas

Esta sentencia SQL selecciona el campo Cliente de la tabla Ventas
SELECT Cliente FROM Ventas
CLÁUSULA WHERE
Esta cláusula se
ha visto a lo largo de los ejemplos que acá se han expuesto, permite determinar
que registros se van a filtrar o recuperar; en otras palabras, determina que
registros de la tabla seleccionada con la cláusula FROM deberán aparecer o
serán el resultado de la instrucción SELECT.
Esta cláusula es
opcional, si no se utiliza la instrucción SELECT devolverá todos los registros
de los campos especificados algunos ejemplos aclararán el panorama.
Selecciona todos
los campos cuyos registros del campo cliente sean igual a Dayra Col y Tomy Lee.
SELECT * FROM Ventas WHERE Cliente = ‘Dayra Col’
OR  Cliente = ‘Tomy Lee’
Selecciona el
campo cliente de la tabla ventas cuando venta sea superior a 450000
SELECT Cliente FROM Ventas WHERE Venta > 450000
Selecciona todos
los campos cuando los registros del campo cliente se encuentren entre Day y
Tom.
SELECT * FROM Ventas WHERE Cliente BETWEEN ‘Day’
AND ‘Tom’
CLÁUSULA
GROUP BY
La cláusula GROUP
BY o agrupamiento de registros combina o une registros con valores idénticos en
una lista de campos especificados, en un solo
registro, obteniéndose una sumatoria si se incluyen en la
sentencia SQL funciones de agregado como sumar o contar; la sintaxis de la
cláusula es:
SELECT Campo FROM
Tabla WHERE criterio GROUP BY campos del grupo.
La cláusula GROUP
BY no es obligatoria, si no existe una función SQL agregada en la instrucción,
los valores resúmenes se omiten; los valores nulos son agrupados por GROUP BY,
pero no se evalúan en las funciones SQL agregadas; se puede
agrupar cualquier campo de la tabla indicada por la cláusula FROM, excepto
campos tipo memo y objetos OLE.
Al usar la
cláusula WHERE se filtran los datos que se requieren agrupar; también se puede
usar la cláusula HAVING para filtrar registros una vez agrupados los datos con
GROUP BY.
Los campos de la
lista GROUP BY puede referirse a cualquier campo de la tabla FROM, incluso si
el campo no está incluido en la instrucción SELECT siempre y cuando SELECT
contenga una función SQL agregada.
El siguiente
ejemplo despejará algunas dudas; la sentencia SQL solicita seleccionar los
datos del campo Fecha y Cliente, sumando el campo Venta de la tabla Ventas,
cuando su estado sea finalizado, agrupando las ventas por fecha.
SELECT Fecha,
Cliente, Estado SUM (Venta) FROM Ventas  WHERE Estado=
‘Finalizado’ GROUP BY Fecha
CLÁUSULA
HAVING
 
La cláusula
HAVING es similar a la cláusula WHERE, la diferencia reside en que permite
filtrar datos ya agrupados por la cláusula GROUP BY, es decir muestra los
registros ya agrupados y que cumplan los criterios establecidos en la cláusula
HAVING.
La siguiente
sentencia SQL expresa que se deben mostrar los campos Fecha, Cliente y sumar
(Venta) de la tabla Ventas, cuando su estado sea finalizado, agrupando datos
por Fecha, una vez agrupados mostrar las ventas superiores a 60000 de los
clientes Dayra Col y Tomy Lee.
SELECT Fecha,
Cliente, Estado, SUM (Venta) FROM Ventas WHERE Estado=
‘Finalizado’ GROUP BY Fecha HAVING SUM (Venta) >600000 AND Cliente =
‘Dayra Col’ OR Cliente = ‘Tomy Lee’
CLÁUSULA
ORDER BY
Cuando se realiza
una consulta muchas veces se necesita ordenar registros y especificar el orden
en que se requiere sean devuelto los datos de las distintas tablas ello es
posible con la cláusula ORDER BY, siguiendo el ejemplo anterior si se requiere
que los datos sean devueltos ordenados por Cliente y luego por fecha, la
consulta SQL sería la siguiente: 
SELECT Fecha,
Cliente, Estado, SUM (Venta) FROM Ventas WHERE Estado=
‘Finalizado’ GROUP BY Fecha HAVING SUM (Venta) >600000 AND Cliente =
‘Dayra Col’ OR Cliente = ‘Tomy Lee’ ORDER BY Cliente, Fecha
Si se observa la
sentencia SQL anterior se ordena por más de un campos, los campos deben ir
separados por coma (,); se puede especificar el orden que se requieres es decir
Ascendente o Descendente, siempre el orden por defecto es Ascendente; la
cláusula del ejemplo quedaría así, en caso que quisiéramos ordenar Cliente en
forma Descendente y Fecha en forma Ascendente:
SELECT Fecha,
Cliente, Estado, SUM (Venta) FROM Ventas WHERE Estado=
‘Finalizado’ GROUP BY Fecha HAVING SUM (Venta) >600000 AND Cliente =
‘Dayra Col’ OR Cliente = ‘Tomy Lee’ ORDER BY Cliente DESC, Fecha ASC
Otro ejemplo
menos complicado donde solo se solicita ordenar se muestra a continuación:

SELECT Fecha, Cliente, Estado, Venta FROM Ventas  ORDER BY Cliente
SELECT Fecha, Cliente, Estado, Venta FROM Ventas  ORDER
BY Cliente DESC
SELECT Fecha,
Cliente, Estado, Venta FROM Ventas  ORDER BY Cliente DESC, Fecha
ASC

Continua en parte I Principales sentencias SQL

Continua en parte II Seleccionar Datos Comando SELECT

Continua en parte III Insertar, actualizar y eliminar Datos Comando INSERT, UPDATE DELETE

Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.

.

If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.
Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends