Introducción al lenguaje SQL.
1.Introduccion al lenguaje SQL.
El lenguaje de consulta estructurado (SQL) es un lenguaje de
base de datos normalizado, utilizado por el motor de base de datos de Microsoft
Jet. También se puede utilizar con el método Execute para crear y manipular
directamente las bases de datos Jet y crear consultas SQL de paso a través para
manipular bases de datos remotas cliente - servidor.
El lenguaje SQL está compuesto por comandos, cláusulas,
operadores y funciones de agregado. Estos elementos se combinan en las
instrucciones para crear, actualizar y manipular las bases de datos.
Existen dos tipos de comandos SQL:
- los
DLL que permiten crear y definir nuevas bases de datos, campos e índices.
- los
DML que permiten generar consultas para ordenar, filtrar y extraer datos
de la base de datos.
Comandos DLL
|
|
Comando
|
Descripción
|
CREATE
|
Utilizado para crear nuevas tablas, campos e índices
|
DROP
|
Empleado para eliminar tablas e índices
|
ALTER
|
Utilizado para modificar las tablas agregando campos o
cambiando la definición de los campos.
|
Comandos DML
|
|
Comando
|
Descripción
|
SELECT
|
Utilizado para consultar registros de la base de datos que
satisfagan un criterio determinado
|
INSERT
|
Utilizado para cargar lotes de datos en la base de datos
en una única operación.
|
UPDATE
|
Utilizado para modificar los valores de los campos y
registros especificados
|
DELETE
|
Utilizado para eliminar registros de una tabla de una base
de datos
|
Las cláusulas son condiciones de modificación utilizadas
para definir los datos que desea seleccionar o manipular.
Cláusula
|
Descripción
|
FROM
|
Utilizada para especificar la tabla de la cual se van a
seleccionar los registros
|
WHERE
|
Utilizada para especificar las condiciones que deben
reunir los registros que se van a 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
|
Utilizada para ordenar los registros seleccionados de
acuerdo con un orden específico
|
Operador
|
Uso
|
AND
|
Es el "y" lógico. Evalua dos condiciones y
devuelve un valor de verdad sólo si ambas son ciertas.
|
OR
|
Es el "o" lógico. Evalúa dos condiciones y
devuelve un valor de verdar si alguna de las dos es cierta.
|
NOT
|
Negación lógica. Devuelve el valor contrario de la
expresión.
|
Operador
|
Uso
|
<
|
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
|
Las funciones de agregado se usan dentro de una cláusula
SELECT en grupos de registros para devolver un único valor que se aplica a un
grupo de registros.
Función
|
Descripción
|
AVG
|
Utilizada para calcular el promedio de los valores de un
campo determinado
|
COUNT
|
Utilizada para devolver el número de registros de la
selección
|
SUM
|
Utilizada para devolver la suma de todos los valores de un
campo determinado
|
MAX
|
Utilizada para devolver el valor más alto de un campo
especificado
|
MIN
|
Utilizada para devolver el valor más bajo de un campo
especificado
|
Las consultas de selección se utilizan para indicar al motor
de datos que devuelva información de las bases de datos, esta información es
devuelta en forma de conjunto de registros que se pueden almacenar en un objeto
recordset. Este conjunto de registros es modificable.
La sintaxis básica de una consulta de selección es la
siguiente:
SELECT Campos FROM Tabla;
En donde campos es la lista de campos que se deseen
recuperar y tabla es el origen de los mismos, por ejemplo:
SELECT Nombre,
Telefono FROM Clientes;
Esta consulta devuelve un recordset con el campo nombre y
teléfono de la tabla clientes.
Adicionalmente se puede especificar el orden en que se
desean recuperar los registros de las tablas mediante la claúsula ORDER BY Lista
de Campos. En donde Lista de campos representa los campos a ordenar. Ejemplo:
SELECT CodigoPostal,
Nombre, Telefono FROM Clientes ORDER BY Nombre;
Esta consulta devuelve los campos CodigoPostal, Nombre,
Telefono de la tabla Clientes ordenados por el campo Nombre.
Se pueden ordenar los registros por mas de un campo, como
por ejemplo:
SELECT CodigoPostal,
Nombre, Telefono FROM Clientes ORDER BY
CodigoPostal, Nombre;
CodigoPostal, Nombre;
Incluso se puede especificar el orden de los registros:
ascendente mediante la claúsula (ASC -se toma este valor por defecto) ó
descendente (DESC)
SELECT CodigoPostal,
Nombre, Telefono FROM Clientes ORDER BY
CodigoPostal DESC , Nombre ASC;
CodigoPostal DESC , Nombre ASC;
El predicado se incluye entre la claúsula y el primer nombre
del campo a recuperar, los posibles predicados son:
Predicado
|
Descripción
|
ALL
|
Devuelve todos los campos de la tabla
|
TOP
|
Devuelve un determinado número de registros de la tabla
|
DISTINCT
|
Omite los registros cuyos campos seleccionados coincidan
totalmente
|
DISTINCTROW
|
Omite los registros duplicados basandose en la totalidad
del registro y no sólo en los campos seleccionados.
|
ALL
Si no se incluye ninguno de los predicados se asume ALL. El
Motor de base de datos selecciona todos los registros que cumplen las
condiciones de la instrucción SQL. No se conveniente abusar de este predicado
ya que obligamos al motor de la base de datos a analizar la estructura de la
tabla para averiguar los campos que contiene, es mucho más rápido indicar el
listado de campos deseados.
SELECT ALL FROM Empleados;
SELECT * FROM Empleados;
SELECT * FROM Empleados;
En determinadas circunstancias es necesario asignar un
nombre a alguna columna determinada de un conjunto devuelto, otras veces por
simple capricho o por otras circunstancias.
Para resolver todas ellas tenemos
la palabra reservada AS que se encarga de asignar el nombre que deseamos a la
columna deseada.
Tomado como referencia el ejemplo anterior podemos hacer que
la columna devuelta por la consulta, en lugar de llamarse apellido (igual que
el campo devuelto) se llame Empleado.
En este caso procederíamos de la
siguiente forma:
SELECT DISTINCTROW Apellido AS Empleado FROM Empleados;
3. La cláusula WHERE
La cláusula WHERE puede usarse para determinar qué registros
de las tablas enumeradas en la cláusula FROM aparecerán en los resultados de la
instrucción SELECT.
Si no se emplea esta cláusula,
la consulta devolverá todas las filas de la tabla. WHERE es opcional, pero
cuando aparece debe ir a continuación de FROM.
SELECT Apellidos,
Salario FROM Empleados WHERE Salario > 21000;
4. Agrupamiento
Combina los registros con valores idénticos, en la lista de
campos especificados, en un único registro. Para cada registro se crea un valor
sumario si se incluye una función SQL agregada, como por ejemplo Sum o Count,
en la instrucción SELECT. Su sintaxis es:
SELECT campos FROM tabla WHERE criterio GROUP
BY campos del grupo
GROUP BY es opcional.
Los valores de resumen se omiten
si no existe una función SQL agregada en la instrucción SELECT. Los valores
Null en los campos GROUP BY se agrupan y no se omiten.
No obstante, los valores
Null no se evalúan en ninguna de las funciones SQL agregadas.
Se utiliza la cláusula WHERE para excluir aquellas filas que
no desea agrupar, y la cláusula HAVING para filtrar los registros una vez
agrupados.
A menos que contenga un dato Memo u Objeto OLE , un campo de
la lista de campos GROUP BY puede referirse a cualquier campo de las tablas que
aparecen en la cláusula FROM, incluso si el campo no esta incluido en la
instrucción SELECT, siempre y cuando la instrucción SELECT incluya al menos una
función SQL agregada.
Todos los campos de la lista de campos de SELECT deben o
bien incluirse en la cláusula GROUP BY o como argumentos de una función SQL
agregada.
SELECT Id_Familia, Sum(Stock) FROM Productos GROUP
BY Id_Familia;
Una vez que GROUP BY ha combinado los registros, HAVING
muestra cualquier registro agrupado por la cláusula GROUP BY que satisfaga las
condiciones de la cláusula HAVING.
HAVING es similar a WHERE, determina qué registros se
seleccionan. Una vez que los registros se han agrupado utilizando GROUP BY,
HAVING determina cuales de ellos se van a mostrar.
SELECT Id_Familia
Sum(Stock) FROM Productos GROUP BY Id_Familia
HAVING Sum(Stock) > 100 AND NombreProducto Like BOS*;
HAVING Sum(Stock) > 100 AND NombreProducto Like BOS*;