Sie sind auf Seite 1von 24

CURSO 95/96 Universidad de Navarra Introduccin a SQL y ORACLE

Centro de Tecnologa Informtica

Ignacio Coupeau, Cristina Pueyo y Jess Used 21/9/95

CONCEPTO DE BASE DE DATOS


El concepto bsico en el almacenamiento de datos es el registro. El registro agrupa la informacin asociada a un elemento de un conjunto, y est compuesto por campos. As por ejemplo, un registro correspondiente a un libro no es ms que un elemento de un conjunto: biblioteca, elenco bibliogrfico, etc. A su vez, ese registro contiene toda la informacin asociada al libro, clasificada en campos: ttulo, autor, fecha de edicin, etc. Se puede hablar de propiedades caractersticas o campos caractersticos, y propiedades secundarias o campos secundarios segn definan o complementen el elemento representado por el registro. Por ejemplo, el registro empleados tiene los siguientes campos: DNI, Nombre, Apellidos, Edad, Poblacin, Sueldo. Los campos DNI, Nombre y Apellidos son elementos o campos caractersticos. Los restantes son secundarios. Un fichero o tabla es un conjunto de registros homogneos con la misma estructura:

Cuando se tienen varias tablas o ficheros con algn campo en comn, entonces pueden relacionarse y constituyen una base de datos relacional:

En el ejemplo anterior, puede extraerse la informacin relacionada en las dos tablas, por medio del campo comn DNI; por ejemplo:
"Buscar en la tabla los puestos de trabajo desempeados y la antigedad del empleado con nombre = Luis"

Hasta hace un tiempo, y siempre que se deseara una base de datos especialmente diseada, se utilizaban bases de datos con estructura jerrquica o de red, mediante anillos interconectados. La informacin afn est organizada en anillos (listas cclicas), por ejemplo empresas, ciudades, trabajos... De cada anillo se pasa otro anillo de conceptos subordinados. Por ejemplo una base de datos de una empresa para su personal en varias ciudades puede ser:

Este tipo de bases son especialmente eficientes en bsquedas acordes con su estructura, por ejemplo: "[[questiondown]]qu ajustadores trabajan en Valencia"; pero ante otras preguntas como "[[questiondown]]Cuntas personas tiene contratadas mi empresa?" la bsqueda se hace bastante ms difcil. Adems, las bases de datos en red y jerrquicas requieren un diseo especfico ajustado a las consultas, por lo que no suele usarse ante las dificultades tcnicas que plantea su desarrollo.

Un ejemplo de bases de datos jerrquica, aunque no basada en anillos mltiples, sera el de una base de datos construida segn la organizacin jerrquica de las piezas que componen un vehculo:

El modelo relacional, basado en tablas, tiene en la actualidad una difusin mayor. Las bsquedas pueden ser mucho ms flexibles, basadas en cualquier campo (DNI, Nombre, etc.). Para hacer bsquedas rpidas deben definirse campos ndice. Los campos comunes por donde se conectan las tablas deben tener un ndice definido. Se conoce como gestor de bases de datos al programa de ordenador que sirve para definir, disear y utilizar los registros, ficheros y formularios de la base de datos. Generadores de bases de datos muy conocidos son ORACLE, SyBase, INFORMIX, FOX BASE, PARADOX, ACCESS...

EL LENGUAJE DE GESTIN DE BASES DE DATOS SQL


Hasta la dcada de los 80, las personas que preparaban las consultas e informes de una base de datos deban ser programadores. Al aparecer las bases de datos con lenguajes de consulta sencillos y estandarizados, semejantes al lenguaje natural, el proceso de consulta puede hacerlo cualquier usuario mediante un lenguaje escrito asequible. El lenguaje de gestin de bases de datos ms conocido en la actualidad es el SQL, Structured Query Language, que es un lenguaje estandar internacional, comnmente aceptado por los fabricantes de generadores de bases de datos. En concreto, el gestor de bases de datos Oracle utiliza el lenguaje SQL. El SQL trabaja con estructura cliente/servidor sobre una red de ordenadores. El ordenador cliente es el que inicia la consulta; el ordenador servidor es que atiende esa consulta. El cliente utiliza toda su capacidad de proceso para trabajar; se limita a solicitar datos al ordenador servidor, sin depender para nada ms del exterior. Estas peticiones y las respuestas son transferencias de textos que cada ordenador cliente se encarga de sacar por pantalla, presentar en informes tabulados, imprimir, guardar, etc., dejando el servidor libre. El SQL permite: * Definir una base de datos mediante tablas

