viernes, 22 de agosto de 2014

componentes de SQL

SQL (Structured Query Languaje). Lenguaje de consulta estructurado.


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. SQL se utiliza para crear objetos QueryDef, como el argumento de origen del método OpenRecordSet y como la propiedad RecordSource del control de datos. 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.


Componentes del lenguaje SQL.

Tipos de datos.

SQL admite una variada gama de tipos de datos para el tratamiento de la información contenida en las tablas, los tipos de datos pueden ser numéricos (con o sin decimales), alfanuméricos, de fecha o booleanos(si o no). Según el gestor de base de datos que estemos utilizando los tipos de datos varían, pero se reducen básicamente a los expuestos anteriormente, aunque en la actualidad casi todos los gestores de bases de datos soportan un nuevo tipo, el BLOB(Binary Large Object), que es un tipo de datos especial, destinado a almacenar archivos, imágenes...

Dependiendo de cada gestor de bases de datos el nombre que se da a cada uno de estos tipos puede variar. Básicamente tenemos los siguientes tipos de datos.


Comandos

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
CREATEUtilizado para crear nuevas tablas, campos e índices
DROPEmpleado para eliminar tablas e índices
ALTERUtilizado para modificar las tablas agregando campos o cambiando la definición de los campos.


Comandos DML
Comando
Descripción
SELECTUtilizado para consultar registros de la base de datos que satisfagan un criterio determinado
INSERTUtilizado para cargar lotes de datos en la base de datos en una única operación.
UPDATEUtilizado para modificar los valores de los campos y registros especificados
DELETEUtilizado para eliminar registros de una tabla de una base de datos


Cláusulas
Las cláusulas son condiciones de modificación utilizadas para definir los datos que desea seleccionar o manipular.

Cláusula
Descripción
FROMUtilizada para especificar la tabla de la cual se van a seleccionar los registros
WHEREUtilizada para especificar las condiciones que deben reunir los registros que se van a seleccionar
GROUP BYUtilizada para separar los registros seleccionados en grupos específicos
HAVINGUtilizada para expresar la condición que debe satisfacer cada grupo
ORDER BYUtilizada para ordenar los registros seleccionados de acuerdo con un orden específico

1.4 Operadores Lógicos

Operador
Uso
ANDEs el "y" lógico. Evalua dos condiciones y devuelve un valor de verdad sólo si ambas son ciertas.
OREs el "o" lógico. Evalúa dos condiciones y devuelve un valor de verdar si alguna de las dos es cierta.
NOTNegación lógica. Devuelve el valor contrario de la expresión.

1.5 Operadores de Comparación

Operador
Uso
<Menor que
>Mayor que
<>Distinto de
<=Menor ó Igual que
>=Mayor ó Igual que
=Igual que
BETWEENUtilizado para especificar un intervalo de valores.
LIKEUtilizado en la comparación de un modelo
InUtilizado para especificar registros de una base de datos

1.6 Funciones de Agregado
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
AVGUtilizada para calcular el promedio de los valores de un campo determinado 
COUNTUtilizada para devolver el número de registros de la selección 
SUMUtilizada para devolver la suma de todos los valores de un campo determinado 
MAXUtilizada para devolver el valor más alto de un campo especificado 
MINUtilizada para devolver el valor más bajo de un campo especificado 

Tablas en SQL:   Una base de datos es un sistema relacional que está compuesto por un conjunto de tablas, que corresponden a las relaciones del modelo relacional.

En la terminología usada en SQL no se alude a las relaciones, del mismo modo que no se usa el término atributo, pero sí la palabra columna, y no se habla de tupla, sino de línea.


Creación de tablas en SQL:

·         Creamos la base de datos, para esto usamos la siguiente línea de código:



Create DATABASE nombredb;







Ejemplo.

Como se puede observar en la imagen se creó una base de datos de nombre ejemplo.




Eliminación de tablas.
Podemos eliminar una tabla de una base de datos mediante la instruccion DROP TABLE.


DROP TABLE
 <nombre_tabla>;


La instrucción DROP TABLE elimina de forma permanente la tabla y los datos en ella contenida.
Si intentamos eliminar una tabla que tenga registros relacionados a través de una clave externa la instrucción DROP TABLE fallará por integridad referencial.
Cuando eliminamos una tabla eliminamos también sus índices.

jueves, 21 de agosto de 2014

Actualización de datos

