Sei sulla pagina 1di 142

4.

CAPITULO IV SQL: UN LENGUAJE DE BASES DE DATOS RELACIONAL


4.1 Qu es SQL?

En la figura 4.1 se muestra a SQL como el lenguaje de base de datos relacional SQL. Incluye: a) DDL: Lenguaje de definicin de datos b) DML: Lenguaje de manipulacin de datos c) DCL: Lenguaje de control de datos d) Lenguaje inserto

a) Lenguaje de definicin de datos Permite definir o eliminar objetos de la base de datos, tales como tablas o vistas. Ejemplo: Alter, Create, Drop, Grant, Revoke. DDL = Data Definition Language.

b) Lenguaje de manipulacin de datos Permite consultar y actualizar los datos existentes en la base de datos. Ejemplo: Select, Insert, Delete, Update. DML = Data Manipulation Language.

c) Lenguaje de control de datos Permite controlar los cambios a los datos y a la base de datos. Ejemplo: Commit, Rollback, Savepoint (Transacciones) DCL = Data Control Language.

d) Lenguaje inserto (Embedded Language ) Ejemplo: Operaciones asociadas a un cursor: OPEN, CLOSE, FETCH

PDF created with pdfFactory Pro trial version www.pdffactory.com

4.

Versiones estndares de SQL: SQL1 ANSI 1986 SQL2 (SQL-92) ANSI 1992 SQL3 Incluye conceptos de orientacin al objeto

Fig. 4.1. SQL: Lenguaje de base de datos relacional

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. Comandos SQL Lenguaje de definicin de datos (DDL) Alter Create Drop Grant Rename Revoke

Lenguaje de manipulacin de datos (DML) Select Insert Delete Update

Lenguaje de control de datos (DCL) Commit Rollback Savepoint

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 4.2 Contenido de las tablas utilizadas en los ejemplos

a) Tablas de la base de datos Hospital Tabla ENFERMO Inscripcin Apellido 10995 18004 14024 36658 38702 39217 59076 63827 64823 74835 Laguia M. Serrano V. Fernandez M. Domin S. Neal R. Cervantes M. Miller G. Ruiz P. Fraser A. Benitez E. Direccin Goya 20 Alcala 12 Recoletos 50 Mayor 71 Orense 11 Peron 38 Lpez de Hoyos 2 Esquerdo 103 Soto 3 Argentina 5 Fecha_Nac S NSS 280862482 284991452 321790059 160654471 380010217 440294390 311969044 100973253 285201776 154811767

16-MAY-56 M 21-MAY-60 F 23-JUN-67 01-JAN-42 18-JUN-40 29-FEB-52 16-SEP-45 26-DEC-80 10-JUL-80 05-OCT-57 F M F M F M F M

Tabla HOSPITAL Hospital_Cod 13 18 22 45 Nombre Provincial General La Paz San Carlos Direccin O Donell 50 Atocha s / n Castellana 1000 Ciudad Universitaria Telfono 964-4264 595-3111 923-5411 597-1500 Num_Cama 502 987 412 845

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. Tabla SALA Hospital_Cod 13 13 18 18 22 22 22 45 45 45 Sala_Cod Nombre 3 6 3 4 1 6 2 4 1 2 Cuidados Intensivos Psiquitrico Cuidados Intensivos Cardiologa Recuperacin Psiquitrico Maternidad Cardiologa Recuperacin Maternidad Num_Cama 21 67 10 53 10 118 34 55 13 24

Tabla PLANTILLA Hospital_Cod Sala_Cod Empleado_No 13 13 18 22 22 22 22 22 45 45 6 6 4 6 6 2 1 1 4 1 3754 3106 6357 1009 8422 9901 6065 7379 1280 8526 Apellido Daz B. Funcin Enfermera T T T T T Salario 2262000 2750000 3379000 2005000

Hernandez J. Enfermero Karplus W. Higueras D. Bocina G. Nez C. Rivera G. Carlos R. Amigo R. Frank H. Interno Enfermera Enfermero Interno Enfermera Enfermera Interno Enfermera

M 1638000 M 2210000 N T N T 1626000 2119000 2210000 2522000

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. Tabla DOCTOR Hospital_Cod 13 18 18 22 22 22 45 45 Doctor_No 435 585 982 453 398 386 607 522 Apellido Lpez A. Miller G. Cajal R. Galo D. Best K. Cabeza D. Nino P. Adams C. Especialidad Cardiologa Ginecologa Cardiologa Pediatra Urologa Psiquiatra Pediatra Neurologa

b) Tablas de la base de datos Empresa

Tabla EMP Emp_No Apellido 7369 7499 7521 7566 7654 7693 7782 7788 7839 7844 7876 7900 7902 7934 Snchez Arroyo Salas Jimenez Martin Negro Cerezo Gil Rey Tovar Alonso Jimenez Fernandez Muoz Oficio Empleado Vendedor Vendedor Director Vendedor Director Director Analista Presidente Vendedor Empleado Empleado Analista Empleado Dir Fecha_Contr Salario 104000 208000 162500 386750 182000 370500 318500 390000 650000 195000 143000 123500 390000 169000 Comisin Dept_No 20 39000 30 65000 30 20 182000 30 30 10 20 10 0 10 20 30 20 10

7902 17-DEC-80 7698 20-FEB-81 7698 22-FEB-81 7839 02-APR-81 7698 28-SEP-81 7839 01-MAY-81 7839 09-JUN-81 7566 30-MAR-87 17-NOV-81 7698 08-SEP-81 7788 03-MAY-87 7698 03-DEC-81 7566 03-DEC-81 7782 23-JAN-82

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. Tabla DEPT Dept_No 10 30 20 40 Dnombre Contabilidad Investigacin Ventas Produccin Loc Sevilla Madrid Barcelona Bilbao

c) Tablas de la base de datos de Universidad Tabla STUDENT Stu_Id S001 S002 S003 S004 S005 S006 S007 S008 S009 S010 Student_Name Wendy Jones Sam Wales Cathy Smith Dottie Stacy Jay Langer Amy Lopez Sam Watson Tammy Redd Address 125 Maple Ave 3006 Navajo Cl 1600 Penn Ave 10 Downing St 4 Golf Course Rd 123 Sun Ray Rd 225 Test Drive 113 Manchester Birthdate 10/25/65 1/10/60 2/22/22 3/31/67 4/19/65 5/10/64 6/09/63 7/01/60 8/24/67 9/30/66 Gender Female Male Female Female Male Female Male Female Male Male

Tommy Wadkins 3 Apple Tree Dr Ben Trevino 300 Bowling Alley

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. Tabla COURSE Course_Id CSC100 CSC100 CSC200 CSC200 ACC200 ACC201 HIS200 Course_title Introduction to Computing Introduction to Computing Pascal Programming Pascal Programming Principles of Accounting I Section 1 2 1 2 1 Stu_Id S001 S002 S001 S003 S001 S004 S005 Fac_Id J01 S01 D01 S01 J02 J02 N01

Principles of Accounting II 1 History of Pirogues 1

Tabla FACULTY Fac_Id J01 S01 D01 J02 N01 Faculty_Name Department Gender Male Female Female Male Male Salary 40,000 45,000 34,500 35,000 28,000

Raymond J, Johnson Comp. Sci Wendy Swimmer Amy Dancer Bob Jones Jack Nelson Comp. Sci Comp. Sci Accounting History

Ejemplo: La informacin en una tabla puede estar relacionada con la informacin de otra. En la figura 4.2, cada empleado en la tabla EMP tiene un nmero de departamento (DEPTNO) que se refiere al nmero del departamento en la tabla DEPT. Smith trabaja en el departamento 20, y el departamento 20 es el departamento Research en Dallas.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4.

Fig. 4.2 Relacin existente entre las tablas EMP y DEPT.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 10 4.3 Consulta de los datos: Instruccin SELECT Formato General:

SELECT... FROM... WHERE... GROUP BY... HAVING... ORDER BY...

Formato Bsico: SELECT Ri1.A1,...,Rir.Ar FROM R1,.....,RK WHERE

Equivalente en lgebra relacional a: Ri1.A1,....,Rir.Ar( , (R1xR2x....xRk) ) Ejemplo: SELECT A, B, C, D FROM T1, T2 WHERE A>B

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 11 Consulta de los datos Visin General Todas las consultas son realizadas con una nica sentencia, la sentencia SELECT. El usuario utiliza la sentencia SELECT al nivel de complejidad apropiado para l. Las consultas simples son realmente muy sencillas de realizar. El grado potencial de complejidad es ilimitado. El usuario especifica QUE es lo que quiere obtener, no DONDE ni COMO. La consulta a los datos se realiza por asociacin de valores, no por localizacin.

Crear y utilizar alias de columnas Cuando se consulta la Base de Datos, los nombres de las columnas se usan como cabeceras de presentacin. Si ste resulta demasiado largo, corto o crptico, puede cambiarse con la misma sentencia SQL de consulta creando un ALIAS.

Ejemplo: SQL>SELECT DNOMBRE Departamento, DEPT_NO Nmero Departamento FROM dept; El encabezamiento del resultado es: Departamento Nmero Departamento

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 12 La sintaxis general de la instruccin SELECT, se muestra en la figura 4.3.

* SELECT <expr_ columna> , WHERE <Predicado> FROM <Tabla>

GROUP

BY

<expr_ columna> ,

HAVING

<Predicado>

ORDER

BY

<expr_ columna>

ASC

DESC ,

Fig. 4.3 Sintaxis de la instruccin SELECT

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 13 Seleccin a nivel de fila SELECT FROM WHERE

La figura 4.4 presenta una sintaxis simplificada del SELECT, donde: Sirve para elegir ciertas columnas o valores derivados de ellas. Especifica una lista de tablas. Los valores de los campos especificados deben cumplir una o varias condiciones, por cada fila de la tabla. ORDER BY Especifica el criterio de ordenacin basado en los valores de los datos recuperados o de otros derivados de ellos. Ejemplo: SELECT FROM WHERE ORDER BY apellido, direccin enfermo s = F apellido;

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 14 * SELECT <expr_ columna> , FROM <Tabla> ,

WHERE

<Predicado>

ORDER

BY

<expr_ columna>

ASC

DESC , Fig. 4.4 Seleccin a nivel de fila

Seleccin de columnas Se va a trabajar con las tablas EMP y DEPT

Seleccin de todas las columnas de una tabla: Solucin 1: SQL> SELECT EMP_NO, APELLIDO, OFICIO, DIR, FECHA_CONTR, SALARIO, COMISION, DEPT_NO FROM EMP;

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 15 Solucin 2: SQL> SELECT * FROM EMP;

Seleccin de determinadas columnas

SQL> SELECT DNOMBRE, DEPT_NO FROM DEPT;

Clusula FROM Define las tablas de las cuales se van a seleccionar las columnas. Utiliza nombre_usuario.nombre_tabla, si el usuario no es el propietario de la tabla. Ejemplo: SELECT FROM apellido nombres de Juan Juan.enfermo;

Puede asociar un nuevo nombre a las tablas para propsitos de consulta (sinnimo temporal). SELECT FROM WHERE enfermo.inscripcin, enfermo.apellido enfermo inscripcin = 63827;

SELECT FROM WHERE

e.inscripcin, e.apellido enfermo e inscripcin = 63827;

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 16 Clusula WHERE La complejidad del criterio de bsqueda es prcticamente ilimitada. Operadores de comparacin: Aritmticos: =, <, > De caracteres: LIKE Lgicos: IN Pueden construirse criterios de bsqueda mltiples usando los operadores lgicos booleanos estndares: AND, OR, NOT. Se pueden emplear parntesis para forzar el orden de evaluacin. Algunos ejemplos de predicados son: 5 = emp_no SUM(salario) >= 1000000 (ROUND(salario) / 12 ) + 100) <= MIN (dept_no = 5) AND (apellido = Garca)

Clusula ORDER BY Especifica el criterio de clasificacin del resultado de la consulta. Aunque por defecto la secuencia es ascendente, se puede especificar secuencia descendente. Para cdigos ASCII: 0 a 9, A a Z (de izquierda a derecha, carcter a carcter). Para nmeros: - Infinito a + Infinito. Para cdigos EBCDIC: A a Z, 0 a 9. Los valores nulos son siempre presentados al principio. Puede contener expresiones con valores de columnas. Pueden anidarse tambin los criterios. El de ms a la izquierda ser el principal.

Ejemplo: ORDER BY sala_cod, hospital_cod DESC ORDER BY mod(empleado_no, 6) ORDER BY 2

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 17 SELECT DISTINCT La opcin DISTINCT eliminar las filas duplicadas del conjunto resultado de una consulta.

SELECT [DISTINCT] FROM ... WHERE....

La operacin se realizar sobre el conjunto de columnas a seleccionar Por ejemplo: Select funcion from plantilla Enfermero Enfermera Interno Enfermero Enfermera Interno Enfermero Enfermero Interno Enfermero Select funcion, from plantilla Enfermero Enfermera Interno Enfermero Enfermera Interno Enfermero Enfermero Interno Enfermero turno

T T T M M M N T N T

SELECT DISTINCT funcin FROM plantilla

SELECT DISTINCT funcin, turno FROM plantilla

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 18

Enfermero Enfermera Interno

Enfermero Enfermera Interno Enfermero Enfermera Interno Enfermero Interno

T T T M M M N N

4.4 Operadores 4.4.1 Operadores aritmticos Utilizables para formar expresiones con constantes, valores de columnas y funciones de valores de columnas. + * / Ejemplo: SELECT col1 * col2, col1 col2 FROM tabla1 Suma Resta Multiplica Divide

WHERE col1 + col2 = 34;

4.4.2 Operadores de Comparacin a) Comparacin general = != > >= < <= Igual a No igual a (tambin < >, ^=, y otros, dependiendo del tipo de terminal) Mayor que Mayor o igual que Menor que Menor o igual que

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 19 Ejemplos: SELECT FROM WHERE salario, comisin vendedor comisin > salario;

SELECT FROM WHERE

apellido, direccin enfermo apellido > A AND apellido < B;

b) Comparacin de cadenas de caracteres [NOT] LIKE LIKE permite utilizar los siguientes caracteres especiales en las cadenas de comparacin: % cualquier cadena de 0 ms caracteres _ cualquier carcter

Ejemplos: LIKE Director LIKE M% LIKE %X% LIKE _ _ M LIKE N_ LIKE _R% la cadena Director cualquier cadena que empiece con M cualquier cadena que contenga una X cualquier cadena de 3 caracteres terminada en M cualquier cadena de 2 caracteres que empiece con N cualquier cadena cuyo segundo carcter sea una R

Las maysculas y minsculas son significativas, esto es, m no es lo mismo que M. Las constantes alfanumricas deben siempre encerrarse entre comillas simples ( ).

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 20 c) Comparacin lgica [NOT] BETWEEN valor_1 AND valor_2 [NOT] IN (lista_de_valores_entre_comas) IS [NOT] NULL <general> ANY <general> ALL

= ANY != ANY

es equivalente a IN es equivalente a NOT IN

Ejemplos: SELECT FROM WHERE apellido, salario plantilla salario BETWEEN 1000000 AND 2000000;

SELECT FROM WHERE

apellido, fecha_nac enfermo apellido BETWEEN A AND B AND fecha_nac BETWEEN 01-JAN-35 AND 31-DEC-45;

SELECT FROM WHERE

apellido emp dept_no IN (30,40);

SELECT FROM WHERE

apellido vendedor comision IS NULL;

SELECT FROM WHERE

apellido emp dept_no != ALL (10,20,80);

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 21 4.5 Funciones Se utilizan dentro de expresiones y actan con los valores de las columnas, variables o constantes. En: Clusulas SELECT Clusulas WHERE Clusulas ORDER BY Pueden emplearse funciones de funciones. Es posible el anidamiento. Existen los siguientes tipos de funcin: Aritmticas De cadenas de caracteres De conversin De grupo Otras funciones

4.5.1 Funciones aritmticas ABS (n) Valor absoluto de n

CEIL (n)

Entero inmediatamente superior o igual a n

FLOOR (n)

Entero inmediatamente inferior o igual a n

MOD (m,n)

Resto de dividir m entre n SELECT MOD(inscripcion, nss) FROM enfermo;

Devolver el resto de la divisin del nmero de registro del paciente por su nmero de seguridad social.

POWER (m,n)

m elevado a la potencia de n SELECT POWER (inscripcion, 2) Potencias, inscripcin FROM enfermo;

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 22 ROUND (n, [,m]) n redondeado a m decimales; si se omite, m toma el valor 0 por defecto. m puede ser negativo para el redondeado de dgitos a la derecha del punto decimal. SELECT FROM ROUND(1.5634,1) dual;

Redondear el nmero a un dgito decimal: 1.6

SIGN(N)

Si n < 0 : Si n = 0 : Si n > 0 :

-1 0 +1

SQRT(n)

Raz cuadrada de n Si n < 0 : NULL

TRUNC(n, [,m])

n truncado a m decimales; si se omite, m toma el valor de 0 por defecto. m puede ser negativo para truncar (hacer 0) los dgitos a la derecha del punto decimal. SELECT TRUNC(1.54344, 1) FROM dual; Truncar el nmero a un dgito decimal, 1.5

4.5.2 Manipulacin de datos de conjuntos y funciones de conjuntos a) Seleccin de conjuntos Antes de mostrar las funciones de conjuntos, es necesario ver como se manipulan los datos de conjuntos. Para manipular datos de conjuntos, el select tiene la sintaxis de la figura 4.5.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 23

*
SELECT <expr_ columna> FROM <Tabla>

WHERE

<Predicado>

GROUP

BY

<expr_ columna>

,
HAVING <Predicado>

ORDER

BY

<expr_ columna>

ASC

DESC

,
Fig. 4.5 Sintaxis del select para la seleccin de conjuntos

