Anda di halaman 1dari 47

Actualmente las organizaciones están utilizando bases de datos

para generar resultados o para compartir dicha información con


otros sistemas. El análisis de cómo lograr esto comienza por
formular la lógica de los datos organizacionales como un todo, para
después vincular aquellos con los procesos que los utilizan. Es en
este análisis en que las Bases de Datos como una unidad tanto
teórica como conceptual y física cobran importancia.

1. CONCEPTOS BÁSICOS

Dato: Conjunto de caracteres con algún significado, pueden ser


numéricos, alfabéticos, o alfanuméricos.

Datos de Operación: los datos de una Base de Datos se consideran


DATOS de OPERACION, distinguiéndose de los datos de entrada y
de salida.

Información: Es un conjunto ordenado de datos los cuales son


manejados según la necesidad del usuario, para que un conjunto de
datos pueda ser procesado eficientemente y pueda dar lugar a
información, primero se debe guardar lógicamente en archivos.

Archivos. Un archivo es un elemento de información conformado


por un conjunto de registros. Estos registros a su vez están
compuestos por una serie de caracteres o bytes. Es una Colección
de registros almacenados siguiendo una estructura homogénea.
Las formas en las cuales pueden organizarse los archivos, son
archivos secuenciales o archivos directos.
En los archivos secuenciales los registros están almacenados en
una secuencia que depende de algún criterio definido.

La otra forma de organizar los archivos es a través de archivos


directos, con los cuales se eliminan las desventajas en los archivos
secuenciales, ya que los archivos directos dan mayor flexibilidad en
su manejo. Esta forma de organización es la que hace posible que
exista las bases de datos. Los archivos directos permiten acceder
directamente un registro de información sin tener que buscar uno a
uno por todos los registros del archivo, utilizando una llave de
acceso dentro del archivo.

Campo: Es la unidad más pequeña a la cual uno puede referirse en


un programa. Desde el punto de vista del programador representa
una característica de un individuo u objeto.
Registro: Colección de campos de iguales o de diferentes tipos.

Instancia. Al estado que presenta una base de datos en un tiempo


dado. Veámoslo como una fotografía que tomamos de la base de
datos en un tiempo t, después de que transcurre el tiempo t la base
de datos ya no es la misma.

Esquema. Es la descripción lógica de la base de datos, proporciona


los nombres de las entidades y sus atributos especificando las
relaciones que existen entre ellos. Es un banco en el que se
inscriben los valores que irán formando cada uno de los atributos. El
esquema no cambia los que varían son los datos y con esto
tenemos una nueva instancia.

Base De Datos

Concepto: “Colección de datos integrados, con redundancia


controlada y con una estructura que refleje las interrelaciones y
restricciones existentes en el mundo real; los datos, que han de ser
compartidos por diferentes usuarios y aplicaciones, deben
mantenerse independientes de éstas, y su definición y descripción,
únicas para cada tipo de datos, han de estar almacenadas junto con
los mismos. Los procedimientos de actualización y recuperación,
comunes y bien determinados, habrán de ser capaces de conservar
la integridad, seguridad y confidencialidad del conjunto de los
datos". A.de Miguel, 1993.

Sistema de Base de Datos

Colección de archivos o tablas interrelacionadas, organizadas y


estructuradas bajo un mismo enfoque semántico o de significado
que conserva un conjunto de datos de tal forma que respondan a
las necesidades informacionales de forma veraz y oportuna.

Objetivos de los sistemas de bases de datos

Los objetivos principales de un sistema de base de datos están


orientados fundamentalmente a disminuir los siguientes aspectos:
Redundancia e inconsistencia de datos, Dificultad para tener acceso
a los datos, Aislamiento de los datos, Anomalías del acceso
concurrente, Problemas de seguridad., Problemas de integridad.

Sistema De Gestión De Bases De Datos

Un DBMS ó SGBD Es un conjunto de elementos (procesos,


hardware y software) que se encargan de controlar todos los
procesos propios de la gestión al rededor del sistema de Base de
Datos. Desde el punto de vista del software un SGBD se compone
de un lenguaje de definición de datos, de un lenguaje de
manipulación de datos y de un lenguaje de consulta propios de una
plataforma de gestión (ORACLE, SYSBASE, SQL SERVER,
INFORMIX, etc); donde interactuan tanto usuarios no informáticos
como los analistas, programadores, finales, auxiliares y el
administrador y finalmente los medios necesarios para describir,
recuperar y manipular los datos almacenados en la base,
preservando su integridad, confidencialidad y seguridad
preservados bajo políticas, procesos y prodecimientos. Además de
suministrar la interfaz entre el conjunto de los datos y dichos
usuarios. El SGBD también debe proporcionar a los otros usuarios
(analistas, programadores, administradores) las correspondientes
herramientas que les permitan un adecuado desarrollo de sus
funciones.

Características De Un Sistema De Base De Datos: El objetivo de


disminuir la redundancia de un conjunto de datos determina dos
características fundamentales que poseerá cualquier sistema de
Bases de Datos: Integrada: se entiende que una base de datos
puede considerarse como una unificación de varios archivos de
datos independientes, donde se elimina parcial o totalmente
cualquier redundancia entre los mismos. La independencia de los
datos se refiere entonces a la protección contra los programas de
aplicación que puedan originar modificaciones cuando se altera la
organización física o lógica de la base de datos. Existen 2 niveles
de independencia de datos: Independencia física de datos: Es la
capacidad de modificar el esquema físico sin provocar que se
vuelvan a escribir los programas de aplicación. Independencia
lógica de datos: Capacidad de modificar el esquema conceptual sin
provocar que se vuelvan a escribir los programas de aplicación.
Compartida: Se entiende que partes individuales de la Base de
Datos pueden compartirse entre varios usuarios distintos, en el
sentido que cada uno de ellos puede tener acceso a la misma parte
de la Base de Datos y utilizarla con propósitos diferentes. Tal
comportamiento es en verdad consecuencia del hecho de que la
Base de Datos es integrada.

Ventajas en el uso de sistemas de bases de datos

Cuadro resumen de las ventajas de las bases de datos


Referidas a Ventajas
Los datos . Independencia de estos respecto de los tratamientos y
viceversa . Mejor disponibilidad de los mismos . Mayor eficiencia en
la recogida, codificación y entrada
Los resultados . Mayor coherencia . Mayor valor informativo . Mejor
y más normalizada documentación de la información
Los usuarios . Acceso más rápido y sencillo de los usuarios finales .
Más facilidades para compartir los datos por el conjunto de los
usuarios . Mayor flexibilidad para atender a demandas cambiantes.

Desventajas en el uso de las bases de datos

Cuadro resumen de las desventajas de las bases de datos


Relativas a Desventajas
La implantación . Costosa en equipos (lógico y físico) . Ausencia de
estándares . Larga y difícil puesta en marcha . Rentabilidad a
mediano plazo
Los usuarios . Personal especializado . Desfase entre teoría y
práctica

Componentes De Los Sistemas De Gestión de Bases De Datos. Un


sistema de gestión de bases de datos contempla los siguientes
componentes:

· El Sistema de base de datos


· El Sistema de Gestión de Bases de Datos (SGBD, DBMS) o motor,
tal como Oracle, Sybase, etc.
· Programas de aplicación
· Un conjunto de usuarios (finales, DBA, programadores de
aplicaciones, etc.)
· Máquinas (servidores y estaciones de trabajo)
· Programas utilitarios (generadores de informes, de interfaces,
herramientas de desarrollo, de administración, etc.)
Un DSL es un sublenguaje de datos, es una combinación de dos
lenguajes: un lenguaje de definición de datos (DDL) y un lenguaje
de manipulación de Datos (DML). Este lenguaje representa un nexo
entre el Sistema de Base de Datos y algún lenguaje anfitrión (p.e.
COBOL, FORTRAN, C, etc.); e.d., el DSL provee herramientas a los
lenguajes tradicionales para que se integren al Sistema de Base de
Datos. Puede haber distintos tipos de DSL para un mismo sistema.
Funciones principales de un DBMS
· Crear y organizar la Base de datos.· Establecer y mantener las
trayectorias de acceso a la base de datos de tal forma que los datos
puedan ser accesados rápidamente.· Manejar los datos de acuerdo
a las peticiones de los usuarios. · Registrar el uso de las bases de
datos. · Interacción con el manejador de archivos. Esto a través de
las sentencias en DML al comando del sistema de archivos. Así el
Manejador de base de datos es el responsable del verdadero
almacenamiento de los datos.· Respaldo y recuperación. Consiste
en contar con mecanismos implantados que permitan la
recuperación fácilmente de los datos en caso de ocurrir fallas en el
sistema de base de datos.· Control de concurrencia. Consiste en
controlar la interacción entre los usuariosconcurrentes para no
afectar la inconsistencia de los datos.· Seguridad e integridad.
Consiste en contar con mecanismos que permitan el control de la
consistencia de los datos evitando que estos se vean perjudicados
por cambios no autorizados o previstos. El DBMS es conocido
también como Gestor de Base de datos.

MODELO ENTIDAD-RELACIÓN

Definición: Denominado por sus siglas como: ER; Este modelo


representa a la realidad a través de entidades, que son colección o
conjunto de objetos que existen que comparten iguales
características y que se distinguen de otros por el valor de tales
características, por ejemplo: un alumno se distingue de otro por sus
características particulares como lo es el nombre, o el numero de
control asignado al entrar a una institución educativa, así mismo, un
empleado, una materia, etc. Las entidades pueden ser de dos tipos:
Tangibles: Son todos aquellos objetos físicos que podemos ver,
tocar o sentir. Intangibles: Todos aquellos eventos u objetos
conceptuales que no podemos ver, aun sabiendo que existen, por
ejemplo: la entidad materia, sabemos que existe, sin embargo, no la
podemos visualizar o tocar. Las características de las entidades en
base de datos se llaman atributos, por ejemplo el nombre, dirección
teléfono, grado, grupo, etc. son atributos de la entidad alumno;
Clave, número de seguro social, departamento, etc., son atributos
de la entidad empleado. El conjunto de características de un objeto
se denomina registro. Y un objeto es una instancia de la entidad a la
que pertenece. A su vez una entidad se puede asociar o relacionar
con más entidades a través de relaciones. En este modelo se
representan los datos y las relaciones entre estos, a través de una
colección de tablas, en las cuales los renglones (tuplas) equivalen a
los cada uno de los registros que contendrá la base de datos y las
columnas corresponden a las características (atributos) de cada
registro localizado en la tupla; Una tabla es en efecto el conjunto de
todos los datos característicos de sus objetos representados en
arhivos de bases de datos. Considerando nuestro ejemplo del
empleado y el artículo:Tabla del empleado.