Actualización de datos.
La sentencia UPDATE.
    Para la actualización de datos SQL dispone de la sentencia UPDATE. La sentencia UPDATE permite la actualización de uno o varios registros de una única tabla. La sintaxis de la sentencia UPDATE es la siguiente 

UPDATE <nombre_tabla> 
SET  <campo1> = <valor1>
        {[,<campo2> = <valor2>,...,<campoN> = <valorN>]}
[ WHERE <condicion>]; 
    Las siguientes sentencias actualizan los datos de la tabla tCoches con los valores de la tabla tMarca obtenidos anteriormente en la página dedicada a la inserción de datos

UPDATE tCoches
SET  marca = '1'
WHERE marca = 'FORD';

 
UPDATE tCoches
SET  marca = '2'
WHERE marca = 'RENAULT'; 

 
UPDATE tCoches
SET  marca = '3'
WHERE marca = 'SEAT';
    Notese que los valores para el campo marca aparecen entrecomillados, ya que es un campo de tipo varchar. Los valores con los que actualicemos los datos deben ser del tipo del campo.
    Un aspecto a tener en cuenta es que los campos que forman la primary key de una tabla sólo se podrán modificar si los registros no están referenciados en ninguna otra tabla. En nuestro caso sólo podremos modificar la matrícula de un coche si no tiene registros asociados en la tabla tAlquileres.
Esto puede causar poblemas, ya que podríamos habernos equivocado al dar de alta el coche en la tabla tCoches y detectar el error despues de alquilar el coche. En tal caso tendríamos dar de alta un nuevo coche con la matrícula correcta, actualizar los registros de la tabla alquileres y por último borrar el registro erroneo de la tabla tCoches. Este proceso puede ser bastante complicado en el caso de que existiran más relaciones con la tabla. Se podría considerar que la clave primaria de la tabla esta mal definida y que la matrícula no debe ser el elemento que identifique el coche. Una alternativa seria crear un código autonumérico para la tabla tCoches que realizará las veces de clave primaria y crear un índice único para la matrícula, este diseño tambien tiene sus "pegas", por lo que debemos decidir que modelo utilizar, y seleccionar las claves primarias con sumo cuidado. 

Insertar datos

Insertar datos.
    Hasta ahora hemos visto como se almacenan los datos en una base de datos y como consultar esos datos almacenados, pero no hemos visto como almacenar dichos datos.
    Para almacenar datos en una base de datos debemos insertar filas en las tablas. Para ellos SQL pone a nuestra disposición la sentencia INSERT.

Inserción de filas
    El proceso de inserción de filas consiste en añadir a una tabla una o más filas y en cada fila todos o parte de sus campos.
    Podemos distinguir dos formas de insertar filas:
  • Inserción individual de filas.
  • Inserción multiple de filas.
    La sintaxis de la sentencia INSERT es diferente según cual sea nuestro proposito.
    Sólo podremos omitir un campo al efectuar una inserción cuando este acwepte valores nulos.

Inserción individual de filas
    Para realizar la insercción individual de filas SQL posee la instrucción INSERT INTO.La insercción individual de filas es la que más comunmente utilizaremos. Su sintaxis es la siguiente:

INSERT INTO <nombre_tabla> 
[(<campo1>[,<campo2>,...])]
values (<valor1>,<valor2>,...);
    Como se puede observar la sentencia tiene dos partes claramente diferenciadas, por un lado la propia INSERT INTO seguida de la lista de campos en los que queremos insertar los datos, y por otro la lista de valores que queremos insertar en los campos. La mejor forma de ver esto es a través de un ejemplo.

INSERT INTO tCoches 
(matricula,
 marca      ,
 modelo     ,
 color      ,
 numero_kilometros)
values ('M1111CA',
 'RENAULT',
 'MEGANE TR100',
 'NEGRO DIAMANTE',
 78000);
Nota:Hemos utilizado el color rojo para los datos de tipo texto, entrecomillados con la comilla simple, y el azul para 
los numericos.

consulta de datos

Consulta de datos.
    El proceso más importate que podemos llevar a cabo en una base de datos es la consulta de los datos. De nada serviría una base de datos si no puedieramos consultarla. Es además la operación que efectuaremos con mayor frecuencia.
    Para consultar la información SQL pone a nuestra disposición la sentencia SELECT.

La sentencia SELECT
    La sentencia SELECT nos permite consultar los datos almacenados en una tabla de la base de datos.
    El formato de la sentencia select es:

SELECT [ALL | DISTINCT ]
             <nombre_campo> [{,<nombre_campo>}]