* Almacenar informacin en tablas. * Seleccionar la informacin que sea necesaria de la base de datos. * Realizar cambios en la informacin y estructura de los datos. * Combinar y calcular datos para conseguir la informacin necesaria. SQL es el lenguaje de comunicacin entre el programa cliente y programa servidor; Oracle es un programa servidor, en el que est la base de datos propiamente dicha. El usuario accede con alguno de los programas cliente disponibles para consultar Oracle. En este manual se explica como emplear SQL para: * Crear y modificar la estructura de una tabla de datos. * Seleccionar informacin de una tabla. * Aadir datos a una tabla. * Introducir informacin en una tabla. * Realizar consultas entre tablas con campos comunes.

Estructura de una base de datos


Una base de datos Oracle est formada por tablas. Los ejemplos de este manual se basan en las tablas de departamentos DEPT y empleados EMP de una empresa.
DEPT:

EMP:

Creacin de una tabla

Antes de cualquier consulta a una base de datos debe crearse una tabla e introducir la informacin. En nuestro caso creamos las dos tablas que vamos a utilizar como ejemplo:
CREATE TABLE DEPT (DEPTNO NUMBER(2), DNAME CHAR(14), LOC CHAR (13));

El comando crear tabla (CREATE TABLE) indica al servidor Oracle que nombre queremos poner a la tabla, los nombres de las columnas de la tabla (n[[ordmasculine]] de departamento, nombre del departamento y localidad) y el tipo de informacin que cada columna va a contener. La columna DEPTNO tendr informacin numrica (2 dgitos), DNAME tendr 14 caracteres y LOC tendr 13 caracteres; de este modo especificamos la longitud mxima de cualquier dato que pueda ser almacenado en las columnas de la tabla. Se procede de forma anloga con la tabla empleados EMP con el comando CREATE TABLE:
CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL, ENAME CHAR(10), JOB CHAR(9), MGR NUMBER(9), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2));

En esta tabla se ha definido la columna n[[ordmasculine]] de empleado (EMPNO) como no nula, esto significa que cada campo de esa columna debe contener un valor. Esta especificacin NOT NULL es un ejemplo de como ORACLE analiza los valores que se introducen en cada campo y comprueba que se cumple lo especificado. Aunque el nmero mximo de caracteres definido para un campo sea -por ejemplo- 14, si slo se ocupan 4, ORACLE solo utiliza cuatro en disco. Los valores nulos no ocupan espacio.

Introduccin de la informacin
Tan pronto como se ha creado la tabla, puede comenzarse a introducir lneas o registros de informacin mediante comando INSERT:

