Está en la página 1de 57

REPÚBLICA BOLIVARIANA DE VENEZUELA

MINISTERIO DEL PODER POPULAR PARA LA DEFENSA


UNIVERSIDAD NACIONAL EXPERIMENTAL POLITÉCNICA
DE LA FUERZA ARMADA NACIONAL BOLIVARIANA
U.N.E.F.A.
NÚCLEO - ANZOÁTEGUI

LENGUAJE SQL

PROFESORA: BACHILLERES:

ING.YACKELINE HERNANDEZ OMRAN NATHALIE

RANGEL LUIS

POLLO JOSE

SAN TOME, ENERO 2013


LENGUAJES DE BASES DE DATOS

Es un Conjunto coordinado de programas, procedimientos, lenguajes, etc. que


suministran, tanto a los usuarios como a los analistas, programadores o
administrador los medios necesarios para describir, recuperar y manipular los
datos almacenados en la base, manteniendo su integridad, confidencialidad y
seguridad.
HISTORIA
 1963.- Se da él término de Bases de Datos en el Simposio de Santa Mónica
(`DATA BASE')
 1967.- Codasyl, cambia su nombre por el de `Data Base Taskgroup'.

TÉRMINOS
La base de datos debería ser una colección o conjunto de datos. Tan importante
es almacenar el contenido como también la relación entre ellos.
 No son redundantes.
 Puedan servir a cualquier aplicación.
 Procedimientos seguros para modificación:
 Consulta ð Genera errores pero no inconsistencia.
 Altas / Bajas.
 Usuarios múltiples.
 Los datos deben llegar a tiempo.
 Se deben almacenar restricciones (seguridad).
 Independencia.-
 Datos / Procedimiento.
 Datos / Soporte físico.
 Soporte à Acceso directo.

VENTAJAS
 Independencia de datos y tratamiento.
 Cambio en datos no implica cambio en programas y viceversa (Menor coste de
mantenimiento).
 Coherencia de resultados.
 Reduce redundancia:
 Acciones lógicamente únicas.
 Se evita inconsistencia.
 Mejora en la disponibilidad de datos
 No hay dueño de datos (No igual a ser públicos).
 Ni aplicaciones ni usuarios.
 Guardamos descripción (Idea de catálogos).
 Cumplimiento de ciertas normas.
 Restricciones de seguridad.
 Accesos (Usuarios a datos).
 Operaciones (Operaciones sobre datos).
Otras ventajas:
 Más eficiente gestión de almacenamiento.
 Efecto sinérgico.

DESVENTAJAS
 Situación Sistema trad. ð Sist. De BD.
 Fuerte coste inicial.
 Programa
 Personal
 Equipos.
 Rentable a medio o largo plazo.
 No hay standard
 No solo se puede cambiar datos sino también el enfoque del sistema

Las bases de datos tienen muchos lenguajes pero se pueden tomar 4 tipos
Básicos que son:

1. Base de datos tipo fichero: Las bases de datos de fichero plano consisten en
ficheros de texto divididos en filas y columnas. Estas bases de datos son las más
primitivas y quizás ni tan siquiera merezcan considerarse como tales. Pueden ser
útiles para aplicaciones muy simples, pero no para aplicaciones medianas o
complejas, debido a sus grandes limitaciones.
2. Base de datos tipo relacional: Las bases de datos relacionales son las más
populares actualmente. Su nombre proviene de su gran ventaja sobre las bases
de datos de fichero plano: la posibilidad de relacionar varias tablas de datos entre
sí, compartiendo información y evitando la duplicidad y los problemas que ello
conlleva (espacio de almacenamiento y redundancia). Existen numerosas bases
de datos relacionales para distintas plataformas (Access, Paradox, Oracle,
Sybase) y son ampliamente utilizadas. Sin embargo, tienen un punto débil: la
mayoría de ellas no admite la incorporación de objetos multimedia tales como
sonidos, imágenes o animaciones.

3. Base de datos tipo orientada a objetos: Las bases de datos orientadas a


objetos incorporan el paradigma de la Orientación a Objetos (OO) a las bases de
datos. La base de datos está constituida por objetos, que pueden ser de muy
diversos tipos, y sobre los cuales se encuentran definidas unas operaciones. Las
bases de datos orientadas a objetos pueden manejar información binaria (como
objetos multimedia) de una forma eficiente. Su limitación suele residir en su
especialización, ya que suelen estar diseñadas para un tipo particular de objetos
(por ejemplo, una base de datos para un programa de CAD).

4. Base de datos tipo hibrido: Las bases de datos híbridas combinan


características de las bases de datos relacionales y las bases de datos orientadas
a objetos. Manejan datos textuales y datos binarios, a los cuales se extienden las
posibilidades de consulta. Es una tecnología reciente y aún existen pocas en el
mercado.

LENGUAJE COMERCIAL DE CONSULTA DE BASES DE DATOS (SQL)


DEFINICIÓN

El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos


normalizado, utilizado por los diferentes motores de bases de datos para realizar
determinadas operaciones sobre los datos o sobre la estructura de los mismos.
Pero como sucede con cualquier sistema de normalización hay excepciones para
casi todo; de hecho, cada motor de bases de datos tiene sus peculiaridades y lo
hace diferente de otro motor, por lo tanto, el lenguaje SQL normalizado (ANSI) no
nos servirá para resolver todos los problemas, aunque si se puede asegurar que
cualquier sentencia escrita en ANSI será interpretable por cualquier motor de
datos.
BREVE HISTORIA

La historia de SQL (que se pronuncia deletreando en inglés las letras que lo


componen, es decir "ese-cu-ele" y no "siquel" como se oye a menudo) empieza en
1974 con la definición, por parte de Donald Chamberlin y de otras personas que
trabajaban en los laboratorios de investigación de IBM, de un lenguaje para la
especificación de las características de las bases de datos que adoptaban el
modelo relacional. Este lenguaje se llamaba SEQUEL (Structured English Query
Language) y se implementó en un prototipo llamado SEQUEL-XRM entre 1974 y
1975. Las experimentaciones con ese prototipo condujeron, entre 1976 y 1977, a
una revisión del lenguaje (SEQUEL/2), que a partir de ese momento cambió de
nombre por motivos legales, convirtiéndose en SQL. El prototipo (System R),
basado en este lenguaje, se adoptó y utilizó internamente en IBM y lo adoptaron
algunos de sus clientes elegidos. Gracias al éxito de este sistema, que no estaba
todavía comercializado, también otras compañías empezaron a desarrollar sus
productos relacionales basados en SQL. A partir de 1981, IBM comenzó a
entregar sus productos relacionales y en 1983 empezó a vender DB2. En el curso
de los años ochenta, numerosas compañías (por ejemplo Oracle y Sybase, sólo
por citar algunos) comercializaron productos basados en SQL, que se convierte en
el estándar industrial de hecho por lo que respecta a las bases de datos
relacionales.

En 1986, el ANSI adoptó SQL (sustancialmente adoptó el dialecto SQL de IBM)


como estándar para los lenguajes relacionales y en 1987 se transfomó en
estándar ISO. Esta versión del estándar va con el nombre de SQL/86. En los años
siguientes, éste ha sufrido diversas revisiones que han conducido primero a la
versión SQL/89 y, posteriormente, a la actual SQL/92.

El hecho de tener un estándar definido por un lenguaje para bases de datos


relacionales abre potencialmente el camino a la intercomunicabilidad entre todos
los productos que se basan en él. Desde el punto de vista práctico, por desgracia
las cosas fueron de otro modo. Efectivamente, en general cada productor adopta e
implementa en la propia base de datos sólo el corazón del lenguaje SQL (el así
llamado Entry level o al máximo el Intermediate level), extendiéndolo de manera
individual según la propia visión que cada cual tenga del mundo de las bases de
datos.

Actualmente, está en marcha un proceso de revisión del lenguaje por parte de los
comités ANSI e ISO, que debería terminar en la definición de lo que en este
momento se conoce como SQL3. Las características principales de esta nueva
encarnación de SQL deberían ser su transformación en un lenguaje stand-alone
(mientras ahora se usa como lenguaje hospedado en otros lenguajes) y la
introducción de nuevos tipos de datos más complejos que permitan, por ejemplo,
el tratamiento de datos multimediales.
CARACTERÍSTICAS

Una sentencia de SQL es una frase escrita en ingles con la que decimos lo que
queremos obtener como obtener lo y de donde obtenerlo.
Todas las sentencias empiezan con un verbo (palabra reservada que indica la
acción a realizar, seguido del resto de las cláusulas, algunas obligaciones y otras
opciones). Todas las sentencias siguen una sintaxis para que se ejecuten
correctamente.

El SQL es un lenguaje de acceso a bases de datos que explota la flexibilidad y


potencia de los sistemas relacionales y permite así gran variedad de operaciones.

Es un lenguaje declarativo de "alto nivel" o "de no procedimiento" que, gracias a


su fuerte base teórica y su orientación al manejo de conjuntos de registros —y no
a registros individuales— permite una alta productividad en codificación y la
orientación a objetos. De esta forma, una sola sentencia puede equivaler a uno o
más programas que se utilizarían en un lenguaje de bajo nivel orientado a
registros. SQL también tiene las siguientes características:

 Lenguaje de definición de datos: El LDD de SQL proporciona comandos


para la definición de esquemas de relación, borrado de relaciones y
modificaciones de los esquemas de relación.
 Lenguaje interactivo de manipulación de datos: El LMD de SQL incluye
lenguajes de consultas basado tanto en álgebra relacional como en cálculo
relacional de tuplas.
 Integridad: El LDD de SQL incluye comandos para especificar las restricciones
de integridad que deben cumplir los datos almacenados en la base de datos.
 Definición de vistas: El LDD incluye comandos para definir las vistas.
 Control de transacciones: SQL tiene comandos para especificar el comienzo
y el final de una transacción.
 SQL incorporado y dinámico: Esto quiere decir que se pueden incorporar
instrucciones de SQL en lenguajes de programación como: C++, C, Java,
Cobol, Pascal y Fortran.
 Autorización: El LDD incluye comandos para especificar los derechos de
acceso a las relaciones y a las vistas.

TIPOS DE DATOS

Los tipos datos básicos de SQL son:

 Date: una fecha de calendario que contiene el año (de cuatro cifras), el mes y
el día.
 Time: La hora del día en horas minutos segundos (el valor predeterminado es
0).
 Timestamp: la combinación de Date y Time.
OPTIMIZACIÓN

Como ya se dijo antes, y suele ser común en los lenguajes de acceso a bases de
datos de alto nivel, el SQL es un lenguaje declarativo. O sea, que especifica qué
es lo que se quiere y no cómo conseguirlo, por lo que una sentencia no establece
explícitamente un orden de ejecución.

El orden de ejecución interno de una sentencia puede afectar gravemente a la


eficiencia del SGBD, por lo que se hace necesario que éste lleve a cabo una
optimización antes de su ejecución. Muchas veces, el uso de índices acelera una
instrucción de consulta, pero ralentiza la actualización de los datos. Dependiendo
del uso de la aplicación, se priorizará el acceso indexado o una rápida
actualización de la información. La optimización difiere sensiblemente en cada
motor de base de datos y depende de muchos factores.

Existe una ampliación de SQL conocida como FSQL (Fuzzy SQL, SQL difuso) que
permite el acceso a bases de datos difusas, usando la lógica difusa. Este lenguaje
ha sido implementado a nivel experimental y está evolucionando rápidamente.

LENGUAJE DE DEFICNION DE DATOS (LDD): DEFINICION

El lenguaje de Definición de datos, en inglés Data Definition Language (DLL), es el


que se encarga de la modificación de la estructura de los objetos de la base de
datos. Existen cuatro operaciones básicas: CREATE, ALTER, DROP y
TRUNCATE.
Un lenguaje de definición de datos (Data Definition Language, DDL por sus siglas
en inglés) es un lenguaje proporcionado por el sistema de gestión de base de
datos que permite a los usuarios de la misma llevar a cabo las tareas de definición
de las estructuras que almacenarán los datos así como de los procedimientos o
funciones que permitan consultarlos.

El lenguaje de programación SQL, el más difundido entre los gestores de bases de


datos, admite las siguientes sentencias de definición: CREATE, DROP y ALTER,
cada una de las cuales se puede aplicar a las tablas, vistas, procedimientos
almacenados y triggers de la base de datos.

Otras que se incluyen dentro del DDL, pero que su existencia depende de la
implementación del estándar SQL que lleve a cabo el gestor de base de datos son
GRANT y REVOKE, los cuales sirven para otorgar permisos o quitarlos, ya sea a
usuarios específicos o a un rol creado dentro de la base de datos.

Una vez finalizado el diseño de una base de datos y escogido un SGBD para su
implementación, el primer paso consiste en especificar el esquema conceptual y el
esquema interno de la base de datos, y la correspondencia entre ambos. En
muchos SGBD no se mantiene una separación estricta de niveles, por lo que el
administrador de la base de datos y los diseñadores utilizan el mismo lenguaje
para definir ambos esquemas, es el lenguaje de definición de datos (LDD). El
SGBD posee un compilador de LDD cuya función consiste en procesar las
sentencias del lenguaje para identificar las descripciones de los distintos
elementos de los esquemas y almacenar la descripción del esquema en el
catálogo o diccionario de datos. Se dice que el diccionario contiene metadatos:
describe los objetos de la base de datos.

Cuando en un SGBD hay una clara separación entre los niveles conceptual e
interno, el LDD sólo sirve para especificar el esquema conceptual. Para especificar
el esquema interno se utiliza un lenguaje de definición de almacenamiento (LDA).
Las correspondencias entre ambos esquemas se pueden especificar en cualquiera
de los dos lenguajes. Para tener una verdadera arquitectura de tres niveles sería
necesario disponer de un tercer lenguaje, el lenguaje de definición de vistas (LDV),
que se utilizaría para especificar las vistas de los usuarios y su correspondencia
con el esquema conceptual
Es un conjunto de declaraciones o definiciones que permiten expresar las
especificaciones del esquema de la base de datos. A partir de estas se genera el
Diccionario de Datos. Igualmente permite determinar la estructura de
almacenamiento y los métodos de acceso. Permiten crear, las bases de datos, las
tablas, definir índices y reglas de integridad. Igualmente modificar y borrar lo antes
definido.
 CREATE
Este comando crea un objeto dentro de la base de datos. Puede ser una tabla,
vista, índice, trigger, función, procedimiento o cualquier otro objeto que el motor de
la base de datos soporte.
Ejemplo 1 (creación de una tabla):
CREATE TABLE TABLA_NOMBRE (
cl integer not null
nombre VARCHAR (50)
fecha_nac DATE NOT NULL,
PRIMARY KEY (my_field1, my_field 2)
 ALTER
Este comando permite modificar la estructura de un objeto- Se pueden agregar /
quitar campos a una tabla, modificar el tipo de un campo, agregar / quitar índices a
una tabla, modificar un trigger, etc.
Ejemplo 1 (agregar columna a una tabla):
ALTER TABLE TABLA NOMBRE (
ADD NUEVO_ CAMPO INT UNSIGNED
)
 DROP
Este comando elimina un objeto de la base de datos. Puede ser una tabla, vista,
índice, trigger, función, procedimiento o cualquier otro objeto que el motor de la
base de datos soporte. Se puede combinar con la sentencia ALTER.
Ejemplo 1:
DROP TABLE TABLA_NOMBRE
Ejemplo 2:
ALTER TABLE TABLA_NOMBRE
(
DROP COLUMN CAMPO_NOMBRE 1
)
 TRUNCATE
Este comando trunca todo el contenido de una tabla. La ventaja sobre el comando
DELETE, es que si se quiere borrar todo el contenido de la tabla, es mucho más
rápido, especialmente si la tabla es muy grande, la desventaja es que TRUNCATE
solo sirve cuando se quiere eliminar absolutamente todos los registros, ya que no
se permite la cláusula WHERE. Si bien, en un principio, esta sentencia parecería
ser DML (Lenguaje de Manipulación de Datos), es en realidad una DDL, ya que
internamente, el comando truncate borra la tabla y la vuelve a crear y no ejecuta
ninguna transacción.
Ejemplo 1:
TRUNCATE TABLE TABLA_NOMBRE
LENGUAJE INTERACTIVO DE MANIPULACION DE DATOS (LMD):
DEFINICION

Este lenguaje permite la utilización de los datos almacenados en la base de datos,


y es usado generalmente por usuarios finales o por aplicaciones cliente utilizadas
por ellos.
La forma más común de utilización del LMD es mediante el uso de lenguajes de
programación convencionales que poseen al LMD del SGBD como lenguaje
embebido. Así, se puede programar la aplicación cliente en el lenguaje que se
elija, pudiendo realizar llamadas a sentencias del LMD cuando sea necesario. Se
diferencian dos tipos de sentencias de manipulación de dato.

Un lenguaje de manipulación de datos (Data Manipulation Language, o DML en


inglés) es un lenguaje proporcionado por el sistema de gestión de base de datos
que permite a los usuarios llevar a cabo las tareas de consulta o manipulación de
los datos, organizados por el modelo de datos adecuado. El lenguaje de
manipulación de datos más popular hoy día es SQL, usado para recuperar y
manipular datos en una base de datos relacional.

En la actualidad el SQL es el estándar de facto de la inmensa mayoría de los


SGBD comerciales. Y, aunque la diversidad de añadidos particulares que incluyen
las distintas implementaciones comerciales del lenguaje es amplia, el soporte al
estándar SQL-92 es general y muy amplio.

El ANSI SQL sufrió varias revisiones y agregados a lo largo del tiempo:

Año Nombre Alias Comentarios


1986 SQL-86 SQL-87Primera publicación hecha por ANSI. Confirmada por ISO en
1987.
1989 SQL-89 Revisión menor.
1992 SQL-92 SQL2 Revisión mayor.
1999 SQL:1999 SQL2000 Se agregaron expresiones regulares, consultas recursivas
(para relaciones jerárquicas), triggers y algunas
características orientadas a objetos.
2003 SQL:2003 Introduce algunas características de XML, cambios en las
funciones, estandarización del objeto sequence y de las
columnas autonumericas.
2006 SQL:2006 ISO/IEC 9075-14:2006 Define las maneras en las cuales el
SQL se puede utilizar conjuntamente con XML. Define
maneras importar y guardar datos XML en una base de
datos SQL, manipulándolos dentro de la base de datos y
publicando el XML y los datos SQL convencionales en forma
XML. Además, proporciona facilidades que permiten a las
aplicaciones integrar dentro de su código SQL el uso de
XQuery, lenguaje de consulta XML publicado por el W3C
(World Wide Web Consortium) para acceso concurrente a
datos ordinarios SQL y documentos XML.

2008 SQL:2008 Permite el uso de la cláusula ORDER BY fuera de las


definiciones de los cursores. Incluye los disparadores del
tipo INSTEAD OF. Añade la sentencia TRUNCATE.

COMANDOS LDD: FUNCIONAMIENTO DE CADA UNO Y EJEMPLO DE CADA


UNO
El lenguaje de definición de datos (en inglés Data Definition Language, o DDL), es
el que se encarga de la modificación de la estructura de los objetos de la base de
datos. Incluye órdenes para modificar, borrar o definir las tablas en las que se
almacenan los datos de la base de datos. Existen cuatro operaciones básicas:
CREATE, ALTER, DROP y TRUNCATE.

 CREATE

Este comando crea un objeto dentro del gestor de base de datos. Puede ser una
base de datos, tabla, índice, procedimiento almacenado o vista.

Ejemplo (crear una tabla)

CREATE TABLE Empleado


(
id INT NOT NULL IDENTITY (1,1) PRIMARY KEY,
Nombre VARCHAR(50),
Apellido VARCHAR(50),
Direccion VARCHAR(255),
Ciudad VARCHAR(60),
Telefono VARCHAR(15),
Peso VARCHAR (5),
Edad CHAR (2),
Actividad VARCHAR (100),
idCargo INT
)
 ALTER

Este comando permite modificar la estructura de un objeto. Se pueden


agregar/quitar campos a una tabla, modificar el tipo de un campo, agregar/quitar
índices a una tabla, modificar un trigger, etc.

Ejemplo (agregar columna a una tabla)

ALTER TABLE 'NOMBRE_TABLA' ADD NUEVO_CAMPO INT UNSIGNED;


 DROP

Este comando elimina un objeto de la base de datos. Puede ser una tabla, vista,
índice, trigger, función, procedimiento o cualquier otro objeto que el motor de la
base de datos soporte. Se puede combinar con la sentencia ALTER.

Ejemplo

DROP TABLE 'NOMBRE_TABLA';.


 TRUNCATE
Este comando trunca todo el contenido de una tabla. La ventaja sobre el comando
DROP, es que si se quiere borrar todo el contenido de la tabla, es mucho más
rápido, especialmente si la tabla es muy grande. La desventaja es que
TRUNCATE sólo sirve cuando se quiere eliminar absolutamente todos los
registros, ya que no se permite la cláusula WHERE. Si bien, en un principio, esta
sentencia parecería ser DML (Lenguaje de Manipulación de Datos), es en realidad
una DDL, ya que internamente, el comando TRUNCATE borra la tabla y la vuelve
a crear y no ejecuta ninguna transacción.

Ejemplo

TRUNCATE TABLE 'NOMBRE_TABLA';

COMANDOS DML: FUNCIONAMIENTO DE CADA UNO Y EJEMPLO DE CADA


UNO

Un lenguaje de manipulación de datos (Data Manipulation Language, o DML en


inglés) es un lenguaje proporcionado por el sistema de gestión de base de datos
que permite a los usuarios llevar a cabo las tareas de consulta o manipulación de
los datos, organizados por el modelo de datos adecuado.

El lenguaje de manipulación de datos más popular hoy día es SQL, usado para
recuperar y manipular datos en una base de datos relacional.

 INSERT

Una sentencia INSERT de SQL agrega uno o más registros a una (y sólo una)
tabla en una base de datos relacional.

FORMA BÁSICA

INSERT INTO 'tabla' ('columna1',['columna2,... '])


VALUES ('valor1', ['valor2,...'])

Las cantidades de columnas y valores deben ser iguales. Si una columna no se


especifica, le será asignado el valor por omisión. Los valores especificados (o
implícitos) por la sentencia INSERT deberán satisfacer todas las restricciones
aplicables. Si ocurre un error de sintaxis o si alguna de las restricciones es violada,
no se agrega la fila y se devuelve un error.

Ejemplo

INSERT INTO agenda_telefonica (nombre, numero)


VALUES ('Roberto Jeldrez', 4886850);
Cuando se especifican todos los valores de una tabla, se puede utilizar la
sentencia acortada:

INSERT INTO nombreTabla VALUES ('valor1', ['valor2,...'])

Ejemplo (asumiendo que 'nombre' y 'número' son las únicas columnas de la tabla
'agenda_telefonica'):

INSERT INTO agenda_telefonica


VALUES ('Jhonny Aguiar', 080473968);

FORMAS AVANZADAS

Una característica de SQL (desde SQL-92) es el uso de constructores de filas para


insertar múltiples filas a la vez, con una sola sentencia SQL:

INSERT INTO ''tabla'' (''columna1'', [''columna2,... ''])


VALUES (''valor1a'', [''valor1b,...'']),
(''value2a'', [''value2b,...'']),...;

Esta característica es soportada por DB2, PostgreSQL (desde la versión 8.2),


MySQL, y H2.

Ejemplo (asumiendo que 'nombre' y 'número' son las únicas columnas en la tabla
'agenda_telefonica'):

INSERT INTO agenda_telefonica VALUES ('Roberto Fernández', '4886850'),


('Alejandro Sosa', '4556550');

Que podía haber sido realizado por las sentencias

INSERT INTO agenda_telefonica VALUES ('Roberto Fernández', '4886850');


INSERT INTO agenda_telefonica VALUES ('Alejandro Sosa', '4556550');

Notar que las sentencias separadas pueden tener semántica diferente


(especialmente con respecto a los triggers), y puede tener diferente rendimiento
que la sentencia de inserción múltiple.

Para insertar varias filas en MS SQL puede utilizar esa construcción:

INSERT INTO phone_book


SELECT 'John Doe', '555-1212'
UNION ALL
SELECT 'Peter Doe', '555-2323';
Tenga en cuenta que no se trata de una sentencia SQL válida de acuerdo con el
estándar SQL (SQL: 2003), debido a la cláusula subselect incompleta.

Para hacer lo mismo en Oracle se usa DUAL TABLE, siempre que se trate de solo
una simple fila:

INSERT INTO phone_book


SELECT 'John Doe', '555-1212' FROM DUAL
UNION ALL
SELECT 'Peter Doe','555-2323' FROM DUAL

Una implementación conforme al estándar de esta lógica se muestra el siguiente


ejemplo, o como se muestra arriba (no aplica en Oracle):

INSERT INTO phone_book


SELECT 'John Doe', '555-1212' FROM LATERAL ( VALUES (1) ) AS t(c)
UNION ALL
SELECT 'Peter Doe','555-2323' FROM LATERAL ( VALUES (1) ) AS t(c)

COPIA DE FILAS DE OTRAS TABLAS

Un INSERT también puede utilizarse para recuperar datos de otros, modificarla si


es necesario e insertarla directamente en la tabla. Todo esto se hace en una sola
sentencia SQL que no implica ningún procesamiento intermedio en la aplicación
cliente. Un SUBSELECT se utiliza en lugar de la cláusula VALUES. El
SUBSELECT puede contener JOIN, llamadas a funciones, y puede incluso
consultar en la misma TABLA los datos que se inserta. Lógicamente, el SELECT
se evalúa antes que la operación INSERT esté iniciada. Un ejemplo se da a
continuación.

INSERT INTO phone_book2

SELECT *
FROM phone_book
WHERE name IN ('John Doe', 'Peter Doe')

Una variación es necesaria cuando algunos de los datos de la tabla fuente se está
insertando en la nueva tabla, pero no todo el registro. (O cuando los esquemas de
las tablas no son iguales.)

INSERT INTO phone_book2 ( [name], [phoneNumber] )

SELECT [name], [phoneNumber]


FROM phone_book
WHERE name IN ('John Doe', 'Peter Doe')
El SELECT produce una tabla (temporal), y el esquema de la tabla temporal debe
coincidir con el esquema de la tabla donde los datos son insertados.

 UPDATE

Una sentencia UPDATE de SQL es utilizada para modificar los valores de un


conjunto de registros existentes en una tabla.

Ejemplo

UPDATE My_table SET field1 = 'updated value asd' WHERE field2 = 'N';
 DELETE

Una sentencia DELETE de SQL borra uno o más registros existentes en una tabla.

FORMA BÁSICA

SQL="DELETE FROM ''tabla'' WHERE ''columna1'' = ''valor1''"

Ejemplo

DELETE FROM My_table WHERE field2 = 'N';

CLAUSULAS USADAS EN DML: FUNCIONAMIENTO DE CADA UNA

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

Cláusula Descripción
Utilizada para especificar la tabla de la cual se van a seleccionar los
FROM
registros
Utilizada para especificar las condiciones que deben reunir los
WHERE
registros que se van a seleccionar
GROUP Utilizada para separar los registros seleccionados en grupos
BY específicos
HAVING Utilizada para expresar la condición que debe satisfacer cada grupo
ORDER Utilizada para ordenar los registros seleccionados de acuerdo con un
BY orden específico
OPERADORES LÓGICOS: FUNCIONAMIENTO DE CADA UNO

Los operadores lógicos o conectivos lógicos se utilizan para conectar dos fórmulas
para que el valor de verdad. Siempre darán un valor de verdad verdadero o falso y
se leen de izquierda a derecha.
Los operadores lógicos usados son:

Operado
Uso
r

Es el "y" lógico. Evalúa dos condiciones y devuelve un valor de verdad


AND
sólo si ambas son ciertas.

Es el "o" lógico. Evalúa dos condiciones y devuelve un valor de verdad si


OR
alguna de la

OPERADORES DE COMPARACIÓN: FUNCIONAMIENTO DE CADA UNO

Los operadores de comparación se usan con los datos de caracteres, numéricos o


de fecha, y se pueden utilizar en las cláusulas WHERE o HAVING de una
consulta. Los operadores de comparación dan como resultado un tipo de datos
booleano y devuelven TRUE o FALSE según el resultado de la condición probada.

Por ejemplo, para calcular una bonificación para aquellos empleados que han sido
contratados antes del 15 de marzo de 1998, el cálculo de si el campo hire_date
(fecha de contratación) de un empleado es menor o igual que 15 de marzo de
1998 proporcionará una lista de los empleados que deben recibir la bonificación.

Operador Uso
< Menor que
> Mayor que
<> Distinto de
<= Menor o igual que
>= Mayor o 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 Agregación: Funcionamiento de cada uno

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
Utilizada para devolver la suma de todos los valores de un campo
SUM
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

CONSULTAS BÁSICAS SQL

Las consultas 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, Teléfono 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 cláusula ORDER BY Lista de Campos. En
donde Lista de campos representa los campos a ordenar.
Ejemplo:

SELECT CódigoPostal, Nombre, Teléfono

FROM Clientes ORDER BY Nombre;

Esta consulta devuelve los campos Código Postal, Nombre, Teléfono de la tabla
Clientes ordenados por el campo Nombre. Se pueden ordenar los registros por
más de un campo, como por ejemplo:
SELECT CodigoPostal, Nombre, Teléfono

FROM Clientes ORDER BY

CodigoPostal, Nombre;

Incluso se puede especificar el orden de los registros: ascendente mediante la


clausula (ASC -se toma este valor por defecto) o descendente (DESC)

SELECT CodigoPostal, Nombre, Teléfono

FROM Clientes ORDER BY

CodigoPostal DESC , Nombre ASC;

El predicado se incluye entre la clausula y el primer nombre del campo a recuperar, los posibles
predicados son:

Predicado Descripción

Devuelve todos
ALL
los campos de la tabla

Devuelve un determinado número


TOP
de registros de la tabla

Omite los registros cuyos


DISTINCT
campos seleccionados coincidan totalmente

Omite los registros duplicados


DISTINCRO
basandose en la totalidad del registro y no sólo en los campos
W
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;

 TOP:

Devuelve un cierto número de registros que entran entre al principio o al final de


un rango especificado por una cláusula ORDER BY. Supongamos que queremos
recuperar los nombres de los 25 primeros estudiantes del curso 1994:

SELECT TOP 25 Nombre, Apellido FROM

Estudiantes

ORDER BY Nota DESC;

Si no se incluye la cláusula ORDER BY, la consulta devolverá un conjunto


arbitrario de 25 registros de la tabla Estudiantes .El predicado TOP no elige entre
valores iguales. En el ejemplo anterior, si la nota media número 25 y la 26 son
iguales, la consulta devolverá 26 registros. Se puede utilizar la palabra reservada
PERCENT para devolver un cierto porcentaje de registros que caen al principio o
al final
de un rango especificado por la cláusula ORDER BY. Supongamos que en lugar
de los 25 primeros estudiantes deseamos el 10 por ciento del curso:

SELECT TOP 10 PERCENT Nombre, Apellido

FROM Estudiantes

ORDER BY Nota DESC;

El valor que va a continuación de TOP debe ser un Integer sin signo.TOP no


afecta a la posible actualización de la consulta.

 DISTINCT:
Omite los registros que contienen datos duplicados en los campos seleccionados.
Para que los valores de cada campo listado en la instrucción SELECT se incluyan
en la consulta deben ser únicos. Por ejemplo, varios empleados listados en la
tabla Empleados pueden tener el mismo apellido. Si dos registros contienen López
en el campo Apellido, la siguiente instrucción SQL devuelve un único registro:

SELECT DISTINCT Apellido FROM Empleados;

Con otras palabras el predicado DISTINCT devuelve aquellos registros cuyos


campos indicados en la cláusula SELECT posean un contenido diferente. El
resultado de una consulta que utiliza DISTINCT
no es actualizable y no refleja los cambios subsiguientes realizados por otros
usuarios.

 DISTINCTROW:

Devuelve los registros diferentes de una tabla; a diferencia del predicado anterior
que sólo se fijaba en el contenido de los campos seleccionados, éste lo hace en el
contenido del registro completo independientemente del campo indicado en la
cláusula SELECT.

SELECT DISTINCTROW Apellido FROM Empleados;

Si la tabla empleados contiene dos registros:


Antonio López y Marta López el ejemplo del predicado DISTINCT devuelve un
único registro con el valor López en el campo Apellido
ya que busca no duplicados en dicho campo. Este último ejemplo devuelve dos
registros con el valor López en el apellido ya que se buscan no duplicados en el
registro completo.

CLÁUSULA SELECT (FUNCIONAMIENTO Y EJEMPLO

Recupera filas de la base de datos y habilita la selección de una o varias filas o


columnas de una o varias tablas en SQL Server 2012.La sintaxis completa de la
instrucción SELECT es compleja, aunque las cláusulas principales se pueden
resumir del modo siguiente:

[ WITH <common_table_expression>]

SELECT select_list [ INTO new_table ]

[ FROM table_source ] [ WHERE search_condition ]


[ GROUP BY group_by_expression ]

[ HAVING search_condition ]

[ ORDER BY order_expression [ ASC | DESC ] ]

Los operadores UNION, EXCEPT e INTERSECT se pueden utilizar entre


consultas para combinar o comparar resultados en un conjunto de resultados.

Sintaxis

<SELECT statement> ::=


[WITH <common_table_expression> [,...n]]
<query_expression>
[ ORDER BY { order_by_expression | column_position [ ASC | DESC ] }
[ ,...n ] ]
[ <FOR Clause>]
[ OPTION ( <query_hint> [ ,...n ] ) ]
<query_expression> ::=
{ <query_specification> | ( <query_expression> ) }
[ { UNION [ ALL ] | EXCEPT | INTERSECT }
<query_specification> | ( <query_expression> ) [...n ] ]
<query_specification> ::=
SELECT [ ALL | DISTINCT ]
[TOP ( expression ) [PERCENT] [ WITH TIES ] ]
< select_list >
[ INTO new_table ]
[ FROM { <table_source> } [ ,...n ] ]
[ WHERE <search_condition> ]
[ <GROUP BY> ]
[ HAVING < search_condition > ]

Debido a la complejidad de la instrucción SELECT, se muestran elementos y argumentos detallados


de la sintaxis de cada cláusula:

WITH common_table_expression HAVING


Cláusula SELECT UNION
Cláusula INTO EXCEPT e INTERSECT
FROM ORDER BY
WHERE Cláusula FOR
GROUP BY Cláusula OPTION

El orden de las cláusulas en la instrucción SELECT es importante.Se puede omitir


cualquiera de las cláusulas opcionales pero, cuando se utilizan, deben aparecer
en el orden apropiado.
Las instrucciones SELECT se permiten en las funciones definidas por el usuario
solo si las listas de selección de estas instrucciones contienen expresiones que
asignan valores a variables locales de las funciones.

Un nombre de cuatro partes creado con la función OPENDATASOURCE como la


parte de nombre de servidor se puede utilizar como origen de tabla en todos los
lugares de las instrucciones SELECT donde pueda aparecer un nombre de tabla.

Existen algunas restricciones sintácticas en las instrucciones SELECT


relacionadas con las tablas remotas.

ORDEN DE PROCESAMIENTO LÓGICO DE LA INSTRUCCIÓN SELECT

Los pasos siguientes muestran el orden de procesamiento lógico, u orden de


enlaces, de una instrucción SELECT. Este orden determina cuándo los objetos
definidos en un paso están disponibles para las cláusulas en pasos posteriores.
Por ejemplo, si el procesador de consultas puede enlazar (obtener acceso) a las
tablas o las vistas definidas en la cláusula FROM, estos objetos y sus columnas
están disponibles para todos los pasos siguientes. Por el contrario, dado que la
cláusula SELECT es el paso 8, las cláusulas anteriores no pueden hacer
referencia a los alias de columna o columnas derivadas definidas en esa cláusula.
Sin embargo, las cláusulas siguientes, tales como la cláusula ORDER BY, sí
pueden hacer referencia. Observe que la ejecución física real de la instrucción
está determinada por el procesador de consultas y el orden puede variar en esta
lista.

 FROM
 ON
 JOIN
 WHERE
 GROUP BY
 WITH CUBE o WITH ROLLUP
 HAVING
 SELECT
 DISTINCT
 ORDER BY
 TOP

El SQL nos ofrece las siguientes funciones de agregación para efectuar varias
operaciones sobre los datos de una base de datos:

Funciones de agregación

Función Descripción
Nos da el número total de filas
COUNT
seleccionadas
SUM Suma los valores de una columna
MIN Nos da el valor mínimo de una columna

MAX Nos da el valor máximo de una columna

AVG Calcula el valor medio de una columna


 En general, las funciones de agregación se aplican a una columna, excepto la
función de agregación COUNT, que normalmente se aplica a todas las
columnas de la tabla o tablas seleccionadas. Por lo tanto,COUNT (*) contará
todas las filas de la tabla o las tablas que cumplan las condiciones. Si se
utilizase COUNT(distinct columna), sólo contaría los valores que no fuesen
nulos ni repetidos, y si se utilizase COUNT(columna), sólo contaría los valores
que no fuesen nulos.

EJEMPLO DE UTILIZACIÓN DE LA FUNCIÓN COUNT (*)

 Veamos un ejemplo de uso de la función COUNT, que aparece en la cláusula


SELECT, para hacer la consulta “¿Cuántos departamentos están ubicados en
la ciudad de Lleida?”:

SELECT COUNT(*) AS numero_dep


FROM departamentos
WHERE ciudad_dep = ‘Lleida’;

La respuesta a esta consulta sería la que aparece reflejada en la tabla que


encontraréis en el margen.
Veremos ejemplos de las demás funciones de agregación en los siguientes
apartados
La estructura básica de una expresión para consulta SQL consta de tres cláusulas:
 SELECT
 FROM
 WHERE

La cláusula SELECT se usa para listar los atributos que se desean en el resultado
de una consulta.

La cláusula FROM lista las relaciones que se van a examinar en la evaluación de


la expresión
La cláusula WHERE costa de un predicado que implica atributos de las relaciones
que aparecen en la cláusula FROM.

Una consulta básica en SQL tiene la forma:

SELECT A1,A2,...,An
FROM r1,r2,...,rn
WHERE P
Donde Ai = atributo (Campo de la tabla)
ri = relación ( Tabla )
P = predicado (condición)

EJEMPLO: Seleccionar todos los nombres de las personas que tengan el apellido
MARQUESI de la tabla persona
SELECT nombre
FROM persona
WHERE apellido = " MARQUESI"

ANSWER NOMBRE
1 MARTIN
2 PABLO

El resultado de una consulta es por supuesto otra relación. Si se omite la cláusula


WHERE, el predicado P es verdadero. La lista A1, A2,..., An puede sustituirse por
un asterisco (*) para seleccionar todos los atributos de todas las relaciones que
aparecen en la cláusula FROM, aunque no es conveniente elegir esta ultima
opción salvo que sea necesario pues desperdiciamos mucho tiempo en obtenerlo
Alias
Es posible renombrar los atributos y las relaciones, a veces por conveniencia y
otras veces por ser necesario, para esto usamos la clausula AS como en el
siguiente ejemplo.

EJEMPLO
SELECT P.nombre AS [PRIMER NOMBRE]
FROM persona P
WHERE apellido = "MARQUESI"
ANSWER PRIMER NOMBRE
1 MARTIN
2 PABLO

En este ejemplo cabe destacar un par de cosas. Cuando nos referimos a un


atributo como es el caso de nombre, podemos referirnos a este usando la relación
( o el alias en este ejemplo ) a la que pertenece el atributo seguido de un punto
seguido del atributo <P.nombre>, a veces esta notación será necesaria para
eliminar ambigüedades. Los corchetes los usamos cuando usamos espacios en
blancos o el carácter (–) en el nombre de atributo o alias.
Usar alias en los atributos nos permite cambiar el nombre de los atributos de la
respuesta a la consulta.

Cuando asociamos un alias con una relación decimos que creamos una variable
de tupla. Estas variables de tuplas se definen en la cláusula FROM después del
nombre de la relación.

En las consultas que contienen subconsultas, se aplica una regla de ámbito a las
variables de tupla. En una subconsulta está permitido usar solo variables de tupla
definidas en la misma subconsulta o en cualquier consulta que tenga la
subconsulta.

PREDICADOS Y CONECTORES
Los conectores lógicos en SQL son:
 AND
 OR
 NOT

La lógica de estos conectores es igual que en cualquier lenguaje de programación


y sirven para unir predicados.

Las operaciones aritméticas en SQL son:


 + ( Suma
 )- ( Resta )
 * ( Multiplicación )
 / ( División )

EJEMPLO: Encontrar todos los nombres y dni de las personas cuyos dni sea
mayor que 26 millones y menor a 28 millones

SELECT nombre, dni


FROM persona
WHERE dni BETWEEN 26000000 and 28000000

ANSWER NOMBRE DNI


1 MARTIN 26125988
2 ESTEFANIA 27128064
3 MELISA 27456224
4 BETANIA 27128765

Análogamente podemos usar el operador de comparación NOT BETWEEN.


SQL también incluye un operador de selección para comparaciones de cadena de
caracteres. Los modelos se describen usando los caracteres especiales:
 El carácter ( % ) es igual a cualquier subcadena
 El operador ( _ ) es igual a cualquier carácter

Estos modelos se expresan usando el operador de comparación LIKE. Un error


muy frecuente es tratar de utilizar los modelos mediante el operador de igualdad
( = ) lo cual es un error de sintaxis.

EJEMPLO: Encontrar los nombres que comiencen con la letra p o el nombre


tenga exactamente 6 caracteres de la relación persona
SELECT nombre
FROM persona
WHERE (nombre LIKE "P%") OR (nombre LIKE "_ _ _ _ _ _")

ANSWER NOMBRE
1 MARTIN
2 PABLO
3 MELISA
4 SANDRA

TUPLAS DUPLICADAS
Los lenguajes de consulta formales se basan en la noción matemática de relación
como un conjunto. Por ello nunca aparecen tuplas duplicadas en las relaciones.
En la práctica la eliminación de duplicados lleva bastante tiempo. Por lo tanto SQL
permite duplicados en las relaciones. Así pues en las consultas se listaran todas
Las tuplas inclusive las repetidas.
En aquellos casos en los que queremos forzar la eliminación de duplicados
insertamos la palabra clave DISTINCT después de la cláusula SELECT
EJEMPLO: Listar todos los apellidos no repetidos de la relación persona
SELECT DISTINCT apellido
FROM persona

ASWER APELLIDO
1 MARQUESI
2 SANCHEZ
3 GUISSINI
4 ALEGRATO
5 BRITTE
6 ARDUL
7 MICHELLI
8 MUSACHEGUI
9 SERRAT

Si observamos la tabla original de la relación persona veremos que el apellido


marquesi aparecía dos veces, pero debido al uso de DISTINCT en la consulta la
relación respuesta solo lista un solo marquesi.

OPERACIONES DE CONJUNTO

SQL incluye las operaciones de conjuntos UNION, INTERSECT, MINUS, que


operan sobre relaciones y corresponden a las operaciones del álgebra unión,
intersección y resta de conjuntos respectivamente. Para realizar esta operación de
conjuntos debemos tener sumo cuidado que las relaciones tengan las mismas
estructuras.
Incorporemos ahora una nueva relación, llamada jugadores que representa las
personas que juegan al fútbol, sus atributos serán DNI, puesto y nro_camiseta.
Supongamos que esta nueva tabla esta conformada de la siguiente manera

JUGADORES DNI PUESTO NRO_CAMISETA


1 26125988 DELANTERO 9
2 25485699 MEDIO 5
3 28978845 ARQUERO 1
4 29789854 DEFENSOR 3

EJEMPLO: Obtener todos los nombres de la relación persona cuyos apellidos


sean Marquesi o Serrat
SELECT nombre
FROM PERSONA
WHERE apellido = "MARQUESI"
UNION
SELECT nombre
FROM PERSONA
WHERE apellido = "SERRAT"

ANSWER PRIMER NOMBRE


1 MARTIN
2 PABLO
3 JUAN

EJEMPLO: Obtener todos los DNI de los que juegan al fútbol y, además, están en
la lista de la relación persona
SELECT dni
FROM persona
INTERSECT
SELECT dni
FROM jugadores

ANSWER DNI
1 26125988
2 25485699
3 28978845
Por omisión, la operación de union elimina las tuplas duplicadas. Para retener
duplicados se debe escribir UNION ALL en lugar de UNION.

PERTENENCIA A UN CONJUNTO

El conector IN prueba si se es miembro de un conjunto, donde el conjunto es una


colección de valores producidos en lo general por una cláusula SELECT.
Análogamente el conector NOT IN prueba la no pertenencia al conjunto.

EJEMPLO: Encontrar los nombres de las personas que juegan al fútbol y,


además, se encuentran en la relación persona
SELECT nombre, apellido
FROM persona
WHERE dni IN
(SELECT dni
FROM jugadores)

ANSWER NOMBRE APELLIDO


s MARTIN MARQUESI
1
2 PABLO MARQUESI
3 JUAN SERRAT

Es posible probar la pertenencia de una relación arbitraria SQL usa la notación de


elementos <v1,v2,...,vn> para representar una tupla de elementos de n que
contiene los valores v1,v2,...,vn.

COMPARACIÓN DE CONJUNTOS

En conjuntos la frase << mayor que algún >> se representa en SQL por
( >SOME ), también podría entenderse esto como << mayor que el menor de >>,
su sintaxis es igual que la del conector IN. SQL también permite las
comparaciones ( >SOME ),( =SOME ) ( > =SOME ), ( <=SOME ) y ( <>SOME ).
También existe la construcción ( >ALL ), que corresponde a la frase << mayor que
todos >>. Al igual que el operador SOME, puede escribirse ( >ALL ),( =ALL )
( >=ALL ), ( <=ALL ) y ( <>ALL ).

En ocasiones podríamos querer comparar conjuntos para determinar si un


conjunto contiene los miembros de algún otro
conjunto. Tales comparaciones se hacen usando las construcciones CONTAINS y
NOT CONTAINS
OPERACIONES SOBRE CADENAS FUNCIONAMIENTO Y EJEMPLOS
JUSTIFICADOS

Las siguientes funciones escalares realizan una operación sobre un valor de cadena de entrada y
devuelven un valor de cadena o un valor numérico:

ASCII LTRIM SOUNDEX


CHAR NCHAR SPACE
CHARINDEX PATINDEX STR
CONCAT QUOTENAME STUFF
DIFFERENCE REPLACE SUBSTRING
FORMAT REPLICATE UNICODE
LEFT REVERSE UPPER
LEN RIGHT
LOWER RTRIM

Todas las funciones integradas de cadena son deterministas. Esto significa que
devuelven el mismo valor siempre que se llamen con un conjunto determinado de
valores de entrada. Para obtener más información acerca del determinismo de
funciones.

MODIFICACIÓN DE UNA BASE DE DATOS

Mostrar: para mostrar los registros se utiliza la instrucción Select. Select * From
comentarios.
Insertar: los registros pueden ser introducidos a partir de sentencias que emplean
la instrucción Insert. Insert Into comentarios (titulo, texto, fecha) Values ('saludos',
'como esta', '22-10-2007')
Borrar: Para borrar un registro se utiliza la instrucción Delete. En este caso
debemos especificar cual o cuales son los registros que queremos borrar. Es por
ello necesario establecer una selección que se llevara a cabo mediante la cláusula
Where. Delete From comentarios Where id='1'.
Actualizar: para actualizar los registros se utiliza la instrucción Update. Como
para el caso de Delete, necesitamos especificar por medio de Where cuáles son
los registros en los que queremos hacer efectivas nuestras modificaciones.
Además, tendremos que especificar cuáles son los nuevos valores de los campos
que deseamos actualizar. Update comentarios Set titulo='Mi Primer Comentario'
Where id='1'.
LENGUAJE DE DEFINICION DE DATOS

Un lenguaje de definición de datos (Data Definition Language, DDL por sus siglas
en inglés) es un lenguaje proporcionado por el sistema de gestión de base de
datos que permite a los usuarios de la misma llevar a cabo las tareas de definición
de las estructuras que almacenarán los datos así como de los procedimientos o
funciones que permitan consultarlos.

Un Data Definition Language o Lenguaje de descripción de datos (DDL) es un


lenguaje de programación para definir estructuras de datos. El término DDL fue
introducido por primera vez en relación con el modelo de base de datos
CODASYL, donde el esquema de la base de datos ha sido escrito en un lenguaje
de descripción de datos que describe los registros, los campos, y "conjuntos" que
conforman el usuario modelo de datos. Más tarde fue usado para referirse a un
subconjunto de SQL, pero ahora se utiliza en un sentido genérico para referirse a
cualquier lenguaje formal para describir datos o estructuras de información, como
los esquemas XML.

A diferencia de muchos lenguajes de descripción de datos, SQL utiliza una


colección de verbos imperativo cuyo efecto es modificar el esquema de la base de
datos, añadiendo, cambiando o eliminando las definiciones de tablas y otros
objetos. Estas declaraciones se pueden mezclar libremente con otras sentencias
SQL, por lo que el DDL no es realmente una lengua independiente. La declaración
más común es CREATE TABLE. El lenguaje de programación SQL, el más
difundido entre los gestores de bases de datos, admite las siguientes sentencias
de definición: CREATE, DROP y ALTER, cada una de las cuales se puede aplicar
a las tablas, vistas, procedimientos almacenados y triggers de la base de datos.

TIPOS DE DATOS O DOMINIOS

Para cada columna tenemos que elegir entre algún dominio definido por el usuario
o alguno de los tipos de datos predefinidos que se describen a continuación:
CREATE TABLE nombre_tabla
( definición_columna
[, definición_columna...]
[, restricciones_tabla]
);
nombre_columna {tipo_datos|dominio} [def_defecto] [restric_col]
Tipos de datos predefinidos
Tipos de datos Descripción
CHARACTER (longitud) Cadenas de caracteres de longitud fija.
CHARACTER VARYING (longitud) Cadenas de caracteres de longitud variable.

TIPOS DE DATOS SINÓNIMOS


 Binary Varbinary
 Bit boolean,logical
 Byte integer(1)
 Counter autoincrement
 Currency money
 Datetime date,time,timestamp
 Single float(4),real
 Double float(8),float,numeric,number
 Short integer(2),smalling
 Long
 Longtext
 Longbinary
 Text

Clave Principal (Primary Key)


Ejemplo:
CREATE TABLE Familiar
(
Nombre varchar (25),
Apellidos varchar (60),
Telefono char (9),
Direccion varchar (70),
ID_Familia integer PRIMARY KEY
);

Clave foránea (Foreing key):


Ejemplo:
CREATE TABLE estudiante
(
Cod_Est number(8),
Nom_Est varchar2(35) not null,
Car_est number(3),
Pat_est number(8),
Otros_datos varchar(40),
CONSTRAINT est_pk PRIMARY KEY (Cod_est),
CONSTRAINT est_fk FOREIGN KEY (Car_Est) REFERENCES carrera(Cod_car)
ON DELETE CASCADE,
CONSTRAINT est_ch CHECK (Pat_est > 0)

TIPOS DE DOMINIOS
 n char(n).
 n varchar(n)
 n int. Entero
 n smallint.
 n numeric(p,d).
 n real, double precision.
 n float(n).
 n
n La construcción create domain de SQL- 92 permite crear dominios definidos por
el usuario:
create domain nombre-persona char(20)not null

TIPOS DE DATOS PREDEFINIDOS

TIPOS DE DATOS DESCRIPCIÓN

 BIT (longitud) Cadenas de bits de longitud fija.


 BIT VARYING (longitud) Cadenas de bits de longitud variables.
 NUMERIC (precisión, escala)
 Número decimales con tantos dígitos como indique la precisión y tantos
decimales como indique la escala.
 DECIMAL (precisión, escala) Número decimales con tantos dígitos como
indique la precisión y tantos decimales como indique la escala.
 INTEGER Números enteros.
 SMALLINT Números enteros pequeños.
 REAL Números con coma flotante con precisión predefinida.
 FLOAT (precisión) Números con coma flotante con la precisión especificada.
 DOUBLE PRECISION Números con coma flotante con más precisión
Predefinida que la del tipo REAL.
 DATE Fechas. Están compuestas de: YEAR año, MONTH mes, DAY día.
TIME
 Horas. Están compuestas de HOUR hora, MINUT minutos, SECOND
segundos.
 TIMESTAMP Fechas y horas. Están compuestas de YEAR año,
 MONTH mes, DAY día, HOUR hora, MINUT minutos, SECOND segundos.

PARA LOS DOMINIOS

Además de los dominios dados por el tipo de datos predefinidos, el SQL92 nos
Ofrece la posibilidad de trabajar con dominios definidos por el usuario.
Para crear un dominio es necesario utilizar la sentencia CREATE DOMAIN:
Donde restricciones_dominio tiene el siguiente formato:
 Tipos de datos predefinidos
 Tipos de datos Descripción
 BIT (longitud) Cadenas de bits de longitud fija.
 BIT VARYING (longitud) Cadenas de bits de longitud variables.
 NUMERIC (precisión, escala)
 Número decimales con tantos dígitos como indique la precisión y tantos
decimales como indique la escala.
 DECIMAL (precisión, escala) Número decimales con tantos dígitos como
indique la precisión y tantos decimales como indique la escala.
 INTEGER Números enteros.
 SMALLINT Números enteros pequeños.
 REAL Números con coma flotante con precisión predefinida.
 FLOAT (precisión) Números con coma flotante con la precisión
.
 DOUBLE PRECISION Números con coma flotante con más precisión
predefinida que la del tipo REAL.
 DATE Fechas. Están compuestas de: YEAR año, MONTH mes, DAY día.
 TIME Horas. Están compuestas de HOUR hora, MINUT minutos, SECOND
segundos.
 TIMESTAMP Fechas y horas. Están compuestas de YEAR año,
 MONTH mes, DAY día, HOUR hora, MINUT minutos, SECOND segundos.

CREATE DOMAIN nombre dominio [AS] tipos_datos


[def_defecto] [restricciones_dominio];
[CONSTRAINT nombre_restricción] CHECK (condiciones)

DEFINICIÓN DE TABLAS Y ESQUEMAS

La creación de tablas y esquemas, si bien se sigue una base, normalmente cada


uno de los manejadores de bases de datos los tiene de forma distinta. En este
caso vamos a ver una definición estándar que existe para SQL2 y después un
ejemplo de creación de la base de datos en Access.

Para crear un esquema con autorización de supervisor

CREATE SCHEMA COMPAÑIA AUTHORIZATION SuNombre

La definición de la tabla:

CREATE TABLE Agenda(

id int(4) DEFAULT '0' NOT NULL auto_increment,

fecha text NOT NULL,

nombre text NOT NULL,

email text NOT NULL,

url text NOT NULL,

detalles text NOT NULL,

UNIQUE id (id)

);
CREATE TABLE productos (

idprod int(10) DEFAULT '0' NOT NULL auto_increment,

nombre char(250) DEFAULT '' NOT NULL,

PRIMARY KEY (idprod),

KEY idprod (idprod),

UNIQUE idprod_2 (idprod)

);

CREATE TABLE categorias (

idcategoria int(10) DEFAULT '0' NOT NULL auto_increment,

nombre char(250) DEFAULT '' NOT NULL,

idprod char(250) DEFAULT '' NOT NULL,

PRIMARY KEY (idcategoria),

KEY idcategoria (idcategoria),

UNIQUE idcategoria_2 (idcategoria)

);

CREATE TABLE notas (

idnota int(10) DEFAULT '0' NOT NULL auto_increment,

titulo varchar(250) DEFAULT '' NOT NULL,

autorizo varchar(250) DEFAULT '' NOT NULL,

fecha int(15) DEFAULT '0' NOT NULL,

mensaje text NOT NULL,

idprod varchar(250) DEFAULT '' NOT NULL,

PRIMARY KEY (idnota),


KEY idmensaje (idnota),

UNIQUE idnota_2 (idnota)

);

CREATE TABLE fotos (

idfoto int(10) DEFAULT '0' NOT NULL auto_increment,

nombre varchar(250) DEFAULT '' NOT NULL,

descripcion text NOT NULL,

chico varchar(250) DEFAULT '' NOT NULL,

foto varchar(250) DEFAULT '' NOT NULL,

tipos varchar(250) DEFAULT '' NOT NULL,

idprod varchar(250) DEFAULT '' NOT NULL,

idcategoria varchar(250) DEFAULT '' NOT NULL,

PRIMARY KEY (idfoto),

KEY idfoto (idfoto),

UNIQUE idfoto_2 (idfoto)

);

CREATE TABLE tipos (

idtipo int(10) DEFAULT '0' NOT NULL auto_increment,

nombre varchar(250) DEFAULT '' NOT NULL,

direccion text NOT NULL,

idprod varchar(250) DEFAULT '' NOT NULL,

PRIMARY KEY (idtipo),

KEY idtipo (idtipo),


UNIQUE idtipo_2 (idtipo)

);

Entre los tipos de datos disponibles para los atributos están los numéricos, los de
cadena de caracteres, los de cadeta de bits, y los de fecha y hora. Los tipos de
datos numéricos incluyen numéros enteros de diversos tamaños (INTEGER o INT,
y SMALLINT) y numéros reales de diversas precisiones (FLOAT, REAL, DOUBLE
PRECISION). Podemos declarar números con formato empleando DECIMAL(i,j) o
DEC(i,j) , o NUMERIC(i,j), donde i, la precisicón, es el número total de digitos
decimales, y j la escala, es el número de dígitos que aparecen después del punto
decimal. El valor por omisión de la escala es cero, el valoe por omisión de la
presición depende de la implementación.

Los tipos de datos de cadena de caracteres tiene longitud fija (CHAR(n) o


CHARACTER(n), donde n es el número de caracteres) o variable (VARCHAR(n) o
CHAR VARYING(n) o CHARACTER VARYING(n), donde n es el número máximo
de caracteres). Los de datos de cadena de bits tiene longitud fina n (BIT(n)) o
variable (BIT VARYING(n), donde n es el número es el número máximo de bits). El
valor por omisión de n, la longitud de una cadena de caracteres o de bits es uno.

SQL2 cuenta con nuevos tipos de datos para fecha y hora. El tipo de datos DATE
(fecha) tiene diex posiciones, y sus componentes son YEAR, MONTH, DAY (año,
mes,día). y TIME que tiene la hora (HH:MM:SS).

Definición de tablas en access y sus tipos de datos

Una tabla es un conjunto de tuplas o registros. En este sentido podemos


considerarla como un fichero que contiene registros, tantos como se quiera. Cada
registro estará compuesto por una colección de campos. Cada campo tendrá un
tipo que indica la clase de datos que puede almacenar. Y cada tipo tendrá unos
atributos de tipo que limitan el dominio de los valores permitidos, así como una
serie de restricciones y normas.

Por ejemplo, podemos tener una tabla para almacenar datos sobre los alumnos matriculados en
una cierta asignatura. Esa tabla puede denominarse "Alumnos" y contendrá registros con, por
ejemplo, los siguientes campos.

Campo Descripción
NIF NIF
Nombre Nombre completo
Apellido1 Primer apellido
Apellido2 Segundo apellido
Edad Edad
Parcial1 Nota obtenida en el primer
parcial
Parcial2 Nota obtenida en el segundo
parcial
Prácticas Nota obtenida en las prácticas

Obsérvese que no se ha definido un campo NotaMedia para almacenar la nota


final de la asignatura, quizá la más importante. Esto es debido a que es posible
calcularla de alguna manera a través del resto de campos del registro. En una
tabla no debe almacenarse información no necesaria. Además, si se almacenara,
habría que recalcularla cada vez que se modificara alguno de los campos de los
que depende, lo cual representa una fuente de inconsistencia.

CREACIÓN DE TABLAS

DEFINICIÓN DE CAMPOS

Una vez decididos los campos que necesitamos almacenar en la tabla, pasaremos
a crear la tabla. Para ello seleccionaremos la opción correspondiente en el menú o
en la ventana principal de la base de datos. Access nos mostrará un formulario
para la definición de los campos. Esta ventana se denomina "de diseño de tabla"
frente a la "de vista de tabla" que permitirá más adelante introducir los datos.

Para cada campo que definamos debemos asignarle un nombre, un tipo y una
descripción. Además, para cada tipo existen una serie de atributos de tipo que
permiten describir con precisión el dominio de valores aceptados por el campo.

Los tipos disponibles son los siguientes:

 Texto: Una cadena de caracteres de longitud limitada. La longitud máxima se


define como uno de los atributos, y no puede ser mayor de 255 caracteres. El
espacio ocupado en disco por este campo corresponde a la longitud máxima
definida. Un atributo importante del tipo texto es si se permite la longitud cero.
 Memo: Una cadena de caracteres de longitud ilimitada. El espacio ocupado en
disco depende del texto almacenado. Tiene como desventaja respecto al tipo
Texto que no permite algunas operaciones (orden, agrupación...).
 Numérico: Un número entero o real. Existen diversos tamaños y precisiones:
Byte, Entero, Entero largo, real de precisión simple, real de precisión doble,
identificador global. Dentro de cada uno de estos subtipos se pueden definir
atributos de rango y precisión decimal.
 Fecha/hora: Fecha, hora o ambos a la vez. Existen diversos formatos de fecha
y hora que pueden ser definidos como atributo.
 Moneda: Un número con formato monetario. Se trata de un valor numérico real
con formato especializado para la manipulación de valores monetarios:
abreviatura de la moneda local, separación con puntos y comas al estilo
local,...
 Autonumérico: Un contador autoincrementado. Se trata de un valor numérico
que el sistema genera automáticamente para cada registro de manera que
nunca existirán dos registros en la misma tabla con el mismo valor en el campo
autonumérico.
 Si/no: Un valor lógico.
 Objeto OLE: Un objeto de otra aplicación, vinculado mediante OLE: sonido,
imagen, vídeo, gráfico...
 Hipervínculo: Un vínculo a un documento de Internet.

Cada uno de estos tipos dispone de atributos propios, por ejemplo, la precisión
decimal y el rango de valores en los campos numéricos, frente a la longitud de
cadena de los campos de tipo texto. Pero además existen una serie de atributos
comunes, que se describen a continuación:

FORMATO

 Máscara de entrada: Fuerza a que los datos se introduzcan en un formato


adecuado. Por ejemplo para un teléfono se puede ser interesante mostrar al
usuario algo como "(__) ___-__-__", de manera que no pueda introducir
caracteres extraños. La máscara de entrada es un conjunto de tres datos que
definen los caracteres admitidos, el formato presentado al usuario y el formato
almacenado. Al final del capítulo se incluye un anexo con información sobre
formatos de máscara de entrada. El atributo Formato prevalece sobre la
máscara de entrada, de manera que, al editar los datos del campo, una vez
introducidos siguiendo una determinada máscara, el contenido del campo se
mostrará con el aspecto definido en el Formato y no con el de la máscara.
 Título: Es el título de la columna que aparecerá en el modo de ver datos (al
editar los datos almacenados) para el campo.
 Valor predeterminado: Un valor que automáticamente introducirá Access en el
campo si el usuario no indica otro.
 Regla de validación: Una condición que debe cumplir el dato introducido para
que sea aceptado. Por ejemplo, para un campo Edad se puede forzar a que el
valor introducido esté comprendido entre 18 y 65 años con una expresión como
">=18 AND <=65".
 Texto de validación: Un mensaje que Access mostrará al usuario cuando
intente introducir un valor no permitido por una regla de validación. Para el
ejemplo anterior podría ser algo como "La edad debe estar comprendida entre
18 y 65 años.".
 Requerido: Indica si el campo debe tener algún valor o se permite dejarlo en
blanco. Por defecto un campo no contiene ningún valor. No hay que confundir
un campo vacío con un campo de texto de longitud cero. De ahí la importancia
del atributo de permitir longitud cero de los campos de tipo texto.
 Indexado: Establece si sobre el campo debe construirse un índice. Un índice es
una estructura manejada por Access que hace que determinadas operaciones
con el campo sean más rápidas (ordenaciones y búsquedas), a costa de un
mayor espacio en disco y memoria (para almacenar el índice) y de que otras
operaciones sean más lentas y costosas (inserciones y borrados). Existen dos
formas de hacer índices: con y sin duplicados; esto permite configurar la
posibilidad o no de que se repitan valores a lo largo de la tabla para un campo.

Para generar las expresiones que se pueden introducir para estas propiedades,
Access proporciona un asistente que facilita la búsqueda de operadores y
funciones. Para acceder a este asistente basta con pulsar sobre el botón "..." que
aparece a la derecha del editor (cuanto esté disponible). Quizá lo más importante
del generador de expresiones es la posibilidad de explorar visualmente el conjunto
de funciones incorporadas, entre las que destacan:

 Funciones de conversión entre tipos de datos.


 Funciones de fecha/hora. (Una función muy útil para su utilización como
valor predeterminado es fecha(), que proporciona la fecha actual.)
 Funciones matemáticas.
 Funciones de tratamiento de cadenas.

A la hora de editar los datos en el modo de ver datos, Access, por defecto, utiliza
un editor de texto en el que se pueden escribir los datos. A veces es útil
proporcionar al usuario la posibilidad de elegir elementos de una lista, en vez de
tener que escribirlos de nuevo. Para ello, Access permite seleccionar el tipo de
editor que se va a utilizar para un campo (atributo Búsqueda: mostrar control):

 Cuadro de texto: un editor normal.


 Cuadro de lista: una lista de valores permitidos.
 Cuadro combinado: igual que el anterior, pero con más opciones.
 Casilla de verificación (sólo campos sí/no): un recuadro para activar y
desactivar.

En el caso del cuadro de lista y del cuadro combinado, el conjunto de valores


propuestos puede obtenerse de tres formas:

 Indicando explícitamente una lista de valores separados por símbolos de punto


y coma.
 A través de una tabla/consulta, y entonces los valores propuestos se obtienen
de los almacenados en una tabla (esta forma la estudiaremos más adelante).
 Indicando una tabla, y entonces los valores propuestos son el conjunto de
campos de esa tabla.

CLAVE PRINCIPAL
En toda tabla suele existir una clave principal (también llamada clave primaria o
clave maestra). Una clave principal es un campo o conjunto de campos cuyos
valores no se repiten y a través de los cuales se identifica de forma única al
registro completo. Es decir, que no hay dos registros en una tabla con la misma
clave. En el ejemplo de los alumnos, el campo NIF puede ser una clave principal,
ya que no habrá dos alumnos con el mismo NIF, y además es posible identificar a
un alumno a través de su NIF. El campo apellido1 no puede ser clave principal
porque puede haber más de un alumno con el primer apellido igual. El conjunto
formado por (aplellido1, apellido2, nombre) podría constituir una clave principal
(suponiendo que no existen dos personas que se llamen exactamente igual), ya
que a través del conjunto podemos identificar de forma única e inequívoca al
registro (al alumno).

Sobre un campo que se emplee como clave principal, forzosamente debe


generarse un índice sin duplicados, y no se admitirán valores nulos para el campo.

Si no tenemos ningún campo o conjunto de campos candidato a clave principal,


antes de terminar el diseño Access nos permitirá añadir un campo nuevo que sirva
como clave. Este campo se denominará id y será de tipo autonumérico.

Por lo general, si en una tabla no podemos encontrar un campo o conjunto de


campos para establecerlos como clave principal, lo más probable es que el diseño
de la tabla no sea apropiado, y quizá deberíamos volver a plantearnos la
estructura de tablas que necesita nuestra base de datos.

La declaración de índices y claves principales afecta al orden en que se muestran


los registros a la hora de editar el contenido.

GUARDAR EL DISEÑO

Después de introducir todos los campos y definir sus tipos y atributos, podremos
pasar a utilizar la tabla, introduciendo, modificando y utilizando los datos que
puede almacenar. Antes deberemos guardar la definición de la tabla, utilizando la
opción adecuada. Access pedirá un nombre para la nueva tabla.

Después de esto podemos pasar al modo de ver datos. Podremos volver a


modificar la estructura de la tabla siempre que queramos con el modo de ver
diseño. Entonces, antes de volver al modo de ver datos deberemos guardar la
definición. Si ya hay datos introducidos en la tabla, Access no permitirá modificar
la definición de la tabla, o impondrá restricciones, en el caso de que los cambios
produzcan conflictos entre las nuevas definiciones y los datos ya almacenados
(por ejemplo si intentamos cambiar el tipo de un campo de texto a tipo numérico y
existen registros almacenando cadenas no numéricas).

Para el ejemplo de la tabla de alumnos, los campos definidos pueden tener las siguientes
características:
Campo Tipo Descripción Otros atributos
NIF Cadena (9) NIF requerido; indexado sin repetición;
máscara de entrada: <90.000.000\-L; 0;
"*">; clave principal.
Nombre Cadena (40) Nombre requerido
completo
Apellido1 Cadena (25) Primer apellido requerido
Apellido2 Cadena (25) Segundo requerido
apellido
Edad Numérico Edad >=18 AND <65;
byte
Parcial1 Numérico Nota primer 1 decimal; predeterminado 0; >=0 AND
simple parcial <=10;
Parcial2 Numérico Nota segundo 1 decimal; predeterminado 0; >=0 AND
simple parcial <=10;
Prácticas Numérico Nota prácticas 1 decimal; predeterminado 0; >=0 AND
simple <=2;

INTRODUCCIÓN DE DATOS

Aunque el modo ver datos de una tabla permite al usuario la inserción, borrado y
modificación de los datos contenidos en ella, no es la mejor forma de hacerlo. Lo
más correcto es utilizar un formulario sobre la tabla: un diálogo más atractivo y
cómodo que una simple tabla, y que estudiaremos en su momento.

El modo de ver datos de una tabla presenta una tabla formada por filas y
columnas. Una fila corresponde a un registro y cada columna a un campo.
Inicialmente la tabla estará vacía. Al final de la tabla siempre aparece una fila en
blanco, destinada a la inserción de nuevos registros. Parte de los campos de esta
fila pueden aparecer rellenos con los valores por defecto programados en la
definición de la tabla. En cualquier caso la modificación de cualquier campo de
esta fila hará que automáticamente aparezca una nueva.

Como hemos visto, los cambios en los registros se almacenan en disco


automáticamente, sin que sea necesario guardarlos explícitamente. Los cambios
que se realizan en los campos de un registro no se almacenan hasta que se
abandona el registro, es decir hasta que se comienza a editar otro registro o se
cierra la tabla. Así, podemos cancelar los cambios hechos en un registro siempre y
cuando no hayamos cambiado de registro. Basta con pulsar la tecla de escape.
Una pulsación hará que se cancele la modificación en el campo actual (si la hay)
al valor anterior. Entonces, una segunda pulsación recuperará el registro completo
(si no se ha modificado el campo actual, bastará con una pulsación para recuperar
el registro completo).

Antes de abandonar un campo, se verifican las reglas de validación de ese campo,


de manera que no se acepta el cambio hasta que todas las reglas asociadas al
campo se cumplan. Además, antes de abandonar un registro se comprobarán las
reglas asociadas al registro, y no se hará la escritura en disco mientras no se
cumpla alguna.

Es posible utilizar los comandos cortar, copiar y pegar habituales de Windows, así
como seleccionar filas y columnas completas, con las siguientes pautas:

 Se pueden seleccionar columnas completas, rangos de columnas, filas


completas y rangos de filas, así como tablas completas; no se pueden
seleccionar rectángulos de varias filas y columnas a la vez ni columnas o filas
salteadas. Para seleccionar filas existe un pulsador de selección de registro, y
para las columnas hay que pulsar sobre el recuadro de título.
 Cualquier selección puede ser copiada al portapapeles, pero no borrada ni
cortada: no se pueden borrar columnas completas.
 Se pueden borrar, cortar, copiar y pegar filas completas. Es posible hacerlo
entre tablas distintas con campos diferentes, incluso desde otras aplicaciones.
Entonces Access tratará de adaptar el contenido del portapapeles a los
campos de destino a través de la concordancia de nombres de campos y sus
tipos. Si no es posible cuadrar todos los datos se creará una tabla "Errores de
pegado" donde irán a parar los datos que no han podido ser alojados.
 Si al pegar varias filas se quebranta alguna regla de integridad, las filas
prohibidas irán a parar a una tabla "Errores de pegado".

Para facilitar la edición de datos, Access permite personalizar parcialmente la tabla


de edición: es posible modificar el tamaño de las celdas y el tipo de letra utilizado,
así como el orden de los registros mostrados e incluso hacer que no aparezcan
determinados registros, aunque lo más correcto para crear un entorno amigable al
usuario es crear un formulario, que permite presentar diálogos mucho más
cómodos y adecuados.

Para finalizar la edición en una tabla debemos cerrarla. No será necesario guardar
los datos modificados, pues ya está almacenado en disco. Pero si hemos
modificado el formato de presentación (tamaño de celdas, tipos de letra, orden de
presentación o filtros), será necesario volver a guardar la tabla, ya que la
personalización de las opciones de visualización se considera como parte de la
definición de la tabla. Si no guardamos estos cambios, la próxima vez que se abra
la tabla en modo ver datos, éstos se presentarán en el formato anterior.

INTERRELACIONES E INTEGRIDAD

En una base de datos lo habitual es que existan varias tablas relacionadas entre
sí. Por ejemplo, si tenemos una tabla de productos de un almacén y una tabla de
proveedores de productos, es probable que en la de productos exista un campo
que indique cuál es el proveedor que suministró ese producto. En tal caso,
debemos establecer unas restricciones sobre ambas tablas de manera que no
existan productos que se refieran a proveedores que no existen, y no se nos
permita eliminar ningún proveedor al que hagan referencia los productos.

La integridad referencial de una base de datos pretende asegurar que no se den


situaciones de inconsistencia como la antes descrita. Para establecer las reglas de
integridad referencial en Access debemos indicar qué campos de qué tablas están
relacionados. La opción Relaciones del menú de herramientas .

Esta opción permite diseñar un esquema de dependencias de forma visual. Disponemos de un


escritorio sobre el que situamos las tablas de la base de datos, y mediante líneas, unimos los
campos dependientes. Siguiendo con en ejemplo de los productos y los proveedores, supongamos
que tenemos las siguientes tablas:

PRODUCTOS PROVEEDORES
ID_producto ID_proveedor
Nombre Nombre
Proveedor Dirección
Cantidad NIF
FAX

La tabla de productos no debe almacenar la información completa de los


proveedores, ya que la haber más de un producto del mismo proveedor
estaríamos almacenando información innecesaria (redundante). Así, sólo se
almacena un pequeño código Proveedor, que se refiere a uno de los registros de
la tabla PROVEEDORES: aquel cuyo ID_proveedor coincida. Es decir, que el
campo PRODUCTOS.Proveedor hace referencia a
PROVEEDORES.ID_proveedor. Para no perder información, ahora tendremos que
asegurarnos de no eliminar entradas de PROVEEDORES que estén referenciadas
por entradas de PRODUCTOS.

Existen diversas posibilidades para mantener la integridad referencial,


correspondientes a las diversas respuestas que podemos hacer a la pregunta:
¿qué pasa si intentamos borrar un proveedor?

a. Lo ignoramos. Como hemos visto no es recomendable.


b. No lo permitimos (a menos que antes borremos todos los registros asociados).
c. Borramos también todos los productos relacionados

En este caso la opción recomendable es la b), ya que para el ejemplo no tiene


sentido que perdamos la información de nuestros productos al eliminar el
proveedor; aunque en muchos otros casos la adecuada puede ser la c). En
general, nunca la a).

También podemos hacernos la pregunta: ¿qué pasa si intentamos cambiar el


identificador de un proveedor?

a. Lo ignoramos y permitimos el cambio.


b. No lo permitimos (a menos que antes modifiquemos todos los registros
asociados).
c. Modificamos también todos los productos relacionados.

En este caso la opción recomendable es la c), ya que es la que resulta


