Bases de Datos Sentencias SQL

Actualmente las organizaciones están utilizando bases de datos para generar resultados o para compartir dicha informació

Views 247 Downloads 13 File size 271KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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 2525", "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-Dic4712 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 columnavalor 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; = 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