v Se utiliza para calcular propiedades de uno o ms conjuntos de filas. v Si es ms de un conjunto el seleccionado, el GROUP BY controla que las filas de la tabla original sean agrupadas en una temporal.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 24 v La clusula HAVING se emplea para controlar cul de esos conjuntos se visualiza. v La evaluacin de las clusulas en tiempo de ejecucin se efecta en el siguiente orden: WHERE GROUP BY HAVING ORDER BY

Filtra las filas

Crea una tabla de grupo nueva

Filtra los grupos

Clasifica la salida

b) Funciones de conjuntos Las siguientes son funciones de conjuntos: AVG(n) Valor medio de n (ignorando los valores nulos).

COUNT( { * | expr } ) Nmero de veces que expr evala algn dato con valor no nulo. La opcin * cuenta todas las filas seleccionadas.

MAX(expr) Mximo valor de expr.

MIN(expr) Mnimo valor de expr.

STDDEV(expr) Desviacin estndar de expr sin tener en cuenta los valores nulos.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 25 SUM(expr) Suma de valores de expr.

VARIANCE(expr) Varianza de expr sin tener en cuenta los valores nulos.

Ejemplos: SELECT FROM GROUP BY HAVING AVG(salario) plantilla hospital_cod AVG(salario) > 200000

SELECT

MAX(salario), MIN(salario), MAX(salario) MIN(salario)

FROM

plantilla

SELECT FROM

SUM(salario) / COUNT(salario) plantilla

SELECT FROM

COUNT(DISTINCT funcion) plantilla

SELECT FROM WHERE GROUP BY HAVING ORDER BY

sala_cod, AVG(salario), COUNT(*) plantilla hospital_cod = 22 sala_cod avg(SALARIO) >= 170000 sala_cod

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 26 Observaciones: v En la clusula SELECT slo pueden aparecer funciones de conjuntos y columnas incluidas en la clusula GROUP BY v Estas funciones se pueden utilizar con las clusulas DISTINCT y ALL. v Los valores nulos no participan en el clculo de las funciones de conjuntos

Por lo tanto: y

SELECT AVG(salario) SELECT SUM(salario) / COUNT(*)

no siempre dan el mismo resultado.

4.5.3 Funciones de caracteres Despliegue de literales Los strings de literales pueden ser desplegados como parte de la salida del comando SELECT, colocando los literales entre comillas simples. SQL > SELECT El miembro de la facultad con el sueldo ms bajo es, FACULTY_NAME 2 3 FROM FACULTY WHERE SALARY = (SELECT MIN (SALARY) FROM FACULTY);

ELMIEMBRODELAFACULTADCONELSUELDOMASBAJOES El miembro de la facultad con el sueldo ms bajo es SQL > SET HEADING OFF SQL > /

FACULTY-NAME JACK NELSON

El miembro de la facultad con el sueldo ms bajo es JACK NELSON

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 27 SQL > SELECT El miembro de la facultad con el sueldo ms bajo es , 2 3 4 FACULTY_NAME FROM FACULTY WHERE SALARY = (SELECT MIN (SALARY) FROM FACULTY);

FACULTY-NAME El miembro de la facultad con el sueldo ms bajo es JACK NELSON

Expresiones de caracteres La nica operacin de expresiones de caracteres es la concatenacin. La concatenacin une dos valores strings en un nico string. El operador de concatenacin es la doble barra vertical (||). Por ejemplo, si queremos dejar juntos dos strings HOCKEY y PUCK en un nico string, debemos hacer lo siguiente: HOCKEY || ||PUCK HOCKEY PUCK

Los strings concatenados pueden ser usados en cualquier lugar en que una variable pueda ser usada en un comando SQL. Tal vez el propsito ms til de la concatenacin es al desplegar nombres. Por ejemplo, suponga que se tienen los nombres y los apellidos de los estudiantes almacenados en atributos separados, como sigue: SQL > SELECT FIRST_NAME, LAST_NAME FROM NAME_TABLE;

FIRST_NAME MADALINE

LAST_NAME JONES

Suponga ahora que se quiere desplegar el nombre y el apellido en orden inverso separados por una coma. Se puede hacer esto muy fcilmente con el operador de concatenacin.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 28 SQL > SELECT LAST_NAME||, ||FIRST_NAME FULL NAME 2 FROM NAME_TABLE

FULL NAME JONES, MADALINE Notar que tambin se puede cambiar el atributo de la cabecera. Si no se hace, ORACLE podra haber usado la expresin completa como atributo de cabecera.

Funciones de caracteres Las funciones de caracteres que existen son:

Nombre de la funcin Valor ms largo

Sintaxis GREATEST

Argumento(s) string1 [, string2...]

Resultado(s) Determina el string

ms grande de una lista. Mayscula inicial INITCAP string Pone la primera letra del string en

mayscula. Bsqueda de substring INSTR string, substring [, Busca en el string la Nth ocurrencia del

start [, n]]

substring, empezando de la posicin start. Valor ms pequeo LEAST string1 [, string2...] Determina el string

ms pequeo de una lista. Largo de un string LENGHT string Determina el largo del string. Minscula LOWER string Convierte el string a minscula.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 29 Relleno Izquierdo LPAD String, length [, character] Retorna rellenando izquierda string, por la

hasta una

longitud length, con la secuencia caracteres en character. Relleno Derecho RPAD string, lenght [, character] Retorna rellenando derecha string, por hasta la una de contenida

cantidad de longitud en la secuencia de caracteres en caracter Remueve caracteres desde el lado izquierdo del string LTRIM string, charset Remueve caracteres especificados en los contenida

charset, desde el lado izquierdo del string. Remueve caracteres RTRIM string, charset Remueve caracteres especificados en los

desde el lado derecho del string

charset, desde el lado derecho del string. Parea strings con sonidos SOUNDEX similares Substring SUBSTR string, start [, length] String Parea strings de

sonidos similares. Extrae una porcin del string, comenzando en la posicin start, con una longitud length de caracteres..

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 30 Convierte un string TO_NUMBER string Convierte un string de caracteres a un valor numrico. Traslada desde un conjunto de caracteres a otro TRANSLATE string, to-set from-set, Retorna char, contadas las cada ocurrencias carcter de en

from-set reemplazadas por su correspondiente carcter en to-set Mayscula UPPER string Convierte todos los caracteres del string a maysculas.

Ejemplos: Se usar la tabla STUDENT para ilustrar el uso de las funciones de caracteres.

STU_ID S001 S002 S003 S004 S005 S006 S007 S008 S009 S010

STUDENT_NAME WENDY JONES SAM WALES CATHY SMITH DOTTIE STACY JAY LANGER AMY LOPEZ SAM WATSON TAMMY REDD TOMMY WADKINS BEN TREVINO

ADDRESS 125 MAPLE AVE 3006 NAVAJO CL 1600 PENN AVE 10 DOWNING ST GOLF COURSE RD 123 SUN RAY RD 225 TEST DRIVE

BIRTHDATE 25-OCT-65 10-JAN-60 22-FEB-62 31-MAR-67 19-APR-65 10-MAY-64 09-JUN-63

GENDER FEMALE MALE FEMALE FEMALE MALE FEMALE MALE FEMALE MALE MALE

113 MANCHESTER 01-JUL-60 APPLE TREEE DR BOWLING ALLEY 24-AUG-67 30-SEP-66

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 31 1. Cul es el valor ms grande, el stu_id o S005?. cul es el ms pequeo? SQL > SELECT STU_ID, GREATEST (STU_ID, S005) LARGEST, 2 3 LEAST (STU_ID, S005) SMALLEST FROM STUDENT;

STU-ID S001 S002 S003 S004 S005 S006 S007 S008 S009 S010

LARGEST S005 S005 S005 S005 S005 S006 S007 S008 S009 S010

SMALLEST S001 S002 S003 S004 S005 S005 S005 S005 S005 S005

2. Desplegar los valores nicos del sexo, en que slo la primera letra est mayscula, el string completo en mayscula y el string completo en minscula. SQL > SELECT DISTINCT GENDER, 2 3 4 5 INITCAP (GENDER) FIRST LETTER, UPPER (GENDER) UPPER, LOWER (GENDER) LOWER FROM STUDENT;

GENDER FEMALE MALE

FIRSTLETTER Female Male

UPPER FEMALE MALE

LOWER female male

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 32 3. Qu tan largo es cada nombre de estudiante? SQL > SELECT STUDENT_NAME, LENGTH(STUDENT_NAME) LENGTH 2 FROM STUDENT;

STUDENT_NAME WENDY JONES SAM WALES CATHY SMITH DOTTIE STACY JAY LANGER AMY LOPEZ SAM WATSON TAMMY REDD TOMMY WADKINS BEN TREVINO

LENGTH 11 9 11 12 10 9 10 10 13 11

10 records selected

4. Buscar en cada nombre de estudiante si contiene la letra e. Si cumple con la condicin, desplegar la posicin donde se encuentra la primera e. Si no desplegar un cero. Ejecutar tres bsquedas. La primera bsqueda comenzar en la primera posicin de STUDENT_NAME. La segunda comenzar en la posicin 6, y la tercera, despus de la segunda ocurrencia de una e. SQL > SELECT STUDENT_NAME, 2 3 4 5 INSTR (STUDENT_NAME, E) FIRST, INSTR (STUDENT_NAME, E, 6) AFTER FIVE, INSTR (STUDENT_NAME, E, 1,2) SECOND FROM STUDENT;

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 33 STUDENT_NAME WENDY JONES SAM WALES CATHY SMITH DOTTIE STACY JAY LANGER AMY LOPEZ SAM WATSON TAMMY REDD TOMMY WADKINS BEN TREVINO FIRST 2 8 0 6 9 8 0 8 0 2 AFTER FIVE 10 8 0 6 9 8 0 8 0 7 SECOND 10 0 0 0 0 0 0 0 0 7

10 Records selected

5. Crear un histograma con el nmero de letras en cada nombre de estudiante. SQL > COLUMN HISTOGRAM FORMAT A25 SQL > SELECT STUDENT_NAME, 2 3 LENGTH (STUDENT_NAME) LENGTH, LPAD ( , LENGTH(STUDENT_NAME) + 1, *) HISTOGRAM

4 FROM STUDENT;

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 34 STUDENT_NAME WENDY JONES SAM WALES CATHY SMITH DOTTIE STACY JAY LANGER AMY LOPEZ SAM WATSON TAMMY REDD TOMMY WADKINS BEN TREVINO LENGTH 11 9 11 12 10 9 10 10 13 11 HISTOGRAM *********** ********* *********** ************ ********** ********* ********** ********** ************* ***********

10 Records selected.

El comando LPAD es interpretado de la siguiente manera. Crea un atributo virtual de 25 caracteres en blanco (debido al comando COLUMN) y los rellena con asteriscos (LENGTH de STUDENT_NAME), comenzando desde el lado izquierdo del atributo. 12 * * 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 11

Naturalmente, si se hubiese usado la funcin RPAD, los asteriscos comienzan en el lado derecho del histograma.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 35 4.5.4 Otras funciones a) La Funcin DECODE La funcin DECODE es una funcin especial que puede ser usada con cualquier tipo de datos. Su propsito es convertir un valor de input a un valor especificado de output. El formato de la funcin DECODE es: DECODE (atributo-entrada, [, valor1_atributo-entrada, valor1_atributo-salida, ...] valor-salida-defecto)

Ejemplos: SQL> REMARK .... Se cambia un valor, tal que se pueda ilustrar SQL> REMARK ... un valor invlido SQL> UPDATE STUDENT SET GENDER = MAIL 2 WHERE STUDENT_NAME = SAM WALES;

1 Registro actualizado

SQL> SELECT STUDENT_NAME, GENDER, 2 3 4 DECODE (GENDER, MALE, BOY, FEMALE, GIRL,ERROR') DECODE FROM STUDENT;

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 36 STUDENT_NAME WENDY JONES SAM WALES CATHY SMITH DOTTIE STACY JAY LANGER AMY LOPEZ SAM WATSON TAMMY REDD TOMMY WADKINS BEN TREVINO GENDER FEMALE MAIL FEMALE FEMALE MALE FEMALE MALE FEMALE MALE MALE DECODE GIRL ERROR GIRL GIRL BOY GIRL BOY GIRL BOY BOY

10 Registros seleccionados

SQL> REMARK ... Arreglar el error

SQL>UPDATE STUDENT SET GENDER = MALE 2 WHERE STUDENT_NAME = SAM WALES; 1 Registro actualizado.

SQL> SELECT COURSE_TITLE, SECTION, 2 3 4 5 DECODE (SECTION, 1, ONE, 2, TWO, 3, THREE, TOO MANY) IN WORDS FROM COURSE;

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 37 COURSE_TITLE INTRODUCTION TO COMPUTING INTRODUCTION TO COMPUTING PASCAL PROGRAMMING PASCAL PROGRAMMING PRINCIPLES OF ACCOUNTING I PRINCIPLES OF ACCOUNTING II HISTORY OF PIROGUES SECTION 1 2 1 2 1 1 1 IN WORDS ONE TWO ONE TWO ONE ONE ONE

SQL> SELECT COURSE_TITLE, SECTION, 2 3 DECODE (SECTION, 1, COURSE.FAC_ID, 2, FACULTY_NAME, OOPS) OUTPUT

4 FROM COURSE, FACULTY 5 WHERE COURSE.FAC_ID=FACULTY.FAC_ID;

COURSE_TITLE

SECTION 1 2 2 1 1 1 1

OUTPUT J01 WENDY SWIMMER WENDY SWIMMER D01 J02 J02 N01

INTRODUCTION TO COMPUTING INTRODUCTION TO COMPUTING PASCAL PROGRAMING PASCAL PROGRAMING PRINCIPLES OF ACCOUNTING I PRINCIPLES OF ACCOUNTING II HISTORY OF PIROGUES

b) Funciones relacionadas con la fecha b.1) Dato DATE

El tipo de datos DATE es un tipo de dato que es de entrada y salida en el formato DD-MONYY, donde DD representa un entero de dos dgitos que especifica el da del mes, MON representa una abreviacin de tres caracteres en mayscula del mes, YY representa los ltimos dos dgitos del ao, como en 19YY.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 38 El tipo de dato DATE contiene realmente la fecha y la hora. Por defecto, la parte de la hora no es desplegado en el formato de salida. Cuando se ingresa cualquier fecha, y no se especifica la hora, la hora por defecto es 12:00 A.M., la que se ingresa en el atributo fecha. El valor por defecto de la hora puede ser cambiado va una funcin de formateo de entrada especial. Tambin se pueden realizar algunas funciones aritmticas de fecha sobre atributos fecha. Estas operaciones aritmticas incluyen: agregar valores a fechas, restar valores de fechas, restar dos fechas entre s, etc. Recordar que la fecha y la hora actual pueden ser accesadas con la funcin SYSDATE.

ORACLE tiene una coleccin de funciones que pueden ser usadas para manipular fechas.

b.2)

Funciones que manejan fechas Argumento(s) Resultados

Nombre de funcin Sintaxis Agrega meses a la fecha ADD_MONTHS

Date, Integer number Agrega un nmero de meses a la

fecha. El nmero de meses puede ser positivo o

negativo. Cuntos meses hay entre dos fechas MONTHS_BETWEEN Date1, Date2 Determina cuntos meses hay entre los valores de las fechas. ltimo da del mes LAST_DAY Date Determina el

ltimo da del mes para la fecha

especificada.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 39 Siguiente da de la semana, despus de la fecha especificada NEXT_DAY Date, Dayname Determina siguiente del da el nombre de la

semana.

Aproxima el da

ROUND

Date

Redondea la fecha al da ms cercano.

Trunca el da

TRUNC

Date

Trunca la fecha al da ms cercano.

Formatea una fecha

TO_CHAR

Date, Format mask

Cambia el formato de salida por

defecto. Formatea una fecha TO_DATE Date, Format mask Cambia el formato de entrada por

defecto.

b.3)

La funcin TO-CHAR

El formato de la funcin TO-CHAR es: TO_CHAR (DATE, FORMAT MASK)

Mscaras para fechas en la funcin TO-CHAR Formato de la mscara CC SCC Significado Los primeros dos dgitos del siglo. Ejemplo(s) 19

Los primeros dos dgitos del siglo 19, -19 con signo.

Y, YYY

El ao desplegado con una coma 1,987 entre los primeros dos dgitos.

SY, YYY

El ao desplegado con signo con -1,987 una coma entre los primeros dos dgitos.

YYYY

Ao sin signo.

1987

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 40 YYY YY Y Q WW W MM DDD DD D J DAY MONTH Los ltimos tres dgitos del ao. Los ltimos dos dgitos del ao. El ltimo dgito del ao. El nmero de cuartos del ao. El nmero de semana del ao. El nmero de semana del mes. El nmero del mes. El da del ao. El da del mes. El da de la semana. La fecha juliana. El da de la semana en palabras. El mes del ao en palabras. 987 87 7 1, 2, 3 4 1, 2, ........, 52 1, 2, ........., 5 1, 2, ........., 12 1, 2, ........., 365(6) 1, 2, .........., 31 1, 2, .........., 7 Cualquier entero MONDAY JANUARY

Ejemplo: Uso de la funcin TO-CHAR, en la tabla STUDENT. Qu da de la semana naci cada estudiante mujer? SQL > REMARK ... Se ajusta el ancho de campo para todas las fechas SQL > REMARK ... ejemplos SQL > COLUMN DATE_OUTPUT FORMAT A40 SQL > SELECT STUDENT_NAME, 2 3 4 TO_CHAR (BIRTHDATE, DAY MONTH DD, YYYY) DATE_OUTPUT FROM STUDENT WHERE GENDER = FEMALE;

STUDENT_NAME WENDY JONES CATHY SMITH DOTTIE STACY AMY LOPEZ TAMMY REDD