transparente al usuario.

Al establecer una relación de dependencia en Access entre dos tablas es


necesario especificar cuál de las posibilidades anteriores es la que queremos
aplicar.

Existen tres opciones para definir la integridad referencial:

 Exigir integridad referencial: activa o desactiva la integridad referencial entre


los campos de las tablas seleccionadas. Las demás opciones no pueden
activarse si no se activa ésta.
 Actualizar en cascada: si se activa, hace actualizaciones en cascada; si no, no
permite las actualizaciones.
 Eliminar en cascada: si se activa, hace borrados en cascada; si no, no permite
los borrados.

EJERCICIO 1

Supongamos que queremos diseñar e implementar una base de datos para


gestionar una empresa de venta al público.

La empresa dispone de varias tiendas distribuidas por distintas ciudades


españolas y se abastece de unos almacenes igualmente ubicados en diferentes
ciudades. Además, necesitamos conocer las existencias de los productos tanto en
las tiendas como en los almacenes. Por último, debemos guardar información
sobre los pedidos que las tiendas realizan a los almacenes. Para ello
necesitaremos una serie de tablas que mantengan dicha información.

Crear las siguientes tablas:

1. TIENDAS: Tabla que guardará información de las distintas tiendas:

Campo Tipo Descripción Otros atributos


