Vous êtes sur la page 1sur 24

CURSO 95/96 Universidad de Navarra

Introduccin a
SQL y ORACLE

Centro de Tecnologa Informtica


Ignacio Coupeau, Cristina Pueyo y J ess 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 empl eados tiene los siguientes campos: DNI , Nombr e, Apel l i dos, Edad,
Pobl aci n, Suel do. Los campos DNI , Nombr e y Apel l i dos 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 l a t abl a l os puest os de t r abaj o desempeados y l a ant i gedad del
empl eado con nombr e = Lui s"
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:
" [ [ quest i ondown] ] qu aj ust ador es t r abaj an en Val enci a" ; pero ante otras preguntas
como " [ [ quest i ondown] ] Cunt as per sonas t i ene cont r at adas mi empr esa?" 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 , Nombr e, 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) ,
J OB CHAR( 9) ,
MGR NUMBER( 9) ,
HI REDATE 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 I NSERT:
I NSERT I NTO DEPT VALUES ( 30, ' SALES' , ' CHI CAGO) ;
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 Sel ect 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
Header s( ) especifica que el listado ponga los nombres de las columnas (DNAME, DEPTNO, LOC);
Pr i nt Al l , 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; Header s( ) ; Pr i nt Al l ;
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;
Header s( ) ; Pr i nt Al l ;
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, J OB, SAL FROM EMP
WHERE J OB = ' 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 cl er ck (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 I N permite seleccionar lneas cuyo campo contenga uno de los valores de una lista
especificada entre parntesis:
SELECT * FROM DEPT WHERE DEPTNO I N ( 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 LI KE ' __R%' ;
Header s( ) ;
Pr i nt Al l ;

En este ejemplo se utiliza el operador LI KE 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, I N y LI KE, 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 J OB, SAL, ENAME
FROM EMP
ORDER BY J OB, SAL DESC;
Header s( ) ;
Pr i nt Al l ;
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 J OB
FROM EMP;
Header s( ) ;
Pr i nt Al l ;

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
DI STI NCT al escribir la bsqueda:
SELECT DI STI NCT J OB FROM EMP;
Header s( ) ; Pr i nt Al l ;

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=' KI NG' AND EMP.DEPTNO =DEPT.DEPTNO;
Header s( ) ;
Pr i nt Al l ;

busca los empleados en la tabla EMP cuyo nombre es KI NG 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 ' KI NG' , 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 J OB=' SALESMAN' ;
Header s( ) ;
Pr i nt Al l ;

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
' SCHMI DT' :
SELECT ENAME FROM EMP
WHERE SOUNDEX( ENAME) =SOUNDEX( ' SCHMI DT' ) ;
Header s( ) ; Pr i nt Al l ;

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 (HI REDATE 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( nombr e_de_col umna name, f or mat o) .
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, J OB,
TO_CHAR( HI REDATE, ' DY DD MON YYYY' ) HI REDATE
FROM EMP WHERE DEPTNO = 20;
Header s( ) ; Pr i nt Al l ;

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 HI REDATE+
4500 suma 4500 das a la fecha. La consulta muestra aquellos registros cuya fecha HI REDATE 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;
Header s( ) ; Pr i nt Al l ;

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, J OB, SUM( SAL) ,
COUNT( *) ,
AVG( SAL)
FROM EMP, DEPT
WHERE EMP. DEPTNO=DEPT. DEPTNO
GROUP BY DNAME, J OB;
Header s( ) ; Pr i nt Al l ;

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 HAVI NG 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, J OB, SUM( SAL) , COUNT( *) , AVG( SAL)
FROM EMP
WHERE EMP. DEPTNO = DEPT. DEPTNO
GROUP BY DNAME, J OB
HAVI NG COUNT( *) >=2
Header s( ) ; Pr i nt Al l ;

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

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) ;
Header s( ) ; Pr i nt Al l ;

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.
* I NSERT: 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 J OB=' CLERCK' ;
Header s( ) ; Pr i nt Al l ;
un mensaje confirmar que la actualizacin ha tenido lugar.
Cmo insertar nuevos registros en una tabla
El comando I NSERT 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 PROMOCI N, 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:
I NSERT I NTO PROMOCI ON ( ENAME, J OB, SAL, COMM)
SELECT ENAME, J OB, 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 Del et e y se puede utilizar con wher e 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,
I NSERT 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 MODI FY: 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 ( PROJ NO NUMBER( 3) NOT NULL,
PNAME CHAR( 5) , BUDGET NUMBER( 7, 2) ) ;
En segundo lugar, con el comando I NSERT, 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 ;
Header s( ) ; Pr i nt Al l ;

Finalmente para que puedan hacerse bsquedas relacionales sobre las tablas PROY y EMP, debe
aadirse una columna a EMP denominada nmero de proyecto (PROJ NO), para que las tablas tengan
alguna columna en comn. Con este fin se utiliza el comando ALTER TABLE:
ALTER TABLE EMP ADD ( PROJ NO 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;
Header s( ) ; Pr i nt Al l ;

Como ejemplo del comando UPDATE, van a asignarse todos los empleados del Depto 20 y todos los
vendedores al proyecto 101:
UPDATE EMP SET PROJ NO=101 WHERE DEPTNO =20 OR J OB=' SALESMAN'
9 r ecor ds updat ed.
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 PROJ NO=102
WHERE PROJ NO I S NULL;
5 r ecor ds updat ed

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, J OB, DEPTNO, PNAME
FROM EMP, PROJ WHERE EMP. PROJ NO = PROJ . PROJ NO;
Header s( ) ; Pr i nt Al l ;

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 MODI FY BUDGET NUMBER( 8, 2) ;
y aparece: 1 r ecor d updat ed.
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 VI EWasigna 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 WI TH CHECK OPTI ON, 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.

Vous aimerez peut-être aussi