DATE_OUTPUT MONDAY WEDNESDAY WEDNESDAY SUNDAY FRIDAY OCTOBER FEBRUARY MARCH MAY JULY 25, 22, 22, 10, 01, 1965 1922 1967 1964 1960

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 41 b.4) La funcin TO-DATE

Si el uso principal de la funcin TO-CHAR es convertir datos del tipo date almacenados en tablas, a strings de caracteres para la salida, entonces, el uso principal de la funcin TODATE es convertir datos del tipo date ingresados como strings de caracteres, al formato date interno. Se debe recordar, que cuando se ingresan datos date como entrada, el formato por defecto es DD-MON-YY. Si se usa a este formato por defecto, se est retringido a ingresar solamente fechas en el siglo 20. No se puede tampoco ingresar una fecha que contenga horas. Recordar que el valor por defecto de la hora, para cada fecha es 12:00 A.M.

El formato para TO-DATE es esencialmente el mismo que de la funcin TO-CHAR. TO-DATE (date-value, format mask)

Ejemplos: Aqu hay dos ejemplos para insertar nuevas tuplas en la tabla STUDENT.

1. Insertar un nuevo estudiante llamado Charlie Palmer, cuya fecha de nacimiento es 10/9/1967. SQL > INSERT INTO STUDENT VALUES 2 3 (S099, CHARLIE PALMER, MADISON AVE, TO_DATE (10/09/67, MM/DD/YY), MALE);

1 Record created

2. Insertar un nuevo estudiante llamado Rose Simpson, quien naci a las 3:30 P.M. el da 300 del ao 1968. SQL > INSERT INTO STUDENT VALUES 2 3 (S098, ROSE SIMPSON, SMITH LANE, TO_DATE (300 1968 15:30, DDD YYYY HH24:MI), FEMALE);

1 Record changed

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 42

b.5)

Ejemplos

Las funciones orientadas a la fecha: ADD-MONTHS, MONTHS-BETWEEN, LAST-DAY y NEXT-DAY, son mostradas en los siguientes ejemplos: 1. Cul fue la fecha cuatro meses despus de que cada estudiante naci? SQL > COLUMN PLUS FOURS FORMAT A10 SQL > SELECT STUDENT_NAME, BIRTHDATE, 2 3 ADD_MONTHS (BIRTHDATE, 4) PLUS FOURS FROM STUDENT;

STUDENT_NAME WENDY JONES SAM WALES CATHY SMITH DOTTIE STACY JAY LANGER AMY LOPEZ SAM WATSON TAMMY REDD

BIRTHDATE 25-OCT-65 10-JAN-60 22-FEB-22 22-MAR-67 19-APR-65 10-MAY-64 09-JUN-63 01-JUL-60

PLUS_FOURS 25-FEB-66 10-MAY-60 22-JUN-22 22-JUL-67 19-AGU-65 10-SEP-64 09-OCT-63 01-NOV-60 24-DEC-67 31-JAN-67

TOMMY WADKINS 24-AGU-67 BEN TREVINO 30-SEP-66

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 43 2. Qu edad en meses tiene cada estudiante varn? SQL > REMARK ... Esta consulta fue corrida el 21 de Abril de 1986 SQL > SELECT STUDENT_NAME, BIRTHDATE, 2 3 4 MOTHS_BETWEEN (SYSDATE, BIRTHDATE) MONTHS OLD FROM STUDENT WHERE GENDER = MALE;

STUDENT_NAME SAM WALES JAY LANGER SAM WATSON TOMMY WADKINS BEN TREVINO

BIRTHDATE 10-JAN-60 19-APR-65 09-JUN-63 24-AGU-67 30-SEP-66

MONTHS_OLD 315.368142 252.077819 273.744004 223.916529 234.722981

Notar que los meses entre los dos das no son calculados estrictamente como valores enteros. Esto es, por supuesto, debido al tiempo que est siendo almacenado en un atributo de tipo DATE.

3. Cul es el ltimo da del mes, de cada mes en que nacieron todas las estudiantes mujeres?. Por ejemplo, si Wendy Jones naci el 25 de Octubre de 1965, cul fue el ltimo da del mes de Octubre de 1965?. Por supuesto, Octubre 31, 1965. SQL > COLUMN LTIMO DA DEL MES FORMAT A17 SQL > SELECT STUDENT_NAME, BIRTHDATE, 2 3 4 LAST_DAY (BIRTHDATE) ULTIMO DIA DEL MES FROM STUDENT WHERE GENDER = FEMALE;

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 44 SUDENT_NAME WENDY JONES CATHY SMITH DOTTIE STACY AMY LOPEZ TAMMY REDD BIRTHDATE 25-OCT-65 22-FEB-22 22-MAR-67 10-MAY-64 01-JUL-60 ULTIMO_DIA_DEL_MES 31-OCT-65 28-FEB-22 31-MAR-67 31-MAY-64 31-JUL-60

4. Cul es el prximo viernes despus de que cada estudiante naci? SQL > COLUMN PROXIMO VIERNES FORMAT A12 SQL > SELECT STUDENT_NAME, BIRTHDATE, 2 3 4 TO-CHAR (NEXT-DAY (BIRTHDATE, FRIDAY), DY MM/DD/YY) PROXIMO VIERNES FROM STUDENT;

STUDENT_NAME WENDY JONES SAM WALES CATHY SMITH DOTTIE STACY JAY LANGER AMY LOPEZ SAM WATSON TAMMY REDD TOMMY WADKINS BEN TREVINO

BIRTHDATE 25-OCT-65 10-JAN-60 22-FEB-22 22-MAR-67 19-APR-65 10-MAY-64 09-JUN-63 01-JUL-60 24-AGU-67 30-SEP-66

PROXIMO VIERNES FRI FRI FRI FRI FRI FRI FRI FRI FRI FRI 10/29/65 01/15/60 02/24/22 03/24/67 04/23/65 05/15/64 06/14/63 07/08/60 08/2567 10/07/66

b.6)

Aritmtica con Fechas

Ciertas operaciones aritmticas pueden ser ejecutadas en tipos de datos date (fecha). Estas operaciones incluyen: 1. Sumar o restar un nmero de das desde o hacia una fecha.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 45 2. Restar dos fechas una de la otra. Si dos fechas son restadas una de la otra, el resultado ser convertido a un string de caracteres. As, si se desea formatear el resultado va una mscara, debe usar una de las funciones numricas (TO_NUMBER, ROUND, TRUNC, etc.) para convertirlo a nmero.

Los siguientes ejemplos ilustran la aritmtica de fechas.

1. Cul da es/fue 7000 das despus de que cada estudiante naci? SQL > COLUMN EL FUTURO FORMAT A10 SQL > SELECT STUDENT_NAME, BIRTHDATE, 2 3 , BIRTHDATE + 7000 EL FUTURO FROM STUDENT;

STUDENT_NAME WENDY JONES SAM WALES CATHY SMITH DOTTIE STACY JAY LANGER AMY LOPEZ SAM WATSON TAMMY REDD TOMMY WADKINS BEN TREVINO

BIRTHDATE 25-OCT-65 10-JAN-60 22-FEB-22 22-MAR-67 19-APR-65 10-MAY-64 09-JUN-63 01-JUL-60 24-AGU-67 30-SEP-66

EL FUTURO 24-DEC-84 11-MAR-79 23-APR-41 21-MAY-86 18-JUN-84 10-JUL-83 08-AUG-82 31-AUG-82 23-OCT-86 29-NOV-85

10 Records selected

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 46 2. Cul fue el siguiente lunes, 2000 das antes del nacimiento de cada estudiante mujer? SQL > COLUMN -2000 FORMAT A17 SQL > COLUMN BIRTHDATE FORMAT A17 SQL > SELECT STUDENT_NAME, 2 TO_CHAR (BIRTHDATE, DY, MON, DD, YYYY) BIRTHDATE, 3 TO_CHAR (NEXT_DAY(BIRTHDATE 2000, MONDAY), 4 DY, MON, YYYY) 2000

5 FROM STUDENT 6 WHERE GENDER = FEMALE;

STUDENT_NAME WENDY JONES CATHY SMITH DOTTIE STACY AMY LOPEZ TAMMY REDD

BIRTHDATE MON, OCT 25, 1965 WED, FEB 22, 1922 WED, MAR 22, 1967 SUN MAY 10, 1964 FRI, JUL 01, 1960

-2000 SUN, MAY 08, 1960 MON, SEP 04, 1916 MON, OCT 02, 1961 MON, NOV 24, 1958 MON, JAN 10, 1955

c) Operaciones, valores numricos y funciones Convertir un valor nulo a un valor no nulo, con el propsito de evaluar una expresin, con la funcin NVL. Cuando NVL evala la primera expresin, si sta es no nula retorna expre1, o si no retorna expr2.

Sintaxis NVL(expr1, expr2)

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 47 Ejemplos: 1. Despliegue el nombre, trabajo, salario, comisin y sueldo total de un empleado, para los empleados del departamento 30. SQL > SELECT ename, job, salary, comm, NVL(sal, 0) + NVL(comm, 0) 2 3 FROM emp WHERE deptno = 30;

ENAME ALLEN WARD JONES MARTIN BLAKE SCOTT TURNER JAMES

JOB SALESMAN SALESMAN SALESMAN SALESMAN MANAGER SALESMAN SALESMAN CLERCK

SAL 1600 1250 2975 1250 2850 3150 1500 950

COMM 300 500

NVL(SAL, 0) + NVL(COMM,0) 1900 1750 2975

1400

2650 2850 3150

1500 950

8 rows selected

Para redefinir las reglas de precedencia en la evaluacin de expresiones, se debe poner una parte de la expresin entre parntesis. ORACLE evala estas expresiones en primer lugar.

Ejemplo Desplegar nombre, salario, comisin y compensacin total para todos los vendedores ordenados por compensacin total. SQL > SELECT ename, sal, comm, 12*(sal + comm) TOTAL 2 3 4 FROM emp WHERE job = SALESMAN Order by 12*(sal + comm ) total;

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 48 ENAME TURNER WARD ALLEN MARTIN JONES SCOTT 6 rows selected SAL 1500 1250 1600 1250 2975 3150 COMM 0 500 300 1400 TOTAL 18000 21000 22800 31800

4.6 Operaciones en conjuntos, con sentencias Select 4.6.1 Uso de los operadores UNION, INTERSECT Y MINUS Hay cuatro tipos de operadores de conjuntos: UNION, INTERSECT, MINUS, UNION ALL

Se entiende por conjunto, las filas resultantes de cualquier sentencia SELECT vlida, incluyendo el conjunto vaco (no rows selected).

Todo operador de conjuntos trabaja combinando dos de ellos a la vez, es decir, cada operador de este tipo requiere dos operandos que adems sean conjuntos.

La figura 4.6 muestra la sintaxis del select usando los operadores UNION, INTERSECT o MINUS.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 49

<selecc sin order by>

UNION <selecc sin order by>

INTERSECT

MINUS

ORDER

BY <Posicin>

ASC ;

DESC