INSERT INTO DEPT VALUES (30,'SALES','CHICAGO);

En este comando, primero se nombra la tabla de la base de datos en la que quieren insertarse los datos (DEPT), y a continuacin la lista de valores que van a ir en cada columna (30, 'Ventas', 'Chicago')

Bsqueda de informacin en una tabla


La operacin ms comn en una base de datos es pedir informacin, y se denomina bsqueda o Query. El comando Select va seguido de FROM y en ocasiones de WHERE. SELECT especifica las columnas, FROM especifica las tablas y WHERE especifica las condiciones. Si no hay condiciones de bsqueda se presentarn las columnas completas, sin restricciones. En este ejemplo, el comando Headers() especifica que el listado ponga los nombres de las columnas (DNAME, DEPTNO, LOC); PrintAll, imprime los datos.

Si se quiere ver el contenido de toda la tabla EMP, puede sustituirse toda la lista de columnas por un asterisco:

En los ejemplos, para facilitar la lectura, se escriben los comandos en diversas lneas, pero puede hacerse en una sola lnea, por ejemplo:
SELECT * FROM DEPT; Headers(); PrintAll;

BSQUEDA DE INFORMACIN EN UNA TABLA

El orden en el que vemos las columnas (DNAME, DEPTNO) es en el que se ha puesto en el comando SELECT:

Para seleccionar determinados registros o filas de la base de datos, debe aadirse una condicin con el comando WHERE al usar SELECT... FROM:
SELECT * FROM EMP WHERE DEPTNO=30; Headers(); PrintAll;

obtiene todas las columnas pero de los empleados del Departamento nmero 30:

WHERE obliga a ORACLE a buscar en la informacin de la tabla y mostrar solo aquellas lneas o

registros que cumple la condicin.

Condiciones mltiples para una bsqueda


A veces WHERE va seguido de ms de una condicin:
SELECT ENAME, JOB, SAL FROM EMP WHERE JOB = 'SALESMAN' AND SAL >=100;

En este caso se piden los datos del nombre, trabajo, salario de aquellos empleados de la tabla cuyo empleo sea 'SALESMAN'[1] y su salario mayor o igual que 100:

Para las condiciones alternativas, negativas (excluyentes) se utilizan los comandos OR, y NOT. As por ejemplo:

pide los datos de empleados con categora manager o que su salario sea mayor que 100:

El siguiente ejemplo pide un listado con los nombres, categoras y nmero de departamento de los empleados cuyo trabajo sea clerck (oficinista) y su departamento sea distinto[2] del 30,

y su resultado es el siguiente:

Mediante los comandos BEETWEEN y AND pueden pedirse datos comprendidos en un rango determinado. El ejemplo siguiente facilita los el nombre y el salario de los empleados cuyo salario est comprendido entre 800 y 900:
SELECT ENAME, SAL FROM EMP WHERE SAL BETWEEN 800 AND 900;

El comando IN permite seleccionar lneas cuyo campo contenga uno de los valores de una lista especificada entre parntesis:

SELECT * FROM DEPT WHERE DEPTNO IN (10,30);

En este ejemplo, como la lista est compuesta por slo 2 valores, podra haberse empleado OR para realizar la misma bsqueda:
SELECT * FROM DEPT WHERE DEPTNO='10' OR DEPTNO='30';

Bsquedas por palabras incompletas


Pueden seleccionarse lneas de informacin mediante bsquedas de palabras incompletas: buscar empleados en cuyo nombre tenga una 'R' en 3[[ordmasculine]] lugar:
SELECT ENAME FROM EMP WHERE ENAME LIKE '__R%'; Headers(); PrintAll;

En este ejemplo se utiliza el operador LIKE de SQL. Adems, mediante guiones se especifican las dos posiciones ('__R%'), y el signo % indica que puede seguir cualquier cadena de caracteres. Los operadores BETWEEN, IN y LIKE, pueden ir precedidos por NOT y unidos con AND y OR, para formar una bsqueda tan completa como se necesite.

Cmo se ordena el resultado de una bsqueda


En todos los ejemplos hasta ahora, las lneas resultado de las bsquedas han estado en un orden aleatorio, determinado por el programa ORACLE. Puede controlarse el orden de las lneas seleccionadas aadiendo la opcin ORDER BY al final de nuestro comando SELECT. Como ejemplo suponga que desea obtener una lista de los empleados que trabajan en el departamento 30 pero ordenados por su salario. Esta ordenacin no est limitada a un orden ascendente o a un nico criterio, as por ejemplo, pueden ordenarse los empleados por puesto de trabajo, y dentro de esta ordenacin ( los trabajos) por orden de salarios:

SELECT JOB,SAL,ENAME FROM EMP ORDER BY JOB,SAL DESC; Headers(); PrintAll;

donde DESC indica orden descendente (de mayor a menor), y cuyo resultado es el siguiente:

Cmo se evitan las lneas repetidas en un listado


Supngase que se desea obtener una lista de los trabajos en la empresa. Si se pide una columna completa
SELECT JOB FROM EMP; Headers(); PrintAll;

al no haber ninguna condicin en nuestra bsqueda, ORACLE trae a la pantalla todos los valores de la columna trabajos. En la lista obtenida hay repeticiones que pueden eliminarse especificando DISTINCT al escribir la bsqueda:
SELECT DISTINCT JOB FROM EMP; Headers(); PrintAll;

BSQUEDA DE INFORMACIN EN VARIAS TABLAS: JOIN QUERY


Hasta ahora se han efectuado bsquedas en una sola tabla, pero puede ocurrir que la informacin que buscamos no est almacenada en una sola tabla. Como ORACLE es una base de datos relaciona permite seleccionar informacin de ms de una tabla y combinar los resultados en un listado. La bsqueda combinada en ms de una tabla se denomina bsqueda relacional o join query. En las bases de datos jerrquicas y en anillo, las relaciones son estticas porque estn perfectamente definidas en la estructura de la base de datos desde el diseo, por lo que las consultas deben seguir ese mismo esquema. En las bases de datos relacionales como ORACLE, las relaciones son dinmicas; se establecen en el momento de la consulta, y es posible extraer informacin segn convenga en cada caso. Por ejemplo, si se desea saber el nombre del departamento donde trabaja determinado empleado, y se intenta buscar en la tabla EMP (empleados), puede verse que no tiene columna con el nombre de departamento; sin embargo, la tabla de departamentos tiene el departamento (nmero y nombre). Como las dos tablas tienen una columna en comn -el n[[ordmasculine]] de departamento-, es posible relacionar las dos tablas. Puede hacerse con dos bsquedas:
SELECT ENAME, DEPTNO FROM EMP WHERE ENAME = 'WARD';

SELECT LOC FROM DEPT WHERE DEPTNO = 30;

Pero puede llegarse al mismo resultado mediante una nica bsqueda indicando la tabla y la columna separados por un punto. El ejemplo siguiente
SELECT ENAME,LOC FROM EMP,DEPT

WHERE ENAME='KING' AND EMP.DEPTNO =DEPT.DEPTNO; Headers(); PrintAll;

busca los empleados en la tabla EMP cuyo nombre es KING y utiliza el valor del cdigo del empleado localizado para buscar en la otra tabla (DEPT) el nombre del departamento de trabajo, y busca los registros donde coinciden los valores de las columnas EMPTO y DEPTO:

En el ejemplo anterior, en la tabla EMPL se busca la fila que contiene al empleado 'KING', se determina el nmero de departamento al que pertenece DEPTNO, y con el nmero de departamento, en la tabla DEPT se extrae el registro con el mismo valor de DEPTNO. La clusula
EMP.DEPTNO =DEPT.DEPTNO

especifica que los registros de las tablas EMP y DEPT deben coincidir en el valor del campo o columna
DEPTNO.

EXPRESIONES ARITMTICAS Y FUNCIONES PARA EL MANEJO DE TEXTO


Expresiones aritmticas
Para construir una expresin aritmtica deben combinarse nombres de columnas y constantes numricas con una operacin aritmtica. En el ejemplo siguiente

SELECT ENAME,SAL,COMM,SAL+COMM FROM EMP WHERE JOB='SALESMAN'; Headers(); PrintAll;

se obtiene un listado con una tercera columna que es la suma de salario y comisiones. La columna de la suma no es una columna real, es decir no est almacenada en nuestra base de datos, pero se construye dinmicamente como resultado de una bsqueda, y se puede operar con la columna resultado como si se tratara de una columna real. Se adjuntan las principales funciones aritmticas: Funciones aritmticas significado + suma - resta * producto / divisin POWER exponenciacin ROUND redondeo TRUNC trunca a entero ABS valor absoluto

Funciones para el manejo de textos


Las funciones aritmticas nos permiten manipular informacin numrica, de forma parecida las funciones para manejo de texto character strings functions permiten manipular los campos que contienen texto. El ejemplo siguiente busca en la tabla EMP los registros cuyo campo ENAME suene parecido a 'SCHMIDT':

SELECT ENAME FROM EMP WHERE SOUNDEX(ENAME)=SOUNDEX('SCHMIDT'); Headers(); PrintAll;

Se adjuntan las principales funciones de texto: Funciones de texto significado | concatena textos LENGTH mide la longitud de un texto SUBSTR corta un texto INSTR inserta un texto dentro de otro UPPER pone en maysculas LOWER pone en minsculas SOUNDEX sonido de un texto

FORMATO DE FECHA Y NMERO


Formato de fecha
Al crear la tabla emp se defini la columna hiredate como informacin tipo fecha (HIREDATE DATE). El formato estndar ser Da-mes-ao (03-Sept-93), pero pueden utilizarse otros formatos. Para cambiar de formato, ORACLE tiene el operador TO_CHAR(nombre_de_columna name, formato). En el siguiente ejemplo se listan algunos datos de los empleados que trabajan en el Depto 30 y la fecha en formato DY DD MM YY (da de la semana, da, mes, ao):
SELECT ENAME,JOB, TO_CHAR(HIREDATE,'DY DD MON YYYY') HIREDATE FROM EMP WHERE DEPTNO = 20; Headers(); PrintAll;

ORACLE permite una amplia variedad de formatos: Formato de fecha ejemplo estndar 22-OCT-93 DAY MONTH DD, YYYY WEDNESDAY OCTOBER 17, 1993 Day DD Mon YYYY Wed 22 Oct 1993 DY "the" ddth "of" Month YYYY Wednesday the 22nd of October 1993

Operaciones aritmticas con fechas


Adems de poder dar formato a la fecha, pueden realizarse operaciones aritmticas en los campos de fechas:

SYSDATE siempre nos da la fecha del da (fecha interna del ordenador). La expresin HIREDATE+ 4500 suma 4500 das a la fecha. La consulta muestra aquellos registros cuya fecha HIREDATE es de

hace 4500 das. ORACLE permite: calcular das, meses o aos entre fechas; calcular la ltima fecha del mes; calcular la fecha del da siguiente.

FUNCIONES PARA EL MANEJO DE GRUPOS DE FILAS


Las funciones para grupos permiten seleccionar informacin a partir de grupos de lneas o registros. Por ejemplo, pueden agruparse todos los empleados que pertenezcan al mismo departamento y entonces calcular el salario mximo en cada grupo de departamentos:
SELECT DEPTNO,MAX(SAL)

FROM EMP GROUP BY DEPTNO; Headers(); PrintAll;

En una bsqueda de grupos, cada lnea en el resultado de la bsqueda, corresponde a un grupo de lneas de nuestra tabla, la columna que se pone a continuacin de group by es aquella por la que queremos agrupar las lneas de la tabla. En el ejemplo anterior cada lnea de la tabla EMP se incluye en uno de los tres grupos, uno para cada departamento, dependiendo de su valor en el campo DEPTO: todas las lneas de su mismo grupo tienen el mismo nmero de departamento. Podemos combinar las funciones de grupo con las bsquedas relacionales. Adems, hay tres funciones que pueden utilizarse con los grupos: * SUM : Para sumar los valores de los campos, dentro de los grupos definidos por GROUP BY. * COUNT: Para contar el nmero de lneas que entran en cada uno de esos grupos. * AVG: Para saber la medida de los valores de campos especficos en cada grupo. El siguiente ejemplo tiene como objetivo saber cuantos empleados estn trabajando en cada categora en cada departamento, cuantos secretarios hay en el departamento de ventas y, en esos grupos, cul es la suma y media de los salarios:
SELECT DNAME,JOB,SUM(SAL), COUNT(*), AVG(SAL) FROM EMP,DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO GROUP BY DNAME,JOB; Headers(); PrintAll;

Condiciones de bsqueda de un grupo de lneas: HAVING


As como el operador WHERE se especifican las condiciones para las bsquedas con lneas individuales, con HAVING pueden especificarse las condiciones de bsqueda para grupos de lneas. Supongamos que interesa una bsqueda como la anterior, pero en la que slo se necesita ver aquellos grupos que tengan al menos dos empleados:
SELECT ENAME,JOB,SUM(SAL),COUNT(*),AVG(SAL) FROM EMP WHERE EMP.DEPTNO = DEPT.DEPTNO GROUP BY DNAME,JOB HAVING COUNT(*)>=2 Headers(); PrintAll;

SUBBSQUEDAS O SUBQUERIES
Supngase, por ejemplo, que se desea obtener una lista con todos los empleados que tienen el mismo empleo que Jones; puede omitirse el empleo de Jones y ORACLE lo busca, en lo que constituira una bsqueda subordinada o subbsqueda:
SELECT ENAME,JOB FROM EMP WHERE JOB = (SELECT JOB FROM EMP WHERE ENAME = 'KING'));