Tid Cadena Identificador de El primer carácter debe ser una T y los otros dos
(3) tienda serán números (T02, T12, etc.). Para introducir un
identificador, sólo será necesario teclear el
número. Clave principal. Requerido.
Tdir Cadena Dirección de la Requerido
(50) tienda
Tloc Cadena Ciudad donde está Una lista de ciudades (Barcelona, Bilbao, Madrid,
(15) la tienda Sevilla, Huelva, Murcia, Granada). Requerido

2. ALMACENES: Tabla que guardará información de los distintos almacenes

Campo Tipo Descripción Otros atributos


Aid Cadena Identificador de El primer carácter debe ser una A y los otros dos
(3) almacén serán números (A05, A18, etc.). Para introducir
un identificador, sólo será necesario teclear el
número. Clave principal. Requerido.
Adir Cadena Dirección del Requerido
(50) almacén
Aloc Cadena Ciudad donde está Una lista de ciudades (Barcelona, Bilbao, Madrid,
(15) el almacén Sevilla, Huelva, Murcia, Granada). Requerido

3. PRODUCTOS: Tabla que guardará información sobre los productos que se venden.

Campo Tipo Descripción Otros atributos


Pid Cadena Identificador de El primer carácter debe ser una P y los otros dos
(3) producto serán números (P27, P18, etc.). Para introducir
un identificador, sólo será necesario teclear el
número. Clave principal. Requerido.
Descripcion Cadena Descripción del Requerido
(20) producto
Peso Entero Peso del >=0 AND <=1000. Requerido
producto
Precio Entero Precio del >=0 AND <=1000000. Requerido
largo producto