Las interrelaciones

Las interrelaciones son las relaciones que existen entre varias


tablas del sistema (Clientes y Pedidos, por ejemplo). Existen tres
formas de interrelaciones dependiendo de la cardinalidad con la que
se combinan los elementos de ambas tablas.

Interrelaciones uno a uno: Una interrelación es de uno a uno entre


la tabla A y la tabla B cuando a cada elemento de la clave de A se
le asigna un único elemento de la tabla B y para cada elemento de
la clave de la tabla B contiene un único elemento en la tabla A. Un
ejemplo de interrelación de este tipo es la formada por las tablas
Datos Generales de Clientes y Datos Contables de Clientes. En
esta relación cada cliente tiene una única dirección y una dirección
en cada una de las tablas. Representamos la relación como A 1: 1
B. Ante la presencia de este tipo de relación nos podemos plantear
el caso de unificar todos los datos en única tabla pues no es
necesario mantener ambas tablas a la misma vez.
Este tipo de relación se genera cuando aparecen tablas muy
grandes, con gran cantidad de campos, disgregando la tabla
principal en dos para evitar tener una tabla muy grande. También
surge cuando los diferentes grupos de usuario cumplimentan una
información diferente para un mismo registros; en este caso se
crean tantas tablas como registros, evitando así tener que acceder
a información que el usuario del grupo actual no necesita.

Interrelaciones uno a varios :Una interrelación es de uno a varios


entre las tablas A y B cuando una clave de la tabla A posee varios
elementos relacionados en la tabla B y cuando una clave de la tabla
B posee un único elemento relacionado en la tabla A. Estudiemos la
relación entre la tabla de clientes y la tabla de pedidos. Un cliente
puede realizar varios pedidos pero un pedido pertenece a un único
cliente, por tanto se trata de una relación uno a varios y la
representamos A 1: n B. Estas relaciones suelen surgir de aplicar la
1NF a una tabla.

Interrelaciones varios a varios: Una interrelación es de varios a


varios entre las tablas A y B cuando una clave de la tabla A posee
varios elementos relacionados en la tabla B y cuando una clave de
la tabla B posee varios elementos relacionados en la tabla A. Un
caso muy característico de esta interrelación es la que surge entre
las tablas de Puestos de Trabajo y Empleados de una empresa. Un
Empleado puede desempeñar realizar varias funciones dentro de
una empresa (desempeñar varios puestos de trabajo), y un puesto
de trabajo puede estar ocupado por varios empleados a la misma
vez. Esta interrelación la representamos como A n: n B.

SEGURIDAD EN BASES DE DATOS

La información almacenada en la base de datos debe estar


protegida contra accesos no autorizados, destrucción o alteración
con fines indebidos y la introducción accidental de inconsistencia.
La protección de los datos es un aspecto muy vinculado con el
concepto mismo de base de datos. La protección de los datos debe
realizarse contra fallos físicos, fallos lógicos y fallos humanos
reflejándose en situaciones como por ejemplo:

· Caídas durante el procesamiento de las transacciones


· Anomalías por acceso concurrente a la bases de datos
· Anomalías que resultan de la distribución de los datos entre varios
computadores
· Errores lógicos que violan la suposición de que las transacciones
respetan las protecciones de consistencia de la BD

Es más fácil prevenir la pérdida accidental de la consistencia de los


datos que prevenir el acceso mal intencionado a la BD. Algunas
formas de acceso indebido son:

· Lectura de datos sin autorización (robo o espiar información)


· Modificación de datos sin autorización
· Destrucción de datos no autorizada
· Ingreso de información sin autorización
Estas situaciones alteran los datos, con lo que la base de datos ya
no puede servir a los fines para los que fue creado. En este
contexto aparecen los temas de: recuperación, concurrencia,
seguridad e integridad de la base de datos. Los problemas de
recuperación y concurrencia están muy relacionados con lo que se
conoce como procesamiento de transacciones. El SGBD
proporciona mecanismos para prevenir fallos (subsistemas de
control), para detectarlos una vez que se han producido
(subsistema de detección) y para corregirlos.

No es posible proteger de manera absoluta a la base de datos


contra un manejo indebido, pero puede hacerse que el coste para el
autor sea tan alto que frene prácticamente todos los intentos de
acceder a la base de datos sin la autorización debida. El término
seguridad de la base de datos normalmente se refiere a la
protección contra el acceso mal intencionado, mientras que
integridad se refiere a la protección contra una pérdida accidental
de consistencia. En Ía práctica, la línea que separa la seguridad de
la integridad no siempre está bien definida. Aquí si utilizaremos el
término seguridad para referirnos tanto a la seguridad como a la
integridad en los casos que la distinción entre estos dos conceptos
no sea esencial.

Estos script de SQL corresponden a el ejercicio que se plantea en el


taller y que se desarrolló en la clase. Usted debe completar con la
creacion de las tablas faltantes, relaciones y resolver las preguntas
que se plantean, Tambien se hace una descripcion de todos los
scripts. Para ejecutalos debe bajar una instruccion a la vez y
ejecutarla.

Crear la tabla de paquetes. Se debe indicar cual es la llave primaria


de la tabla. Not null significa que no se permite dejar el campo en
blanco (debe ser llenado con datos).

create table paquete (


NumeroGuia char(12) primary key,
Descripcion char(40) not null,
Peso numeric,
PrecioEnvio numeric,
destinatario char(36),
remitente char(42),
CodigoSucursal integer,
CiudadOrigen char (24),
CiudadDestino char(24))

Crear la tabla de sucursales


create table sucursal (
CodigoSucursal integer primary key,
NombreSucursal char(36) not null,
DireccionSucursal char(24),
TelefonoSucursal char(12),
FaxSucursal char(12))

Establecer la relacion entre paquete y sucursal el alter table se


indica la tabla que tiene la llave foránea y en references el campo
que tiene la llave principal. Observe que para poder definir la
relación, debe existir en ambas tablas un campo que sea igual
(CodigoSucursal en este caso) igual significa que deben ser del
mismo tipo y que va a tener datos similares en ambas tablas.

alter table paquete


add constraint fksucursal
foreign key (CodigoSucursal) references sucursal(CodigoSucursal)
on update cascade
on delete cascade

Inserción de datos en la tabla sucursal. En nuestro ejemplo se


ingresan todos los campos a la vez. Cuando no va a ingresar todos
los datos del registro, debe utilizar otra sisntaxis distinta (por favor
consulte en los manuales, guias o con el profesor). Observe que los
datos de tipo texto se ecriben entre comillas, los numericos no.

insert into sucursal values (1, "Manizales Centro", "Clle 20 30-34",


"8842322", "8861215")

insert into sucursal values (6, "Duitama Norte", "Cra 5 8-16",


"42322", "61215")

insert into paquete values ("141422", "Documentos", 12.3, 4750,


"Pepe Sanchez", "Sacarias Rosas", 1, "Manizales", "Bogota" )
Como en la tabla no se incluyeron algunos campos los vamos a
agregar.

alter table paquete add DireccionRemite char(40)

alter table paquete add DireccionDestino char(40)

Insertamos mas datos.


insert into paquete values ("141367", "Documentos", 10.4, 4750,
"Pedro Rios", "Angel Diaz", 6, "Duitama", "Bogota" , "Clle 44 20-25",
"Cra 80 Nro. 30 -68")