ORACLE realiza las subbsquedas antes, por que necesita el resultado de estas para las bsquedas. Como ejemplo adicional puede buscarse el empleado que gana ms que la media de todos los salarios de los empleados:
SELECT ENAME,SAL FROM EMP WHERE SAL > (SELECT AVG(SAL) FROM EMP); Headers(); PrintAll;

MODIFICACIN DE LA INFORMACIN ALMACENADA


Como se ha visto antes, el comando SELECT permite ver un grupo de registros de una o ms tablas. Con SQL tambin pueden aadirse o modificarse lneas: * UPDATE: Cambia valores almacenados en tablas. * INSERT: Aade lneas a una tabla. * DELETE: Borra lneas a una tabla.

Actualizacin de datos en la tabla


Si se desease subir el sueldo a todos los oficinistas, sera necesario actualizar o cambiar el valor del salario. Es decir, se debe actualizar, en la tabla de empleados, el campo de salario en aquellas lneas en que el trabajo sea oficinista. El comando UPDATE se escribe seguido por la tabla donde realizamos el cambio y para indicar la actualizacin, se escribe Set seguido por el cambio, y finalmente la condicin (opcional) en la que se indican las lneas que se van a modificar:
UPDATE EMP SET SAL=SAL+100

WHERE JOB='CLERCK'; Headers(); PrintAll;