4. AEXISTENCIAS: Tabla que guardará información sobre las existencias de los productos en los
almacenes.

Campo Tipo Descripción Otros atributos


Aid Cadena Identificador de El primer carácter debe ser una A y los otros dos
(3) almacén serán números (A05, A18, etc.). Para introducir un
identificador, sólo será necesario teclear el
número. Clave principal. Requerido.
Pid Cadena Identificador de El primer carácter debe ser una P y los otros dos
(3) producto serán números (P27, P18, etc.). Para introducir un
identificador, sólo será necesario teclear el
número. Clave principal. Requerido.
Acant Entero Número de >=0. Requerido
unidades en stock

5. TEXISTENCIAS: Tabla que guardará información sobre las existencias de los productos en las
tiendas.

Campo Tipo Descripción Otros atributos


Tid Cadena Identificador de El primer carácter debe ser una T y los otros dos
(3) tienda serán números (T02, T12, etc.). Para introducir un
identificador, sólo será necesario teclear el
número. Clave principal. Requerido.
Pid Cadena Identificador de El primer carácter debe ser una P y los otros dos
(3) producto serán números (P27, P18, etc.). Para introducir un
identificador, sólo será necesario teclear el
número. Clave principal. Requerido.
Tcant Entero Número de >=0. Requerido
unidades en stock