Fig. 4.6 Sintaxis del select utilizando los operadores UNION, INTERSECT y MINUS

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 50 a) UNION Union combina todas las filas del primer conjunto con todas las filas del segundo. Cualquier duplicacin de filas producida en el conjunto resultado, se reducir a una fila nica Ejemplo SQL > SELECT 2 3 4 5 6 7 FROM WHERE UNION SELECT FROM WHERE apellido plantilla turno = `M; apellido plantilla funcion = Interno

APELLIDO Amigo R. Bocina G. Karplus W. Nez C.

Seleccionar todos los internos que trabajan en el hospital 22 y los mdicos del mismo. SQL > SELECT 2 3 4 5 6 7 FROM WHERE UNION SELECT FROM WHERE apellido doctor hospital_cod = 22;

apellido plantilla funcion = Interno AND hospital_cod = 22

El uso de UNION ALL, incluye todos los duplicados en el resultado.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 51 b) INTERSECT INTERSECT examinar las filas de los conjuntos de entrada y devolver aquellas que aparezcan en ambos. Todas las filas duplicadas sern eliminadas antes de la generacin del conjunto resultante. Ejemplos: SQL > RUN 1 2 3 4 5 6 7 SELECT FROM WHERE INTERSECT SELECT FROM WHERE apellido plantilla turno = M; apellido plantilla funcion = Interno

APELLIDO Nez C.

Listar todos los empleados que trabajen en cualquier hospital y sean mdicos internos SQL > SELECT 2 3 4 5 6 FROM WHERE INTERSECT SELECT FROM apellido doctor;

apellido plantilla funcion = Interno

c) MINUS MINUS devuelve aquellas filas que estn en el primer conjunto pero no en el segundo. Las filas duplicadas del primer conjunto se reducirn a una fila nica antes de que empiece la comparacin con el otro conjunto.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 52 Ejemplos: SQL > RUN 1. 2. 3. 4. 5. 6. 7. SELECT FROM WHERE MINUS SELECT FROM WHERE apellido plantilla turno = M; apellido plantilla funcion = Interno

APELLIDO Amigo R. Karplus W.

Seleccionar los empleados de cualquier hospital que sean, o bien doctores no internos, o bien cualquier otra cosa. SQL > SELECT 2 3 4 5 6 FROM MINUS SELECT FROM WHERE apellido plantilla funcion = Interno;

apellido plantilla

4.7 Combinaciones de mltiples tablas Una instruccin Select que trabaja con mltiples tablas se puede clasificar como: COMBINACIONES SUBCONSULTAS

Combinaciones (JOINS) v Utilizadas para recuperar datos de ms de una tabla.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 53 Subconsultas (Sub-queries) v Utilizadas para generar preguntas subsidiarias necesitadas por la consulta principal.

4.7.1 Combinaciones (JOINS) Hasta ahora todas las rdenes de SQL que se han utilizado estn basadas en una nica tabla. Las combinaciones son utilizadas para recuperar datos de ms de una tabla.

El concepto de combinacin (join) entre dos tablas: EMP y DEPT, se muestran en la figura 4.7.

Ejemplo: Supongamos que usted es un mdico que quiere los resultados de ciertas pruebas. Naturalmente, usara la tabla de pruebas. Pero no est interesado en el nmero de laboratorio (lab_no) sino en el nombre del mismo y discutir los resultados. La informacin que necesita se haya contenida en las tablas TEST y LABORATORIO.

SELECT * FROM LABORATORIO

LAB_NO 16 42 56 84

NOMBRE Atcom Clini Alpa Nucro

DIRECCION Gran va, 14 Castellana, 55 Juan Bravo, 18 Alcal, 62

TELEFONO 532-4433 447-6484 929-9611 368-9793

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 54

Server

EMP

DEPT

ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER

DEPTNO 20 30 30 20 30 30 10 20 10 30 20 30 20 10

DEPTNO 20 30 30 20 30 30 10 20 10 30 20 30 20 10

LOC DALLAS CHICAGO CHICAGO DALLAS CHICAGO CHICAGO NEW YORK DALLAS NEW YORK CHICAGO DALLAS CHICAGO DALLAS NEW YORK

Figura 4.7 Join de tablas

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 55 SELECT * FROM test;

INSCRIPCION 10995 14024 10995

LAB_NO 16 42 16

TCO ABC PTY BCD

RES POS NEG NEG

Se necesita unir las dos tablas para conseguir la informacin requerida. Se probar con la siguiente consulta:

SELECT

l.lab_no, t.resultado

l.nombre,

l.telefono,

t.lab_no,

t.tcode,

t.inscripcin,

FROM

laboratorio l, test t;

LAB_NO NOMBRE TELEFONO LAB_NO TCO 16 Atcon 42 Clini 56 Alpha 84 Nucro 16 Atcon 42 Clini 56 Alpha 84 Nucro 16 Atcon 42 Clini 56 Alpha 84 Nucro 532-4453 447-6448 929-9611 368-9793 532-4453 447-6448 929-9611 368-9793 532-4453 447-6448 929-9611 368-9793 16 ABC 16 ABC 16 ABC 16 ABC 42 42 42 42 PTY PTY PTY PTY

INSCRIPCION RESULTADO 10995 POS 10995 POS 10995 POS 10995 POS 14024 NEG 14024 NEG 14024 NEG 14024 NEG 10995 NEG 10995 NEG 10995 NEG 10995 NEG

16 BCD 16 BCD 16 BCD 16 BCD

12 Registros seleccionados

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 56 v Como se puede ver, no es exactamente lo que se est buscando. Esta tabla es, de momento el producto cartesiano de las dos anteriores. v Pero miremos nuevamente. Tomemos al paciente 10995, cuyo lab_no es 16. Observando la tabla LABORATORIO, puede verse fcilmente que es el laboratorio Atcon. Una fila de la tabla resultante une correctamente las dos tablas; se trata de la primera fila. La diferencia crucial entre esta fila y las otras, carentes de sentido, es que empareja lab_no. Sabindolo, podemos elegir de la tabla de resultados los datos significativos. v Como queremos seleccionar un conjunto del producto cartesiano, la respuesta obvia es la utilizacin de la clusula WHERE. Por ejemplo:

SELECT

l.lab_no, l.nombre, l.telefono, t.lab_no, t.tcode, t.inscripcion, t.resultado

FROM WHERE

laboratorio l, test t l.lab_no = t.lab_no;

LAB_NO NOMBRE 16 ATCON 42 CLINI 16 ATCON

TELEFONO LAB_NO 532-4453 447-6484 532-4453 16 42 16

TCO INSCRIPCION RESULTADO ABC PTY BCD 10995 14024 10995 POS NEG NEG

v Ya se tiene un mtodo sencillo de extraer datos significativos de dos o ms tablas. Por ejemplo, suponga que desea saber el nombre del paciente en vez de slo el nmero de registro en el ejemplo anterior. Puede usted sugerir los cambios necesarios para conseguir que en el ejemplo anterior encuentre esta informacin suplementaria? v Naturalmente, el nombre del paciente se hallar en la tabla ENFERMO. As que una a esta tabla lo que se pueda necesitar para encontrar una columna entre ENFERMO y TEST.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 57 SELECT FROM WHERE l.nombre, l.telefono t.tcode, t.resultado, e.apellido laboratorio l, test t, enfermo e l.lab_no = t.lab_no AND t.inscripcion = e.inscripcion;

NOMBRE Atcon Atcon Clini

TELEFONO TCODE 532-4453 532-4453 447-6448 ABC BCD PTY

RESULTADO NEG NEG NEG

APELLIDO Lagua, M. Lagua, M. Fernndez, M.

v Ha de observarse que el listado de SELECT ha sido modificado para que muestre el nombre del paciente, y que elimine algunos datos que no eran de inters, como el LAB_NO e INSCRIPCION

Sintaxis General

SELECT FROM WHERE

columnas de las tablas citadas en la clusula from tabla1, tabla2, .... Tabla1.columna = Tabla2.columna

Si se omite la clusula WHERE, que especifica la condicin de combinacin, el resultado ser un PRODUCTO CARTESIANO. Un producto cartesiano empareja todas las filas de una tabla con cada fila de otra. Las nicas filas mostradas son aquellas que emparejan todos los criterios especificados en la clusula WHERE.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 58 Reglas de combinacion Pueden unirse tantas tablas como se desee. El criterio de emparejamiento para las tablas se denomina predicado de combinacin o criterio de combinacin. Puede usarse ms de una pareja de columnas para especificar una condicin de combinacin entre dos tablas cualesquiera. En el comando SELECT pueden citarse columnas de ambas tablas. Si hay columnas con el mismo nombre en las distintas tablas de la clusula FROM, deben identificarse especificando NOMBRETABLA.NOMBRECOLUMNA. Si el nombre de una columna existe slo en una tabla, no ser necesario especificarla como nombretabla.nombrecolumna. Sin embargo, hacerlo mejorara la legibilidad de la sentencia SELECT. Cuando se unen n tablas, ser necesario tener, por lo menos, n 1 condiciones de combinacin de tablas para evitar el producto cartesiano. (Cuatro tablas unidas requieren especificaciones de criterios de combinacin para tres pares de tablas).

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 59 Ejemplo: SELECT FROM WHERE apellido, loc emp, dept apellido LIKE M%

APELLIDO MARTIN MUOZ MARTIN MUOZ MARTIN MUOZ MARTIN MUOZ

LOC SEVILLA SEVILLA MADRID MADRID BARCELONA BARCELONA BILBAO BILBAO

Grficamente, todos los empleados con un nmero de departamento 10 sern emparejados con los datos del departamento 10, los empleados con un nmero de departamento 20 sern emparejados con los datos del departamento 20 y as sucesivamente.

SELECT FROM WHERE

apellido, oficio, emp_no, dnombre, loc emp, dept emp.dept_no = dept.dept_no;

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 60 APELLIDO CEREZO MUOZ REY ALONSO SANCHEZ JIMENEZ GIL FERNANDEZ ARROYO MARTIN TOVAR JIMENO NEGRO OFICIO DIRECTOR EMPLEADO PRESIDENTE EMPLEADO EMPLEADO DIRECTOR ANALISTA ANALISTA VENDEDOR VENDEDOR VENDEDOR EMPLEADO DIRECTOR EMP_NO 7782 7934 7839 7876 7369 7566 7788 7902 7499 7654 7844 7900 7698 DNOMBRE CONTABILIDAD CONTABILIDAD CONTABILIDAD INVESTIGACION INVESTIGACION INVESTIGACION INVESTIGACION INVESTIGACION VENTAS VENTAS VENTAS VENTAS VENTAS LOC SEVILLA SEVILLA SEVILLA MADRID MADRID MADRID MADRID MADRID BARCELONA BARCELONA BARCELONA BARCELONA BARCELONA

14 Registros seleccionados

Join de una tabla con la misma tabla

En algunos casos, se necesita hacer un join de una tabla consigo misma. Esto puede hacerse fcilmente. Todo lo que se tiene que hacer es darle distintos nombres a la misma tabla. Por ejemplo, si se quiere unir (hacer join) a la tabla FACULTY con ella misma, se podra usar la siguiente clusula FROM

FROM

FACULTY F1, FACULTY F2

Para ilustrar el uso de esto, considere la tabla PERSONNEL, y la siguiente consulta: Quin gana ms que su jefe?

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 61 NOMBRE DE LA TABLA: PERSONNEL FAC_ID FACULTY-NAME D02 M01 S02 N02 C021 H01 F01 J01 S01 D01 J02 N01 N03 S03 C02 GREG DAVIS SCOTT MIZE LARRY SIMPSON NICK NORMAN JAN CARNER BYRON HOGAN LEE FALDO D02 D02 S02 M01 S02 S02 BOSS-ID TITLE-OR-RANK PRESIDENT DEAN DEAN DEPATMENT CHAIR DEPATMENT CHAIR DEPATMENT CHAIR DEPATMENT CHAIR PROFESSOR PROFESSOR ASOCC PROFESSOR ASOCC PROFESSOR INSTRUCTOR ASSIT PROFESSOR ASSIT PROFESSOR PROFESSOR SALARY $80.000 $60.000 $44.000 $50.000 $42.000 $43.000 $45.000 $40.000 $45.000 $34.500 $35.000 $28.000 $30.000 $30.500 $44.000

RAYMOND J. JOHNSON F01 WENDY SWIMMER AMY DANCER BOB JONES JACK NELSON BEN NELSON MARK STEWART PAT CARNER F01 F01 C01 N02 H01 H01 H01

El siguiente comando SQL resuelve la consulta: SQL > SELECT 2 3 4 FROM WHERE

E.FAULTY-NAME, E.SALARY FAC SAL, B.FACULTY-NAME BOSS NAME, B.SALARY BOSS SAL PERSONNEL E, PERSONNEL B E.BOSS-ID = B.FAC-ID AND E.SALARY > B.SALARY;

FACULTY-NAME NICK NORMAN LEE FALDO PAT CARNER

FAC_SAL $50.000 $45.000 $44.000

BOSS_NAME LARRY SIMPSON LARRY SIMPSON BYRON HOGAN

BOSS_SAL $44.000 $44.000 $43.000

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 62 Ejercicio: Considerando la tabla EMP, listada a continuacin, se pide: nombre de cada empleado y el nombre de su jefe directo.

EMP TABLE

EMPNO ENAME 7369 SMITH 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER

JOB CLERCK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERCK CLERCK ANALYST CLERCK

MGR

HIREDATE

SAL 800 1600 1250 2975 1250 2850 2450 3000 5000 1500 1100 950 3000 1300

COMM DEPTNO 20 300 500 30 30 20 1400 30 30 10 20 10 0 30 20 30 20 10

7902 17-DEC-80 7698 20-FEB-81 7698 22-FEB-81 7839 02-APR-81 7698 28-SEP-81 7839 31-MAY-81 7839 09-JUN-81 7566 09-DEC-82 17-NOV-81 7698 08-SEP-81 7788 12-JAN-83 7698 03-DEC-81 7566 03-DEC-81 7782 23-JAN-82

4.7.2 El OUTER JOIN Para mostrar el significado del OUTER JOIN, se trabajar con las tablas STUDENT y COURSE.

STUDENT (STU-ID, STUDENT-NAME, ADDRESS, BIRTHDATE, GENDER) COURSE (COURSE-ID, COURSE-TITLE, SECTION-NO, STU-ID, FAC-ID)

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 63 Nombre de la tabla: STUDENT

STU-ID STUDENT-NAME ADDRESS S001 S002 S003 S004 S005 S006 S007 S008 S009 S010 WENDY JONES SAM WALES CATHY SMITH DOTTIE STACY JAY LANGER AMY LOPEZ SAM WATSON TAMMY REDD 125 MAPLE AVE 3006 NAVAJO CL 1600 PENN AVE 10 DOWING ST

BIRTHDATE 25-OCT-65 10-JAN-60 22-FEB-22 31-MAR-67

GENDER FEMALE MALE FEMALE FEMALE MALE FEMALE MALE FEMALE MALE MALE

GOLF COURSE RD 19-APR-65 123 SUN RAY RD 225 TEST DRIVE 10-MAY-64 09-JUN-63

113 MANCHESTER 01-JUL-60 24-AUG-67 30-SEP-66

TOMY WADKINS APPLE TREE DR BEN TREVINO BOWLING ALLEY

Nombre de la tabla: COURSE

COURSE-ID COURSE-TITLE CSC100 CSC100 CSC200 CSC200 ACC200 ACC201 HIS200 INTRODUCTION TO COMPUTING INTRODUCTION TO COMPUTING PASCAL PROGRAMMING PASCAL PROGRAMMING PRINCIPLES OF ACCOUNTING I PRINCIPLES OF ACCOUNTING II HISTORY OF PIROGUES

SECTION STU-ID FAC-ID 1 2 1 2 1 1 1 S001 S002 S001 S003 S001 S004 S005 J01 S01 D01 S01 J02 J02 N01

Mediante el EQUI-JOIN se pueden recuperar los nombres de los estudiantes y los cursos que ellos toman.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 64 SQL > SELECT STUDENT-NAME, COURSE-TITLE 2 3 FROM STUDENT, COURSE

WHERE STUDENT.STU-ID = COURSE.STU-ID;

STUDENT-NAME WENDY JONES WENDY JONES WENDY JONES SAM WALES CATHY SMITH DOTTIE STACY JAY LANGER

COURSE-TITLE INTRODUCTION TO COMPUTING PASCAL PROGRAMMING PRINCIPLES OF ACCOUNTING I INTRODUCTION TO COMPUTING PASCAL PROGRAMMING PRINCIPLES OF ACCOUNTING II HISTORY OF PIROGUES

Pero, supongamos que adems de la informacin anterior, se desean los nombres de los alumnos que no han tomado ningn curso. El outer JOIN en la tabla completa STUDENT, permite obtener el resultado pedido: SQL > SELECT STUDENT-NAME, COURSE-TITLE 2 3 FROM STUDENT, COURSE

WHERE STUDENT.STU-ID = COURSE.STU-ID (+);

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 65 STUDENT-NAME WENDY JONES WENDY JONES WENDY JONES SAM WALES CATHY SMITH DOTTIE STACY JAY LANGER AMY LOPEZ SAM WATSON TAMMY REDD TOMMY WADKINS BEN TREVINO COURSE-TITLE INTRODUCTION TO COMPUTING PASCAL PROGRAMMING PRICIPLES OF ACCOUNTING I INTRODUCTION TO COMPUTING PASCAL PROGRAMMING PRINCIPLES OF ACCOUNTING II HISTORY OF PIROGUES

12 Records selected

Si slo se desea listar a los alumnos que no han tomado cursos, el siguiente select resuelve el problema. SQL >SELECT STUDENT-NAME 2 3 4 FROM STUDENT, COURSE

WHERE STUDENT.STU-ID = COURSE.STU-ID (+) AND COURSE-TITLE IS NULL;

STUDENT-NAME AMY LOPEZ SAM WATSON TAMMY REDD TOMMY WADKINS BEN TREVINO

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 66 El siguiente ejemplo ilustra el Outer-Join, uniendo las tuplas para los estudiantes Dottie Stacy y Tammy Redd, a las tuplas en la tabla COURSE. SQL > SELECT 2 3 4 FROM WHERE

STUDENT-NAME, COURSE-TITLE STUDENT, COURSE STUDENT.STU-ID = COURSE.STU-ID = COURSE.STU-ID (+) AND STUDENT-NAME IN (DOTTIE STACY, TAMMY REDD);

STUDENT-NAME DOTTIE STACY TAMMY REDD

COURSE-TITLE PRINCIPLES OF ACCOUNTING II

Supongamos que se agrega la siguiente tupla a la tabla COURSE.

COURSE-ID COURSE-TITLE HIS333 HISTORY OF ROUND DANCING

SECTION 1

STU-ID

FAC-ID D03

Note que en realidad esta tupla no debera ser generada, porque STU-ID es parte de la clave primaria de la tabla COURSE, y se sabe que el valor de la clave primaria de una tabla no debe ser nulo. Sin embargo, para propsitos de este ejemplo, se asume que se tiene insertada esta tupla en la tabla COURSE y se ha ejecutado un outer join con la posicin del signo + cambiado. El resultado es el siguiente: SQL > SELECT 2 3 4 5 6 FROM WHERE

STUDENT-NAME, COURSE-TITLE STUDENT, COURSE STUDENT.STU-ID (+) = COURSE.STU_ID AND (STUDENT-NAME = DOTTIE STACY OR COURSE-TITLE IN (PRINCIPLES OF ACCOUNTING II, HISTORY OF ROUND DANCING));

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 67 STUDENT_NAME DOTTIE STACY COURSE-TITLE PRINCIPLES OF ACCOUNTING II HISTORY OF ROUND DANCING

4.7.3 Subconsultas Sintaxis de una subconsulta Las subconsultas seleccionan filas desde una tabla con una condicin que depende de valores de otra consulta.

Las subconsultas pueden aparecer en la clusula WHERE de las siguientes sentencias: SELECT INSERT UPDATE DELETE

La sintaxis de una subconsulta se puede ver en la figura 4.8.

Sintaxis SELECT
SELECT....

FROM... Sintaxis SELECT


(SELECT... FROM... WHERE...);

WHERE...

Fig. 4.8 Sintaxis de una subconsulta

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 68 El concepto de subconsulta Por ahora se ha utilizado la clusula WHERE para definir los subconjuntos de datos que se desean. Se ha llevado a cabo empleando SQL para emparejar un valor de una columna con una constante, o un grupo de constantes.

Pero, Qu pasa cuando se desconocen los valores de las constantes?. Por ejemplo, si se desea saber los nombres de los empleados que tienen salarios por encima de la media.

En primer lugar, se tendr que averiguar el salario medio mediante la siguiente instruccin: SELECT AVG(salario) FROM plantilla

El resultado quiz se debera anotar en un papel, antes de incluirlo en la siguiente instruccin: SELECT FROM WHERE apellido plantilla salario > ...

No es muy eficaz y no resulta difcil imaginarse otros ejemplos, que tales procedimientos resultan totalmente impracticables.

Hay un modo mucho ms eficiente de manejar todo esto. SQL permite incluir una declaracin completa de SELECT como parte de un comando WHERE; es una SUBCONSULTA. En vez de utilizar las dos declaraciones de ms arriba, se puede condensarlas fcilmente del siguiente modo: SELET FROM WHERE apellido plantilla salario > (SELECT FROM ); AVG(salario) plantilla)

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 69 La subconsulta (el comando SELECT entre parntesis) se ejecuta primero y, posteriormente, el valor extrado es introducido en la consulta principal.

El valor de comparacin puede ser un valor simple recuperado mediante un comando de seleccin, o un conjunto de valores recuperados por otra sentencia SELECT. SELECT FROM WHERE .... ... valor operador (select ... from ... where ... )

especificado comparativo

El segundo SELECT recibe el nombre de subconsulta anidada.

Resultado de la subconsulta Valor simple Ms de un valor

Operador compartivo Carcter aritmtico Lgico

En resumen, pueden utilizarse subconsultas para que realicen una operacin de recuperacin generando un valor o conjunto de ellos, que sern utilizados como valores de comparacin en una clusula WHERE.

Subconsultas que devuelven un solo valor Presentar los nombres de los empleados que tienen el mismo trabajo que JIMENEZ.

SELECT FROM WHERE

apellido emp oficio = (SELECT FROM WHERE oficio emp apellido = JIMENEZ)

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 70 Subconsultas que devuelven ms de un valor y se ha de comparar con uno de ellos Informacin sobre los empleados que ganan ms que cualquier empleado del departamento 30. SELECT FROM WHERE * emp salario > (SELECT FROM GROUP BY HAVING bien MAX(salario) emp dept_no dept_no = 30)

SELECT FROM WHERE

* emp salario > ALL (SELECT FROM WHERE salario emp dept_no = 30)

Subconsultas que devuelven una lista de valores Conseguir los nombres de los empleados del departamento 20 cuyo trabajo sea idntico al de cualquiera de los empleados del departamento de ventas

SELECT apellido FROM WHERE emp dept_no = 20 AND oficio IN (SELECT FROM WHERE oficio emp dept_no =

(SELECT dept_no FROM WHERE ) dept dnombre = VENTAS)

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 71 APELLIDO JIMENEZ ALONSO SANCHEZ

Se observa en este ejemplo que:

Un SELECT anidado puede contener a otro SELECT anidado. Esta anidacin funciona con un nmero indefinido de niveles.

En este caso el operador de comparacin utilizado es IN, ya que la consulta interior devuelve ms de una fila.

El orden en que las filas son devueltas por la consulta interior no es importante y por los tanto, no puede especificarse.

Mostrar todos los empleados que trabajan en Madrid o Barcelona.

SELECT FROM WHERE

apellido, oficio, fecha_contr, dept_no, salario emp dept_no IN (SELECT dept_no FROM dept

WHERE loc IN (MADRID, BARCELONA) ) ORDER BY apellido;

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 72

APELLIDO ALONSO ARROYO FERNANDEZ GIL JIMENEZ JIMENO MARTIN NEGRO SALA TOVAR

OFICIO EMPLEADO

FECHA_ALT DEPT_NO 03-MAY-87 20 30 20 20 20 30 30 30 30 30

SALARIO 143000 208000 390000 390000 386750 123500 162500 370500 162500 195000

VENDEDOR 20-FEB-81 ANALISTA ANALISTA DIRECTOR EMPLEADO 03-DEC-81 30-MAR-87 02-APR-81 03-DEC-81

VENDEDOR 28-SEP-81 DIRECTOR 01-MAY-81

VENDEDOR 22-FEB-81 VENDEDOR 08-SEP-81

11 registros seleccionados Nota: La clusula ORDER BY no es admitida en subconsultas.

La consulta interior puede recuperar valores de una tabla distinta, que la consulta exterior o principal.

4.8 EXISTS, el cuantificador existencial de SQL La figura 4.9 muestra como se debe usar el cuantificador existencial (EXISTS).

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 73 SELECT FROM WHERE [NOT] EXISTS SELECT FROM WHERE

Fig. 4.9 Uso del cuantificador existencial EXISTS.

EXISTS representa el cuantificador existencial.

La expresin EXISTS (SELECT...) toma el valor verdadero si y slo si el resultado de evaluar SELECT... no es vaco, es decir, si y slo si existe al menos un registro resultante del SELECT.

En resumen, el predicado EXISTS tiene una sentencia select como su argumento y es verdadero a menos que el select resulte en una relacin vaca.

Ejemplos: Se trabajar con la base de datos de partes-proveedores, constituida por las siguientes tres tablas: S, P, SP.

S# S1 S2 S3

NomProv Salazar Perez Bernal

Estado 20 10 30

Ciudad Londres Pars Pars

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 74 P P# P1 P2 P3 NomParte Tuerca Perno Tornillo Color Rojo Verde Rojo Peso 12 17 17 Ciudad Londres Pars Roma

SP

S# S1 S1 S2 S3

P# P1 P2 P1 P2

Cantidad 300 200 300 200

1) Obtener el nombre del proveedor para aquellos proveedores que suministran la parte P2.

SELECT FROM WHERE

NomProv S EXISTS (SELECT FROM WHERE * SP S# = S.S# AND P# = P2)

2) Obtener el nombre del proveedor, para los proveedores que no suministran la parte P2.

SELECT FROM

NomProv SP

WHERE NOT EXISTS (SELECT * FROM SP WHERE S# = S.S# AND P# = P2)

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 75 3) Obtener los nombres de proveedor, para los proveedores que suministran todas las partes. Esta consulta puede ser transformada a Seleccione nombres de proveedor para los proveedores tales que no exista una parte que no suministren, utilizando: x(P(x)) x(P(x))

SELECT FROM WHERE

NomProv S NOT EXISTS (SELECT FROM * P

WHERE NOT EXISTS (SELECT FROM WHERE * SP S# = S.S# AND P# = P.P#))

4.9 Recuperacin Jerrquica Aunque ORACLE es una implementacin del modelo relacional de datos, a veces es til poder recuperar datos, como si estuvieran almacenados en una estructura de rbol.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 76 Nombre de la tabla: Personnel FAC_ID FACULTY-NAME D02 M01 S02 N02 C021 H01 F01 J01 S01 D01 J02 N01 N03 S03 C02 GREG DAVIS SCOTT MIZE LARRY SIMPSON NICK NORMAN JAN CARNER BYRON HOGAN LEE FALDO D02 D02 S02 M01 S02 S02 BOSS-ID TITLE-OR-RANK PRESIDENT DEAN DEAN DEPATMENT CHAIR DEPATMENT CHAIR DEPATMENT CHAIR DEPATMENT CHAIR PROFESSOR PROFESSOR ASOCC PROFESSOR ASOCC PROFESSOR INSTRUCTOR ASSIT PROFESSOR ASSIT PROFESSOR PROFESSOR SALARY $80.000 $60.000 $44.000 $50.000 $42.000 $43.000 $45.000 $40.000 $45.000 $34.500 $35.000 $28.000 $30.000 $30.500 $44.000

RAYMOND J. JOHNSON F01 WENDY SWIMMER AMY DANCER BOB JONES JACK NELSON BEN NELSON MARK STEWART PAT CARNER F01 F01 C01 N02 H01 H01 H01

Para mostrar como se realiza una recuperacin jerrquica en SQL, se trabajar con la tabla Personnel, cuya correspondiente estructura de rbol se presenta en la figura 4.10.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 77
GREG DAVIS

SCOTT MIZE

LARRY SIMPSON

JAN CARNER

NICK NORMAN

BYRON HOGAN

LEE FALDO

BOB JONES

JACK NELSON

BEN NELSON

MARK STEWART

PAT CARNER

RAYMOND J. JOHNSON

WENDY SWIMMER

AMY DANCER

Fig. 4.10 Representacin en estructura de rbol de la tabla PERSONNEL

Para recuperar tuplas en una jerarqua, se deben incluir dos clusulas adicionales en el comando SELECT. Estas dos clusulas son: START WITH atributo3 = valor CONNECT BY [PRIOR] atributo1 = [PRIOR] atributo padre Clusulas STAR WITH y CONNECT BY La clusula START WITH identifica el (los) nodo(s) raz en la estructura de rbol. La clusula CONNECT BY define el enlace entre las tuplas que representan los nodos en el rbol. La palabra PRIOR es usada para indicar que direccin, arriba-abajo o abajo-arriba, ser llevada a cabo en la recuperacin. hijo

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 78 Recuperacin de arriba hacia abajo y de abajo hacia arriba Para recuperar las tuplas de una manera jerrquica, se debe usar el siguiente comando SELECT. SQL > SELECT 2 3 4 FROM

FACULTY-NAME, TITLE-OR-RANK PERSONNEL de padre a hijo padre hijo

START WITH FACULTY-NAME = GREG DAVIS; CONNECT BY PRIOR FAC-ID = BOSS-ID

FACULTY-NAME GREG DAVIS SCOTT MIZE JAN CARNER BOB JONES LARRY SIMPSON NICK NORMAN JACK NELSON BYRON HOGAN BEN NELSON MARK STEWART PAT CARNER LEE FALDO

TITLE-OR-RANK PRESIDENT DEAN DEPARTMENT CHAIR ASSOC PROFESSOR DEAN DEPARTMENT CHAIR INSTRUCTOR DEPARTMENT CHAIR ASSIT PROFESSOR ASSIT PROFESSOR ASSIT PROFESSOR DEPARTMENT CHAIR

RAYMOND J. JOHNSON PROFESSOR WENDY SWIMMER AMY DANCER PROFESSOR ASSOC PROFESSOR

15 registros seleccionados

Definiendo un nuevo nodo raz Las estructuras de rbol no tienen que empezar en la raz absoluta del rbol. Se puede definir el nodo raz de manera que sea algn nodo interno del rbol. Para propsitos de

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 79 recuperacin, ese nodo se convierte en el nodo raz. Definir un nuevo nodo raz se implementa a travs de la clusula START WITH. Por ejemplo, suponga que se quiere desplegar todos los empleados que trabajan para Larry Simpson. Todo lo que se tendra que cambiar en el comando SELECT, es el valor en la clusula START WITH. SQL > SELECT LEVEL, FACULTY-NAME, TITLE-OR-RANK 2 3 4 FROM PERSONNEL START WITH FACULTY-NAME = LARRY SIMPSON; CONNECT BY PRIOR FAC-ID = BOSS-ID

LEVEL FACULTY-NAME 1 LARRY SIMPSON 2 NICK NORMAN 3 JACK NELSON 2 BYRON HOGAN 3 BEN NELSON 3 MARK STEWART 3 PAT CARNER 2 LEE FALDO 3 RAYMOND J. JOHNSON 3 WENDY SWIMMER 3 AMY DANCER

TITLE-OR-RANK DEAN DEPARTMENT CHAIR INSTRUCTOR DEPARTMENT CHAIR ASSIST PROFESSOR ASSIST PROFESSOR PROFESSOR DEPARTMENT CHAIR PROFESSOR PROFESSOR ASSOC PROFESSOR

11 registros seleccionados

Notar que los nmeros de nivel, son nmeros de nivel relativos. Cualquier nodo que se defina como raz tendr nivel 1.

Se puede incluso tener mltiples nodos raz. Por ejemplo, si se pide desplegar los nombres de los empleados que trabajan para Nick Norman o para Byron Hogan.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 80 SQL > SELECT LEVEL, FACULTY-NAME, TITLE-OR-RANK 2 3 4 5 FROM PERSONNEL START WITH FACULTY-NAME IN (NICK NORMAN, BYRON HOGAN); CONNECT BY PRIOR FAC-ID = BOSS-ID

LEVEL 1 2 1 2 2 2

FACULTY-NAME NICK NORMAN JACK NELSON BYRON HOGAN BEN NELSON MARK STEWART PAT CARNER

TITLE-OR-RANK DEPARTMENT CHAIR INSTRUCTOR DEPARTMENT CHAIR ASSIT PROFESSOR ASSIT PROFESSOR PROFESSOR

6 registros seleccionados SQL > SELECT FACULTY-NAME, TITLE-OR-RANK 2 3 4 FROM PERSONNEL START WITH FACULTY-NAME = AMY DANCER; CONNECT BY FAC-ID = PRIOR BOSS-ID

FACULTY-NAME AMY DANCER LEE FALDO LARRY SIMPSON GREG DAVIS

TITLE-OR-RANK ASSOC PROFESSOR DEPARTMENT CHAIR DEAN PRESIDENT

El orden izquierdo a derecho es el orden por defecto. Esto puede ser cambiado con la clusula ORDER BY.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 81 Usando nmeros de niveles El nmero de nivel en la estructura de rbol de cada tupla puede ser desplegado con el uso de la variable numrica del sistema LEVEL. El nodo raz siempre es nivel 1, el siguiente nivel de abajo es 2, y as sucesivamente. LEVEL es un valor virtual que es generado a medida que el rbol est siendo recuperado.

SQL> SELECT LEVEL, FACULTY-NAME, TITLE-OR-RANK 2 3 4 FROM PERSONNEL CONNECT BY PRIOR FAC-ID = BOSS-ID START WITH FACULTY-NAME = GREG DAVIS;

LEVEL 1 2 3 4 2 3 4 3 4 4 4 3 4 4 4

FACULTY-NAME GREG DAVIS SCOTT MIZE JAN CARNER BOB JONES LARRY SIMPSON NICK NORMAN JACK NELSON BYRON HOGAN BEN NELSON MARK STEWART PAT CARNER LEE FALDO RAYMOND J. JOHNSON WENDY SWIMMER AMY DANCER

TITLE-OR-RANK PRESIDENT DEAN DEPARTMENT CHAIR ASSOC PROFESSOR DEAN DEPARTMENT CHAIR INSTRUCTOR DEPARTMENT CHAIR ASSIST PROFESSOR ASSIST PROFESSOR PROFESSOR DEPARTMENT CHAIR PROFESSOR PROFESSOR ASSOC PROFESSOR

15 Registros seleccionados

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 82 Dado que la variable LEVEL es numrica, puede ser usada en varios tipos de clculos dentro del comando SELECT. Por ejemplo, para lograr que los nombres salgan indentados se puede reemplazar FACULTY_NAME en el select por: LPAD( .2*(LEVEL-1)) || faculty_name)

Arreglando la salida de la recuperacin jerrquica Se puede usar la clusula ORDER BY para afectar el orden de las tuplas recuperadas.

SQL> SELECT LEVEL, FACULTY-NAME, TITLE-OR-RANK 2 3 4 5 6 ORDER BY TITLE-OR-RANK, FROM PERSONNEL START WITH FACULTY-NAME IN (NICK NORMAN, BYRON CONNECT BY PRIOR FAC-ID = BOSS-ID HOGAN)

LEVEL 2 2 1 1 2 2

FACULTY-NAME BEN NELSON MARK STEWART NICK NORMAN BYRON HOGAN JACK NELSON PAT CARNER

TITLE-OR-RANK ASSIST PROFESSOR ASSIST PROFESSOR DEPARTMENT CHAIR DEPARTMENT CHAIR INSTRUCTOR PROFESSOR

6 registros seleccionados

Filtracin de tuplas desde la estructura de rbol La clusula WHERE puede ser usada para filtrar la salida del comando SELECT.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 83 SQL > SELECT LEVEL, FACULTY-NAME, TITLE-OR-RANK 2 3 4 5 6 FROM PERSONNEL START WITH FACULTY-NAME IN (NICK NORMAN, BYRON HOGAN) CONNECT BY PRIOR FAC-ID = BOSS-ID WHERE FACULTY-NAME = BEN NELSON;

LEVEL FACULTY-NAME 1 2 1 2 2 NICK NORMAN JACK NELSON BYRON HOGAN MARK STEWART PAT CARNER

TITLE-OR-RANK DEPARTMENT CHAIR INSTRUCTOR DEPARTMENT CHAIR ASSIST PROFESSOR PROFESSOR

Note que la clusula WHERE elimina una tupla (Ben Nelson) de la tabla resultante. Tambin se puede eliminar ramas completas del rbol especificando condiciones en la clusula CONNECT BY. Por ejemplo para eliminar todo el personal que trabaja directamente bajo Larry Simpson. SQL > SELECT LEVEL, FACULTY-NAME, TITLE-OR-RANK 2 3 4 5 FROM PERSONNEL START WITH FACULTY-NAME = GREG DAVIS; CONNECT BY PRIOR FAC-ID = BOSS-ID AND FACULTY-NAME != LARRY SIMPSON hijo

LEVEL FACULTY-NAME 1 2 3 4 GREG DAVIS SCOTT MIZE JAN CARNER BOB JONES

TITLE-OR-RANK PRESIDENT DEAN DEPARTMENT CHAIR ASSOC PROFESSOR

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 84 Esta operacin es llamada comnmente poda de ramas en un rbol, la que se puede ver graficamente en la figura 4.11.
GREG DAVIS

SCOTT MIZE

LARRY SIMPSON

JAN CARNER

NICK NORMAN

BYRON HOGAN

LEE FALDO

BOB JONES

JACK NELSON

BEN NELSON

MARK STEWART

PAT CARNER

RAYMOND J. JOHNSON

WENDY SWIMMER

AMY DANCER

Fig. 4.11 Podando las ramas de un rbol

4.10 Creacin y eliminacin de sinnimos Creacin de sinnimos Cuando se extraen los datos desde mltiples user-names, se convierte en una ardua tarea especificar todas las tablas calificadas o nombres de las vistas. Si se acorta este proceso, sera de gran ayuda. Esto peude ser hecho con el uso de sinnimos. Los sinnimos slo pueden ser creados para las tablas, en otros user-names. Los sinnimos son creados y almacenados en el diccionario de datos para que los usuarios del sistema los puedan utilizar. Los sinnimos son creados con el comando CREATE SYNONYM, como sigue:

CREATE [PUBLIC] SYNONYM nombre FOR [nombre de usuario.tabla | nombre-de-vista]

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 85 Si es creado un sinnimo pblico, ste se convierte en vlido para todos los usuarios. Ejemplos: SQL> CREATE SYNONYM STU FOR BOOK.STUDENT; Synonym created

SQL> CREATE PUBLIC SYNONYM GR_TAB FOR ADMINISTRATIVE.GRADE_SCALE; Synonym created

Eliminacin de sinnimos Un sinnimo puede ser eliminado del diccionario de datos con el comando DROP SYNONYM. La sintaxis del comando DROP SYNONYM es:

DROP [PUBLIC] SYNONYM nombre

Por ejemplo, si se quiere eliminar los sinnimos MY-STUDENTS y GR_TAB, se debe usar el comando:

SQL> DROP SYNONYM MY-STUDENTS; Synonym dropped

SQL> DROP PUBLIC SYNONYM GR_TAB; Synonym dropped

4.11 Diccionario de datos El diccionario de datos es un grupo de tablas y vistas que contienen informacin descriptiva de las tablas, privilegios de acceso de los usuarios y caractersticas de la base de datos. En la tabla 4.1 se muestran las tablas del diccionario, ms referenciadas por los usuarios de la base de datos frecuentemente.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 86 Nombre de la tabla USER_CATALOG USER_CONSTRAINTS USER_INDEXES USER_SEQUENCES USER_SYNONYMS USER_TABLES USER_USERS USER_VIEWS ALL_TABLES Descripcin Tablas, vistas, sinnimos, secuencias dueas del usuario Informacin acerca de las restricciones de las tablas del usuario Descripcin de los ndices propios del usuario Descripcin de las secuencias propias del usuario Descripcin de los sinnimos propios del usuario Descripcin de las tablas propias del usuario Informacin del usuario actual Descripcin de las vistas propias del usuario Descripcin de todas las tablas accesibles por el usuario

Tabla 4.1 Tablas del diccionario referenciadas frecuentemente por los usarios

Ejemplo Desplegar una columna desde USER_TABLES en el diccionario de datos SQL> SELECT 2 FROM table_name user_tables;

TABLE_NAME BORDER CUSTOMER DEPT EMP HDATES INVENTION ITEM NATION ORD PRICE PRODUCT SALGRADE

12 filas seleccionadas

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 87 A continuacin, se muestra la informacin contenida en las tablas: USER_CATALOG USER_OBJECTS USER_TABLES USER_TAB_COLUMNS

Catlogo: USER_CATALOG (CAT) La consulta al USER_CATALOG desplegar todas las tablas, vistas, sinnimos y secuencias para las cuales el usuario es propietario. La columna Table_Name muestra el nombre del objeto (an si no es una tabla), y la columna Table_Type muestra el tipo del objeto.

Select Table_Name, Table_Type From USER_CATALOG Where Table_Name like R% or Table_Name like T%;

TABLE_NAME RAIN ROSE TRUBLE TWONAME

TABLE_TYPE VIEW TABLE TABLE TABLE

El USER_CATALOG, puede ser referenciado por el sinnimo pblico CAT. Existen dos catlogos adicionales que estn disponibles. ALL_CATALOG lista todo lo que contiene la vista del USER_CATALOG, ms cualquier objeto al cual se le haya dado permiso de acceso. Cualquier objeto que haya sido definido PUBLIC tambin ser desplegado en el ALL_CATALOG. El DBA_CATALOG es una versin a nivel de catlogo del DBA, que muestra todas las tablas, vistas, secuencias y sinnimos en la base de datos. Adems de las columnas Table_Name y Table_type mostradas anteriormente en la consulta del USER_CATALOG, ALL_CATALOG y DBA_CATALOG incluyen una columna con informacin del propietario del objeto indicado.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 88 Objetos: USER_OBJECTS (OBJ) USER_CATALOG slo despliega informacin para tipos especficos de objetos. Para recuperar informacin de todos los tipos de objetos se usa USER_OBJECTS. Se puede usar esta vista para encontrar los siguientes tipos de objetos: clusters, links de bases de datos, funciones, ndices, paquetes, cuerpos de paquetes, procedimientos, secuencias, sinnimos, tablas, triggers y vistas. Las columnas de la tabla USER_OBJECTS se listan en la tabla 4.2. La tabla USER_OBJECTS (tambin conocida por su sinnimo pblico OBJ) contiene varias piezas vitales de informacin que no se encuentran en las otras vistas del diccionario de datos. Registra la fecha de creacin de los objetos (la columna Created) y la ltima vez en la cual el objeto fue alterado (la columna Last_DDL_Time). Estas columnas son muy usadas cuando se trata de reconciliar diferentes conjuntos de tablas en la misma aplicacin.

Nombre de la columna Object_Name Object_ID Object_Type Created Last_DDL_Time

Descripcin El nombre del objeto n nico ID asignado por ORACLE para el objeto El tipo del objeto (TABLE, INDEX, etc.) La fecha de creacin del objeto (columna DATE) La fecha del ltimo comando DDL usado en el objeto, incluyendo alter, grant y revoke

Timestamp

La fecha de creacin del objeto (igual que Created, pero almacenado como una columna caracter)

Status

El estado del objeto (VALID o INVALID) Tabla 4.2 Columnas en USER_OBJECTS

Ejemplo: column Last_DDL_Time format a13

select Object_Name. Created, Last_DDL_Time from USER_OBJECTS where Object_Name like R% or Object_Name like T5;

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 89 OBJECT_NAME RAIN ROSE TROBLE TWONAME CREATED 07-AUG-01 07-AUG-01 07-AUG-01 07-AUG-01 LAS_DDL_TIME 07-AUG-01 07-AUG-01 14-AUG-01 07-AUG-01

Tablas: USER_TABLES (TABS) Aunque todos los objetos del usurario son mostrados en USER_OBJECTS, se muestran pocos atributos de estos objetos all. Para tener ms informacin acerca de un objeto, se necesita mirar la vista que es especfica para ese tipo de objeto. Para las tablas, esa vista es USER_TABLES. Tambin puede ser referenciada por su sinnimo TABS.

Las columnas en USER_TABLES, pueden ser divididas en tres categoras principales (Identification, Space-Related, Statistics-Related), como se muestra en la tabla 4.3.

IDENTIFICATION Table_Name Backed_Up

SPACE-RELATED Tablespace_Name Cluster_Name Pct_Free Pct_Used Ini_Trans Max_Trans Initial_Extent Next_Extent Min_Extents Max_Extents

STATISTICS-RELATED Num_Rows Blocks Empty_Blocks Avg_Space Chain_Cnt Avg_Row_Len

Tabla 4.3 Columnas en USER_TABLES

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 90 Columnas: USER_TAB_COLUMNS (COLS) Esta tabla, lista informacin especifica de las columnas. USER_TAB_COLUMNS tambin pude ser llamada va su sinnimo pblico COLS. Las columnas que se pueden consultar la USER_TAB_COLUMNS, pueden ser separadas en tres categoras principales, como se muestra en la tabla 4.4. Las columnas Table_Name y Column_Name, contienen los nombres de las tablas y las columnas.

IDENTIFICATION Table_Name Column_Name Column_ID

DEFINITION-RELATED Data_Type Data_Length Data_Precision Data_Scale Nullable Default_Length Data_Default

STATISTICS-RELATED Num_Distinct Low_value High_Value Density

Tabla 4.4 Columnas en USER_TAB_COLUMNS

Para ver las definiciones de columna para una tabla, se consulta a USER_TAB_COLUMNS, especificando el nombre de la tabla (Table_Name) en la clusula where.

Ejemplo: Select Column_Name, Data_Type From USER_TAB_COLUMNS Where Table_Name = NEWSPAPER;

COLUMN_NAME FEATURE SECTION PAGE

DATA_TYPE VARCHAR2 CHAR NUMBER

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 91 4.12 Insercin, eliminacin y actualizacin de datos 4.12.1 Insercin de datos Se insertar un paciente en la tabla enfermo INSERT INTO VALUES enfermo(inscripcion, apellido, direccion) (63827, Prez P, Luz 8)

En esta sentencia SQL, las columnas se identifican por su nombre. La asociacin de la columna con su valor es posicional. Los valores deben cumplir con los tipos de datos definidos. Los valores constantes de tipo carcter o fecha deben ir encerrados entre comillas simples ( ).

La figura 4.12 muestra la sintaxis de la clusula INSERT.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 92 INSERT INTO <tabla>

<columna>

<bloque selecc>

;
VALUES

<valor>

,
Fig. 4.12 Sintaxis de la clusula INSERT

Ejemplos de insercin 1) INSERT INTO plantilla (hospital_cod, sala_cod, empleado_no, apellido, funcion, turno, salario) VALUES (22,2,12345, Garca J., Enfermero, M, 3000000)

Esta sentencia insertar al enfermero J. Garca en la tabla de personal PLANTILLA con un sueldo de $3.000.000 anuales y el nmero del empleado 12345. Trabaja en el hospital 22, sala 2.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 93 2) INSERT INTO VALUES plantilla (22,2, 12345, Garca J. Enfermero, M, 3000000)

Esta sentencia insertar la misma fila que en el ejemplo anterior, en el supuesto de que al definir la tabla PLANTILLA, hayamos definido las columnas en el mismo orden con que especificamos los valores de este INSERT, es decir, hospital_cod, sala_cod, empleado_no...

3) INSERT INTO plantilla (empleado_no, apellido) VALUES (12345, Garcia J.)

Esta sentencia inserta una fila parcial, siempre que para las columnas no especificadas est permitido el valor nulo.

4) INSERT INTO SELECT FROM WHERE

varon inscripcion, apellido, direccion, fecha_nac, s, nss enfermo s = M

Esta sentencia copiar la informacin de los pacientes varones en una tabla llamada VARON.

5) SQL> INSERT INTO STUDENT VALUES (S001, DOTTIE WILSON, 2 1600 PENN AVE, 10-OCT-65, FEMALE);

Reocord inserted

6) Insertemos la siguiente tupla: Faculty ID: L01 Faculty name: Leo Jones Department: Management Gender: Male Salary: $45.000

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 94 SQL> INSERT INTO FACULTY VALUES (L01, LEO JONES, 2 MANAGEMENT, MALE, 45000);

Record inserted

Si se desa insertar los valores de los atributos en un orden distinto al especificado en la definicin de la tabla, se debe especificar el orden de los atributos. Insertemos otra tupla con los atributos en diferente orden.

7) Birthdate: November 22, 1963 Student nmae: Winston Neely Student ID: S012 Gender: Male Address: #1 Buldog Dr.

SQL> INSERT INTO STUDENT 2 3 4 (BIRTHDATE, STUDENT_NAME, STU_ID, GENDER, ADDRESS) VALUES (22-NOV-63, WINSTON NEELY, S012, MALE, #1 BULLDOG DR.);

Record inserted

Si se desa insertar un valor nulo en un atributo, existen dos mtodos para hacerlo: El primer mtodo consiste en colocar la constante ORACLE NULL en el lugar del atributo en la lista de valorees. Por ejemplo, suponga que queremos insertar la siguiente tupla en la tabla student.

Student ID: S013 Student mane: Bonny Simpson Address: Desconocido Birthdate: Desconocido Gender: female

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 95 SQL> INSERT INTO STUDENT VALUES 8S013, BONNY SIMPSON, 2 NULL, NULL, FEMALE);

Record inserted

El segundo mtodo para insertar un valor nulo en un atributo, es especificar el nombre del atributo en una lista de atributos y omitir el nombre del o los atributos que van a ser asignados a valores nulos. Cualquier item no especificado en la lista de atributos es automticamente asignado a nulo. Usemos el mismo ejemplo anterior para ilustrar este mtodo. SQL> INSERT INTO STUDENT 2 3 (STU-ID, STUDENT_NAME, GENDER) VALUESS (S013, BONNY SIMPSON, FEMALE);

Record inserted

Si se quiere insertar la fecha de hoy en un atributo (del tipo DATE), se puede usar la constante predefinida SYSDATE

4.12.2 Eliminacin de filas de una tabla La sintaxis de la clusula DELETE se muestra en la figura 4.13.

DELETE

FROM

<tabla>

WHERE

<Predicado>

Fig. 4.13. Sintaxis de la clusula DELETE

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 96 Ejemplos: 1) DELETE FROM enfermo

WHERE inscripcion = 74385

Esta sentencia da de baja al paciente que fue registrado con el nmero 74385.

2) DELETE FROM enfermo

Esta instruccin borrar todas las filas de la tabla ENFERMO, pero no borra su definicin del diccionario.

4.12.3 Actualizacin de datos La sintaxis del UPDATE se muestra en la figura 4.14.

UPDATE SET WHERE

ntabla columna1 = valor1, ... , columna n = valor n condicin

SET indica qu columnas se actualizarn y con qu valores.

WHERE indica con qu filas se ha de trabajar.

Si se omite el WHERE, la actualizacin afectar a todas las ocurrencias de la tabla.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 97

UPDATE

<Tabla>

<Column> SET

<Expresin>

<Column>

<Bloque Seleccin>

WHERE

<predi cado>

Fig. 4.14 Sintaxis de la clusula UPDATE

Ejemplos

1) UPDATE enfermo SET direccion = Castellana 95

WHERE inscripcion = 74835 Este comando cambiar la direccin del paciente 74835.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 98 2) UPDATE enfermo SET direccion = NULL

Este comando borrar la direccin de todos los pacientes.

3) UPDATE enfermo SET (direccion, fecha_nac) = (SELECT FROM WHERE ) WHERE inscripcion = 12345 Este comando igualar la direccin y fecha de nacimiento del paciente 12345 a los valores de las columnas correspondientes almacenadas para el paciente 67328. direccion, fecha_nac enfermo inscripcion = 67328

4) Cambiar un registro de la tabla ENFERMO

UPDATE SET WHERE

enfermo direccion = Castellana 60 inscripcion = 63827

INSCRIPCION 63827

APELLIDO Ruiz P.

DIRECCION Castellana 60

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 99 4.13 Transacciones 4.13.1 Concepto de transaccin Es un concepto utilizado para representar la unidad lgica de procesamiento de una B.D.

Es una unidad de trabajo atmica, que es o completamente ejecutada o completamente no ejecutada.

Las transacciones atmicas deben poseer varias propiedades: Propiedades ACID

a) Atomicity b) Consistency c) Isolation d) Durability

(Atomicidad) (Consistencia) (Aislacin) (Durabilidad)

a) Atmicas Sucede completamente o nada de ella. Si sucede, accin es instantnea (indivisible). Otros procesos no ven estados intermedios.

b) Consistentes Preservan invariantes del sistema. Ejemplo: Ley de conservacin del dinero. Durante la transaccin, las invariantes pueden no cumplirse (pero es invisible).

c) Independientes Transacciones simultneas: Serializables. Resultado equivalente a si se ejecutaran secuencialmente, en algn orden.

d) Durables Una vez consolidada (commit), sucede y resultado se hace permanente. Ninguna falla (despus del commit) puede afectarla. Almacenamiento estable.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 100 4.13.2 Sentencias COMMIT y ROLLBACK Consolidar y deshacer una transaccin: Sentencias COMMIT y ROLLBACK. La sentencia COMMIT hace permanente todos los cambios realizados en la transaccin actual.

Tipos de COMMIT: Explcitos Implcitos: Toda instruccin DDL es hecha permanente (Commited) implcitamente. Por ejemplo: CREATE DROP, etc. Cuando se termina la sesin en forma normal en cualquier ambiente (SQL *Plus, etc), hay un commit implcito.

Ejemplo de COMMIT a una sentencia SQL Eliminar al empleado Lerner y hacer explicitamente un commit de la transaccin a la base de datos. SQL > DELETE FROM emp 2 WHERE ename = LERNER

1 row deleted SQL > COMMIT; Commit completed

La transaccin actual puede ser deshecha con la sentencia ROLLBACK.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 101 Ejemplo Transferir a Jones al grupo de ventas SQL>UPDATE emp 2 3 SET WHERE job = SALESMAN, deptno = 30 ename = JONES;

1 row updated

Todos los empleados en la compaa que tengan por nombre Jones han sido transferidos al grupo de ventas. Se desea deshacer la transaccin y repetir la transaccin, especificando el nmero de empleado de Jones

SQL> ROLLBACK; Rollback completed

SQL> UPDATE 2 3 SET WHERE

emp job = SALESMAN, deptno = 30 empno = 7566;

1 row updated

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 102 Una transaccin es definida como todos los cambios hechos a la base de datos, entre commits sucesivos. (Figura 4.15).

COMMIT
INSERT

INSERT

DELETE

INSERT

UPDATE

UPDATE

COMMIT
Fig. 4.15 Concepto de transaccin

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 103 La figura 4.16 muestra que al marcar un punto particular dentro de una transaccin, mediante la sentencia SAVEPOINT, un posterior ROLLBACK hace que los cambios efectuados se deshagan hasta ese punto y no completamente.

COMMIT
INSERT

SAVE POINT MARKER A

UPDATE SAVE POINT MARKER B

INSERT

DELETE

ROLLBACK
Fig. 4.16. Uso del SAVEPOINT dentro de una transaccin

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 104 Ejemplos 1) Insertar un nuevo departamento en la tabla DEPT y crear un savepoint para la transaccin. SQL> INSERT INTO dept

2 VALUES (70, PERSONNEL, TAHITI), 1 fila creada

SQL> SAVEPOINT A; Savepoint creado.

Usar la sentencia ROLLBACK TO SAVEPOINT implica devolverse solo una porcin de la transaccin, hasta inmediatamente despus del SAVEPOINT.

2) Insertar un nuevo departamento en la tabla DEPT y crear un savepoint para la transaccin.

SQL> INSERT INTO

dept

2 VALUES (80,EDUCATION,MAUI); 1 fila creada

SQL> SAVEPOINT B; 1 savepoint creado.

3) Cambiar la ubicacin del departamento 80 a Kauai SQL> UPDATE dept 2 SET 3 WHERE 1 fila actualizada loc = KAUAI deptno = 80;

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 105 4) Deshacer la transaccin, a partir del savepoint B SQL> ROLLBACK TO B; Rollback completo.

4.14 Tablas 4.14.1 Creacin de una tabla Antes de llevar a cabo la creacin de una tabla es muy conveniente planificar: Nombre de la tabla Nombre de cada columna Tipo de datos almacenados en cada columna Tamao de cada columna Informacin adicional (columnas obligatorias, etc.)

Una sintaxis simplificada del comando CREATE se muestra en la figura 4.19.


<nombre tabla>

CREATE

TABLE

<especific columna>

NOT

NULL

,
Fig. 4.19 Sintaxis del comando CREATE

Ejemplo: SQL> CREATE TABLE STUDENT (STU_ID CHAR (6) NOT NULL, 2 3 4 5 STUDENT_NAME CHAR (17), ADDRESS CHAR (20), BIRTHDATE DATE, GENDER CHAR (6))

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 106 Table created

SQL> CREATE TABLE COURSE (COURSE_ID CHAR(6) NOT NULL, 2 3 4 5 Table created COURSE_TITLE CHAR(20), SECTION_NO NUMBER (2), STU_ID CHAR (6) NOT NULL, FAC_ID CHAR (6) NOT NULL) )

SQL> CREATE TABLE FACULTY (FAC_ID CHAR (6) NOT NULL, 2 3 4 5 Table created SQL> REMARK Borremos las tablas primero SQL> DROP TABLE STUDENT; Table dropped. FACULTY_NAME CHAR (17), DEPARTMENT CHAR (10), GENDER CHAR (6), SALARY NUMBER (5) )

SQL> DROP TABLE COURSE; Table dropped.

SQL> DROP TABLE FACULTY; Table dropped.

Nombre de las tablas: El nombre para una tabla debe seguir las reglas estndares para nombrar cualquier objeto de la base de datos en ORACLE.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 107 Requerimientos de la sentencia CREATE TABLE: Nombre de la tabla Nombre de la columna Tipo de la columna

Reglas para el nombre: 1. Debe ser entre 1-30 caracteres y el primer carcter debe ser alfabtico. 2. Debe contener slo los caracteres: A Z, a z, 0 9, _ (underscore) ($ y # son legales, pero su uso no se recomienda) 3. No debe ser una palabra reservada de SQL. 4. No debe ser el nombre de otro objeto ya existentes, para el mismo usuario.

Debe considerarse que los nombres de las tablas son los mismos en mayscula y minscula (por ejemplo, EMP = eMP). Los nombres de columnas deben adherirse a las reglas 1 a 3. La tabla 4.6 especifica los distintos tipos de datos y su significado para las columnas de una tabla. Tipo de dato Puede contener

CHAR (tamao) Valores de caracteres consisten en letras maysculas y minsculas, nmeros y caracteres especiales (+, -, %, $, &, etc.). Tamao es el largo mximo, en caracteres, de valores en esta columna (no ms largo de 255). El tipo de dato CHAR de ORACLE7 no es equivalente al tipo de dato CHAR de la versin 6.0 DATE Valores de fecha y hora desde el 1 de Enero de 4712 AC hasta 31 de Diciembre de 4712 DC. LONG Similar a CHAR, pero los valores pueden ser hasta 64K en la versin 6.0, y hasta 2 Gbytes en ORACLE7. No se puede definir ms de una columna LONG por tabla. Las tablas no pueden participar en un join usando una columna LONG como una de las columnas del join o bsqueda basada en una columna LONG. NUMBER Los valores Number consisten en dgitos de 0 9, con un signo opcional

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 108 (+ o -) y un punto decimal. Los valores pueden ser de un ancho de 38 dgitos (ms el punto decimal y el signo). [NOT] NULL Especifica que esta columna no puede contener un valor nulo. Tabla 4.6 Tipos de datos para una columna

Ejemplos: Crear una tabla llamada ENFERMO con seis columnas, la primera de las cuales debe siempre tener algn valor al insertar una nueva fila.

CREATE TABLE enfermo ( inscripcion apellido direccion fecha_nac s nss ) NUMBER(5) NOT NULL, CHAR (25), CHAR (12), DATE, CHAR(1), NUMBER (9)

Creacin de una tabla con datos recuperados en una consulta: Con la clusula AS no es necesario especificar tipos ni tamao de las columnas, ya que vienen determinados por los tipos y tamaos de las recuperadas de la consulta. CREATE TABLE bonus (APELLIDO, OFICIO, SALARIO, COMISION) AS SELECT FROM WHERE OR APELLIDO, OFICIO, SALARIO, COMISION emp OFICIO = director COMISION > 0.25 * SALARIO

Por ejemplo: Las restricciones de ORACLE 7 para las columnas de una tabla se muestran en la tabla 4.7. La sintaxis completa del comando CREATE TABLE con todo su detalle, se muestra en la figura 4.20.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 109 Restricciones declarativas para restringir valores de columnas en SQL (ORACLE V. 7.0) TIPO NOT NULL UNIQUE CHECK PRIMARY KEY FOREIGN KEY DEFINICION No se permiten columnas con valores nulos Requiere que valores de la columna sean nicos Requiere que valores de la columna satisfagan una expresin lgica Requiere que valores de la columna sean nicos y NOT NULL Requiere que valores de la columna tengan un valor igual a uno definido UNIQUE o PRIMARY KEY en una tabla relacionada Tabla 4.7 Restricciones para las columnas de una tabla.

Comando CREATE TABLE


CREATE TABLE schema. , tabla table_constraint

Tipo de dato de la columna DEFAULT expr table_constraint column_constraint

PCTFREE integer PCTUSED integer INITRANS integer MAXTRANS integer TABLESPACE tablespace STORAGE storage_clause CLUSTER cluster (

,
columna

ENABLE enable_clause DISABLE disable_clause

AS subquery

Fig. 4.20 Sintaxis del comando CREATE TABLE

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 110 Clusula CONSTRAINT Propsito: Definir una restriccin de integridad. Una restriccin de integridad es una regla que restringe los valores para una o ms columnas en la tabla. Sintaxis: table_constraint ::=

CONSTRAINT constraint

, ( ,
columna

UNIQUE PRIMARY KEY

FOREIGN KEY

columna

) REFERENCES
esquema.

table

, (
columna

ON

DELETE

CASCADE

CHECK (condicin)

USING INDEX PCTFREE integer

EXCEPTION INTO esquema. PCTUSED integer INITRANS integer MAXTRANS integer TABLESPACE tablespace STORAGE storage_clause

table

DISABLE

Fig. 4.20 (Continuacin)

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 111 Column_constraint::

CONSTRAINT constraint

NULL NOT UNIQUE PRIMARY KEY

REFERENCES esquema.

table.

,
(columna)

ON DELETE CASCADE

CHECK (condicin)

USING INDEX PCTFREE integer

EXCEPTION INTO esquema. PCTUSED integer INITRANS integer MAXTRANS integer TABLESPACE tablespace STORAGE storage_clause

table

DISABLE

Fig. 4.20 (Continuacin)

Ejemplos: a) Este ejemplo permite definir una restriccin de integridad referencial con la sintaxis de restriccin de tabla (table-constraint).

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 112 CREATE TABLE emp (empno ename job mgr hiredate DATE, sal comm deptno NUMBER (7,2), NUMBER (7,2), NUMBER (2), NUMBER(4), VARCHAR2 (10), VARCHAR2 (9), NUMBER (4),

CONSTRAINT fk_deptno FOREIGN KEY (deptno) REFERENCES dept (deptno) )

Notar que las dos definiciones de foreign key omiten la opcin ON DELETE CASCADE, causando que ORACLE prohiba borrar un departamento si cualquier empleado trabaja en ese departamento. Si se usa la opcin ON DELETE CASCADE, ORACLE permitir el borrado de los valores de las claves referenciadas en la tabla padre y automticamente borrar las filas dependientes en la tabla hijo para mantener la integridad referencial.

b) En el ejemplo siguiente se crea la tabla EMP, y se define y habilita la restriccin de integridad referencial FK_DEPTNO, y se usa la opcin ON DELETE CASCADE. CREATE TABLE emp (empno ename job mgr hiredate sal comm deptno NUMBER(4), VARCHAR2(10), VARCHAR2(9), NUMBER (4), DATE NUMBER (7,2), NUMBER(7,2), NUMBER(2)

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 113 CONSTRAINT fk_deptno REFERENCES dept(deptno) ON DELETE CASCADE )

Debido a la opcin ON DELETE CASCADE, ORACLE toma en cascada cualquier borrado de un valor DEPTNO en la tabla DEPT al valor DEPTNO de su dependiente fila en la tabla EMP. Por ejemplo, si el departamento 20 es borrado desde la tabla DEPT, ORACLE borrar los empleados de ese departamento de la tabla EMP.

c) Se crea la tabla DEPT y se define una restriccin CHECK en cada una de las columnas de la tabla. CREATE TABLE dept (deptno NUMBER CONSTRAINT check_deptno CHECK (deptno BETWEEN 10 AND 99) DISABLE, dname VARCHAR2(9) CONSTRAINT check_dname CHECK (dname = UPPER (dname)) DISABLE, loc VARCHAR2(10) CONSTRAINT check_loc CHECK (loc IN (DALLAS,BOSTON,NEW

YORK,CHICAGO) ) DISABLE) Cada restriccin restringe los valores de la columna en la cual se define: CHECK_DEPTNO asegura que el nmero de departamento no sea menor que 10 ni mayor que 99. CHECK_DNAME asegura que todos los nombres de departamento estn en mayscula. CHECK_LOC restringe la ubicacin de los departamentos a Dallas, Boston, New york o Chicago.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 114 d) Se puede usar la sintaxis de column_constraint para definir una clave primaria en una nica columna. Esta sentencia crea la tabla DEPT y define y habilita una clave primaria en la columna DEPTNO: CREATE TABLE dept (deptno dname loc NUMBER, CONSTRAINT pk_dept PRIMARY KEY,

VARCHAR2(9), VARCHAR2(10) )

La restriccin PK_DEPT identifica la columna DEPTNO como la clave primaria de la tabla DEPTNO. Esta restriccin asegura que no existen dos departamentos en la tabla que tengan el mismo nmero de departamento y que los nmeros de departamento no son NULL.

e) Alternativamente, se puede definir y habilitar la restriccin anterior con la sintaxis de table_constraint: CREATE TABLE dept (deptno dname loc NUMBER, VARCHAR2(9), VARCHAR2(10),

CONSTRARINT pk_dept PRIMARY KEY (deptno) )

f)

Para definir la tabla EMP de la que es dueo SCOTT, podramos escribir esta sentencia: CREATE TABLE scott.emp (empno ename NUMBER VARCHAR2(10) CONSTRAINT pk_emp PRIMARY KEY, CONSTRAINT nn_ename NOT NULL CONSTRAINT upper_ename CHECK (ename = UPPER(ename)), job mgr VARCHAR2(9), NUMBER CONSTRAINT fk_mgr REFERENCES scott.emp(empno),

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 115 hiredate DATE sal comm deptno NUMBER(10,2) NUMBER(9,0) NUMBER(2) DEFAULT SYSDATE, CONSTRAINT ck_sal CHECK (sal > 500), DEFAULT NULL, CONSTRAINT nn_deptno NOT NULL CONSTRAINT fk_deptno REFERENCES scott.dept(deptno) ) PCTFREE 5 PCTUSED 75

4.14.2 Borrado de una tabla La figura 4.21 muestra la sintaxis para borrar una tabla. DROP TABLE <Tabla>

Fig. 4.21 Sintaxis del comando DROP TABLE Borra la tabla de la base de datos. Borrar toda la informacin contenida en la tabla, es decir, todas las filas. Borrar tambin la definicin de la tabla del Diccionario de datos.

Ejemplo: DROP TABLE enfermo

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 116 4.14.3 Modificacin de la estructura de una tabla La figura 4.22 muestra la sintaxis para modificar la estructura de una tabla. ALTER TABLE <tabla>

ADD ( <especific column> NOT NULL )

MODIFY ,

; Fig. 4.22 Sintaxis del comando ALTER TABLE Ejemplo: ALTER TABLE enfermo ADD (altura NUMBER(3,2))

Este comando aadir una columna llamada altura, a la tabla ENFERMO. Esta columna es de tipo numrico, con dos decimales.

Ejemplo: ALTER TABLE enfermo MODIFY (altura NUMBER(4,2))

Este comando aumentar en un dgito el tamao de la parte entera de la columna altura

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 117 Debe considerarse: 1. Es posible disminuir el tamao de una columna con este comando, si la columna contiene NULLS en todas las filas. 2. La opcin ADD ... NOT NULL, slo ser posible si la tabla est vaca. 3. La opcin MODIFY ... NOT NULL slo podr realizarse cuando la tabla no contenga ninguna fila con valor nulo en el campo en cuestin.

Modificacin de tablas En caso de requerir remover una columna de una tabla, se deben seguir los tres siguientes pasos:
TEMPTAB

1. Crear una tabla duplicada SQL> CREATE TABLE temptab

ORIGTAB

2 3

AS SELECT col1, col2, col4 FROM origtab;

Table created.

2. Borrar la tabla fuente original


TEMPTAB

SQL> DROP TABLE origtab;


ORIGTAB

Table dropped.

3. Renombrar la nueva tabla (opcional)


TEMPTAB ORIGTAB

SQL> RENAME temptab 2 TO origytab:

Table renamed.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 118 4.15 Vistas 4.15.1 Concepto de vista

EMP_NO 7782 7839 7934

APELLIDO CEREZO REY MUOZ

OFICIO DIRECTOR PRESIDENTE EMPLEADO 7839 09-JUN-81 17-NOV-81 7782 23-ENE-82 318500 650000 169000 10 10 10

7566 7902 7369 7876 7788 7499 7521 7654 7698 7844 7900

JIMENEZ FERNANDEZ SANCHEZ ALONSO GIL ARROYO SALA MARTIN NEGRO TOVAR JIMENO

DIRECTOR ANALISTA EMPLEADO EMPLEADO ANALISTA VENDEDOR VENDEDOR VENDEDOR DIRECTOR VENDEDOR EMPLEADO

7839 02-ABR-81 7566 03-DEC-81 2902 17-DEC-80

386750 390000 104000

20 20 20 20 20 39000 65000 182000 30 30 30 30 30 30

7788 03-MAY-87 143000 7566 30-MAR-87 390000 7698 20-FEB-81 7698 22-FEB-81 7698 28-SEP-81 208000 162500 162500

7839 01-MAY-81 370500 7698 08-SEP-81 7698 03-DEC-81 195000 123500

Una VISTA es una ventana a travs de la que se puede ver o cambiar informacin de una tabla. Tiene la misma estructura que una tabla: filas y columnas. No contiene datos. Las vistas se tratan de forma semejante a una tabla.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 119 4.15.2 Creacin de una vista La figura 4.23 muestra la sintaxis para crear una vista.
CREATE VIEW <vista>

<columna>

AS

<bloque selecc>

Figura 4.23. Sintaxis del comando CREATE VIEW Ejemplo: CREATE VIEW AS SELECT FROM APELLIDO, SALARIO, SALARIO*12, DEPT_NO emp; pagos (NOMBRE, SAL_MES, SAL_AO, DEPT_NO)

Ejemplo: Cambiar los nombres de los atributos a travs de una vista SQL> CREATE VIEW TEACHERS2 (FID, NAME, DEPT, SEX) 2 3 AS SELECT FAC_ID, FACULTY_NAME, DEPARTMENT, GENDER FROM FACULTY;

View created.

Ejemplo: Especificar valores calculados en la vista SQL> CREATE VIEW DOUBLE_SAL (NAME, SAL) AS 2 3 SELECT FACULTY_NAME, SQRT(SALARY*2) FROM FACULTY;

View created.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 120 4.15.3 Actualizacin de una vista Dado que la actualizacin de una vista, implica la actualizacin de las tablas bases, en algunas ocasiones no es posible efectuar esta operacin (ver comando UPDATE).

En todo caso, la utilizacin de la opcin WITH CHECK OPTION en la creacin de una vista, nos asegura que los INSERT y UPDATE realizados a travs de la vista no afectarn los datos que la vista no es capaz de seleccionar. La figura 4.24 muestra la creacin de una vista, usando la opcin WITH CHECK OPTION. EMPVU

CREATE VIEW EMPVU AS


SELECT Sintaxis SELECT ... FROM ... WHERE ... WITH CHECK OPTION

EMP

Figura 4.24 Opcin WITH CHECK OPTION en la creacin de la vista

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 121 Sintaxis del create view: CREATE VIEW nombre_vista [ (alias, (alias] ... ) AS consulta [WITH CHECK OPTION [CONSTRAINT restriccin] ]

Ejemplo: Crear una vista que contenga todas las columnas de la tabla EMP para el departamento 20, use WITH CHECK OPTION. Adems, se desea ejecutar actualizacin de la vista. SQL> CREATE VIEW empvu20 2 3 4 5 AS SELECT FROM * emp

WHERE deptno = 20 WITH CHECK OPTION;

View created.

Se rechaza la actualizacin, ya que se estn afectando datos la vista no es capaz de seleccionar. SQL> UPDATE empvu20 2 3 SET deptno = 30 WHERE empno = 7369;

UPDATE empvu20 * ERROR at line 1: ORA-01402: view WITH CHECK OPTION where-clause violation

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 122 Ejemplo: La vista es sensitiva a quien la usa.

CREATE VIEW AS SELECT FROM WHERE

Myemps * emp depto in (SELECT FROM WHERE deptno emp ename = user)

4.15.4 Borrado de una vista El comando usado para eliminar una vista desde el diccionario de datos es el comando DROP VIEW. El formato de este comando es: DROP VIEW nombre-vista Ejemplo: Eliminar la vista TEACHERS. SQL> DROP VIEW TEACHERS; View created.

4.16 Indices Los ndices son estructuras opcionales asociadas con tablas, usados para agilizar la ejecucin de la consulta y/o garantizar la unicidad. La figura 4.25 muestra un ndice por apellido.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 123

SM

ADAMS . rowid ALLEN rowid BLAKE - rowid

CLARK rowid FORD rowid JAMES rowid JONES - rowid

KING rowid MARTIN rowid MILLER rowid SCOTT - rowid

SMITH rowid TURNER rowid WARD - rowid

Figura 4.25 Ejemplo de un ndice

El servidor ORACLE accesa a los datos de la tabla en una de dos formas: FULL TABLE SCAN (secuencial) INDEX (selectivo)

Cada fila en la base de datos tiene una nica direccin. Se puede examinar la direccin de una fila, consultando la pseudo columna ROWID. Valores de esta pseudo columna son un string de hexadecimales representando la direccin de cada fila, en el formato: Block.row file Donde: block: Identifica el bloque de datos del archivo de datos que contiene la fila. La longitud depende del sistema operativo. row: String de 4 dgitos que identifica la fila en el bloque de datos (la primera fila en el bloque tiene el nmero cero) file: Identifica el archivo que contiene la fila (el primer archivo de datos tiene el nmero cero). La longitud depende del sistema operativo.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 124 Ejemplo: 0000000F.0000.0002 Primera fila (0000) Bloque de datos 15 (0000000F) Archivo de datos 2 (0002)

Regla general para indexar: Crear un ndice si se anticipan recuperaciones frecuentes menores que 10 y 15% de las filas en una tabla grande y las columnas son referenciadas frecuentemente en la clusula WHERE.

Caractersticas de las columnas para indexar La columna es frecuentemente usada en la clusula WHERE Cada valor es nico (mejor caso) Amplio rango de valores Muchos nulos / relativamente pocos valores

Una tabla puede tener cualquier nmero de ndices, lo que implica un compromiso entre la velocidad de la consulta versus la velocidad de actualizacin.

ORACLE actualiza automticamente los ndices. No existe impacto en la sintaxis de SQL.

Cracin de ndices Sintaxis ndice simple CREATE INDEX nombre-indice

ON nombre_tabla (nombre_columna [, nombre_columna] ... )

Ejemplo: Crear un ndice simple en la columna ENAME SQL> CREATE INDEX 2 ON emp (ename); i_emp_ename

Index created.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 125 Indice usado: SQL> SELECT 2 3 FROM WHERE * emp ename = SMITH;

Indice sin usar: SQL> SELECT * 2 FROM emp;

Se pueden crear ndices nicos, para asegurar que dos filas no contendrn valores idnticos en la columna o columnas indexadas.

Sintaxis CREATE UNIQUE INDEX nombre-indice

ON nombre_tabla (nombre_columna [, nombre_columna] ... ) Ejemplo Crear un ndice nico en la columna EMPNO de la tabla EMP para incrementar el desempeo y garantizar valores nicos para los nmeros de los empledos SQL> CREATE UNIQUE INDEX 2 ON emp(empno); i_emp_empno

Index created

Los ndices concatenados, crean una entrada del ndice compuesta de valores de datos desde cada columna especificada en la sentencia CREATED INDEX; se pueden incluir un mximo de 16 columnas en un solo ndice.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 126 Ejemplo: Crear un ndice para las columnas EMPNO y ENAME SQL> CRETE INDEX i_empno_ename 2 ON emp (empno, ename);

Index created

4.17 Pseudo columnas de ORACLE Una pseudo columna se comporta de manera similar a una columna de la tabla, pero sus datos no estn realmente almacenados en una tabla. En ORACLE se tienen las siguients pseudo columnas: CURRVAL NEXTVAL LEVEL ROWID ROWNUM

a) ROWID La pseudo columna ROWID es usada en la lista del select de una consulta. Retorna la direccin de la fila. El formato externo de un ROWID es un string de 18 caracteres. La pseudo columna ROWID retorna un valor de tipo ROWID. Por ejemplo, la siguiente consulta retorna todos los rowids en la tabla rooms:

SELECT ROWID FROM rooms;

ROWID 00000045.0000.0002

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 127 00000045.0001.0002 00000045.0002.0002 00000045.0003.0002 00000045.0004.0002

b) ROWNUM ROWNUM retornar el nmero de fila actual en una consulta. Es til para limitar el nmero total de filas, y se usa principalmente en la clusula WHERE de consultas y la clusula SET de sentencias de UPDATE. ROWNUM retorna un valor NUMBER. Por ejemplo, la siguiente consulta retorna slo la primera de dos filas desde la tabla STUDENT.

SELECT FROM WHERE

* student ROWNUM < 3;

La primera fila tiene ROWNUM 1, la segunda tiene ROWNUM 2, etc.

El valor ROWNUM es asignado a las filas antes de que se haga un ordenamiento (va la clusula ORDER BY). Como resultado, no se puede usar ROWNUM para retornar la n sima fila ms alta en el orden de bsqueda.

4.18 Secuencias Una secuencia es un objeto de la base de datos, a partir de la cual mltiples usuarios pueden generar valores enteros nicos. Se pueden usar las secuencias, para generar automticamente valores asociados a claves primarias.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 128 Sintaxis abreviada CREATE SEQUENCE secuencia [INCREMENT by {1 | n} ] [START WITH n] [ {MAXVALUE n | NOMAXVALUE } ] [ {MINVALUE n | NOMINVALUE } ] ...

Ejemplos: a) Crear una secuencia simple para EMPNO, comenzando con el nmero 8000 SQL> CREATE SEQUENCE s_emp_empno START WITH 8000; Secuencia creada

b) Crear una secuencia simple para DEPTNO, empezando con el nmero 100. SQL> CREATE SEQUENCE s_dept_deptno START WITH 100; Secuencia creada

c) Desplegar el prximo nmero de secuencia disponible para la secuencia EMP_EMPNO SQL> SELECT s_emp_empno.nextval 2 FROM dual;

NEXTVAL 8000

d) Insertar un nuevo departamento a la tabla dept SQL> INSERT INTO dept values (s_dept_deptno.nextval, &dname, &loc);

Se debe borrar una secuencia, para removerla de la base de datos

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 129 Ejemplo: Borrar la secuencia s_dept_deptno SQL> DROP SEQUENCE s_dept_deptno; Secuencia borrada

4.19 SQL inserto en un lenguaje de programacin (ESQL, Embedded SQL) La figuras 4.26 muestra el uso combinado de un lenguaje de programacin y un lenguaje de base de datos para el desarrollo de aplicaciones.

Sistema del Mundo Real R

Sistema de Base de Datos Y, con LBD SQL

Lenguaje de Programacin X

Fig. 4.26 Composicin de un SBD y de un LPR para el desarrollo de aplicaciones


Diferencia de impedancia entre un Sistema de Base de datos y el Lenguaje de Programacin husped (Figura 4.27)

SBD utiliza expresiones que trabajan con conjuntos. LPR ofrece expresiones a nivel del registro

Lenguajes de BD son declarativos. Lenguajes de programacin son imperativos

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 130 SBD soportan muchas instancias de pocos tipos de datos. LPR soportan pocas instancias de datos correspondiendo a una multiplicidad de datos

SBD - LPR

LPR

SBD

INTERFACE
Fig. 4.27 Diferencia de impedancia entre un SBD y un lenguaje de programacin.

En ESQL, toda la funcionalidad del modo interactivo es utilizable en modo inserto (embedded). Hay que tener en cuenta algunas consideraciones especiales: a) El programa ha de tener una zona de almacenamiento para contener una fila (igual que cuando se recupera un registro de un archivo convencional). b) Los comandos de SQL se deben transformar para que tengan un formato que sea aceptado por el compilador del lenguaje de programacin. c) Se necesitan medios para procesar una tabla que contenga muchas filas (de registros), de modo que se pueda referenciar cada vez una fila.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 131 Localizacin y utilizacin de la zona de almacenamiento: El almacenamiento, para los datos que han de comunicarse hacia o desde la base de datos SQL, se asigna definiendo una seccin especial DECLARE SECTION, en el programa de aplicacin. El formato de la fila o registro se define para referenciarlo en el programa.

El comando SQL SELECT, referencia a los nombres de las tablas y de las columnas definidas en SQL, y los asocia con el esquema definido para el registro. Cuando una aplicacin hace una peticin a SQL, la aplicacin necesita saber si la peticin fue completada con xito y, si no fue as, por qu razn. Por lo tanto, se necesita un rea de comunicacin en el programa de aplicacin, para que SQL almacene all la informacim sobre el estado de la peticin; esta informacin indicar si el ltimo comando tuvo xito y, si no fue as, por qu no lo tuvo.

SQLCA: Area de Comunicacin entre el programa y el SBD. (SQL Comunication Area)

Status de la comunicacin: SQLCODE = 0 : OK, operacin se ha realizado como se pidi > 0 : WARNING, Indica una condicin especial tal como: no se han SQLCODE encontrado filas o se ha llegado al final de los datos < 0 : ERROR, Indica una condicin anormal El preprocesador El preprocesador se utiliza para analizar el cdigo del programa fuente, con sus comandos SQL insertos, antes de que se compile de la forma usual. El preprocesador realiza dos funciones: a) Convertir los comandos de SQL en sentencias tpicas del lenguaje de programacin husped. Los comandos de SQL utilizan la facilidad CALL del lenguaje para establecer la interface con el sistema de base de datos, utilizando parmetros y el rea de Comunicacin para identificar los servicios pedidos.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 132 b) Generar un mdulo de acceso, que se utiliza para definir los requerimientos al sistema que implica cada peticin SQL contenida en el programa de aplicacin (interaccin con el sistema de almacenamiento de la base de datos, estrategias de acceso, etc.). Este mdulo de acceso se almacena en la base de datos SQL y est sujeto a todos los controles normales de acceso. El preprocesador controla que el usuario tenga permiso para acceder a los datos del SQL solicitados.

Proceso de una tabla: El resultado de un comando SQL, en muchos casos ser una tabla que contenga varias filas. SQL utiliza el concepto de cursor para que un programa de aplicacin pueda acceder a una fila cada vez, igual que ocurrira con los registros si se leyera un archivo convencional. El cursor se utiliza para referenciar una fila cada vez. Se define como parte del comando SELECT y se usa en los comandos OPEN, FETCH, DELETE, UPDATE y CLOSE.

Proceso dinmico de comandos: Los comandos SQL son preprocesados y compilados dentro de un programa de aplicacin. Algunas aplicaciones pueden desear formular sus peticiones en tiempo de ejecucin. Por ejemplo, puede que haya que especificar en tiempo de ejecucin un criterio de seleccin que se pasa como un parmetro de entrada. SQL, por su facilidad de proceso dinmico de comandos, lo permite.

Ejemplo: Base de datos Suppliers - parts

S (S#, SNAME, STATUS, CITY) P (P#, PNAME, COLOR, WEIGHT, CITY) SP (S#, P#, QTY) Encontrar S# y QTY en la tabla SP, con P# = P4 y preguntar al usuario si desea incrementar alguna QTY en un 10%. (Se incrementan los embarques con S# =S1 y S# = S3)

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 133 Solucin SQL es: 1 2 3 SELECT S#, QTY FROM SP WHERE P# = P4

Resultado: S# S1 S3 S5 QTY 100 150 100

1 2 3 4

UPDATE SP SET QTY = QTY * 1.1 WHERE P# = P4 AND S# IN (S1, S3)

Solucin ESQL, con PL/1 como lenguaje husped es:

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 134

1 2 3 4 5 6 7 8 9 10 11 12

SQLEX: PROC OPTIONS (MAIN); EXEC SQL BEGIN DECLARE SECTION; DCL S# char(5); char(3);

DCL ANSWER

DCL QTY FIXED BINARY (31); EXEC SQL END DECLARE SECTION;

EXEC SQL INCLUDE SQLCA; EXEC SQL DECLARE Z CURSOR FOR SELECT S#, QTY FROM SP WHERE P# = P4

13 FOR UPDATE OF QTY; 14 15 EXEC SQL OPEN Z; 16 IF SQLCODE NOT = 0 THEN 17 GO TO QUIT;

18 DO WHILE (SQLCODE = 0) 19 20 21 22 23 24 25 26 27 28 29 30 END; EXEC SQL FETCH Z INTO : S#, : QTY; IF SQLCODE = 0 THEN DO; PUT KIP LIST (S#=, S#, QTY=, QTY); GET LIST (ANSWER); IF ANSWER = YES THEN DO; EXEC SQL UPDATE SP SET QTY = QTY * 1.1 WHERE CURRENT OF Z; IF SQLCODE NOT = 0 THEN PUT SKIP LIST (UPD-ERROR);

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 135 31 32 END; 33 34 IF SQLCODE NOT = 100 THEN 35 36 ELSE 37 38 39 END; 40 QUIT: RETURN; 41 END; DO; EXEC SQL CLOSE Z; EXEC SQL COMMIT; PUTSKIP LIST (SQLCODE= ,SQLCODE); END;

Comentarios a la solucin ESQL: ESQL permite efectuar la bsqueda y la actualizacin en un nico paso.

Pasos del programa consideran: Lnea 8: Lneas 9-13: Lnea 15: Lneas 16-17: Lneas 18-32: Se incluye un rea de comunicacin (SQLCA) en el programa. Se establece la consulta, en la declaracin del cursor. Cuando se abre el cursor, se ejecuta la consulta. Se chequean condiciones de error. Se efecta un loop, una vez por cada fila seleccionada, a menos que ocurra un error (SQLCODE <> 0).

Los valores de los campos de cada fila son asignados a las variables S# y QTY por la operacin FETCH; los valores son mostrados y se decide si se incrementa la cantidad asociada a la fila. Si se responde YES, el incremento se lleva a cabo con la operacin UPDATE de la lnea 25. La sentencia UPDATE no identifica la tupla a actualizar de la manera usual, sino que usa el

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 136 cursor Z, que ya se encuentra apuntando a la fila, especificando WHERE CURRENT OF Z. Esta caracterstica especial de ESQL puede ser usada cuando se ha especificado, FOR UPDATE OF nombre_columnas en la instruccin SELECT asociada a la declaracin del cursor. (Notar que ESQL hace posible realizar la bsqueda y actualizacin en un nico paso, en vez de tener que resolver el problema en dos pasos, como en SQL). Lneas 34-39: Si todas las filas no han sido procesadas adecuadamente (SQLCODE = 100), se imprime un mensaje de error. En caso contrario, el cursor es cerrado y los cambios hechos permanentes (COMMITTED).

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 137 4.20 Control Discrecionario de acceso a la base de datos, basado en privilegios

Se usa un esquema que permite conceder (GRANT) y revocar los privilegios (REVOKE). La sentencia GRANT permite otorgar privilegios, los que comprenden: Privilegios de sistema y roles Privilegios de objetos

La figura 4.28 muestra distintos roles y privilegios de objetos sobre tablas y vistas.

SERVER

S Y S T E M
Table SELECT INSERT UPDATE DELETE ALTER INDEX REFERENCES ALL View SELECT INSERT UPDATE DELETE ALL

DBA RESOURCE CONNECT

Fig. 4.28 Roles y privilegios sobre tablas y vistas

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 138 4.20.1 Privilegios del sistema Se pueden conceder, entre otros, cualquiera de los siguientes privilegios del sistema, con el comando GRANT: SELECT CREATE DROP ALTER

4.20.2 Privilegios de objeto Se utilizarn para otorgar privilegios para un objeto particular, a los usuarios. Entre los privilegios de objeto se tienen: ALTER DELETE EXECUTE INDEX INSERT REFERENCES SELECT UPDATE

El objeto a considerar en el privilegio puede ser, entre otros: Tabla Vista Secuencia Procedure, Function, Package

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 139 La tabla 4.4 muestra una breve descripcin de cada uno de los privilegios de objetos SQL.

Privilegio del objeto ALTER

Tipo de objetos Tablas, secuencias

Descripcin Permite ejecutar la sentencia ALTER (como ALTER TABLE) sobre el objeto.

DELETE

Tablas, vistas

Permite ejecutar la sentencia DELETE contra el objeto.

EXECUTE

Procedimientos, funciones, paquetes

Permite la ejecucin del objeto PL/SQL almacenado. Permite crear un ndice sobre la tabla va el comando CREATE INDEX.

INDEX

Tablas

INSERT

Tablas, vistas

Permite ejecutar la sentencia INSERT contra el objeto.

REFERENCES

Tablas

Permite crear una restriccin que se refiera a la tabla.

SELECT

Tablas, vistas, secuencias, Permite ejecutar una sentencia SELECT snapshots contra el objeto. Permite ejecutar una sentencia

UPDATE

Tablas, vistas

UPDATE contra el objeto. Tabla 4.4 Privilegios de objetos

4.20.3 El comando GRANT para otorgar privilegios de objeto GRANT {ALL | privilegio1 [,privilegio2, ...] } ON [nombre-usuario].nombre-tabla | nombre_vista TO {PUBLIC | nombre-usuario1 [,nombre_usuario2...] } [WITH GRANT OPTION]

Los privilegios se refieren a uno de los 8 especificados. Si la opcin PUBLIC se especifica en la clusula TO, entonces el privilegio se extiende a cada nombre-usuario, actual y futuro,

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 140 en el sistema. La opcin WITH GRANT OPTION permite al nombre-usuario pasar el(los) privilegio(s) recibidos a otros usuarios del sistema.

Ejemplos:

SQL> GRANT SELECT ON FACULTY TO DEANS; Grant succeeded

SQL> GRANT SELECT, UPDATE ON STUDENT TO REGISTRAR; Grant succeeded

SQL> GRANT UPDATE (SALARY) ON FACULTY TO DOTTIE_BISLAND; Grant succeeded

SQL> GRANT ALL ON COURSE TO PUBLIC; Grant succeeded

SQL> GRANT SELECT ON STUDENT TO STUDENT_AID WITH GRANT OPTION; Grant succeeded

4.20.4 El comando REVOKE para revocar privilegios de objeto. REVOKE {ALL | privilegio1 [, privilegio2...] } ON [nombre-usuario.] {nombre_tabla | nombre_vista} FROM {PUBLIC | nombre_usuario1 [,nombre_usuario2...] }

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 141 Ejemplos del comando REVOKE: SQL> REVOKE SELECT ON FACULTY FROM DEANS; Revoke succeeded

SQL> REVOKE ALL ON COURSE FROM PUBLIC; Revoke succeeded

4.20.5 Roles En un sistema ORACLE grande, con muchas diferentes cuentas de usuarios, la administracin de los privilegios puede ser un desafo. Para hacer esto ms fcil, ORACLE7 provee de roles. Un rol es esencialmente una coleccin de privilegios, tanto de objetos como de sistema. Consideremos la siguiente serie de sentencias: CREATE ROLE table_query; GRANT SELECT ON students TO table_query; GRANT SELECT ON classes TO table_query; GRANT SELECT ON rooms TO table_query;

El rol table_query tiene privilegio SELECT en tres diferentes tablas. Ahora podemos entregar este rol a usuarios adicionales, con: GRANT table_query TO userA; GRANT table_query TO userB;

Ahora, el userA y el userB tienen privilegio SELECT en las tres tablas. Esto es ms fcil de administrar que tener seis grants separados, que de otra forma se hubiesen requerido. El rol PUBLIC est predefinido por ORACLE. A cada usuario le ha sido automticamente entregado este rol. As, se puede usar una sentencia con este formato:

GRANT privilegio TO PUBLIC; el cual entrega el privilegio a cada usuario de ORACLE de una sola vez.

PDF created with pdfFactory Pro trial version www.pdffactory.com

4. 142 Oracle7 predefine varios otros roles, los que incluyen los privilegios de sistema ms comunes. Estos son listados en la tabla 4.5. Al usuario ORACLE predefinido SYSTEM se le entregan automticamente todos estos roles. Tpicamente, los roles CONNECT y RESOURCE son entregados a los usuarios de la base de datos, que crearn objetos, y slo el rol CONNECT es entregado a usuarios que hacen consultas a los objetos. Los usuarios slo con CONNECT podran necesitar privilegios de objetos adicionales, sobre los objetos que ellos necesitaran accesar.

Nombre del rol CONNECT

Privilegios entregados ALTER SESSION, LINK, CREATE CREATE CREATE CLUSTER, SEQUENCE, CREATE CREATE CREATE TABLE,

DATABASE SESSION,

SYNONYM,

CREATE VIEW RESOURCE CREATE CLUSTER, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER DBA Todos los privilegios del sistema (con la opcin ADMIN OPTION, tal que pueda ser entregado otra vez), ms los roles EXP_FULL_DATABASE y IMP_FULL_DATABASE EXP_FULL_DATABASE SELECT ANY TABLE, BACKUP ANY TABLE, ms INSERT, UPDATE, DELETE en las tablas del sistema sys.incexp, sys.incvid y sys.incfil IMP_FULL_DATABASE BECOME USER

Tabla 4.5 Roles definidos por ORACLE

PDF created with pdfFactory Pro trial version www.pdffactory.com

Potrebbero piacerti anche