FROM <nombre_tabla>|<nombre_vista>
        [{,<nombre_tabla>|<nombre_vista>}]
[WHERE <condicion> [{ AND|OR <condicion>}]]
[GROUP BY <nombre_campo> [{,<nombre_campo >}]]
[HAVING <condicion>[{ AND|OR <condicion>}]]
[ORDER BY <nombre_campo>|<indice_campo> [ASC | DESC]
                [{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]]
    Veamos por partes que quiere decir cada una de las partes que conforman la sentecia.
 
Significado
SELECT
Palabra clave que indica que la sentencia de SQL que queremos ejecutar es de selección. 
  ALL
Indica que queremos seleccionar todos los valores.Es el valor por defecto y no suele especificarse casi nunca.
DISTINCT 
Indica que queremos seleccionar sólo los valores distintos.
FROM
Indica la tabla (o tablas) desde la que queremos recuperar los datos. En el caso de que exista más de una tabla se denomina a la consulta "consulta combinada" o "join". En las consultas combinadas es necesario aplicar una condición de combinación a través de una cláusula WHERE.
WHERE
Especifica una condición que debe cumplirse para que los datos sean devueltos por la consulta. Admite los operadores lógicos AND y OR.
GROUP BY
Especifica la agrupación que se da a los datos. Se usa siempre en combinación con funciones agregadas.
HAVING
Especifica una condición que debe cumplirse para los datosEspecifica una condición que debe cumplirse para que los datos sean devueltos por la consulta. Su funcionamiento es similar al de WHERE pero aplicado al conjunto de resultados devueltos por la consulta. Debe aplicarse siempre junto a GROUP BY y la condicion debe estar referida a los campos contenidos en ella.
ORDER BY
Presenta el resultado ordenado por las columnas indicadas. El orden puede expresarse con ASC (orden ascendente) y DESC (orden descendente). El valor predeterminado es ASC.

vistas

Vistas
En el modelo de datos relacional la forma de guardar la información no es la mejor para ver los datos
Una vista es una consulta, que refleja el contenido de una o más tablas, desde la que se puede acceder a los datos como si fuera una tabla.
Dos son las principales razones por las que podemos crear vistas.
  • Seguridad, nos pueden interesar que los usuarios tengan acceso a una parte de la información que hay en una tabla, pero no a toda la tabla.
  • Comodidad, como hemos dicho el modelo relacional no es el más comodo para visualizar los datos, lo que nos puede llevar a tener que escribir complejas sentencias SQL, tener una vista nos simplifica esta tarea.
Las vistas no tienen una copia física de los datos, son consultas a los datos que hay en las tablas, por lo que si actualizamos los datos de una vista, estamos actualizando realmente la tabla, y si actualizamos la tabla estos cambios serán visibles desde la vista.
Nota: No siempre podremos actualizar los datos de una vista, dependerá de la complejidad de la misma (dependerá de si el cojunto de resultados tiene acceso a la clave principal de la tabla o no), y del gestor de base de datos. No todos los gestores de bases de datos permiten actualizar vistas, ORACLE, por ejemplo, no lo permite, mientrar que SQL Server si.


Creación de vistas.
Para crear una vista debemos utilizar la sentencia CREATE VIEW, debiendo proporcionar un nombre a la vista y una sentencia SQL SELECT válida.

CREATE VIEW <nombre_vista>
AS
(<sentencia_select>);
Ejemplo:Crear una vista sobre nuestra tabla alquileres, en la que se nos muestre el nombre y apellidos del cliente en lugar de su código.

CREATE VIEW vAlquileres
AS(
SELECT nombre, 
       apellidos, 
       matricula
FROM tAlquileres, 
     tClientes 
WHERE ( tAlquileres.codigo_cliente = tClientes.codigo )
) 
Si queremos, modificar la definición de nuestra vista podemos utilizar la sentencia ALTER VIEW, de forma muy parecida a como lo haciamos con las tablas. En este caso queremos añadir los campos fx_alquiler y fx_devolucion a la vista.
ALTER VIEW vAlquileres
AS(
SELECT nombre, 
       apellidos, 
       matricula, 
       fx_alquiler, 
       fx_devolucion 
FROM tAlquileres, 
     tClientes 
WHERE ( tAlquileres.codigo_cliente = tClientes.codigo )
)

indices

Definición de Índices
Un índice es una estructura de datos que permite acceder a diferentes filas de una misma tabla a través de un campo (o campos clave).
Un índice permite un acceso mucho más rápido a los datos.

Introducción a los índices.
Para entender lo que es un índice debemos saber primero como se almacena la información internamente en las tablas de una base de datos. Cada tabla se divide en páginas de datos, imaginemos un libro, podriamos escribirlo en "una sola hoja enorme" al estilo pergamino egipcio, o bien en páginas a las que podemos acceder rápidamente a traves de un índice. Está idea es la que se aplica en el mundo de las bases de datos, la información esta guardada en una tabla (el libro) que tiene muchas hojas de datos (las páginas del libro), con un índice en el que podemos buscar la información que nos interesa.
Si queremos buscar la palabra zapato en un diccionario , ¿qué hacemos?
  • Leemos todo el diccionario hasta encontrar la palabra, con lo que nos habremos leido el diccionario enterito (¡seguro que aprenderiamos un montón!) 
  • Buscamos en el índice en que página está la letra z, y es en esa página donde buscamos.
Ni que decir tiene que la opción dos es la correcta, y es de este modo como se utiliza un índice en las bases de datos, se define el ínidice a través de un campo (o campos) y es a partir de este punto desde donde de busca.
Los índices se actualizan automáticamente cuando realizamos operaciones de escritura en la base de datos. Este es un aspecto muy importante de cara al rendimiento de las operaciones de escritura, ya que además de escribir los datos en la tabla se escribiran también en el indice. Un número elevado de índices hará más lentas estas operaciones. Sin embargo, salvo casos excepcionales, el beneficio que aportan los indices compensa (de largo) esta penalización.

Creación de índices
La creación de índices, como ya hemos visto, permite acelerar las consultas que se realizan en la base de datos.
Las sentencias de SQL para manipular índices son:
CREATE INDEX;
DROP INDEX;
La sintaxis para la creación de indices es la siguiente:

CREATE [UNIQUE] INDEX <nombre_indice>
ON <nombre_tabla>(
      <nombre_campo> [ASC | DESC]
                  {,<nombre_campo> [ASC | DESC]})
                  );