6. PEDIDOS: Tabla que guardará información sobre los pedidos que las tiendas realizan a los
almacenes.

Campo Tipo Descripción Otros atributos


Pedid Cadena Identificador de Los dos primeros caracteres deben ser "PD" y
(4) pedido los otros dos serán números (PD05, PD18, etc.).
Para introducir un identificador, sólo será
necesario teclear el número. Clave principal.
Requerido.
Aid Cadena Identificador de El primer carácter debe ser una A y los otros dos
(3) almacén serán números (A05, A18, etc.). Para introducir
un identificador, sólo será necesario teclear el
número. Requerido.
Tid Cadena Identificador de El primer carácter debe ser una T y los otros dos
(3) tienda serán números (T02, T12, etc.). Para introducir
un identificador, sólo será necesario teclear el
número. Requerido.
Pid Cadena Identificador de El primer carácter debe ser una P y los otros dos
(3) producto serán números (P27, P18, etc.). Para introducir
un identificador, sólo será necesario teclear el
número. Requerido.
Cant Entero Número de unidades >=0. Requerido
solicitadas
Fped Fecha Fecha del pedido <= fecha actual (que se obtiene con la función
Fecha()). Valor predeterminado: fecha actual.
Requerido.

Ejercicio 2: Introducción de datos