insert into paquete values ("10168", "Cds", 3.2, 8000, "Juan


Camargo", "Ariel Arias", 6, "Duitama", "Villavicencio" , "Clle 16 25-
25", "Cra 22 Nro. 11 - 11")

Elaboramos la consulta mas simple.


select * from paquete

Ahora escogeremos unos campos para mostrar en la consulta


select NumeroGuia, descripcion from paquete

Consultar los ´paquetes enviados desde manizales.


select NumeroGuia, Descripcion from paquete where CiudadOrigen
= "Manizales"

Encontrar el valor total de todos los paquetes


select sum(PrecioEnvio) from paquete

Encontrar el valor promedio de todos los paquetes


select avg(PrecioEnvio) from paquete

Encontrar el valor promedio de los paquetes enviados desde


Duitama.
select avg(PrecioEnvio) from paquete where CiudadOrigen =
"Duitama"

Encontrar el valor total de los paquetes agrupados por cuidad


select CiudadOrigen, sum(PrecioEnvio) from paquete group by
CiudadOrigen

Mostrar todos los paquetes ordenados por ciudad


select NumeroGuia, descripcion, CiudadDestino from paquete order
by CiudadDestino

Borrar el campo ciudad origen. Este dato se puede deducir desde la


sucursal, dado que la sucursal tiene una ciudad.
alter table paquete drop CiudadOrigen

Mostrar el nombre de la sucursal y el numero de guia para cada


paquete
select NombreSucursal, NumeroGuia
from sucursal, paquete
where paquete.CodigoSucursal = sucursal.CodigoSucursal

Mostrar el numero de paquetes enviados por cada sucursal

Agregar en la tabla de paquetes la fecha de envio y la fecha de


llegada

Mostrar el peso promedio de los paquetes con destino a Bogotá

Encontrar el valor total de los paquetes enviados a Bogotá

Elaborar las tablas y relaciones restantes

UNIVERSIDAD DE MANIZALES
FACULTAD DE INGENEIRIA
TECNOLOGIA DE SISTEMAS
BASES DE DATOS II

1. Elabore un diagrama entidad-relación y el correspondiente


modelo relacional, para una empresa que se encarga de repartir
mensajería a nivel local nacional e internacional. Se debe tener la
posibilidad que el cliente haga seguimiento por Internet de su envio.

2 Se pide elaborar el diagrama entidad relación para una empresa


dedicada a la distribución de bebidas gaseosas en las tiendas de
barrio de la ciudad. El vendedor consulta existencias y registra su
pedidos desde la pagina web de la empresa vía celular.

3. Plantee el modelo entidad relación para un juego de cartas virtual


entre varios jugadores que están en línea. A cada jugador le
entregan 6 cartas y el objetivo es ir colocando sobre la mesa las
cartas en orden numérico, cuando el jugador no tiene el numero que
sigue puede pedir mas cartas, cuando no hay mas cartas pasa.
Gana la persona que se quede sin cartas o que la suma de los
números de las cartas sea el menor.

Introdución al SQL

1 Terminología

SQL
Structured Query Language o Lenguaje de Consultas Estructurado.
Es el lenguaje que permite la comunicación con el Sistema Gestor
de Bases de Datos
El SQL es un lenguaje unificado
Lo utilizan todo tipo de usuarios, desde el administrador de la base
de datos, DBA, hasta el usuario final.
El SQL es un lenguaje no procedimental.
El usuario especifica Qué quiere, no Cómo ni Dónde conseguirlo.
El SQL es relacionalmente completo.
Permite la realización de cualquier consulta de datos.
SQL= DDL + DML
Las sentencias del SQL se clasifican como parte del DDL o del
DML.
Lenguaje de Definición de Datos, DDL
sentencias del SQL que permiten definir los objetos de la Base de
Datos (create, revoke, grant, alter, etc.). Cuando se definen dichos
objetos se almacenan en el diccionario de datos.
Lenguaje de Manipulación de Datos, DML
sentencias del SQL que se utilizan para manejar los datos de la
base de datos (select, insert, update, delete, etc).
Diccionario de la Base de Datos
Guarda la definición de todos los objetos almacenados en la base
de datos; sus características, restricciones, privilegios, relaciones
entre ellos, etc.
2 Tipos de Sentencias

Las sentencias SQL pertenecen a dos categorías principales:


Lenguaje de Definición de Datos, DDL y Lenguaje de Manipulación
de Datos, DML. Estos dos lenguajes no son lenguajes en sí
mismos, sino que es una forma de clasificar las sentencias de
lenguaje SQL en función de su cometido. La diferencia principal
reside en que el DDL crea objetos en la base de datos y sus efectos
se pueden ver en el diccionario de la base de datos; mientras que el
DML es el que permite consultar, insertar, modificar y eliminar la
información almacenada en los objetos de la base de datos.
A continuación se presenta una tabla con las sentencias SQL más
comunes, clasificadas según el lenguaje al que pertenecen.
Sentencia DDL Objetivo
Alter Table Añadir o redefinir una columna, modificar la asignación
de almacenamiento.
Create Table Crear una tabla.
Drop Table Eliminar una tabla.
Create Index Crear un índice.
Drop Index Eliminar un índice.
Create database Eliminar todas las filas de una tabla.
Drop Database Retirar los privilegios de un usuario o rol de la base
de datos.

Sentencia DML Objetivo


Insert Añadir filas de datos a una tabla.
Delete Eliminar filas de datos de una tabla.
Update Modificar los datos de una tabla.
Select Recuperar datos de una tabla.

3 Creación

La primera fase de cualquier base de datos comienza siempre con


sentencias DDL, ya que antes de poder almacenar información
debemos definir los objetos básicos donde agrupar la información.
Los objetos básicos con que trabaja SQL son las tablas. Una tabla
es un conjunto de celdas agrupadas en filas y columnas donde se
almacenan elementos de información.
Antes de llevar a cabo la creación de una tabla conviene planificar:
• nombre de la tabla,
• nombre de cada columna,
• tipo y tamaño de los datos almacenados en cada columna,
• información adicional, restricciones, etc.
Hay que tener en cuenta también ciertas restricciones en la
formación de los nombres de las tablas: longitud máxima de 30
caracteres, no puede haber nombres de tabla duplicados, deben
comenzar con un carácter alfabético, permitir caracteres
alfanuméricos y el guión bajo '_', y las gran mayoría de los gestores
de bases de datos, no distingue entre mayúsculas y minúsculas.
La sintaxis del comando que permite crear una tabla es la siguiente:

CREATE TABLE [esquema.]tabla ({columna tipoColumna [NOT


NULL],}+,
{CONSTRAINT nombreRestricción
{UNIQUE ([column,]+)|
DEFAULT expresion|
CHECK (condicion)|
PRIMARY KEY ([column,]+)|
FOREIGN KEY (column) REFERENCES tabla(columna)},}*)
Del examen de la sintaxis de la sentencia Create Table se pueden
concluir que necesitamos conocer los distintos tipos de columna y
las distintas restricciones que se pueden imponer al contenido de
las columnas. Vayamos por partes.

4.1 Tipos de Columnas


Existen varios tipos de datos en SQL. De esta manera, cada
columna puede albergar una información de naturaleza distinta. Los
tipos de datos más comunes y sus características se resumen en la
siguiente tabla.
Tipo de Dato Descripción
VARCHAR2(tamaño) Almacena datos de tipo carácter alfanumérico
de longitud variable, con un tamaño máximo de 2.000.
CHAR(tamaño) Almacena datos de tipo carácter alfanumérico de
longitud fija, con un tamaño máximo de 255.
LONG Almacena datos de tipo carácter alfanumérico de longitud
variable con un tamaño máximo de hasta 2 Gb.
NUMBER(dig,dec) Almacena datos numéricos de dig dígitos, de los
cuales dec son decimales. El tamaño máximo es de 38 dígitos.
DATE Almacena fechas desde el 1-Ene-4712 AC hasta el 31-Dic-
4712 DC.
RAW(tamaño) Almacena datos de longitud variable, con un tamaño
máximo de 255 bytes.
LONG RAW Almacena datos de longitud variable, con un tamaño
máximo de 2 Gb.

3.2 Restricciones
Las restricciones de los datos se imponen para asegurarnos que los
datos cumplen con una serie de condiciones predefinidas para cada
tabla. Estas restricciones ayudan a conseguir la integridad de
referencia: todas las referencias dentro de una BD son válidas y
todas las restricciones se han cumplido.
Las restricciones se van a definir acompañadas por un nombre, lo
que permitirá activarlas o desactivarlas según sea el caso; o
también mezcladas en la definiciones de las columnas de la tabla. A
continuación vamos a describir cada una de las restricciones
mencionadas.
NOT NULL
Establece la obligatoriedad de que esta columna tenga un valor no
nulo. Se debe especificar junto a la columna a la que afecta. Los
valores nulos no ocupan espacio, y son distintos a 0 y al espacio en
blanco. Hay que tener cuidado con los valores nulos en las
operaciones, ya que 1 * NULL es igual a NULL.
UNIQUE
Evita valores repetidos en una columna, admitiendo valores nulos.
Oracle crea un índice automáticamente cuando se habilita esta
restricción y lo borra al deshabilitarse.
DEFAULT
Establece un valor por defecto para esa columna, si no se le asigna
ninguno.
CHECK
Comprueba que se cumpla una condición determinada al rellenar
esa columna. Esta condición sólo debe estar construida con
columnas de esta misma tabla.
PRIMARY KEY
Establece el conjunto de columnas que forman la clave primaria de
esa tabla. Se comporta como única y obligatoria sin necesidad de
explicitarlo. Sólo puede existir una clave primaria por tabla. Puede
ser referenciada como clave ajena por otras tablas. Crea un índice
automáticamente cuando se habilita o se crea esta restricción. En
Oracle, los índices son construidos sobre árboles B+.
FOREIGN KEY
Establece que el contenido de esta columna será uno de los valores
contenidos en una columna de otra tabla maestra. Esta columna
marcada como clave ajena puede ser NULL. No hay límite en el
número de claves ajenas. La clave ajena puede ser otra columna de
la misma tabla. Se puede forzar que cuando una fila de la tabla
maestra sea borrada, todas las filas de la tabla detalle cuya clave
ajena coincida con la clave borrada se borren también. Esto se
consigue añadiendo la coletilla ON DELETE CASCADE en la
definición de la clave ajena.
Seguidamente se presenta un ejemplo en el que se crean dos
tablas, una de departamentos y otra de empleados:
create table dep (
cod_dep number(3),
nombre varchar2(15) not null,
loc varchar2(10),
constraint dep_pk primary key (cod_dep),
constraint dep_loc check
(loc in ('Valladolid', 'Boecillo', 'Cigales'))
);

create table emp (


cod_emp number(3),
nombre varchar2(10) not null,
oficio varchar2(11),
jefe number(3),
fecha_alta date,
salario number(10),
comision number(10),
cod_dep number(3),
constraint emp_pk primary key (cod_emp),
constraint emp_fk foreign key (cod_dep) references dep(cod_dep)
on delete cascade,
constraint emp_ck check (salario > 0)
);

4 Modificación

Después de crear una tabla, a veces nos encontramos con que se


necesita añadir una columna adicional o modificar la definición de
una columna existente. Esta operación se puede realizar con el
comando ALTER TABLE.
ALTER TABLE tabla {ADD | MODIFY} ({columna tipoColumna [NOT
NULL],}+);

Hay que tener en cuenta varios puntos:


• No es posible disminuir el tamaño de un columna.
• En las modificaciones, los tipos anterior y nuevo deben ser
compatibles, o la tabla debe estar vacía.
• La opción ADD ... NOT NULL sólo será posible si la tabla está
vacía.
• La opción MODIFY ... NOT NULL sólo podrá realizarse cuando la
tabla no contenga ninguna fila con valor nulo en la columna en
cuestión.
Por ejemplo la sentencia siguiente añade la fecha de nacimiento a
la tabla de empleados.
SQL> alter table emp add (fecha_nac date not null);

También se puede querer modificar una tabla añadiendo o


eliminando restricciones. En este caso el comando a utilizar será
ALTER TABLE tabla {ADD | DROP} CONSTRAINT restricción;

5 Inserción, Actualización y Borrado

Una vez que tenemos definida la estructura de una tabla se pueden


insertan los datos, modificarlos o borrarlos de la tabla.
Esta tarea entra dentro de las operaciones que se realizan con el
lenguaje DML. Este lenguaje permite manipular los objetos de la
base de datos, insertando, modificando y/o borrando el contenido
de las tablas. Hay que recordar que estas sentencias no son
'autoconfirmadas' y requieren de la sentencia COMMIT para que
sus efectos perduren en el tiempo, o de la sentencia ROLLBACK
para deshacer los cambios efectuados.
A continuación vamos a estudiar tres de las sentencias DML más
comunes.

5.1 Inserción
El comando que permite insertar filas en las tablas es el siguiente.
INSERT INTO tabla [({columna,}*)] VALUES ({expresión,}+);

Sólo especificaremos las columnas donde insertar y su orden


cuando no insertemos datos en todas ellas o no lo hagamos en el
mismo orden en que definimos la tabla. La asociación columna-
valor es posicional. Los valores deben cumplir con los tipos de
datos definidos. Los valores de tipo caracter y fecha deben ir
encerrados entre comillas simples, ('').
A continuación se puede ver la inserción de filas en las tablas de
ejemplo.

insert into dep values (100,'Administracion','Valladolid');


insert into dep values (200,'I+D','Boecillo');
insert into dep values (300,'Produccion','Cigales');

insert into emp values


(101,'Cano','Presidente',null,'3-FEB-96',450000,null,100);
insert into emp values
(102,'Roncal','Director',101,'3-FEB-96',350000,null,100);
insert into emp values
(103,'Rueda','Secretario',102,'17-MAR-96',175000,null,100);
insert into emp values
(104,'Martin','Contable',102,'17-MAR-96',235000,null,100);
insert into emp values
(105,'Sanz','Comercial',101,'17-MAR-96',150000,10,100);
insert into emp values
(106,'Lopez','Comercial',101,'21-MAR-96',150000,15,100);
insert into emp values
(201,'Perez','Director',101,'4-JUN-96',350000,null,200);
insert into emp values
(202,'Sastre','Analista',201,'8-JUN-96',300000,null,200);
insert into emp values
(203,'Garcia','Programador',202,'8-JUN-96',225000,null,200);
insert into emp values
(204,'Mateo','Programador',202,'8-JUN-96',200000,null,200);
insert into emp values
(301,'Yuste','Director',101,'3-OCT-96',350000,null,300);
insert into emp values
(302,'Recio','Analista',301,'4-FEB-97',300000,null,300);
insert into emp values
(303,'Garcia','Programador',302,'4-FEB-97',210000,null,300);
insert into emp values
(304,'Santana','Programador',302,'4-FEB-97',200000,null,300);

5.2 Actualización
Otra de las operaciones más comunes es la modificación de la
información almacenada en las tablas. Para ello se utiliza el
comando UPDATE cuya sintaxis se muestra a continuación.
UPDATE tabla SET {columna = expresión,}+ [WHERE condición];

Se especificará en la cláusula SET las columnas que se


actualizarán y con qué valores. La cláusula WHERE indica las filas
con las que se va a trabajar. Si se omite la actualización afectará a
todas las filas de la tabla.
5.3 Borrado
Con insertar y modificar, la otra operación que completa el trio es la
de borrado de filas. La sintaxis es la que sigue:
DELETE FROM tabla [WHERE condición];

Borrará todas las filas que cumplan la condición especificada en la


cláusula WHERE. Si esta cláusula no se fija, se borrarán todas las
filas de la tabla. Aquí cabe decir que aunque con DELETE borremos
todas las filas de una tabla, no borramos la definición de la tabla del
diccionario y podemos insertar datos posteriormente en la tabla.
Esta es una diferencia con la sentencia DROP TABLE, que produce
la eliminación tanto del contenido de la tabla como de la definición
de la misma.

6 Selección

La recuperación de los datos en el lenguaje SQL se realiza


mediante la sentencia SELECT, seleccionar. Esta sentencia permite
indicar al SGBD la información que se quiere recuperar. Esta es la
sentencia SQL, con diferencia, más habitual. La sentencia SELECT
consta de cuatro partes básicas:
• La cláusula SELECT seguida de la descripción de lo que se desea
ver, los nombres de las columnas a seleccionar. Esta parte es
obligatoria.
• La cláusula FROM seguida de la especificación de las tablas de
las que se han de obtener los datos. Esta parte es obligatoria.
• La cláusula WHERE seguida por un criterio de selección, una
condición. Esta parte es opcional.
• La cláusula ORDER BY seguida por el criterio de ordenación. Esta
parte es opcional.
Una primera aproximación a la sintaxis de la sentencia SELECT
puede mostrarnos la siguiente expresión:
SELECT {* | {columna,}+}
FROM {tabla,}+
[WHERE condición]
[ORDER BY {expresiónColumna [ASC | DESC],}+];

6.1 Selección de Columnas


Las columnas a seleccionar se enumeran sin más en la cláusula
SELECT. Si se desea seleccionar todas las columnas de una tabla
se puede hacer enumerando a todas las columnas o colocando un
asterisco, *, en su lugar.
Cuando se consulta una base de datos, los nombres de las
columnas se usan como cabeceras de presentación. Si éste resulta
demasiado largo, corto o críptico, puede cambiarse con la misma
sentencia SQL de consulta, creando un alias de columna.
select nombre "Departamento", loc "Está en" from dep;

Departamento Esta en
--------------- ----------
Administracion Valladolid
I+D Boecillo
Produccion Cigales

6.2 Cláusula FROM


La cláusula FROM define las tablas de las que se van a seleccionar
las columnas.
Se puede añadir al nombre de las tablas el usuario propietario de
las mismas de la forma usuario.tabla. De esta manera podemos
distinguir entre las tablas de un usuario y otro. Oracle siempre
considera como prefijo el nombre del propietario de las tablas,
aunque no se lo indiquemos. De esta forma dos o más usuarios
pueden tener tablas que se llamen igual sin que surjan conflictos. Si
quisiéramos acceder a las filas de la tabla dep del usuario jperez,
(ademas de tener privilegios de lectura sobre esa tabla) deberíamos
escribir la siguiente sentencia SQL:
select * from jperez.dep;

También se puede asociar un alias a las tablas para abreviar los


nombres de las tablas. Un ejemplo se puede ver en la sentencia
SQL siguiente:
select d.nombre from dep d;

6.3 Cláusula WHERE


Hasta ahora hemos visto como puede utilizarse la sentencia
SELECT para recuperar todas las columnas o un subconjunto de
ellas de una tabla. Pero este efecto afecta a todas las filas de la
tabla, a menos que especifiquemos algo más en la cláusula
WHERE. Es aquí donde debemos proponer la condición que han de
cumplir todas las filas para salir en el resultado de la consulta. La
complejidad del criterio de búsqueda es prácticamente ilimitada, y
en él se pueden conjugar operadores de diversos tipos con
funciones de columnas, componiendo expresiones más o menos
complejas.
Operadores de Comparación
Operador Operación Ejemplo
= Igualdad select * from emp where cod_dep = 100;
!=, <>, ^= Desigualdad select * from emp where cod_dep != 100;
< Menor que select * from emp where cod_dep < 200;
> Mayor que select * from emp where cod_dep > 200;
<= Menor o igual que select * from emp where cod_dep <= 200;
>= Mayor o igual que select * from emp where cod_dep >= 200;
In Igual a cualquiera de los miembros entre paréntesis select * from
emp where cod_dep in (100, 300);
not in Distinto a cualquiera de los miembros entre paréntesis select
* from emp where cod_dep not in (200);
between Contenido en el rango select * from emp where cod_emp
between 100 and 199;
not between Fuera del rango select * from emp where cod_emp not
between 100 and 199;
like '_abc%' Contiene la cadena 'abc' a partir del segundo carácter y
luego cualquier cadena de caracteres select * from emp where
nombre like 'Ma%';
Operadores de Aritméticos
Operador Operación Ejemplo
+ Suma select nombre, salario+comision from emp where
oficio='VENDEDOR';
- Resta select nombre from emp where sysdate-fecha_alta > 365;
* Producto select nombre, salario*12 from emp;
/ División select nombre, salario/31 from emp;
Operadores de Cadenas de Caracteres
Operador Operación Ejemplo
|| Concatenación select nombre||oficio from emp;

6.4 Cláusula ORDER BY


Se utiliza para especificar el criterio de ordenación de la respuesta a
la consulta. Por defecto la ordenación es ascendente, aunque se
puede especificar un orden descendente. La ordenación se puede
establecer sobre el contenido de columnas o sobre expresiones con
columnas. A continuación se puede ver un ejemplo de uso de la
cláusula ORDER BY en la que quiere obtener un listado de los
empleados ordenado de manera descendente por su salario y en
caso de igualdad de salario, ordenado ascendentemente por su
nombre.
select nombre, salario from emp order by salario desc, nombre;

NOMBRE SALARIO
---------- ----------
Cano 450000
Perez 350000
Roncal 350000
Yuste 350000
Recio 300000
Sastre 300000
Martin 235000
Garcia 225000
Garcia 210000
Mateo 200000
Santana 200000
Rueda 175000
Lopez 150000
Sanz 150000

14 rows selected.

6.5 Cláusula DISTINCT


Cuando se realiza una consulta sobre una tabla en la que se extrae
información de varias columnas, puede ocurrir que, si no incluimos
la/s columna/s que forman la clave principal, obtengamos filas
repetidas en la respuesta.
Si este comportamiento no nos resulta satisfactorio podemos utilizar
la cláusula DISTINCT para eliminar las filas duplicadas obtenidas
como respuesta a una consulta.
Podemos ver como funciona en el siguiente ejemplo, en el que
preguntamos por los distintos oficios de nuestros empleados.
select oficio from emp;

Sin utilizar la cláusula DISTINCT obtendremos la siguiente


respuesta
OFICIO
-----------
Presidente
Director
Secretario
Contable
Comercial
Comercial
Director
Analista
Programador
Programador
Director
Analista
Programador
Programador

14 rows selected.

Pero si incluimos la cláusula DISTINCT la respuesta varía para


adecuarse más a nuestras espectativas.
select distinct oficio from emp;

OFICIO
-----------
Analista
Comercial
Contable
Director
Presidente
Programador
Secretario

7 rows selected.

6.6 Funciones
Existen en SQL muchas funciones que pueden complementar el
manejo de los datos en las consultas. Se utilizan dentro de las
expresiones y actuan con los valores de las columnas, variables o
constantes.
Se pueden incluir en las clásulas SELECT, WHERE y ORDER BY.
Pueden anidarse funciones dentro de funciones. Y existe una gran
variedad de funciones para cada tipo de datos:
• aritméticas,
• de cadenas de caracteres,
• de manejo de fechas,
• de conversión,
• otras,
• de grupo.
Funciones Aritméticas
Función Cometido Ejemplo Resultado
ABS(n) Calcula el valor absoluto de n. select abs(-15) from dual; 15
CEIL(n) Calcula el valor entero inmediatamente superior o igual a n.
select ceil(15.7) from dual; 16
FLOOR(n) Calcula el valor entero inmediatamante inferior o igual a
n. select floor(15.7) from dual; 15
MOD(m,n) Calcula el resto resultante de dividir m entre n. select
mod(11,4) from dual; 3
POWER(m,n) Calcula la potencia n-esima de m. select power(3,2)
from dual; 9
ROUND(m,n) Calcula el redondeo de m a n decimales. Si n<0 el
redondeo se efectua a por la izquierda del punto decimal. select
round(123.456,1) from dual; 123.5
SQRT(n) Calcula la raíz cuadrada de n. select sqrt(4) from dual; 2
TRUNC(m,n) Calcula m truncado a n decimales (n puede ser
negativo). select trunc(123.456,1) from dual; 123.4
SIGN(n) Calcula el signo de n, devolviendo -1 si n<0, 0 si n=0 y 1 si
n>0. select sign(-12) from dual; -1
Funciones de Cadenas de Caracteres
Función Cometido Ejemplo Resultado
CHR(n) Devuelve el carácter cuyo valor codificado es n. select
chr(65) from dual; A
ASCII(cad) Devuelve el valor ascii de cad. select ascii('A') from dual;
65
CONCAT(cad1,cad2) Devuelve cad1 concatenada con cad2. Esta
función es esquivalente al operador ||. select
concat(concat(nombre,' es '),oficio) from emp; Cano es Presidente,
etc.
LOWER(cad) Devuelve la cadena cad con todas sus letras
convertidas a minúsculas. select lower('MinUsCulAs') from dual;
minusculas
UPPER(cad) Devuelve la cadena cad con todas sus letras
convertidas a mayúsculas. select upper('maYuSCulAs') from dual;
MAYUSCULAS
INITCAP(cad) Devuelve cad con el primer caracter en mayúsculas.
select initcap('isabel') from dual; Isabel
LPAD(cad1,n,cad2) Devuelve cad1 con longitud n, y ajustada a la
derecha, rellenando por la izquierda con cad2. select lpad('P',5,'*')
from dual; ****P
RPAD(cad1,n,cad2) Devuelve cad1 con longitud n, y ajustada a la
izquierda, rellenando por la derecha con cad2. select rpad('P',5,'*')
from dual; P****
REPLACE(cad,ant,nue) Devuelve cad en la que cada ocurrencia de
la cadena ant ha sido sustituida por la cadena nue. select
replace('digo','i','ie') from dual; diego
SUBSTR(cad,m,n) Devuelve la sudcadena de cad compuesta por n
caracteres a partir de la posicion m. select substr('ABCDEFG',3,2)
from dual; CD
LENGTH(cad) Devuelve la longitud de cad. select length('cadena')
from dual; 6
Funciones de Manejo de Fechas
Función Cometido Ejemplo Resultado
SYSDATE Devuelve la fecha y hora actuales. select sysdate from
dual; 14-MAR-97
ADD_MONTHS(d,n) Devuelve la fecha d incrementada en n meses.
select add_months(sysdate,4) from dual; 14-JUL-97
LAST_DAY(d) Devuelve la fecha del último día del mes de d. select
last_day(sysdate) from dual; 31-MAR-97
MONTHS_BETWEEN(d1, d2) Devuelve la diferencia en meses
entre las fechas d1 y d2. select months_between(sysdate,'01-JAN-
97') from dual; 2.43409424
NEXT_DAY(d,cad) Devuelve la fecha del primer día de la semana
cad después de la fecha d. select next_day(sysdate, 'sunday') from
dual; 16-MAR-97
Funciones de Conversión de Tipos
Función Cometido Ejemplo Resultado
TO_NUMBER(cad,fmto) Convierte la cadena cad a un número,
opcionalmente de acuerdo con el formato fmto. select
to_number('12345') from dual; 124345
TO_CHAR(d, fmto) Convierte la fecha d a una cadena de
caracteres, opcionalmente de acuerdo con el formato fmto. select
to_char(sysdate) from dual; '14-MAR-97'
TO_DATE(cad,fmto) Convierte la cadena cad de tipo varchar2 a
fecha, opcionalmente de acuerdo con el formato fmto. select
to_date('1-JAN-97') from dual; 01-JAN-97
Con las fechas pueden utilizarse varios formatos. Estos formatos
permiten modificar la presentación de una fecha. En la siguiente
tabla se presentan algunos formatos de fecha y el resultado que
generan.
Máscaras de Formato Numéricas
Formato Cometido Ejemplo Resultado
cc ó scc Valor del siglo. select to_char(sysdate,'cc') from dual; 20
y,yyy ó sy,yyy Año con coma, con o sin signo. select
to_char(sysdate,'y,yyy') from dual; 1,997
yyyy ó yyy ó yy ó y Año sin signo con cuatro, tres, dos o un dígitos.
select to_char(sysdate,'yyyy') from dual; 1997
q Trimestre. select to_char(sysdate,'q') from dual; 1
ww ó w Número de la semana del año o del mes. select
to_char(sysdate,'ww') from dual; 11
mm Número del mes. select to_char(sysdate,'mm') from dual; 03
ddd ó dd ó d Número del día del año, del mes o de la semana.
select to_char(sysdate,'ddd') from dual; 073
hh ó hh12 ó hh24 La hora en formato 12h. o 24h. select
to_char(sysdate,'hh') from dual; 12
mi Los minutos de la hora. select to_char(sysdate,'mi') from dual; 15

ss ó sssss Los segundos dentro del minuto, o desde las 0 horas.


select to_char(sysdate,'sssss') from dual; 44159
Máscaras de Formato de Caracteres
Formato Cometido Ejemplo Resultado
syear ó year Año en Inglés select to_char(sysdate,'syear) from dual;
nineteen ninety-seven
month o mon Nombre del mes o su abreviatura de tres letras. select
to_char(sysdate,'month') from dual; march
day ó dy Nombre del día de la semana o su abreviatura de tres
letras. select to_char(sysdate,'day') from dual; friday
a.m. ó p.m. El espacio del día. select to_char(sysdate,'a.m.') from
dual; p.m.
b.c. ó a.d. Indicador del año respecto al del nacimiento de Cristo.
select to_char(sysdate,'b.c.') from dual; a.d.
Otras Funciones
Función Cometido Ejemplo Resultado
DECODE(var, val1, cod1, val2, cod2, ..., defecto) Convierte el valor
de var, de acuerdo con la codificación. select decode(oficio,
'Presidente', 'P', 'Director', 'D', 'X') from emp; P, D, X, ...
GREATEST(exp1, exp2, ...) Devuelve el mayor valor de una lista.
sin ejemplo. sin ejemplo.
LEAST(cad,fmto) Devuelve el menor valor de una lista. sin ejemplo.
sin ejemplo.
NVL(val, exp) Devuelve la expresión exp si val es NULL, y val si en
otro caso. select salario+nvl(comision,0) from emp; 450000,
350000, ...
6.7 Cláusula GROUP BY
SQL nos permite agrupar las filas resultado de una consulta en
conjuntos y aplicar funciones sobre esos conjuntos de filas.
La sintaxis es la siguiente:
SELECT {* | {columna,}+}
FROM {tabla,}+
WHERE condición
GROUP BY {columna ,}+
HAVING condición
ORDER BY {expresiónColumna [ASC | DESC],}+;

En la cláusula GROUP BY se colocan las columnas por las que


vamos a agrupar. Y en la cláusula HAVING se especifica la
condición que han de cumplir los grupos para pasar al resultado.
La evaluación de las diferentes cláusulas en tiempo de ejecución se
efectúa en el siguiente orden:
• WHERE filtra las filas
• GROUP BY crea una tabla de grupo nueva
• HAVING filtra los grupos
• ORDER BY clasifica la salida
Un ejemplo de utilización de la selección de grupos puede ser
seleccionar los empleados agrupados por su oficio. Un primer
intento de consulta es el siguiente:
SQL> select nombre, oficio from emp group by oficio;

select nombre, oficio from emp

Se presenta un error debido a que cuando se utiliza GROUP BY, las


columnas implicadas en el SELECT y que no aparezcan en la
cláusula GROUP BY deben tener una función de agrupamiento. En
otras palabras, la columna nombre debe tener una función de
agrupamiento que actue sobre ella (max, min, sum, count, avg). Si
no puede ser así, deberá llevar dicha columna a la cláusula GROUP
BY.
De nuevo, el ejemplo quedará así:
SQL> select count(nombre), oficio from emp group by oficio;

COUNT(NOMBRE) OFICIO
------------- -----------
2 Analista
2 Comercial
1 Contable
3 Director
1 Presidente
4 Programador
1 Secretario

7 rows selected.

Las funciones de agrupamiento que se pueden utilizar son las


siguientes.
Funciones de Agrupamiento
Función Cometido Ejemplo
COUNT(col) Cuenta el número de filas agrupadas. select
count(nombre),oficio from emp group by oficio;
AVG(col) Calcula el valor medio de todos los valores de la columna
col. select avg(salario),oficio from emp group by oficio;
MAX(col) Calcula el valor máximo de todos los valores de la
columna col. select max(salario),oficio from emp group by oficio;
MIN(col) Calcula el valor mínimo de todos los valores de la columna
col. select min(salario),oficio from emp group by oficio;
SUM(col) Calcula la suma de los valores de la columna col. select
sum(salario), oficio from emp group by oficio;
STDDEV(col) Calcula la desviación típica de los valores de la
columna col sin tener en cuenta los valores nulos. select
stddev(salario), oficio from emp group by oficio;
VARIANCE(col) Calcula la varianza de los valores de la columna col
sin tener en cuenta los valores nulos. select variance(salario), oficio
from emp group by oficio;
Hay que tener en cuenta que los valores nulos no participan en el
cálculo de las funciones de conjuntos. Estas funciones se pueden
utilizar con las cláusulas DISTINCT y ALL. También se pueden
utilizar aunque no realicemos agrupación alguna en la consulta,
considerando a toda la tabla como un grupo.
SQL> select count(*) from emp;

COUNT(*)
----------
14

6.8 Expresiones con Sentencias Select


El resultado de cada consulta es un conjunto de filas. Y con
conjuntos se pueden realizar tres operaciones típicas: la unión, la
intersección y la diferencia.
Unión, UNION
Combina todas las filas del primer conjunto con todas las filas del
segundo. Cualquier fila duplicada se reducirá a una sóla.
Intersección, INTERSECT
Examinará las filas de los conjuntos de entrada y devolverá aquellas
que aparezcan en ambos. Todas las filas duplicadas serán
eliminadas antes de la generación del conjunto resultante.
Diferencia, MINUS
Devuelve aquellas filas que están en el primer conjunto pero no en
el segundo. Las filas duplicadas del primer conjunto se reducirán a
una fila única antes de empezar la comparación con el segundo
conjunto.
Reglas para el Manejo de los Operadores de Conjuntos:
• Pueden ser encadenados en cualquier combinación, siendo
evaluados de izquierda a derecha.
• No existe jerarquía de precedencia en el uso de estos operadores,
pero puede ser forzada mediante paréntesis.
• Pueden ser empleados con conjuntos de diferentes tablas siempre
que se apliquen las siguientes reglas:
o Las columnas son relacionadas en orden, de izquierda a derecha.
o Los nombres de las columnas son irrelevantes.
o Los tipos de datos deben coincidir.
Como ejemplo podemos consultar sobre todos los nombres de
empleado que trabajan para los departamentos 100 o 300. Esto se
consigue restando a todos los nombres de empleados, aquellos que
están en el departamento 200.
select nombre from emp
2 minus
3 select nombre from emp where cod_dep=200;

NOMBRE
----------
Cano
Lopez
Martin
Recio
Roncal
Rueda
Santana
Sanz
Yuste

9 rows selected.
6.9 Combinaciones
Hasta ahora hemos construido consultas con una única tabla, pero
esto no debe ser siempre así.
De hecho, sólo se alcanza la verdadera potencia del SQL cuando
combinamos el contenido de más de una tabla.
Supongamos que queremos conseguir una lista con los empleados
y los departamentos para los que trabajan. Esta información está
repartida en las dos tablas que tenemos, emp y dep. Así, podríamos
intentar una consulta que seleccionara el campo nombre de la tabla
emp y el nombre del departamento. Y aquí surge el primer
problema, ¿cómo distinguimos entre dos columnas que llamándose
igual, pertenecen a tablas distintas? Para eso se utiliza como prefijo
o el nombre de la tabla (dep.nombre) o un alias de tabla, un nombre
que se asocia a cada tabla y se coloca como prefijo a la columna
(d.nombre).
Realicemos la consulta ...
SQL> select e.nombre, d.nombre from emp e, dep d;

NOMBRE NOMBRE
---------- ---------------
Cano Administracion
Roncal Administracion
Rueda Administracion
Martin Administracion
Sanz Administracion
Lopez Administracion
Perez Administracion
Sastre Administracion
Garcia Administracion
Mateo Administracion
Yuste Administracion
Recio Administracion
Garcia Administracion
Santana Administracion
Cano I+D
Roncal I+D
Rueda I+D
...
42 rows selected.

El resultado puede sorprender un poco. Lo que obtenemos es el


producto cartesiano de todos los empleados por todos los
departamentos. SQL ha cogido cada fila de la tabla emp y le ha
asociado todos los cod_dep de la tabla dep.
Para conseguir lo que queremos tenemos que forzar que se asocie
a un empleado con el nombre del departamento para el que trabaja.
Y esto se puede hacer si añadimos la condición de que el cod_dep
tenga el mismo valor en la fila de la tabla emp que en la fila
escogida de la tabla dep:
SQL> select e.nombre, d.nombre from emp e, dep d
2> where e.cod_dep = d.cod_dep;

NOMBRE NOMBRE
---------- ---------------
Cano Administracion
Roncal Administracion
Rueda Administracion
Martin Administracion
Sanz Administracion
Lopez Administracion
Perez I+D
Sastre I+D
Garcia I+D
Mateo I+D
Yuste Produccion
Recio Produccion
Garcia Produccion
Santana Produccion

14 rows selected.

De la misma manera se pueden combinar más de dos tablas. Lo


importante es emparejar los campos que han de tener valores
iguales.
Reglas de Combinación:
• Pueden combinarse tantas tablas como se desee.
• El criterio de combinación puede estar formado por más de una
pareja de columnas.
• En la cláusula SELECT pueden citarse columnas de ambas tablas,
condicionen o no la combinación.
• Si hay columnas con el mismo nombre en las distintas tablas,
deben identificarse especificando la tabla de procedencia o
utilizando un alias de tabla.
Existe un tipo especial de combinación llamada Combinación
Externa. Suponga que se crea un nuevo departamento, (insert into
dep values (400,'Distribucion','Valladolid');) pero todavía no hemos
asignado personal al mismo. Si realizamos la consulta anterior, el
nuevo departamento no aparecerá en la respuesta. Pero esto se
puede evitar si señalamos en la cláusula WHERE la posibilidad de
que en la tabla de empleados no exista alguno de los códigos de
departamento que si exista en la tabla de departamentos. Esto se
hace colocando un (+) de la siguiente manera:
SQL> select e.nombre, d.nombre
2 from emp e, dep d
3 where e.cod_dep(+)=d.cod_dep;

NOMBRE NOMBRE
---------- ---------------
Cano Administracion
Roncal Administracion
Rueda Administracion
Martin Administracion
Sanz Administracion
Lopez Administracion
Perez I+D
Sastre I+D
Garcia I+D
Mateo I+D
Yuste Produccion
Recio Produccion
Garcia Produccion
Santana Produccion
Distribucion

15 rows selected.

6.10 Subconsultas
A veces se han de utilizar en una consulta los resultados de otra
consulta, llamada subconsulta.
Un ejemplo de esto ocurre cuando queremos conocer los nombres
de los empleados cuyo salario está por encima de la media:
SQL> select nombre from emp
2 where salario > (select avg(salario) from emp);

NOMBRE
----------
Cano
Roncal
Perez
Sastre
Yuste
Recio

6 rows selected.

La consulta más interna calcula el salario medio, y la consulta más


externa lo utiliza para seleccionar los nombres que ganan más que
la media.
El valor de comparación puede ser un valor simple, como en el
ejemplo anterior, o un conjunto de valores. Hay que tener en cuenta
este detalle ya que el tipo de operador a utilizar varía. En el primer
caso se puede utilizar un operador de comparación de carácter
aritmético (<, >, etc.). Y en el segundo uno de tipo lógico (IN).
Las subconsultas pueden devolver más de una columna, y se
habrán de comparar de manera consecuente:
• Las columnas de la clausula WHERE de la consulta principal
deben estár agrupadas por parentesis.
• Las columnas encerradas entre paréntesis deben coincidir en
número y tipo de datos con los datos que devuelve la subconsulta.
El nivel de anidamiento de subconsultas es ilimitado.
Se puede utilizar una subconsulta para insertar valores en una tabla
en el momento de la creación de la misma con la cláusula AS. Si
quisieramos crear una tabla con los datos de los empleados del
departamento 200 lo podríamos hacer de la siguiente manera:
SQL> create table dep200 (nombre, oficio)
2 as select nombre,oficio from emp
3 where cod_dep=200;

Table created.

No es necesario especificar tipos ni tamaños de las columnas, ya


que vienen determinados por los tipos y tamaños de las columnas
recuperadas en la subconsulta.

7 Eliminación

Cuando una tabla ya no es útil y no vamos a volver a necesitarla


debe ser borrada. Esta operación se puede realizar con el comando
DROP TABLE.
DROP TABLE tabla [CASCADE CONSTRAINTS];

Se borra la tabla de la base de datos, borrando toda la información


contenida en la tabla, es decir, todas las filas. También se borrará
toda la información que sobre la tabla existiera en el diccionario.
Puede que si alguna columna de esta tabla a borrar sirva como
clave ajena de alguna tabla detalle, impida la eliminación de la
tabla, ya que existe una restricción que requiere de la existencia de
la tabla maestra. Esto se puede areglar colocando la coletilla
CASCADE CONSTRAINTS. Esto produce que las restricciones de
la tabla detalle se borren antes de borrar la tabla maestra.
La siguiente sentencia produce la eliminación de la tabla de
departamentos.
SQL> drop table dep cascade constraints;

Table dropped

CARACTERISTICAS
• Delphi es una "Two-Way-Tool", es decir, una herramienta
de dos direcciones, porque permite crear el desarrollo de programas de dos
formas: una de forma visual en la pantalla, por medio de las funciones de
Drag & Drop (Arrastrar y colocar) y la otra a través de la programación
convencional, escribiendo el código. Ambas técnicas pueden utilizarse de
forma alternativa o simultánea.

• Las aplicaciones terminadas quedan disponibles como


archivos ejecutables (.EXE) que pueden utilizarse solos y sin bibliotecas
adicionales.. Consecuentemente la velocidad con la que pueden ejecutarse
los programas creados es muy alta. Excepcionalmente, si se incluyen
llamadas a VBX, o DLLs, éstas se deben incluir junto con el ejecutable.
También es necesario incluir el BDE (Borland Database Engine) en las
aplicaciones de bases de datos que lo requieran.

• Delphi dispone del Object Pascal, un lenguaje de


programación muy poderoso que está sin dudas a la altura del C++ y que
incluso lo supera en algunos aspectos. Este lenguaje surge a partir del
desarrollo del Borland Pascal 7.0, un lenguaje que ocupa un lugar muy
importante en la programación de ordenadores personales. El Object Pascal
es totalmente compatible con el Borland Pascal 7.0, lo que permite que
programas desarrollados con este último puedan ser convertidos a Delphi.
Incluso la biblioteca de clases OWL 1.0 se incluye con el paquete de
Delphi. Aspectos nuevos en el Object Pascal en relación a sus predecesores
son el Exception-Handling (tratamiento y canalización de errores en run-
time), un manejo más sencillo de los punteros con reconocimiento
automático y referenciación, las llamadas propiedades de objetos que
pueden ser asignadas como las variables, etc.
• Delphi no solo dispone de componentes para la sencilla
creación de entornos de aplicaciones como cuadros de lista,
conmutadores o cuadros de diálogo terminados, sino que cubre con sus
componentes muchos temas de la programación bajo Windows: se
incluye entre los mismos un completo centro de control para la creación
de aplicaciones multimedia, así como una gran variedad de
componentes que actúan "debajo" del entorno, como tipos de listado
muy variados y contenedores generales de datos. También hay
herramientas de comunicación para DDE y OLE a través de las que se
pueden crear vínculos de datos y comandos con otras aplicaciones.
• Uno de los aspectos más destacados lo constituyen los
componentes que Borland ha incluido en Delphi para el desarrollo de
completas aplicaciones de bases de datos. No se está limitado a un
formato de datos determinado, sino que se tiene acceso a 50 formatos de
datos diferentes a través de controladores suministrados por terceros
(IDAPI y ODBC). Entre éstos se encuentran todos los estándares
importantes de bases de datos en el área del PC como XBase, Paradox,
Access, etc. Pero también es posible acceder de forma muy cómoda a
servidores de bases de datos de otros sistemas (por ejemplo UNIX) por
medio del SQL (Structured Query Language) que constituye un estándar
de lenguaje de uso general para consultar y modificar datos
administrados por servidores especiales de bases de datos como Oracle,
Sybase, Informix o Adabas.

• Las aplicaciones pueden colocarse de forma muy sencilla


en la pantalla según el principio de módulos. Para ello se dispone de una
paleta dotada de una gran variedad de componentes, algo así como los
bloques de construcción de cada programa. Esta paleta es denominada
por Borland VCL (Visual Component Library), o biblioteca de
componentes visuales. Tiene un aspecto similar a Visual Basic, pero
aunque el aspecto externo indica la misma facilidad de uso que Visual
Basic, el corazón del sistema Delphi es mucho más potente.
Ventana de Delphi
La barra de programa del margen superior de la pantalla representa la
ventana principal de Delphi. Si se cierra, todas las otras ventanas también
finalizan su servicio. En la barra de menús de la ventana principal están
disponibles todas las órdenes relacionadas con el procesamiento de un
proyecto concreto. La carga y almacenamiento de proyectos pertenecen
igualmente al menú, así como la presentación u ocultación de las distintas
ventanas del entorno de desarrollo. También se encuentran aquí las órdenes
para compilar y ejecutar un programa.

IDE de Delphi

La parte de arriba del IDE contiene el menú principal de Delphi, y contiene


botones para hacer cosas con el proyecto (abrir, salvar, compilar) en la
parte izquierda un conjunto de botones de acceso rápido a algunas
funciones principales del sistema de menús.. La parte derecha contiene la
"paleta de componentes" que es un menú de botones con todos los
componentes que podemos poner en la forma o en el proyecto que se este
construyendo.

Descripción de la paleta de componentes del IDE de Delphi

Area Descripción
Contiene todos los elementos de
control que Windows pone a
Standard disposición normalmente,
empaquetados en la estructura clara
de un componente.
Contiene todos los componentes
que Windows no pone a disposición
Additiona como elementos de control
l estándar, pero han resultado útiles
con el paso del tiempo en varios
programas.
Aquí se encuentran los
componentes desarrollados
especialmente para una captura
cómoda y rápida de las bases de
Data
datos. Se puede tratar tanto de bases
Acces
de datos locales, como de sistemas
repartidos (con importancia
especial en la versión Client-Server
de Delphi).
Dispone de componentes variados
Data para el procesado de datos,
Controls trabajando en conjunción con los
elementos del área "Data Access".
Contiene todos los diálogos
estándar de Windows,
Dialogs empaquetados como componentes,
tales como diálogos de open/save,
impresión, etc.
Contiene varios componentes que
ofrecen determinados servicios de
System sistema en Windows, como reloj,
barras de archivos, funciones
multimedia, DDE y OLE 2.0, etc.
VBX Contiene algunos elementos VBX
visualizados como si fuesen
componentes, tales como un visor
de gráficos, un generador de
diagramas, etc.
Este último área contiene algunos
otros componentes útiles cuyo
Samples código fuente se adjunta, tales
como barras de progresión,
calendario, etc.

El inspector de objetos (object inspector)

Como se ha mencionado, los componentes vienen definidos por sus


propiedades, y los eventos ante los que reaccionan (aparte de los "métodos"
de que disponga, que son parecidos a los procedimientos). El inspector de
objetos es una ventana desde la cual se pueden ver y modificar la mayoría
de las propiedades y eventos del componente, ya que se listan en dicha
ventana tanto las propiedades como los eventos por orden alfabético. La
mitad derecha de la ventana contiene el valor actual de cada propiedad.
Puede tratarse de números, cadenas de caracteres, constantes determinadas,
gráficos, textos, punteros, etc.

Conceptos básicos en la programación con Delphi

Objetos: Como su propio nombre indica, el Object Pascal (usado por


Delphi) es un lenguaje totalmente orientado a objetos. Prácticamente todos
los elementos del entorno Delphi son objetos, que unas veces se encuentran
definidos de antemano (los forms, los componentes de la paleta, objetos no
visuales, etc), y otras se definen en nuestra propia aplicación. Todo el
desarrollo de aplicaciones en Delphi está íntimamente ligado con la
definición y uso de objetos, por lo que es fundamental conocer la mecánica
que Object Pascal utiliza para describir un objeto, sus características y su
funcionamiento, sobre todo a la hora de que el programador cree sus
propios componentes. En muchos casos no es necesario conocer el
funcionamiento de la programación orientada a objetos para programar con
Delphi, puesto que en la mayoría de los casos existen controles ya creados
sin necesidad de tener que programarlos. La propia programación visual de
Delphi, que escribe parte del código automáticamente, hace posible utilizar
objetos de forma práctica sin tener por qué comprender al cien por cien su
funcionamiento.

Componentes: Un componente es cualquiera de los elementos que


podemos insertar en una forma, tanto si su función es visual como si no lo
es (por supuesto un componente es también un objeto). Sin conocer
exactamente el cómo realiza su función, el programador manipula una serie
de propiedades, métodos y eventos que caracterizan al componente, a
través de los cuales se "maneja" el componente en la forma deseada. Por
supuesto el usuario puede crear sus propios componentes y usarlos en
distintas aplicaciones, de forma que la reusabilidad del código es máxima.
A los componentes que cuentan con una parte visual, como puede ser un
botón, se les denomina controles. Los componentes pertenecen a la
llamada VCL o librería Visual de componentes.

Propiedades: Los componentes, y de hecho todos los objetos de Delphi son


de uso general, por lo que a la hora de usarlos de alguna forma deberemos
adecuarlos a nuestras necesidades. Para ello nos serviremos de las
propiedades de cada objeto, mediante las cuales podremos establecer el
título de una ventana, el tipo de letra de una etiqueta de texto o el color en
el que aparecen los distintos controles. Se puede pensar en las propiedades
como si fuesen variables pertenecientes a un objeto (veremos que no es así
exactamente), de tal forma que para acceder a ellas generalmente habrá que
indicar no sólo el nombre de la propiedad, sino también a qué objeto
pertenece. La modificación o consulta del valor de una propiedad puede
diferir según intentemos acceder a ella mientras estamos diseñando una
forma, en tiempo de diseño, o bien mediante el código del programa, en
tiempo de ejecución. Ciertas propiedades están sólo accesibles en tiempo
de ejecución, por lo que mientras estamos diseñando la ficha no aparecerán.
Además hay algunas propiedades que son de sólo lectura, por lo que su
valor puede ser consultado, pero no modificado, y otras que son sólo de
escritura. Aunque a primera vista si usamos un componente prefabricado,
las propiedades pueden parecer simples variables, en la mayoría de las
ocasiones una propiedad no es una variable, y la modificación o consulta de
su valor puede conllevar que internamente el componente ejecute un cierto
código. Si por ejemplo tuviésemos un componente para comunicaciones
serie que se encargase de enviar mensajes a un ordenador remoto,
podríamos tal vez asignar una cadena de caracteres a una hipotética
propiedad "Envia". De esta forma, con una simple asignación
(Envia:='Mensaje a mandar') se pondría en marcha todo el mecanismo
implícito en el componente para enviar el mensaje al ordenador remoto.
Esta propiedad podría ser un ejemplo de propiedad de sólo escritura, ya que
sólo interesa mandar el mensaje al ordenador remoto, sin conservar
información acerca del mensaje, por lo que sería inapropiada su lectura.

Eventos: Como se mencionaba anteriormente, la programación en el


entorno Windows se caracteriza por estar dirigida por eventos, de tal forma
que un programa no tiene por qué ejecutarse necesariamente de forma
secuencial, sino que ciertas porciones de código se ejecutarán cuando
ocurra un cierto evento. Los eventos son señales que el entorno recibe
desde distintos elementos, como puedan ser el ratón, el teclado o un
temporizador. Estos eventos son redirigidos a las aplicaciones, que en caso
de aceptarlos deberán responder adecuadamente de ellos. Ciertos eventos
pueden ser gestionados por el propio Windows, otros quedarán a cargo del
propio lenguaje que estemos usando, y un tercer grupo serán los que
lleguen hasta nuestro programa. En Delphi prácticamente todo el código
que escribimos irá asociado a algún evento. Si retomamos el ejemplo del
componente para comunicaciones serie, podría interesarnos que se
ejecutara un evento cada vez que se recibiese un carácter por el puerto
serie, de forma que podríamos escribir el código necesario para guardar el
carácter en un archivo cada vez que se produjese el evento. Normalmente
los eventos a los que reaccionarán los componentes serán las pulsaciones
del teclado o el ratón, activaciones de los componentes, etc.

Métodos: Los componentes Delphi además de disponer de propiedades y


poder responder a ciertos eventos, habitualmente también disponen de
métodos. Un método es un procedimiento o función que nos permite
realizar una determinada acción en el componente, pudiendo necesitar o no
el paso de algún parámetro. Al igual que ocurre en las propiedades, a la
hora de usar un cierto método normalmente tendremos que indicar primero
el objeto o componente al que pertenece, de tal forma que la acción del
método recaiga sobre él, y no sobre cualquier otro. El hecho de que cada
objeto sea propietario de una serie de propiedades y métodos, variables y
código, que no son accesibles a ningún otro objeto externo, recibe el
nombre de encapsulación, aunque también es posible definirlos de tal modo
que sean accesibles a otros objetos.

La aplicación - El "Archivo de Proyecto de Delphi"

Esta sección esta enfocada para entender como funciona una aplicación en
el ambiente Delphi dentro de Windows, y cuales son las principales partes
de un programa de "Object Pascal" en Windows (object pascal es el
nombre formal del lenguaje de programación - asi como en Visual Basic el
lenguaje es Basic, en Delphi el lenguaje es Object Pascal). Si quiere usted
comenzara a programar en Delphi de inmediato, vaya a la siguiente seccion
(y asombrese de lo facil que es programar con Delphi!), pero asegurese de
regresar a esta seccion para tener una buena fundacion de la manera en que
funciona una aplicación de Delphi.

Nota: No se preocupe si no entiende la totalidad de lo mencionado en esta


sección. Muchos programadores muy exitosos no comprenden mucho de lo
especificado en este capítulo. Pero creo que en estos dias de lenguajes tan
diferentes para programación en Windows (e incluso en otros sistemas
operativos) es muy importante tener una idea clara de lo que el lenguaje
que utilizamos tiene que hacer para lograr su "magia". Los programadores
de C++ para Windows reconeceran muchos contrastes con este lenguaje, y
encontrarán que Delphi es casi tan flexible en este campo como C++.

Delphi se divide en tres secciones, el compilador (con su "encadenador"),


la libreria, y el IDE (Ambiente de desarrollo integrado, o Integrated
Development Environment). El compilador/encadenador es un programa
que crea el archivo ejecutable de Windows (PE) estilo Intel, sin ningun
interprete de por medio. La librería es código que nos permite usar todas
las capacidades de Delphi. La libreria esta escrita en su totalidad en Object
Pascal (es una libreráa "de clases" estilo MFC, llamada VCL), y esta
totalmente orientada a objetos. Veremos objetos y su repercusión en
programación mas adelante.

El "programa principal" de Delphi es un archivo de texto ASCII con


extensión .DPR. Ésta extensión quiere decir Delphi Project (proyecto de
Delphi).

Para cada una de las ventanas o firmularios que usted diseña en el IDE,
Delphi crea una "unidad". Una unidad es un archivo individual (tambien de
texto ASCII) que representa en general a un objeto, o a una agrupación
logica de funciones. En el caso de los "objetos" que son formas, Delphi
también crea un archivo "DFM" (Delphi Form) para guardar la apariencia
del diseño de las mismas (las formas son simplemente archivos de recursos
en un formato especial que solo funciona en Delphi - ver "archivos de
recursos (RES)").

El siguiente ejemplo muestra el archivo DPR que se crea cuando comienza


usted Delphi. En general usted puede crear programas muy complejos sin
jamás modificar el archivo DPR (tambien llamado archivo de proyecto).
Pero es importante saber como funciona. El archivo de Proyecto
"Project1.Dpr" tiene la siguiente apariencia:

Program Project1;

Uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(Tform1, Form1);
Application.Run;
end.

Analicemos este archivo. La sentencia "program project1" nos dice que el


programa se llama project1. El nombre de programa debe ser el mismo que
el nombre del archivo (sin extensión).

La seccion USES nos dice que archivos son usados. Forms es la librería de
Delphi que contiene los comandos para crear y manipular ventanas (que en
Delphi se llaman Formas). El otro renglón en la sección "uses" nos dice
que la unidad llamada "Unit1" se encuentra en el archivo "unit1.pas", y
Delphi nos hace un comentario {} que dice que la forma en esta unidad se
llama Form1.

$R es una "directiva del compilador". Una directiva es un comando para el


compilador, no para el IDE. Cuando el compilador encuentra la directiva
{$R *.RES} un archivo de "recursos" con el mismo nombre del programa
(pero con extension RES) es encadenado junto con el programa.

Nota: Un archivo de recursos (RES) es un archivo con especificaciones


para bitmaps, textos en general, iconos, y en algunos casos cajas de dialogo
o menus. Delphi utiliza el mismo formato para sus archivos RES que C, y
cualquier editor de recursos para C de 32 bits (como los que se encuentran
en Visual C++ 4/5) pueden crear archivos de recursos que Delphi puede
leer y utilizar.

Una vez que Delphi ha especificado todo lo que va a usar el proyecto, el


programa inicializa la aplicación (Application.Initialize), crea la forma
Form1 a partir de la definición de objeto "TForm1" (veremos el significado
de esto mas adelante) usando "CreateForm", y la aplicación "corre"
(Application.Run). Cualquier forma creada con CreateForm está "viva"
(aunque podria ser invisible) hasta que el Application.Run termina.
Despues de esto (normalmente cuando "Run" recibe el mensaje
"Terminate") el programa termina.

Nuestro primer programa de Delphi - Una Forma


¿Listos para escribir nuestro primer programa? Comencemos entonces.
Abrimos Delphi, aparecerá automáticamente la ventana principal titulada
como Project1, el cual es un proyecto vacío que simplemente contiene una
forma vacía y la cual es mostrada por El diseñador, y cuyo titulo es Form1.
Se puede mostrar tantas formas como usted desee al mismo tiempo. Detras
del diseñador, podemos ver la ventana del editor. El editor es donde
escribimos el programa titulada Unit1.pas.

Lo que queremos hacer para este primer ejemplo es simplemente crear un


botón que, cuando se presione, de un mensaje de bienvenida; para esto
hagamos lo siguiente:

1. Seleccione, de la "paleta de componentes", el botón (button).


2. Despues de seleccionarlo, haga click en donde lo quiera ver en la
forma.
3. Utilizando la ventana "Object Inspector", cambie la propiedad
"Caption", escribiendo "&Botoncito". El caracter "&" le dice a
Windows que ponga un subrayado bajo la B y permita al usuario utilizar
Alt-B para presionar el Botón.
4. Ahora haga doble click en el botón que acaba de crear. Delphi:
• Creará un procedimiento en su programa "unit1.pas"
llamado Tform1.Button1Click. En este procedimiento usted
especificará lo que va a ocurrir cuando el usuario haga click en el
boton. El "begin/end" será también añadido por Delphi.

• Delphi también asignará el evento "OnClick" del botón


(que dice al botón qué procedimiento ejecutar cuando el usuario
haga click en el mismo) al procedimiento "Button1Click" recién
creado.
5. Teclee lo siguiente:

ShowMessage(‘Mi primer Programa’);

Incluya el punto y coma al final; el lenguaje Pascal necesita saber


donde termina cada línea o agrupación de lineas y el símbolo de
punto y coma es lo que utiliza para este propósito.

6. Ahora, presione el botón "Run" (en un circulo en la figura de abajo)


de menú de botones de Delphi. Si todo sale bien, Delphi compilará y
encadenará su programa. Despues esconderá las ventanas de diseño y
desplegará "[Running]" en su barra de título.
Felicidades! Acaba usted de crear, compilar y encadenar un programa de
Windows. Veamos lo que puede hacer su programa "de una linea":

Su programa tiene una forma o formulario. La forma se puede maximizar,


minimizar, cambiar de tamaño y de posición en exactamente la misma
manera que cualquier programa de Windows - sin una linea de codigo de su
parte (en el futuro, cuando usted sea un super-experto y empieze a manejar
"mensajes de windows", en cualquier lenguaje, se dara cuenta de cuanto
trabajo Delphi le ahorró).

Su forma tambien tiene un botón. Presiónelo. Verá un mensaje que dice


que "Mi primer programa" con un botón de Ok.

Para cerrar el programa, presione el ícono de la "X" en la parte superior


derecha, como en cualquier otro programa de Windows. Su programa
regresara al diseñador.

ACTIVIDADES

Actividad de aprendizaje 1.

Objetivo: Uso de los controles o componentes Button, Label y Edit


(TextBox en VB) de la ficha Estándar de la biblioteca de
componentes.

Ficha Estándar de la paleta de componentes

Icon Nombre
o

NORMALIZACION

Proceso de descomposicion de los datos de una base de datos en


tablas por medio de una serie de reglas en las cuales se analiza la
dependencia de unos datos con otros, para determinar el tipo de
agrupacion requerido. Es un mecanismo que se utiliza para verificar
que el diseño de la base de datos se encuentre bien elaborado,
eliminando redundancias e inconsistencias y evitando las anomalías
de isnerción o de borrado.
La normalización hace las cosas fáciles de entender. Los seres
humanos tenemos la tendencia de simplificar las cosas al máximo.
Lo hacemos con casi todo desde los animales hasta con los
automóviles. Las guías que la nomlalización provee crean el marco
de referencia para simplificar la estructura.

La normalización ayuda a reducir el espacio utilizado, pues optimiza


la estructura de tal forma que no se presente redundancia.

Para que conjunto de tablas quede normalizado debe cumplir con


una serie de reglas que se llaman las formas normales, aunque
para nuestro estudio nos concentraremos en las tres primeras
formas normales. Las otras formas son complejas y no son
necesarias para realizar un diseño basico de una base de datos.
Las formas normales son las siguientes:

Primera Forma Normal


Segunda Forma Normal
Tercera Forma Normal
Forma Normal Boyce-Codd
Cuarta Forma Normal
Quinta Forma Normal o Forma Normal de Proyección-Unión
Forma Normal de Proyección-Unión Fuerte
Forma Normal de Proyección-Unión Extra Fuerte
Forma Normal de Clave de Dominio

Un concepto que se debe aclarar antes de empezar con las


formas normales es el de dependencia de los datos pues es la
base para el proceso de normalización

Dependencia funcional. Para cada valor único de la clave


principal, los valores de las columnas de datos deben estar
relacionados y deben describir completamente el contenido de la
tabla. Esta regla opera de dos formas:

o En primer lugar no debería haber en una tabla un dato


que no sea relevante del asunto o materia del que trata
la tabla. Por ejemplo, aunque es necesaria la
información del cliente para cada pedido, los clientes
serían un asunto independiente y tendrían su propia
tabla.
o En segundo lugar los datos de la tabla deberían
describir completamente la materia de la que trata la
tabla. Por ejemplo, un pedido podría ser enviado a una
dirección diferente a la del cliente, por lo que la adición
de la dirección de envío a la tabla pedido haría que la
información fuese mas completa.

Podemos mencionar algunos ejemplos de dependencia funcional

• Si conozco el codigo del estudiante, existe un único apellido


del estudiante asociado a el?, SI, luego los apellidos
dependen funcionalmente del campo codigo.
• Si conozco el Numero del pedido existe un único Producto en
el pedido asociado a el?, NO, ya que un pedido puede no
tener un único producto, por lo tanto el producto no depende
funcionalmente de IdPedido.

Primera forma normal.

Las celdas de una tabla deben tener un solo valor y no se permiten


ni arreglos (vectores) ni grupos repetidos como valores. Cuando
esta situación se presenta, se debe crear una tabla con la columna
repetida.

Segunda forma normal.

Una tabla está en segunda forma normal, si está en primera forma


normal y cada atributo no clave depende funcionalmente de su
clave principal. Dicho de otra manera, no se admite la dependencia
parcial. Por tanto las dependencias parciales se deben eliminar
dentro de sus propias tablas.

Tercera forma normal.

Una tabla está en tercera forma normal, si cumple con la segunda


forma normal y ningun atributo no clave de la tabla depende
funcionalmente de otro atributo no clave. Todos los datos deben
depender unica y exclusivamente de la clave. Aquellos que no
cumplen con esta condición se deben separar en una nueva tabla.

Las computadoras no podrían desempeñar ninguna función si no


existiera el software. Con el software las computadoras nos
permiten hoy día realizar cualquier tipo de tarea desde el
almacenamiento de datos, procesamiento, control de procesos,
manejo de entornos multimedios, juegos y otro gran número de
actividades.

Existen varias clasificaciones del software pero podemos agrupar


estas en dos: Los programas del sistema, que se encargan de la
operación de la computadora, y los programas de aplicación que
resuelven problemas propios de usuario.

Dentro de los programas del sistema los más fundamentales son los
del sistema operativo, ya que controlan todos los componentes de
la computadora y permiten la creación de los programas de
aplicación.

Un sistema de computación es un sistema complejo compuesto por


muchos componentes físicos sobre una misma CPU y algunos
periféricos que a la vez poseen otros componentes.

Si toda persona que realiza programas de aplicación tuviera que


involucrarse con la forma en que trabajan físicamente los
componentes del sistema sería probable que muchos programas
hoy en día no pudieran sido ser escritos.

Desde la invención de la computadora se ha buscado la forma de


resguardar a las persona que utilizan la computadora de la
complejidad para el manejo del harware, por lo cual los científicos
se idearon la estrategia de colocar una capa de software en la parte
superior de la máquina con el objeto de administrar todos sus
componentes físicos y presentar al usuario una interfaz o máquina
virtual más fácil de entender y programar, a esta capa de software
se le denominó sistema operativo.

Podemos decir entonces que un sistema de computación esta


compuesto por dos subsistemas uno abstracto (software) y uno
concreto (hardware).