bases de datos sentencias sql

70
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.

Upload: jorge455

Post on 19-Jun-2015

2.756 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Bases de Datos Sentencias SQL

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.

Page 2: Bases de Datos Sentencias SQL

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:

Page 3: Bases de Datos Sentencias SQL

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

Page 4: Bases de Datos Sentencias SQL

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 datosReferidas a VentajasLos 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 datosRelativas a DesventajasLa 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.)

Page 5: Bases de Datos Sentencias SQL

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;

Page 6: Bases de Datos Sentencias SQL

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

Page 7: Bases de Datos Sentencias SQL

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

Page 8: Bases de Datos Sentencias SQL

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),

Page 9: Bases de Datos Sentencias SQL

CodigoSucursal integer,CiudadOrigen char (24), CiudadDestino char(24))

Crear la tabla de sucursalescreate 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 paqueteadd constraint fksucursalforeign key (CodigoSucursal) references sucursal(CodigoSucursal)on update cascadeon 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" )

Page 10: Bases de Datos Sentencias SQL

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 consultaselect 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 paquetesselect sum(PrecioEnvio) from paquete

Encontrar el valor promedio de todos los paquetesselect 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 cuidadselect CiudadOrigen, sum(PrecioEnvio) from paquete group by

Page 11: Bases de Datos Sentencias SQL

CiudadOrigen

Mostrar todos los paquetes ordenados por ciudadselect 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 paqueteselect NombreSucursal, NumeroGuiafrom sucursal, paquetewhere 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 MANIZALESFACULTAD DE INGENEIRIATECNOLOGIA DE SISTEMASBASES 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

Page 12: Bases de Datos Sentencias SQL

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.

Page 13: Bases de Datos Sentencias SQL

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,

Page 14: Bases de Datos Sentencias SQL

• 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.

Page 15: Bases de Datos Sentencias SQL

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

Page 16: Bases de Datos Sentencias SQL

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

Page 17: Bases de Datos Sentencias SQL

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

Page 18: Bases de Datos Sentencias SQL

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

Page 19: Bases de Datos Sentencias SQL

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]

Page 20: Bases de Datos Sentencias SQL

[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 ValladolidI+D BoecilloProduccion 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

Page 21: Bases de Datos Sentencias SQL

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

Page 22: Bases de Datos Sentencias SQL

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 450000Perez 350000Roncal 350000Yuste 350000Recio 300000Sastre 300000Martin 235000Garcia 225000Garcia 210000Mateo 200000Santana 200000Rueda 175000Lopez 150000Sanz 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-----------

Page 23: Bases de Datos Sentencias SQL

PresidenteDirectorSecretarioContableComercialComercialDirectorAnalistaProgramadorProgramadorDirectorAnalistaProgramadorProgramador

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-----------AnalistaComercialContableDirectorPresidenteProgramadorSecretario

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,

Page 24: Bases de Datos Sentencias SQL

• 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

Page 25: Bases de Datos Sentencias SQL

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

Page 26: Bases de Datos Sentencias SQL

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, ...

Page 27: Bases de Datos Sentencias SQL

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ónGROUP BY {columna ,}+HAVING condiciónORDER 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 Analista2 Comercial1 Contable

Page 28: Bases de Datos Sentencias SQL

3 Director1 Presidente4 Programador1 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.

Page 29: Bases de Datos Sentencias SQL

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 emp2 minus3 select nombre from emp where cod_dep=200;

NOMBRE----------CanoLopezMartinRecioRoncalRuedaSantanaSanzYuste

9 rows selected.

Page 30: Bases de Datos Sentencias SQL

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 AdministracionRoncal AdministracionRueda AdministracionMartin AdministracionSanz AdministracionLopez AdministracionPerez AdministracionSastre AdministracionGarcia AdministracionMateo AdministracionYuste AdministracionRecio AdministracionGarcia AdministracionSantana AdministracionCano I+DRoncal I+DRueda I+D...42 rows selected.

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

Page 31: Bases de Datos Sentencias SQL

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 d2> where e.cod_dep = d.cod_dep;

NOMBRE NOMBRE---------- ---------------Cano AdministracionRoncal AdministracionRueda AdministracionMartin AdministracionSanz AdministracionLopez AdministracionPerez I+DSastre I+DGarcia I+DMateo I+DYuste ProduccionRecio ProduccionGarcia ProduccionSantana 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

Page 32: Bases de Datos Sentencias SQL

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.nombre2 from emp e, dep d3 where e.cod_dep(+)=d.cod_dep;

NOMBRE NOMBRE---------- ---------------Cano AdministracionRoncal AdministracionRueda AdministracionMartin AdministracionSanz AdministracionLopez AdministracionPerez I+DSastre I+DGarcia I+DMateo I+DYuste ProduccionRecio ProduccionGarcia ProduccionSantana ProduccionDistribucion

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----------

Page 33: Bases de Datos Sentencias SQL

CanoRoncalPerezSastreYusteRecio

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 emp3 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

Page 34: Bases de Datos Sentencias SQL

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

Page 35: Bases de Datos Sentencias SQL

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.

Page 36: Bases de Datos Sentencias SQL

 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

Page 37: Bases de Datos Sentencias SQL

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

Standard

Contiene todos los elementos de control que Windows pone a disposición normalmente, empaquetados en la estructura clara de un componente.

Additional

Contiene todos los componentes que Windows no pone a disposición como elementos de control estándar, pero han resultado útiles con el paso del tiempo en varios programas.

Data Acces

Aquí se encuentran los componentes desarrollados especialmente para una captura cómoda y rápida de las bases de datos. Se puede tratar tanto de bases de datos locales, como de sistemas repartidos (con importancia especial en la versión Client-Server de Delphi).

Data Controls

Dispone de componentes variados para el procesado de datos, trabajando en conjunción con los elementos del área "Data Access".

Dialogs

Contiene todos los diálogos estándar de Windows, empaquetados como componentes, tales como diálogos de open/save, impresión, etc.

System

Contiene varios componentes que ofrecen determinados servicios de sistema en Windows, como reloj, barras de archivos, funciones multimedia, DDE y OLE 2.0, etc.

VBX Contiene algunos elementos VBX

Page 38: Bases de Datos Sentencias SQL

visualizados como si fuesen componentes, tales como un visor de gráficos, un generador de diagramas, etc.

Samples

Este último área contiene algunos otros componentes útiles cuyo 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

Page 39: Bases de Datos Sentencias SQL

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

Page 40: Bases de Datos Sentencias SQL

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

Page 41: Bases de Datos Sentencias SQL

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;

UsesForms,Unit1 in 'Unit1.pas' {Form1};

Page 42: Bases de Datos Sentencias SQL

{$R *.RES}

beginApplication.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 

Page 43: Bases de Datos Sentencias SQL

¿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.

 

Page 44: Bases de Datos Sentencias SQL

 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 

Icono

Nombre

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.

Page 45: Bases de Datos Sentencias SQL

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 NormalSegunda Forma NormalTercera Forma NormalForma Normal Boyce-CoddCuarta Forma NormalQuinta Forma Normal o Forma Normal de Proyección-UniónForma Normal de Proyección-Unión FuerteForma Normal de Proyección-Unión Extra FuerteForma 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

Page 46: Bases de Datos Sentencias SQL

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

Page 47: Bases de Datos Sentencias SQL

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).