Introducir los datos correspondientes a las tablas creadas en el ejercicio anterior.


Comprobar que las reglas de validación definidas funcionan correctamente
intentando introducir valores ilegales, dejar campos vacíos, etc.

TIENDAS

Tid Tdir Tloc


T1 Paseo de Gracia, 1 Barcelona
T2 Gran Vía, 9 Bilbao
T3 C/ Sagasta, 25 Madrid
T4 Avda. República Sevilla
Argentina, 25
T5 Paseo Recoletos, 3 Madrid
T6 Avda. Andalucía, 36 Huelva

ALMACENES

Aid Adir Aloc


A2 Polígono Sur s/n Huelva
A5 Carretera Murcia, Murcia
124
A3 Polígono Granada
Alhambra, 322

PRODUCTOS

Pid Descripcion Peso Precio


P3 Televisor M1 27 56.000
ptas.
P4 Televisor M2 35 95.000
ptas.
P10 Microondas 12 17.000
mc1 ptas.
P12 Secador sx 1 2.500
ptas.
P13 Lavadora 95 46.000
m100 ptas.
P25 Vídeo v33 8 45.000
ptas.
P26 Vídeo v45 10 37.000
ptas.

PEDIDOS

Pedid Aid Tid Pid Cant Fped


PD10 A2 T1 P3 100 17/02/98
PD11 A2 T3 P4 25 17/02/98
PD12 A3 T3 P10 50 18/02/98
PD13 A3 T3 P25 10 18/02/98
PD14 A2 T4 P4 15 20/02/98
PD15 A5 T5 P26 30 21/02/98
EXISTENCIAS

