You are on page 1of 19

Manual de introduccin SQL -Centro de

Tecnologa Informticaweb1.cti.unav.es/cti/manuales/intro_sql/indice.html
Universidad de Navarra, abril 1996

1.

CONCEPTO DE BASE DE DATOS

2.

EL LENGUAJE DE GESTIN DE BASES DE DATOS SQL

3.

1.

Estructura de una base de datos

2.

Creacin de una tabla

3.

Introduccin de la informacin

4.

Bsqueda de informacin en una tabla

BSQUEDA DE INFORMACIN EN UNA TABLA


1.

Condiciones mltiples para una bsqueda

2.

Bsquedas por palabras incompletas

3.

Cmo se ordena el resultado de una bsqueda

4.

Cmo se evitan las lneas repetidas en un listado

4.

BSQUEDA DE INFORMACIN EN VARIAS TABLAS: JOIN QUERY

5.

EXPRESIONES ARITMTICAS Y FUNCIONES PARA EL MANEJO DE TEXTO

6.

7.

1.

Expresiones aritmticas

2.

Funciones para el manejo de textos

FORMATO DE FECHA Y NMERO


1.

Formato de fecha

2.

Operaciones aritmticas con fechas

FUNCIONES PARA EL MANEJO DE GRUPOS DE FILAS


1.

Condiciones de bsqueda de un grupo de lneas: HAVING

8.

SUBBSQUEDAS O SUBQUERIES

9.

MODIFICACIN DE LA INFORMACIN ALMACENADA


1.

Actualizacin de datos en la tabla

2.

Cmo insertar nuevos registros en una tabla

3.

Borrado de registros de una tabla

10. CAMBIOS EN LA ESTRUCTURA DE UNA BASE DE DATOS

1.

Cmo modificar la capacidad de los datos de una columna

11. VISTAS ALTERNATIVAS DE INFORMACIN


1.

Bsqueda de informacin en un view

2.

Asegurar la integridad de la informacin en los views

CURSO 95/96 Universidad de Navarra

Introduccin a
SQL y ORACLE
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:

obliga a ORACLE a buscar en la informacin de la tabla y


mostrar solo aquellas lneas o registros que cumple la condicin.
WHERE

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:

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

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

asigna un nombre al view y define su contenido en forma


de una bsqueda.
CREATE VIEW

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.

You might also like