un mensaje confirmar que la actualizacin ha tenido lugar.

Cmo insertar nuevos registros en una tabla


El comando INSERT se ha utilizado hasta ahora para introducir lneas de informacin, pero una lnea cada vez. Sin embargo, puede usarse este comando para aadir un conjunto de lneas desde una tabla hacia otra. Puede hacerse esto utilizando una bsqueda para definir el conjunto de lneas que se van a insertar en la tabla. Supongamos que en nuestra base de datos tenemos una tercera tabla llamada PROMOCIN, con algunas de las columnas de la tabla DEPT y queremos introducir en ella la informacin de todos los vendedores que tengan de comisin una cifra superior al 25% de su salario, copiando la informacin desde la tabla EMP:
INSERT INTO PROMOCION (ENAME,JOB,SAL,COMM) SELECT ENAME,JOB,SAL,COMM FROM EMP WHERE COMM > 0.25 * SAL;

El comando Insert utiliza una subbsqueda.

Borrado de registros de una tabla


Para borrar se emplea la orden Delete y se puede utilizar con where para determinar los registros que se quieren borrar. As por ejemplo, para borrar el departamento 40 se hara lo siguiente:
DELETE FROM DEPT WHERE DEPTNO=40;

Cuando ORACLE ha realizado la orden aparece 1 record deleted. Puede pedirse un listado de todos los departamentos para comprobarlo:
SELECT * FROM DEPT;