Aid Pid Acant


A2 P3 250
A2 P4 125
A2 P10 710
A2 P25 25
A2 P26 100
A2 P12 25
A2 P13 75
A3 P4 210
A3 P10 14
A3 P25 50
A5 P3 40
A5 P25 100
A5 P26 12

TEXISTENCIAS

Tid Pid Tcant


T1 P3 17
T1 P4 130
T1 P10 10
T1 P25 22
T1 P26 42
T2 P3 4
T2 P10 80
T2 P25 12
T2 P26 23
T3 P10 125
T4 P3 20
T4 P4 89
T5 P10 9
T5 P25 12
T5 P26 16

FORMATOS DE PRESENTACIÓN DE DATOS

En todos los casos existen varios formatos predefinidos de uso habitual; además,
si el formato deseado no coincide con ninguno de los predefinidos, es posible
especificar un formato personalizado mediante el uso de una serie de símbolos.
Las siguientes tablas muestran los identificadores de formatos predefinidos y los
símbolos empleados en campos de distintos tipos.

Campos de tipo fecha/hora

Valor Descripción
Fecha (Predeterminado) Si el valor es sólo una fecha, no se muestra ninguna
general hora; si el valor es sólo una hora, no se muestra ninguna fecha. Este
valor es una combinación de los valores de Fecha corta y Hora larga.
Ejemplos: 3/4/93, 05:34:00 PM y 3/4/93 05:34:00 PM.
Fecha larga Igual que el valor de Fecha larga del cuadro de diálogo Propiedades de
Configuración regional del Panel de control de Windows. Ejemplo:
Sábado, 3 de Abril de 1993.
Fecha Ejemplo: 3-Abr-93.
mediana
Fecha corta Igual que el valor de Fecha corta del cuadro de diálogo Propiedades de
Configuración regional del Panel de control de Windows. Ejemplo:
3/4/93.Atención: El formato Fecha corta asume que las fechas
comprendidas entre el 1/1/00 y el 31/12/29 son fechas del siglo XXI (es
decir, que los años están entre el 2000 y el 2029). Las fechas
comprendidas entre el 1/1/30 y el 31/12/99 se asume que son fechas
del siglo XX (es decir, que los años están entre 1930 y 1999).
Hora larga Igual que el valor de la ficha Hora del cuadro de diálogo Propiedades
de Configuración regional del Panel de control de Windows. Ejemplo:
5:34:23 PM.
Hora Ejemplo: 5:34 PM.
mediana
Hora corta Ejemplo: 17:34.
Símbolo Descripción
: (dos Separador de hora. Los separadores se establecen en el cuadro de
puntos) diálogo Propiedades de Configuración regional del Panel de control de
Windows.
/ Separador de fecha.
c Igual que el formato predefinido Fecha general.
d Día del mes en uno o dos dígitos numéricos, según sea necesario (1 a
31).
dd Día del mes en dos dígitos numéricos (01 a 31).
ddd Tres primeras letras del día de la semana (Lun a Dom)
dddd Nombre completo del día de la semana (Lunes a Dom).
ddddd Igual que el formato predefinido Hora corta.
dddddd Igual que el formato predefinido Fecha larga.
s Día de la semana (1 a 7).
ss Semana del año (1 a 53).
m Mes del año en uno o dos dígitos numéricos, según sea necesario (1 a
12).
mm Mes del año en dos dígitos numéricos (01 a 12).
mmm Tres primeras letras del mes (Ene a Dic).
mmmm Nombre completo del mes (Enero a Diciembre).
t Fecha mostrada como trimestre del año (1 a 4).
a Número de día del año (1 a 366).
aa Dos últimos dígitos del año (01 a 99).
aaaa Año completo (0100 a 9999).
h Hora en uno o dos dígitos, según sea necesario (0 a 23).
hh Hora en dos dígitos (00 a 23).
n Minuto en uno o dos dígitos, según sea necesario (0 a 59).
nn Minuto en dos dígitos (00 a 59).
s Segundo en uno o dos dígitos, según sea necesario (0 a 59).
ss Segundo en dos dígitos (00 a 59).
ttttt Igual que el formato predefinido Hora larga.
AM/PM Reloj de 12 horas con las letras mayúsculas "AM" o "PM", según sea
apropiado.
am/pm Reloj de doce horas con las letras minúsculas "am" o "pm", según sea
apropiado.
A/P Reloj de doce horas con la letra mayúscula "A" o "P", según sea
apropiado.
a/p Reloj de doce horas con la letra minúscula "a" o "p", según sea
apropiado.
AMPM Reloj de doce horas con el indicador de mañana/tarde apropiado
establecido en el cuadro de diálogo Propiedades de Configuración
regional del Panel de control de Windows.

