Beruflich Dokumente
Kultur Dokumente
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...
* 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.
EMP:
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:
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')
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;
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
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:
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';
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.
donde DESC indica orden descendente (de mayor a menor), y cuyo resultado es el siguiente:
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;
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
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.
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
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
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
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.
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;
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;
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,
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:
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.
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;
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);
se procesa correctamente.
CREATE VIEW asigna un nombre al view y define su contenido en forma de una bsqueda.
da un error que indica que ese dato es incompatible con las condiciones de construccin del view.