Las condiciones para todos esos comandos demuestran como SQL emplea la misma sintaxis tanto para las bsquedas como para la manipulacin de la informacin. En los comandos SELECT, UPDATE,

INSERT y DELETE, la condicin con WHERE es opcional.

CAMBIOS EN LA ESTRUCTURA DE UNA BASE DE DATOS


ORACLE proporciona los comandos necesarios que se necesitan para modificar la estructura de una base de datos. En esta seccin utiliza SQL para: * ALTER TABLE ADD: Aadir una columna a una tabla existente. * ALTER TABLE MODIFY: Hacer una columna existente ms larga. Siguiendo con los ejemplos anteriores, se va a aumentar la base de datos modelo para poder asignar empleados a proyectos de igual forma que hay empleados asignados a departamentos. Se trata en definitiva de crear una nueva tabla y practicar los comandos ALTER TABLE en su diseo. El cambio en la estructura de la base de datos exige varios pasos. Primero, con el comando CREATE, hay que aadir la tabla proyectos a la base de datos:
CREATE TABLE PROJ (PROJNO NUMBER(3) NOT NULL, PNAME CHAR(5), BUDGET NUMBER(7,2));

En segundo lugar, con el comando INSERT, se introducen algunas lneas:

que son los proyectos en curso dentro de la empresa. Los datos introducidos en la nueva tabla, pueden examinarse con el comando SELECT actuando sobre la nueva tabla proyectos (PROJ):
SELECT * FROM PROJ; Headers(); PrintAll;