Los formatos personalizados se muestran según el valor especificado en el cuadro


de diálogo Propiedades de Configuración regional del Panel de control de
Windows. Los formatos personalizados incoherentes con los valores especificados
en el cuadro de diálogo Propiedades de Configuración regional se ignoran. Para
agregar una coma u otro separador al formato personalizado se debe incluir el
separador entre comillas. Por ejemplo: d mmm", "aaaa.

Campos de tipo numérico y moneda

Valor Descripción
Número (Predeterminado) Muestra el número tal como se introduce.
general
Moneda Utiliza el separador de miles; muestra los números negativos entre
paréntesis; el valor predeterminado de la propiedad
LugaresDecimales es 2.
Fijo Muestra al menos un dígito; el valor predeterminado de la propiedad
LugaresDecimales es 2.
Estándar Utiliza el separador de miles; el valor predeterminado de la propiedad
LugaresDecimales es 2.
Porcentaje Multiplica el valor por 100 y anexa un signo de porcentaje; el valor
predeterminado de la propiedad LugaresDecimales es 2.
Científico Utiliza la notación científica estándar.

Los formatos numéricos personalizados pueden tener entre una y cuatro


secciones con signos de punto y coma (;) como separador de lista. Cada sección
contiene la especificación de formato para un tipo de número diferente:

1. El formato para los números positivos.


2. El formato para los números negativos.
3. El formato para los valores cero.
4. El formato para los valores nulos.

Por ejemplo, el siguiente formato Moneda personalizado contiene cuatro


secciones separadas por signos de punto y coma y utiliza un formato diferente
para cada sección:
$#.##0,00[Verde];($#.##0,00)[Rojo];"Cero";"Null"

Si se utilizan varias secciones pero no se especifica un formato para cada sección, las entradas para
las que no hay ningún formato no mostrarán nada o tomarán como valor predeterminado el
formato de la primera sección.

Símbolo Descripción
, (coma) Separador decimal. Los separadores se establecen haciendo doble clic en
Configuración regional en el Panel de control de Windows.
. (punto) Separador de miles.
0 Marcador de posición de dígitos. Muestra un dígito ó 0.
# Marcador de posición de dígitos. Muestra un dígito o nada.
$ Muestra el carácter literal "$".
% Porcentaje. El valor se multiplica por 100 y se le anexa un signo de
porcentaje.
E– o e– Notación científica con un signo menos (–) junto a los exponentes
negativos y nada junto a los exponentes positivos. Este símbolo debe
utilizarse con otros símbolos, como en el ejemplo 0,00E–00 o 0,00E00.
E+ o e+ Notación científica con un signo menos junto a los exponentes negativos y
un signo más (+) junto a los exponentes positivos. Este símbolo debe
utilizarse con otros símbolos, como en el ejemplo 0,00E+00.

Campo de tipo texto y memo

Símbolo Descripción
@ Se necesita un carácter de texto (ya sea un
carácter o un espacio).
& No se necesita un carácter de texto.
< Convertir todos los caracteres a minúsculas.
> Convertir todos los caracteres a mayúsculas.

Los formatos personalizados para los campos Texto y Memo pueden tener hasta
dos secciones: la primera contiene el formato para los campos con texto y la
segunda el formato para los campos con cadenas de longitud cero y valores nulos.

Por ejemplo, para obtener que aparezca la palabra "Ninguno" cuando no exista
ninguna cadena en el campo, puede utilizarse el formato personalizado
@;"Ninguno".

Campos de tipo sí/no


En las últimas versiones de Access, los campos lógicos se muestran al usuario de
forma gráfica como una casilla de verificación, aunque también puede mostrarse
como un texto. En el primer caso, cualquier formato especificado es ignorado.

Los formatos predefinidos son Sí/No, Verdadero/Falso y Activado/Desactivado.

Sí, Verdadero y Activado son equivalentes entre sí, al igual que lo son No, Falso y
Desactivado. Si se especifica un formato predefinido y, al editar los datos, se
introduce un valor equivalente, se mostrará el formato predefinido del valor
equivalente.

Para formatos personalizados se pueden utilizar expresiones que contengan hasta


tres secciones:

1. Esta sección no tiene ningún efecto en el tipo de datos Sí/No. No obstante,


se requiere un signo de punto y coma (;) como marcador de posición.
2. El texto para mostrar en lugar de los valores Sí, Verdadero o Activado.
3. El texto para mostrar en lugar de los valores No, Falso o Desactivado.

Formato de máscaras de entrada

La expresión para el formato de máscara de entrada puede contener hasta tres


secciones separadas por signos de punto y coma (;).

1. Especifica la máscara de entrada propiamente dicha, por ejemplo, !(999)


999-9999. Los caracteres que se pueden utilizar para definir la máscara de
entrada se muestran más adelante.
2. Especifica si Access almacena los caracteres de visualización literales en la
tabla al introducir datos. Si se utiliza 0 para esta sección, todos los
caracteres de visualización literales (por ejemplo, el paréntesis de una
máscara de entrada de un número de teléfono) se almacenan con el valor;
si se introduce 1 o se deja esta sección en blanco, sólo se almacenan los
caracteres introducidos en el control.
3. Especifica el carácter que Access muestra para el espacio en el que el
usuario debe escribir un carácter en la máscara de entrada. Para esta
sección puede utilizar cualquier carácter. Por ejemplo para mostrar un
asterisco, se escribe entre comillas ("*").

Se pueden definir máscaras de entrada mediante los siguientes caracteres:

Carácter Descripción
0 Dígito (0 a 9, entrada obligatoria, signos más [+] y menos [–] no
permitidos).
9 Dígito o espacio (entrada no obligatoria, signos más y menos no
permitidos).
# Dígito o espacio (entrada no obligatoria; los espacios se muestran en
blanco en el modo Edición, pero se eliminan cuando se guardan los datos;
signos más y menos permitidos).
L Letra (A a Z, entrada obligatoria).
? Letra (A a Z, entrada opcional).
A Letra o dígito (entrada obligatoria).
a Letra o dígito (entrada opcional).
& Cualquier carácter o un espacio (entrada obligatoria).
C Cualquier carácter o un espacio (entrada opcional).
.,:;-/ Marcador de posición decimal y separadores de miles, hora y fecha (el
carácter depende del valor del cuadro de diálogo Propiedades de
Configuración regional en el Panel de control de Windows).
< Hace que todos los caracteres se conviertan a minúsculas.
> Hace que todos los caracteres se conviertan a mayúsculas.
! Hace que la máscara de entrada se muestre de derecha a izquierda, en
lugar de mostrarse de izquierda a derecha. Los caracteres introducidos en
la máscara siempre se rellenan de izquierda a derecha. Puede incluir el
signo de exclamación en cualquier lugar de la máscara de entrada.
\ Hace que el carácter siguiente se muestre como un carácter literal (por
ejemplo, \A se muestra sólo como A).

Existe una máscara predeterminada: "Contraseña". Crea un control de entrada de


contraseña, de manera que cualquier carácter introducido se almacena como el
carácter pero se muestra como un asterisco (*).
REFERENCIAS BIBLIOGRAFICAS

 Ocw.Uoc.Edu/Computer-Science.../P06_M2109_02149.Pdf

 Www.Pablin.Com.Ar/Computer/Cursos/Varios/Sql1.Ht

 Www.Desarrolloweb.Com › Directorio › Bases_De_Datos

 Es.Wikipedia.Org/Wiki/Sql

 Www.Htmlpoint.Com/Sql/Sql_07.

También podría gustarte