La pálabra clave UNIQUE especifica que que no pueden existir claves duplicadas en el índice.
ASC | DESC especifican el criterio de ordenación elegido, ascendente o descendente, por defecto es ascendente.
Ejemplo: En el apartado dedicado a la definición de tablas creamos la tabla tClientes, este ejmplo crea un índice único en el campo NIF. Esto nos permitirá buscar mucho mas rápido por el campo NIF y nos asegurará que no tengamos dos NIF iguales.

CREATE UNIQUE INDEX UIX_CLIENTES_NIF
ON tCLIENTES (NIF);
Las claves primarias son índices.
Los nombres de los índices deben ser únicos.
Para eliminar un índice debemos emplear la sentencia DROP INDEX.

DROP INDEX <nombre_tabla>.<nombre_indice>;
Ejemplo:Para eliminar el índice creado anteriormente.

DROP INDEX tCLIENTES.UIX_CLIENTES_NIF;

tablas

Tablas
El lenguaje de definición de datos (DDL, Data Definition Language) es el encargado de permitir la descripcion de los objetos que forman una base de datos.
El lenguaje de definición de datos le va a permitir llevar a cabo las siguientes acciones:
  • Creación de tablas, índices y vistas.
  • Modificación de las estructura de tablas, índices y vistas.
  • Supresión de tablas, índices y vistas.
Pero antes de continuar vamos a comentar la nomenclatura que emplearemos, si tiene algún conocimiento de programación le resultará familiar.

Nomenclatura
La sintaxis empleada para la sentencias en las diferentes páginas esta basada en la notación EBNF. Vamos a ver el significado de algunos simbolos.
Símbolo
Significado
< >
Encierran parámetros de una orden que el usuario debe sustituir al escribir dicha orden por los valores que queramos dar a los parámetros.
[ ]
Indica que su contenido es opcional.
{ }
Indica que su contenido puede repetirse una o mas veces.
|
Separa expresiones. Indica que pueden emplearse una u otra expresión pero no más de una a la vez.
Además las palabras clave aparecen en mayúscula negrita y los argumentos en minúscula cursiva.
La sintaxis de una sentencia tendrá un aspecto como este:

CREATE TABLE <nombre_tabla>
(
<nombre_campo> <tipo_datos(tamaño)>,
{
<nombre_campo> <tipo_datos(tamaño)>} 
) ;