Finalmente para que puedan hacerse bsquedas relacionales sobre las tablas PROY y EMP, debe aadirse una columna a EMP denominada nmero de proyecto (PROJNO), para que las tablas tengan alguna columna en comn. Con este fin se utiliza el comando ALTER TABLE:

ALTER TABLE EMP ADD (PROJNO NUMBER(3));

A este comando se le indica el nombre de la tabla a modificar, la columna que se quiere aadir, y el tipo de informacin y su longitud mxima. Ahora puede seleccionarse la tabla EMP y ver que en cada lnea hay un campo ms.
SELECT * FROM EMP; Headers(); PrintAll;

Como ejemplo del comando UPDATE, van a asignarse todos los empleados del Depto 20 y todos los vendedores al proyecto 101:
UPDATE EMP SET PROJNO=101 WHERE DEPTNO =20 OR JOB='SALESMAN' 9 records updated.

Puede consultarse la tabla para confirmar la actualizacin:

Para completar el ejemplo, se asignan el resto de empleados -los que no tienen proyecto asociado- al proyecto 102:
UPDATE EMP SET PROJNO=102 WHERE PROJNO IS NULL; 5 records updated

La actualizacin de las lneas con el nmero de proyecto, completa la modificacin de la base de datos ejemplo y permite relacionar los empleados con los proyectos como antes se haca con los departamentos. Es posible, ahora que las tablas tienen un campo comn, el nmero de proyecto, hacer bsquedas relacionales:
SELECT ENAME,JOB,DEPTNO,PNAME FROM EMP,PROJ WHERE EMP.PROJNO = PROJ.PROJNO; Headers(); PrintAll;

Cmo modificar la capacidad de los datos de una columna


En la definicin de la tabla de datos se asigna a cada columna una capacidad (2, 14, 13):
CREATE TABLE DEPT (DEPTNO NUMBER(2), DNAME CHAR(14), LOC CHAR (13));

Pero puede plantearse en un momento dado, cambiar el ancho o capacidad de una columna. En el ejemplo siguiente, al intentar actualizar una columna con el valor 105000,

el SQL notifica un error debido a que esa columna slo tiene capacidad para 7 dgitos incluyendo la coma y los dos decimales (7,2). Se necesita modificar la definicin de la columna budget, manteniendo el tipo de informacin que contiene pero hacindola ms ancha:
ALTER TABLE PROJ MODIFY BUDGET NUMBER(8,2);

y aparece: 1 record updated. Una vez modificada la capacidad, la orden

se procesa correctamente.

VISTAS ALTERNATIVAS DE INFORMACIN


ORACLE permite disear y almacenar presentaciones alternativos para un conjunto de informacin dentro de la base de datos. Las presentaciones o vistas (views) son tablas virtuales, como ventanas, a travs de las cuales, vemos informacin almacenada en la base de datos. Los views no contienen informacin propia, pero puede operarse con ellas como si fueran tablas reales. La utilizacin de views tiene tres ventajas: * Simplifica el acceso a la informacin. * Independencia de la informacin. * Privacidad de la informacin. Como ejemplo va a crearse un view como un subconjunto de la tabla completa, que nos muestre solamente algunas columnas de algunos empleados (los del Dpto n[[ordmasculine]] 10).

CREATE VIEW asigna un nombre al view y define su contenido en forma de una bsqueda.

Bsqueda de informacin en un view


Puede utilizarse un view como si de una tabla se tratase. Para recuperar la informacin agrupada en

un view se procese con el comando SELECT:

Asegurar la integridad de la informacin en los views


Cuando hemos creado el view con la clusula WITH CHECK OPTION, Oracle asegura que toda la informacin que se aada a la tabla cumplir la condicin con la que se cre, WHERE DEPTNO='10'. Si intentamos introducir un empleado del dpto 20:

da un error que indica que ese dato es incompatible con las condiciones de construccin del view.

Das könnte Ihnen auch gefallen