Está en la página 1de 144

ESCUELA SUPERIOR DE INGENIERA DE CDIZ INGENIERA TCNICA EN INFORMTICA DE GESTIN

PRCTICAS DE BDI
Curso 201112

Prof. Dra. M

Esther Gadeschi Daz

Dpto. Lengua jes y Sistemas Informticos Universidad de Cdiz

ndice general I
1 SGBD Oracle
1. El lenguaje SQL
1.1. 1.2. 1.3. 1.4. 1.5. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Evolucin histrica del lenguaje

1
3
3 4 5 7 8 8 10 11

SQL

. . . . . . . . . . . . . . . . . . . . .

SQL en los SGBDR

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

SQL en los sistemas no relacionales


Principios bsicos del lenguaje 1.5.1. 1.5.2. 1.5.3.

SQL

El enfoque conjuntista y el lenguaje algebraico . . . . . . . . . . . . Forma general de una consulta

SQL

. . . . . . . . . . . . . . . . . .

Estructura y caractersticas generales . . . . . . . . . . . . . . . . .

2. SQL*Plus
2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Identicacin ante el

15
15 17 19 20 21 23 24 25

SQL*Plus

. . . . . . . . . . . . . . . . . . . . . . . .

Conexin con otros usuarios Introduccin de rdenes Las rdenes de edicin

. . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Las rdenes de cheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . El editor del Sistema Operativo . . . . . . . . . . . . . . . . . . . . . . . .

Ayudas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

II

ndice general I

2.9.

Formateado de consultas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.9.1. 2.9.2. Cabeceras y pies de pginas . . . . . . . . . . . . . . . . . . . . . .

27 27 29 30 32 32 35 36 38 41

Formateado de columnas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.10. Variables del sistema

2.11. Entrada y salida de datos

2.11.1. Denicin de variables

2.11.2. Uso de operadores con variables . . . . . . . . . . . . . . . . . . . . 2.11.3. Uso de variables con distintas rdenes . . . . . . . . . . . . . . . . . 2.12. Ficheros de rdenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.13. Resumen de rdenes de

SQL*Plus

. . . . . . . . . . . . . . . . . . . . . . .

2 Lenguaje de Manipulacin de Datos


3. Manipulacin de datos
3.1. 3.2. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La orden 3.2.1. 3.2.2. 3.3. 3.4. 3.5.

43
45
45 46 46 47 54 54 55 56 57 57 58 58 59 60 61

select

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Proyeccin de una tabla

Seleccin de las de una tabla . . . . . . . . . . . . . . . . . . . . .

Eliminacin de registros repetidos . . . . . . . . . . . . . . . . . . . . . . . Renombrar columnas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clasicacin de las 3.5.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.6.

La orden 3.6.1. 3.6.2. 3.6.3. 3.6.4.

insert

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Insercin de todas las columnas de un registro . . . . . . . . . . . . Insercin parcial de columnas en un registro . . . . . . . . . . . . .

Insertar datos desde otra tabla . . . . . . . . . . . . . . . . . . . . . Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.7.

La orden 3.7.1.

update

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Clusula

set

ndice general I

III

3.7.2. 3.8. 3.9.

Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

61 62 63

La orden

delete

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Diferencias entre

drop, delete

truncate

. . . . . . . . . . . . . . . . . .

4. Funciones y expresiones
4.1. 4.2. 4.3. 4.4. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Expresiones La tabla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

65
65 65 66 67 67 68 68 69 70 71 71 71 73 73

dual

Funciones 4.4.1. 4.4.2. 4.4.3. 4.4.4. 4.4.5.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Funciones numricas

Funciones de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . Funciones de conversin . . . . . . . . . . . . . . . . . . . . . . . .

Otras funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funciones de grupo . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.5.

Consultas por grupos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.1. 4.5.2. 4.5.3. La clusula

group by . having

. . . . . . . . . . . . . . . . . . . . . . . . .

Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La clusula . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.6.

Los valores

null

y la funcin

nvl

. . . . . . . . . . . . . . . . . . . . . . .

5. Consultas anidadas
5.1. 5.2. 5.3. 5.4. 5.5. 5.6. 5.7. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Devolucin de un solo valor . . . . . . . . . . . . . . . . . . . . . . . . . .

79
79 80 80 82 83 83 84 84 86

Combinacin con operadores lgicos . . . . . . . . . . . . . . . . . . . . . . Devolucin de mltiples las . . . . . . . . . . . . . . . . . . . . . . . . . . Devolucin de mltiples columnas . . . . . . . . . . . . . . . . . . . . . . . Subconsultas correlacionadas . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores 5.7.1. 5.7.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Los operadores

any

all

. . . . . . . . . . . . . . . . . . . . . . .

Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

IV

ndice general I

5.7.3. 5.8.

El operador

exists

. . . . . . . . . . . . . . . . . . . . . . . . . . .

86 87

Consulta anidada en una clusula

having .

. . . . . . . . . . . . . . . . . .

6. Consultas a mltiples tablas


6.1. Bsquedas multitablas 6.1.1. 6.1.2. 6.1.3. 6.1.4. 6.1.5. 6.1.6. 6.1.7. 6.1.8. 6.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Producto cartesiano . . . . . . . . . . . . . . . . . . . . . . . . . . . Producto natural . . . . . . . . . . . . . . . . . . . . . . . . . . . .

89
89 89 89 90 92 93 94 95 96 96 97 98 99

Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Unin externa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Autouniones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Uniones no comunes . . . . . . . . . . . . . . . . . . . . . . . . . .

Operadores conjuntistas 6.2.1. 6.2.2. 6.2.3. El operador El operador El operador

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

union minus

intersect

. . . . . . . . . . . . . . . . . . . . . . . . . . .

6.3. 6.4.

Consejos prcticos para escribir una consulta . . . . . . . . . . . . . . . . . 100 Optimizacin de las consultas 6.4.1. 6.4.2. 6.4.3. 6.4.4. 6.4.5. . . . . . . . . . . . . . . . . . . . . . . . . . 101

Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Ecacia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 . . . . . . . . . . . . . . . . 102

Unin entre tablas o consulta anidada

Empleo del cuanticador existencial . . . . . . . . . . . . . . . . . . 102 Solucin al ejercicio propuesto . . . . . . . . . . . . . . . . . . . . . 103

7. Tratamiento de fechas
7.1. 7.2. 7.3. 7.4. Aritmtica de fechas La funcin

107
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

sysdate

Funciones de fecha

Formatos y conversin de fechas . . . . . . . . . . . . . . . . . . . . . . . . 110

ndice general I

APNDICES
A. Denicin de las tablas B. Tablas C. Descripcin de las tablas Bibliografa Referencias electrnicas

115
117 119 123 125 127

ndice de guras I

1.1.

Operadores

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ndice de tablas I

1.1. 1.2.

Resumen cronolgico rdenes del lenguaje

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6 12

SQL

. . . . . . . . . . . . . . . . . . . . . . . . . . .

2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. 2.9.

rdenes de edicin

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21 23 25 26 28 28 30 30 33 34

rdenes de cheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . rdenes de comentarios Informacin de la orden . . . . . . . . . . . . . . . . . . . . . . . . . . . .

describe btitle

. . . . . . . . . . . . . . . . . . . . . . . y

Especicaciones para las rdenes Variables para las rdenes Opciones para la orden Opciones para la orden Variables del sistema

btitle
y

ttitle .

. . . . . . . . . . . . .

ttitle

. . . . . . . . . . . . . . . . .

column format

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.10. Valor de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.1.

rdenes del Lenguaje de Manipulacin de Datos . . . . . . . . . . . . . . .

45

4.1. 4.2. 4.3. 4.4. 4.5. 4.6.

Funciones numricas

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

75 76 76 77 77 78

Funciones carcter que devuelven carcter

Funciones carcter que devuelven un nmero . . . . . . . . . . . . . . . . . Funciones de conversin de tipos de datos Otras funciones . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Funciones de grupo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ndice de tablas I

7.1. 7.2. 7.3.

Operaciones con fechas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Funciones de fecha Formatos de fechas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

ndice de ejemplos I

2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. 2.9.

Identicacin ante el producto . . . . . . . . . . . . . . . . . . . . . . . . . Identicacin ante el producto . . . . . . . . . . . . . . . . . . . . . . . . . Identicacin ante el producto . . . . . . . . . . . . . . . . . . . . . . . . . Salida del producto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conexin con usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conexin con usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conexin con usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Desconexin con usuario Mostrar el contenido del . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18 18 18 18 19 20 20 20 22 22 22 23 24 25 25 25 26 27 29 31

buer

. . . . . . . . . . . . . . . . . . . . . . . .

2.10. Aadir una lnea a la orden del

buer

. . . . . . . . . . . . . . . . . . . . .

2.11. Borrar lnea y cambiar texto . . . . . . . . . . . . . . . . . . . . . . . . . . 2.12. Manera de mostrar un error 2.13. Salvar el . . . . . . . . . . . . . . . . . . . . . . . . . .

buer

y guardar la ejecucin en un chero . . . . . . . . . . . . .

2.14. Denicin de editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.15. Edicin de chero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.16. Edicin del

buer

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.17. Descripcin de un objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.18. Ayuda de una orden 2.19. Ttulo y pie de pgina 2.20. Formateo de columnas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

XII

ndice de ejemplos I

2.21. Establecer variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.22. Valores de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.23. Asignar valor a variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31 32 34 34 35 36 37 37 37 38 39 40 41 47 47 50 50 51 52 53 54 55 56 58 61 62 66 66 68

2.24. Visualizar el valor de variable 2.25. Eliminar valor de variable

. . . . . . . . . . . . . . . . . . . . . . . . . . .

2.26. Uso de variables con & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.27. Uso de variables con & (cont.) . . . . . . . . . . . . . . . . . . . . . . . . . 2.28. Redenicin de operador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.29. Contenido del chero nombre_chero . . . . . . . . . . . . . . . . . . . . . 2.30. Uso del operador & con rdenes de 2.31. Uso de variables con & y && 2.32. Fichero de rdenes:

SQL*Plus

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

login.sql .

2.33. Lista de todas las rdenes del 3.1. 3.2. 3.3. 3.4. 3.5. 3.6. 3.7. 3.8. 3.9.

SQL*Plus .

Proyeccin de datos de los proveedores

. . . . . . . . . . . . . . . . . . . .

Proyeccin de todos los datos de los proveedores . . . . . . . . . . . . . . . Artculos que pesan ms de 100g el nmero de su proveedor es igual a 5 . Los proveedores cuyo nmero est entre 2 y 5 . . . . . . . . . . . . . . . .

Datos de las tiendas que no estn en las ciudades indicadas . . . . . . . . . Datos de los gerentes de las tiendas de Madrid . . . . . . . . . . . . . . . . Datos de los artculos que no tienen denido el color . . . . . . . . . . . . . Mostrar todos los colores de los artculos Mostrar todos los colores de los artculos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.10. Datos de los artculos ordenados ascendente por su precio de compra

3.11. Insercin de tuplas en una tabla . . . . . . . . . . . . . . . . . . . . . . . . 3.12. Actualizacin del peso de un artculo . . . . . . . . . . . . . . . . . . . . .

3.13. Eliminacin de algunas tuplas de la tabla art_2 . . . . . . . . . . . . . . . 4.1. 4.2. 4.3. Benecio de los artculos . . . . . . . . . . . . . . . . . . . . . . . . . . . . Descripcin de la tabla Raz cuadrada de 27

dual

. . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ndice de ejemplos I

XIII

4.4. 4.5. 4.6. 4.7. 4.8. 4.9.

3 elevado al cubo

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

68 69 70 70 72 72 73 74 74 75 81 81 82 83

Inicial de los nombres de clientes en mayscula . . . . . . . . . . . . . . . . Qu proveedor tiene el nombre ms largo? . . . . . . . . . . . . . . . . . . Quin soy? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Precio mximo de los artculos por color . . . . . . . . . . . . . . . . . . . . . . .

Precio mximo de los artculos por color, contando a los indenidos

4.10. Qu color lo llevan ms de dos artculos?

. . . . . . . . . . . . . . . . . .

4.11. Mostrar todos los colores de los artculos, incluido los nulos . . . . . . . . . 4.12. Peso medio de los artculos, forma1 . . . . . . . . . . . . . . . . . . . . . .

4.13. Peso medio de los artculos, forma 2 . . . . . . . . . . . . . . . . . . . . . . 5.1. 5.2. 5.3. 5.4. 5.5. 5.6. 5.7. 5.8. Clientes que viven en el mismo pais que el n Articulos con el mismo color que el n Articulos con el mismo color que el n

3. . . . . . . . . . . . . . . .

o o

15 o el peso igual al n

. . . . . .

15 o un peso superior al del n

3 . .

Articulos que tengan el mismo color y el mismo peso que el n

10

. . . . .

Datos de los artculos que tienen el mismo color de los que pesan ms de 10g 85 Artculos que pesen ms que cualquiera de los de color blanco . . . . . . . 86

Si tenemos un proveedor que se llame sanjita muestra todos los proveedores 88 Colores de los artculos cuya media de pesos es superior a la media de todos los artculos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 91 92 93 94 95

6.1. 6.2. 6.3. 6.4. 6.5. 6.6.

Producto cartesiano entre proveedores y pesos

Datos de los artculos y del proveedor que lo suministra . . . . . . . . . . . Datos de los artculos y sus proveedores cuyos n Datos de artculos cuyos n

son menores que 4 . . . .

es mayor que 4 que se han vendido o no . . . .

Autouniones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clasicar los artculos cuyos n peso

estn comprendidos entre 2 y 10, segn su 96 98 99

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6.7. 6.8. 6.9.

Los nmeros de todos los artculos que se han vendido o no . . . . . . . . . Los nmeros de todos los artculos que se han vendido . . . . . . . . . . . .

Los nmeros de todos los artculos que no se han vendido . . . . . . . . . . 100 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

6.10. Producto natural

XIV

ndice de ejemplos I

6.11. Consulta anidada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 6.12. Consulta correlacionada 6.13. Consulta de existencia 7.1. 7.2. 7.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

Fecha actual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Los clientes y las fechas de compras . . . . . . . . . . . . . . . . . . . . . . 111 Fecha y hora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

Parte 1

SGBD Oracle

Cap tulo 1

El lenguaje SQL
Se muestran las caractersticas fundamentales de este lenguaje, como son: los principios bsicos, la estructura general y las ventajas que presenta.

1.1.

Introduccin
SQL
es un lenguaje de cuarta generacin, no procedimental ya que le

El lenguaje

decimos lo que queremos y el sistema se encarga de plantear el mejor modo de obtenerlo. Como lenguaje de datos que es, nos permite:

Denir datos. Consultar datos. Manipular datos. Controlar el acceso a los datos.

El

SQL se puede usar:


Por los usuarios no habituales (no-programadores), Por los programadores, analistas, etc., o De forma interactiva, o en segundo plano.

El lenguaje SQL

1.2.

Evolucin histrica del lenguaje SQL


SQL
est ntimamente relacionada con el desarrollo de las

La historia del lenguajes

bases de datos relacionales. El artculo del Dr. dentro de de un

E. Codd desencaden una racha de investi-

gaciones en base de datos relacionales, incluyendo un importante proyecto de investigacin

IBM. El objetivo del proyecto llamado System/R, fue demostrar la operabilidad


relacional.

del concepto relacional y proporcionar alguna experiencia en la implementacin efectiva

SGBD

19741975: La primera fase del proyecto System/R produjo un mnimo prototipo de un SGBD relacional. Adems del propio SGBD, el proyecto System/R inclua trabajos
sobre lenguajes de consulta de bases de datos. Uno de estos lenguajes fue denominado

SEQUEL1 .

19761977:

El prototipo de investigacin

System/R

fue reescrito desde el principio. La

nueva implementacin soportaba consultas multitabla y permita que varios usuarios compartieran el acceso a los datos. En la tabla 1.1 podemos ver un resumen de la evolucin de las bases de datos relacionales. El lenguaje

SQL, construido en un principio como un lenguaje algebraico, fue enri-

queciendose con funciones predicativas (clusula existencial, bloques de cualicacin correlativos, . . . ).

19771979:

La implementacin de

de clientes de

de usuario proporcionaron cierta experiencia efectiva en el uso de

System/R y de 2 su lenguaje de base de datos, que haba sido renombrado como SQL , por razones legales. A pesar del cambio de nombre, la pronunciacin SEQUEL permaneci y continua hoy da. En 1979 el proyecto de investigacin System/R lleg al nal, e IBM concluy que las bases de datos relacionales no solamente eran factibles, sino
que podran ser la base de un producto comercial til. Este perodo fue aprovechado por varias rmas para proponer, antes que ductos relacionales. Un ejemplo de stos fue el lenguaje predicativo

IBM

System/R fue distribuida a una serie de instalaciones

para evaluacin en 1978 y 1979. Estas primeras instalaciones

Ingre, lanzado por RTI en 1976 con QUEL, un derivado del ALPHA; otro ejemplo fue el Oracle, producto que, inspirndose en el System/R, ya se aprovechaba del SQL en 1979.

IBM, pro-

19801989:

IBM se implant por n en productos comerciales en el ao 1981 con el SQL/DS y, especialmente, en el ao 1982 con el DB2. Este mismo ao, el grupo X3H2 del ANSI propuso el SQL como un estndar
Esta tecnologa desarrollada por

SQL, de momento incompatibles entre s. La norma ANSI de 1986 (SQL-86 ), que cubre dos primeros niveles de normalizacin,
versiones

ocial, raticando en 1986, cuando ya existan por todo el mundo varias decenas de

es el resultado de presiones por parte de los fabricantes y, por ello, slo puede ser

1 Acrnimo

2 Structured

de Structured English QUEry Language, lenguaje estructurado de consulta ingls. Query Language, lenguaje estructurado de consultas.

1.3 SQL en los SGBDR

considerado como un pobre conjunto de principios que slo imperfectamente representa el modelo relacional. Los analistas esperan con impaciencia las ampliaciones anunciadas de la norma y, especialmente, su generalizacin para los productos comercializados. El nivel 2 de la norma los fabricantes de

SGBDR,

ANSI

se toma como punto de referencia por

aunque el mismo

DB2

en el que se inspira la norma se

aleja bastante de sta. De igual modo, los productos comerciales por lo general se alejan ms o menos de la norma y, a menudo, son mucho ms complejos. El se convirti en un estndar legal establecido por En 1989 se public una norma extendida para caractersticas de

ANSI. SQL denominada SQL-89

SQL-86

y actual-

mente los sistemas de bases de datos son normalmente compatibles al menos con las

SQL-89.

19901999:

En 1992 se ratica el estndar

ANSI

denominado

SQL-92

que ha sido am-

pliamente implementado y que fue una revisin importante del estndar que realmente el

SQL-89.

A partir de este estndar se saba que existan muchos aspectos por resolver para

SQL pudiera ofrecer las capacidades de bases de datos requeridas y

para satisfacer las necesidades de los usuarios. Durante siete aos se lanzaron varios estndares que atacaban aspectos especcos del

SQL, hasta que en 1999, se produjo el siguiente estndar importante del SQL, el SQL-99 o SQL3.
En el ao 2003 sali un nuevo estndar del introdujo la nocin de

2003 :

XML

SQL

llamado

SQL:2003,

el cual

y estandariz los generadores de secuneicas o valores

autogenerados, esto incluye comumnas que se utilizan como identicadores.

1.3. SQL en los SGBDR


Todos los informticos estn de acuerdo en armar que la generacin de las bases de datos relacionales ha modicado considerablemente los hbitos de los programadores. Los

SGBDR 3

disponen no slo de un lenguaje de consultas poderoso y conciso, sino

tambin de un conjunto integrado de herramientas ecaces que explotan en toda su extensin dicho lenguaje, permitiendo la escritura rpida de complejas aplicaciones. El incremento de la productividad es espectacular: los usuarios apuntan de manera uniforme muchas ventajas en las aplicaciones de cierta entidad con respecto al entorno clsico de

COBOL o C
Este

con

SGF 4 .

software,

llamado de cuarta generacin, est formado generalmente por un con-

junto de herramientas que conguran una estructura de anillo:

Un generador de pantallas anidadas


3 Sistemas 4 Sistema

para consultas o tomas de datos multi-tablas.

En cualquier momento de la gestin de una pantalla, el programador puede soli-

de Gestin de Bases de Datos Relacionales. de Gestin de Ficheros.

El lenguaje SQL

Fecha
1970 1974 1974 1978 1979 1981 1981 1982 1983 1986 1986 1987 1988 1988 1989 1992 1999 2003

Acontecimiento Codd dene el modelo de Base Datos relacional Comienza el proyecto System/R de IBM Primer artculo que describe el lenguaje SEQUEL Test de clientes del System/R ORACLE introduce el primer SGBDR comercial Relacional Technology introduce Ingres IBM anuncia SQL/DS ANSI forma el comit de estndares SQL IBM anuncia DB2 Se ratica el estndar ANSI SQL Sybase introduce SGBDR para procesamiento de transacciones Se ratica el estndar ISO SQL Ashton-Tate y Microsoft anuncian SQL Server para OS/2 IBM anuncia la versin 2 de DB2 Primera entrega de servidores de bases de datos SQL para OS/2 Se ratica el estndar ANSI SQL2 Se ratica el estndar SQL3 Nuevo estndar llamado SQL:2003
Tabla 1.1: Resumen cronolgico

citar la ejecucin automtica de una consulta

SQL

que tanto puede realizar una

actualizacin, como visualizar ciertos datos de otra tabla.

Un generador de estados de la base de datos que se imprimen en papel o se visualizan en el monitor. Un estado de la base se obtiene ejecutando una consulta SQL asociada
a una descripcin precisa del formato de salida.

Un generador de aplicaciones que utiliza las pantallas y los estados precedentes y que
permite la denicin de mens jerarquizados as como la ejecucin de tratamientos diversos de los datos. Estos tratamientos pueden ser simples tareas de manipulacin de datos escritos en los procedimientos de un lenguaje de tercera generacin (

SQL, o tratamientos ms complejos que impliquen el empleo de C o COBOL, por ejemplo).

De este modo, se aprovecha plenamente la potencia de las herramientas de cuarta generacin, conservando la riqueza de los lenguajes de la tercera.

Un mdulo de programas de utilidades

que facilitan principalmente el acceso a los

datos o a aplicaciones distantes en un entorno de bases de datos distribuidas.

Un generador de esquemas conceptuales,

propuestos por algunos programas, que

permiten la descripcin interactiva completa de la estructura de los datos (entidades, atributos, enlaces, condiciones) a utilizar por los restantes mdulos.

En todos los niveles, el lenguaje

SQL

se utiliza siempre que deba expresarse una

1.4 SQL en los sistemas no relacionales

denicin, una manipulacin o un control de datos. El lenguaje

central, el nexo imprescindible entre los diversos componentes del

SQL es, pues, un elemento SGDBR.

El ncleo comprende los programas que generan el conjunto del sistema:

Compilador

SQL.

Traductor externo/conceptual. Optimizador de las consultas. Traductor conceptual/interno. Gestin de los cheros e ndices. Conexin con el sistema operativo y el equipo fsico.

1.4. SQL en los sistemas no relacionales


El

SQL

se ha hecho tan indispensable que la mayora de las casas de

optado por adoptarlo, tanto en sus La razn de este hecho es doble.

SGF

como en el resto de los

SGBD

software

han

no relacionales.

Por una parte, cada vez est resultando comercialmente ms difcil vender un usuario llega a pensar en lgica, un programador de

SGBD

que no presente las facilidades de una lenguaje de acceso de cuarta generacin. Y es que el

SQL despus de un aprendizaje muy rpido. Con un poco de C, DBASE o COBOL puede utilizarlo al cabo de pocas horas.

Por otra parte, la conectividad de los sistemas es, hoy por hoy, un elemento fundamental de la organizacin de la informacin. Los usuarios y los analistas han de disponer de tratamientos distribuidos, de particiones de aplicaciones y de medios de comunicacin transparentes. Por ejemplo, las grandes bases de datos de tipo red o jerrquica como

IDMS/R de CULLINET

DATACOM/DB de CCA proponen interfases SQL que permiten la compatibilidad con el DB2 de IBM. Estamos ante una proliferacin de servidores de
o

bases de datos, que permiten la elaboracin de una informtica realmente compartida en un entorno heterogneo. Citemos, por ejemplo, el o

competencia ajena. Hoy en da es obligado para todos los De aqu que el

INGRES*STAR, que pretenden imponerse en un mercado vertiginoso, descabalgando la SGF y SGBD, incompatibles de SQL se est imponiendo como un lenguaje universal.

SQL Server, el SQLBASE, SQL*STAR

partida, que puedan comunicarse entre s mediante el lenguaje normalizado del servidor.

Ya hemos sealado que estos sistemas no relacionales carecen de un ncleo

SQL, por lo

que estas emulaciones slo funcionan a medias. No obstante, tal extensin ofrece apreciables servicios para la mayora de las aplicaciones que emplean las funciones fundamentales del lenguaje

SQL.

El lenguaje SQL

1.5.

Principios bsicos del lenguaje SQL

1.5.1. El enfoque conjuntista y el lenguaje algebraico


Para comprender bien la losofa del lenguaje pios en que se basa. Veremos cmo el cercana al lenguaje natural.

SQL expondremos brevemente los princiSQL aprovecha la sencillez del lenguaje algebraico,

cobrando por una parte concisin y por otra claridad, mediante una formulacin muy

1.5.1.1.

Principios

Todos los operadores algebraicos se aplican a la totalidad de las las de las relaciones. El resultado de una operacin (consulta) es una nueva relacin, susceptible de ser empleada a su vez en una nueva operacin. Esto es lo que se conoce como el resultado de una operacin.

cierre. A este n se dispone de la asignacin relacional, que permite afectar a una relacin

propiedad de

Codd ha enumerado una veintena de operadores que se derivan de cinco primitivos, a saber: proyeccin, seleccin, unin, diferencia y producto. A estos cinco operadores bsi5 cos deben agregarse, por su importancia prctica, otros tres: producto natural o unin , interseccin y divisin (ver gura 1.1).
1.5.1.2. Operadores primitivos propios
Este operador permite elegir slo las columnas que interesan. Equivale a

Proyeccin

recortar verticalmente la tabla. Adems de ello, elimina las repeticiones de las que resulten de este recorte.

Seleccin

Esta operacin realiza un corte horizontal de la relacin para retener slo las

las que cumplen una determinada condicin respecto a los valores de una columna o conjunto de columnas.

Unin

La operacin

unin

de conjuntos permite agrupar las las, obtenidas mediante

seleccin sobre varias tablas efectuando un o lgico.

Diferencia

La

diferencia

de conjuntos es una operacin que partiendo de dos tablas se

crea una tercera a partir de las las de la primera tabla en la que se eliminan aquellas las que se repiten en la segunda tabla.

Producto cartesiano

El

producto de dos tablas consiste en concatenar (emparejar) cada


las y la segunda

la de la primera tabla con todas las las de la segunda. Esto signica que, si la primera tabla tiene

N,

la tabla resultante tendr

M*N

las.

5 En

ingls llamado join.

1.5 Principios basicos del lenguaje SQL

Seleccin

Proyeccin

Producto

111111 000000 111111 000000 111111 000000 111111 000000 111111 000000

111 000 111 000 111 000 111 000 111 000 111 000 111 000 111 000 111 000 111 000 111 000 111 000
Interseccin

a b c

x y

a a b b c c

x y x y x y

Unin

Diferencia

111111 000000 111111 000000 111111 000000 111111 000000 111111 000000 111111 000000 111111 000000 1111 0000 1111111 0000000 111111 000000 1111 0000 1111111 0000000 111111 000000 1111 0000 1111111 0000000 111111 000000 1111 0000 1111111 0000000 111111 000000 1111 0000 1111111 0000000 111111 000000 1111 0000 1111111 0000000 111111 000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000
Join (natural)

1111 0000 1111 0000 1111 0000 1111 0000 1111 0000 1111 0000

1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000

Divisin

a1 b1 a2 b1 a3 b2

b1 c1 b2 c2 b3 c3

a1 b1 c1 a2 b1 c1 a3 b2 c2

a a a b c

x y z x y

x z

Figura 1.1: Operadores

El

producto

presenta de por s poco inters, pero combinado con una

obtiene un operador particularmente til en las consultas

natural.

seleccin se multi-tablas: el producto

1.5.1.3.

Operadores primitivos derivados


El

Producto natural

un dominio comn. El

producto natural slo es posible realizarlo cuando dos tablas tienen producto natural junta las dos tablas concatenando las las
6

cuyo valor de columna es idntico en ambas. De aqu se deduce el importante papel que desempea una clave fornea , que permite establecer implcitamente un enlace entre dos tablas. Para ello el operador

denomina clave fornea a un atributo, tal vez compuesto, de una relacin R2 cuyos valores deben concordar con los de la clave primaria de alguna relacin R1 (donde R1 y R2 no necesariamente son distintos). Una clave fornea debe tener todos los valores de sus atributos nulos o ninguno de ellos.

6 Se

10

El lenguaje SQL

producto natural
de igualdad.

es fundamental, dado que puede reunir datos dispersos pero liga-

dos entre s. La condicin de concatenacin contiene un operador comparativo que puede ser de cualquier clase, aunque el tipo de comparacin que ms se utiliza es el

Interseccin

La

interseccin

de dos tablas no es un operador primitivo bsico, pero

puede obtenerse fcilmente mediante dos diferencias. Esta operacin permite crear una tabla a partir de las comunes de dos de tablas.

Divisin

La operacin de

divisin

permite expresar de forma sencilla el cuanticador

universal para todo elemento que.

1.5.1.4.

Combinacin de operadores primitivos

Se pueden realizar operaciones combinando operadores primitivos propios con operadores primitivos derivados para realizar consultas ms complejas.

1.5.2. Forma general de una consulta SQL


La forma de una consulta

SQL

es, por esencia, poco procedimental. El ideal est en

expresar globalmente la consulta precedente entrelazando los operadores primitivos y sin recurrir a tablas intermedias. El

SQL permite obtener este tipo de formulaciones. SQL est compuesta de varias clusulas:

La forma general de una consulta

Formato:

selecciona las columnas deseadas lista de tablas que intervienen en la consulta criterio de seleccin de filas formacin de grupos por columna(s) con valores indnticos [HAVING] criterio de seleccin de grupos [ORDER BY] ordenacin de tuplas en la consulata
La clusula en la clusula

SELECT FROM [WHERE] [GROUP BY]

select realiza una proyeccin from, y suele ir acompaada de where

algebraica sobre las tablas especicadas la clusula

distinct7

a n de evitar las

repeticiones de las. La clusula permite expresar todas las condiciones de seleccin (horizontales)

relativas a las tablas y estas condiciones expresan el modo de enlace entre las tablas. Tenemos que tener en cuenta, adems, que en caso de existir ambigedad en el nombre de una columna, se debe escribir delante el nombre de la tabla a la que pertenece seguido de un punto.

7 Ver

captulo 3.

1.5 Principios basicos del lenguaje SQL

11

Formato:
nombre_tabla.nombre_columna
Construir una consulta multi-tabla en

SQL

resulta extemadamente fcil: basta con

escribir el nombre de las tablas afectadas tras la clusula

where

from

y expresar en la clusula

todas las condiciones a cumplir, incluidas las condiciones de enlace.

Esta sencillez de escritura se consigue gracias a que el lenguaje exime al programador de explicar el orden en que deben ejecutarse las operaciones. El intrprete o el compilador traducir automticamente la consulta, en forma de secuencia ptima de consulta algebraica. En la prctica, el usuario no tiene necesidad de conocer la existencia de ndices para efectuar las consultas o clasicaciones. De este modo, el

SQL

permite expresar, con claridad y precisin, un gran nmero de

operadores del lgebra relacional. Pero, una vez sentado el principio general, debemos advertir que la sintaxis del lenguaje no es siempre tan transparente. Las consultas que necesitan una lgica ms compleja se construyen a su vez con una formulacin menos inmediata. Adems de que las versiones actuales del lenguaje presentan innumerables trampas capaces de desanimar a ms de un principiante. Por stas, y otras razones que veremos, el que un lenguaje de usuario.

SQL

es ms un lenguaje de programacin

1.5.3. Estructura y caractersticas generales


1.5.3.1. Estructura
SQL slo contiene, por convenio explcito, un limitado nmero de rdenes 8 o palabras claves, distribuidos en seis grandes grupos funcionales: rdenes de DDL y 9 10 de DCL , rdenes de DML , rdenes de control de transacciones, rdenes de control de 11 sesiones y rdenes de SQL embebido. La tabla 1.2 muestra un resumen de estas rdenes .
El lenguaje El

DDL permite crear todas las estructuras de la base de datos (tablas, vistas, columnas

ndices...), o sea, la creacin del esquema conceptual. Con l denimos todas las estructuras necesarias para manipulacin de dicha base de datos. El

usuario por parte de otros usuario (grant y El

DCL

contiene los operadores que permiten o eliminan el acceso a los datos de un

revoke).

DML permite el manejo de las tablas y de las vistas mediante las correspondientes

Denition Language, lenguaje de denicin de datos. Control Language, lenguaje de control de datos. 10 Data Manipulation Language, lenguaje de manipulacin de datos. 11 En esta tabla se muestran solamente algunas de las rdenes del SQL embebido.
9 Data

8 Data

12

El lenguaje SQL

ddl
create drop alter truncate

dml
select insert delete update

dcl
grant revoke

Transacciones
commit rollback savepoint

Sesiones
alter session set role

Embebido
open close fetch execute

Tabla 1.2: rdenes del lenguaje

SQL

cuatro operaciones fundamentales sobre los datos. Las rdenes de control de transacciones manejan los cambios realizados por las rdenes

de

DML, reejndolos en la base de datos.

Las rdenes del control de sesiones permite a los usuarios controlar las propiedades de su sesin en curso, incluyendo la habilitacin y deshabilitacin de funciones o Las rdenes del precompiladores de

role12 .

SQL

embebido incorpora rdenes de los lenguajes

DML,

del

DDL

rdenes de control en un programa de lenguaje procedural, usando necesariamente los

ORACLE.

1.5.3.2.

Caractersticas del lenguaje


SQL es manejable bajo dos modalidades distintas:

El lenguaje

En interactivo, consulta, crea y controla directamente a la base de datos. Como un mdulo que proporciona un potente lenguaje de consultas interpretadas en un lenguaje husped como el

o el

COBOL. Corresponde al SQL embebido.

Adems podemos destacar de este lenguaje lo siguiente:

Es ensamblista pues, al igual que el lenguaje algebraico del que procede, enfoca las relaciones de forma global (cuantos ms barridos de tablas, ms test). Es un lenguaje cerrado: el resultado de una consulta es una nueva relacin, lo que implica, entre otras cosas, que las consultas pueden ser anidadas

13

Respeta la independencia entre el nivel conceptual y las aplicaciones, ya que permite la creacin y manejo de esquemas externos (o visualizaciones) personalizadas. Garantiza la independencia entre el nivel conceptual y el nivel interno. El usuario no nota la presencia de un ndice o de un agrupamiento

14

. Es asunto del gestor de

la base de datos conseguir la optimizacin de las ejecuciones.

un objeto de Oracle que soporta privilegios tanto de objetos como del sistema. captulo 5. 14 Estructuras adicionales para la mejora de la bsqueda y recuperacin de informacin.
12 Es 13 Ver

1.5 Principios basicos del lenguaje SQL

13

Garantiza una seguridad total de los datos, gracias a una distribucin selectiva de las prioridades de acceso, y a una gestin ecaz de las visualizaciones. Permite la gestin multi-usuario de los datos. Cada la a la que se accede para su modicacin queda automticamente bloqueada por el sistema. En particular, el

SQL

contiene el concepto de transaccin, que permite restaurar el estado anterior

de la base en caso de anomalas. Utiliza constantemente un diccionario dinmico centralizado. El diccionario es accesible, mediante las prioridades requeridas, por el mismo lenguaje

SQL.

El cumplimiento de las condiciones de integridad est plenamente garantizado en las versiones actuales del

SQL. Esto se resuelve con la clusula with check option.

Cap tulo 2

SQL*Plus
Este captulo nos permite conocer y familiarizarnos con el producto SQL*Plus . En especial con las siguientes caractersticas: identicacin de usuario, introduccin de rdenes, utilizacin de variables, entrada/salida de datos, personalizacin del entorno de trabajo y realizacin de informes.

2.1.

Introduccin
Oracle SQL*Plus 1

El producto de

tuido por las rdenes

SQL

es un intrprete de lnea de rdenes. Est consti-

del estndar

ANSI,

enfocados a la creacin, comprobacin y

manipulacin de la base de datos; y las rdenes

SQL*Plus

suministradas por

Oracle,

que

constituyen un conjunto adicional al anterior, permitiendo un mejor acceso a la base de datos, presentacin de resultados y control de transacciones. Cualquiera de los dos tipos de rdenes se pueden ejecutar directamente desde el indicador El

SQL o en segundo plano.

SQL*Plus

suministra al usuario un acceso directo a la base de datos, en funcin de

los privilegios que se tengan asignados. Este producto puede ser utilizado por muchos tipos de usuarios. Los programadores se basan en l para crear, mantener y manipular la base de datos. El administrador del sistema tambin se basa en l para mantener y hacer un seguimiento de la base de datos.

este libro se va a seguir la misma nomenclatura que se sigue en los manuales de Oracle. Los corchetes indica que lo que va dentro es opcional. Las llaves indican que es obligatorio especicar alguna opcin. La barra vertical (|) separa a las distintas opciones. Las opciones establecidas por defecto estn subrayadas. Esta nomenclatura se va a mantener en todo el texto.
1 En

16

SQL*Plus

Por ltimo, el usuario nal se basa en datos.

SQL*Plus

para extraer informacin de la base de

SQL constituye la esencia de una base de datos Oracle; de hecho, es la esencia de todas las bases de datos relacionales. SQL*Plus es la implementacin especca que hace Oracle de SQL con caractersticas adicionales que permiten recuperar,
Como ya hemos visto, dar formato y controlar los datos segn las necesidades. Pensamos que, de entre todas las opciones que se ofrecen para extraer datos de una base de datos extraordinaria herramienta. Todos las rdenes

Oracle, SQL*Plus

es una

SQL manipulan la base de datos de una u otra forma comportndose


select2
se comporta de forma diferente, no modicando en nada

de una manera similar, devolviendo un mensaje de estado que indica el xito o el fracaso de la operacin. La orden la base de datos y devolviendo una copia de la informacin que se haya solicitado. No existen ayudas de ningn tipo: mens, teclas especiales, etc., debiendo el usuario conocer las rdenes y teclearlas para obtener la informacin de la base de datos Las rdenes

Oracle.

SQL*Plus

permiten controlar el entorno y presentar de forma controlada

las consultas realizadas a la base de datos. Normalmente se usan como descriptor de informes interactivo. Se pueden crear informes renados y bien formateados, proporcionando un control sencillo sobre los ttulos, cabeceras de columnas, subtotales y totales, reformas de nmeros y textos, etc. El uso ms comn de

SQL*Plus

es para consultas simples e impresin de informes. Se

pueden formatear los informes de acuerdo con los gustos y necesidades del usuario usando slo unas pocas rdenes, que son palabras reservadas. Los informes se pueden escribir completamente mientras se trabaja interactivamente con este producto, esto es, se puede escribir mandatos que trabajen con cabeceras de pginas, ttulos, columnas, formatos, cambios y sumas y otros, mientras se ejecuta una consulta

SQL. SQL*Plus

inmediatamente produce el informe formateado con las especi-

caciones dadas. Para responder a preguntas rpidas que probablemente no volvern a repetirse es una buena aproximacin. Ms comunes son, sin embargo, los informes complejos que se necesitan producir peridicamente y que se quiere que se impriman en lugar de salir por la pantalla. Desafortunadamente, cuando se abandona el entorno de trabajo, ste olvida rpidamente todas las instrucciones que se le han dado. Si se estuviera obligado a usar introducir todos los mandatos nuevamente. La alternativa es muy sencilla. Simplemente se escriben los mandatos, lnea a lnea, en un chero. El producto secuencialmente. Cuando utilizamos el ltimo mtodo, el de introducir en un chero tanto las rdenes de formateo del

SQL*Plus

solamente

de esta forma interactiva, cada vez que se quisiese obtener el mismo informe habra que

SQL*Plus

puede entonces leer este chero y ejecutar las rdenes

SQL*Plus

como las consultas en

SQL,

la manera de distinguir entre las

2 Ver

Lenguaje de Manipulacin de Datos.

2.2 Identicacion ante el SQL*Plus

17

rdenes de uno y las rdenes de otro es que las rdenes y las consultas de todas con un punto y coma (;) y las de Las rdenes

SQL*Plus

SQL terminan

no.

SQL*Plus no se almacenan en un rea temporal. Actan directamente sobre el entorno de SQL*Plus. Cuando se ejecuta este producto, se selecciona un entorno
determinado a travs de una lista de parmetros de entorno que queda rellenado con unos valores por defecto. A travs de las rdenes

SQL*Plus, el usuario puede modicar alguno

de estos parmetros, el cual permanecer hasta que sufra una modicacin posterior o hasta que abandone el entorno de trabajo. Resumiendo, las rdenes de datos, y las rdenes

SQL.

SQL*Plus

SQL afectan a la base

afectan al entorno de trabajo del uso de las rdenes

2.2.

Identicacin ante el SQL*Plus


SQL*
seguido de un nombre de producto indica que dicho producto es una

El prejo

herramienta de desarrollo de aplicaciones , apoyndose en rdenes dentro de un marco especco, en donde cumplen su funcin.

SQL

que se ejecutan

SQL*Plus permite de SQL y SQL*Plus.


El

el acceso directo a la base de datos a travs del uso de rdenes

Para conectar con la base de datos hay distintas maneras, vamos a ir viendo cada una de ellas y los pasos a seguir desde el indicador del sistema operativo:

1) Introducir slo la orden a continuacin del indicativo del sistema operativo y esperar a que 2.1.

SQL*Plus

nos pregunte el identicativo de usuario y la contrasea, ver ejemplo

2) Especicar el identicativo de usuario y dejar que sea el por la contrasea, ver ejemplo 2.2.

SQL*Plus

el que pregunte

3) Especicar en la lnea de rdenes el identicativo y contrasea separados por un barra inclinada (/) en la lnea de rdenes del sistema operativo cuando se invoca al producto

SQL*Plus, ver ejemplo 2.3.

Por supuesto, la contrasea no aparecer en pantalla cuando nos conectamos como en los ejemplos 2.1 y 2.2. Para salir del producto

SQL*Plus

y devolver el control al sistema operativo basta con

teclear una de las siguientes rdenes

exit

quit,

ver ejemplo 2.4.

versiones posteriores de asterisco.

3 En

Oracle

existen productos que ya no cumplen esta norma del uso del

18

SQL*Plus

Ejemplo 2.1

> sqlplus

Identicacin ante el producto

SQL*Plus: Release 9.2.0.1.0 - Production on Tue Apr 13 16:28:13 2004 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Enter user-name: nombre_usuario@juno Enter password: SQL>

Ejemplo 2.2

> sqlplus nombre_usuario@juno

Identicacin ante el producto

SQL*Plus: Release 9.2.0.1.0 - Production on Tue Apr 13 16:35:01 2004 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Enter password: SQL>

Ejemplo 2.3

Identicacin ante el producto

> sqlplus nombre_usuario@juno/clave


SQL*Plus: Release 9.2.0.1.0 - Production on Wed Apr 14 16:36:12 2004 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production JServer Release 9.2.0.1.0 - Production SQL>

Ejemplo 2.4

SQL> exit
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production JServer Release 9.2.0.1.0 - Production >

Salida del producto

2.3 Conexion con otros usuarios

19

Cuando el

DBA ha decidido que el nombre de usuario sea el mismo del sistema opera-

tivo, no hace falta introducir el indicativo de usuario ni la contrasea, ya que tomar por defecto el indicativo de la cuenta del sistema operativo y por contrasea, la misma que est vigente en ese momento en el sistema. Estos identicativos de los usuarios son de la siguiente forma:

Formato:
ops$identificativo_S.O.

2.3.

Conexin con otros usuarios


Oracle puede conectarse con otro usuario, slo tiene que conocer

Cualquier usuario de propio producto nos desconecta

el identicativo del usuario y su contrasea. La conexin se puede hacer desde dentro del

SQL*Plus. Si la conexin no se produce debido a cualquier error, Oracle del producto SQL*Plus y si queremos continuar trabajando, debemos

volver a conectarnos.

Formato:
conn[ect] [nombre_usuario[/clave]]
Hay distintas maneras de conectarse:

1) Una forma de conectarnos es introduciendo el identicador y la clave separados por una barra. En este caso, la clave es visible por pantalla (ver ejemplo 2.5).

2) O bien, slo introducir el identicativo de usuario y esperar que el producto nos pida la clave (ver ejemplo 2.6).

SQL*Plus

3) O tambin, solamente dando la orden y esperando que de usuario y clave (ver ejemplo 2.7).

SQL*Plus nos pida identicativo

Ejemplo 2.5

Conexin con usuario

SQL> conn nombre_usuario@juno/clave Connected. SQL>

20

SQL*Plus

Ejemplo 2.6

Conexin con usuario

SQL> conn nombre_usuario@juno Introduzca la clave: Connected. SQL>

Ejemplo 2.7

Conexin con usuario

SQL> conn Enter user-name: nombre_usuario@juno Enter password: Connected. SQL>

La clave no aparecer en pantalla en los apartados 2 y 3 anteriores. Para desconectarnos de una cuenta, pero sin salirnos del de nuevo a una cuenta de usuario.

disconnect (ver ejemplo 2.8). Si queremos volver al producto, tendremos que conectarnos
Ejemplo 2.8 Desconexin con usuario

SQL*Plus, tecleamos la orden

SQL> disconnect SQL>


Disconnected from Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production JServer Release 9.2.0.1.0 - Production SQL>

2.4.

Introduccin de rdenes
SQL*Plus SQL
reconoce la primera palabra de una sentencia

El producto

SQL y pregunta

por lneas adicionales de instrucciones numerando las lneas. Las rdenes se situan en el

buer

por omisin del

SQL.

Por eso pueden ser

editadas y reejecutadas sin tener que introducir nuevamente toda la sentencia El formato de las rdenes permitir una fcil lectura.

SQL.

SQL es libre, no se distingue entre maysculas y minsculas,

pudindose incluso partir palabras en lneas consecutivas. Esto permite la identacin para

2.5 Las ordenes de edicion

21

Las rdenes

SQL se ejecutan cuando se detecta: SQL.


r[un]

Un punto y coma (;) al nal de la sentencia Una barra (/) en la lnea de rdenes.

Una lnea en blanco y despus introduciendo

en la lnea de rdenes

SQL.

El punto y coma no se introduce en el El

buer

de edicin y no puede ser editado.

SQL*Plus

reconoce la primera palabra de una orden de formateado y no pregunta

nada ms con lneas adicionales, en su lugar se establecer el parmetro especicado. Las rdenes de formateado del

SQL*Plus no se sitan as mismo en el buer de edicin.

2.5.

Las rdenes de edicin

SQL se introduce en el entorno SQL*Plus, se sita en un buer. Mediante unas rdenes, el SQL*Plus permitir su modicacin y posterior ejecucin. Las rdenes de edicin del producto SQL*Plus se pueden ver en la tabla 2.1.
Cuando una sentencia Tenemos que tener en cuenta que en el ejecutada.

buer solamente se introduce la ltima consulta

a[ppend] texto c[hange] /viejo/nuevo c[hange] /texto cl[ear] buff[er] cl[ear] scr[een] del i[nput] i[nput] texto l[ist] [l[ist]] n n l[ist] * l[ist] n * r[un]
/

Orden

Uso
Aade texto al nal de la lnea actual. Cambia viejo por nuevo en la lnea actual. Borra texto de la lnea actual. Borra todas las lneas del Borra la pantalla. Borra la lnea actual. Aade lneas al

buer.

buer. buer. buer haciendo


n
que dicha lnea pase a

Aade una lnea con el texto despus de la lnea actual. Lista todas las lneas del Lista la lnea

del

ser la lnea actual del editor. Lista la lnea actual. Lista desde la lnea Ejecuta el hasta la actual. Lista y ejecuta la orden del

buer.

buer.

Tabla 2.1: rdenes de edicin Las rdenes de edicin afectan: a la lnea actual o a la lnea siguiente a la actual. Junto a los nmeros de lnea aparece un asterisco (*) que indica cul es la lnea actual, o

22

SQL*Plus

tambin para indicar, en caso de error, el lugar donde el intrprete ha encontrado el error sintctico, ver ejemplo 2.12. Veamos algunos ejemplos de cmo manejar estas las rdenes:

Mostramos el contenido del

buer, donde cada lnea est numerada y la lnea actual

adems est marcada con un asterisco, ver ejemplo 2.9.

Aadimos una lnea al nal de la lnea actual y pasa a ser la nueva lnea actual , ver ejemplo 2.10.

Borrar la lnea actual y cambiar el nombre de la tabla , ver ejemplo 2.11.

Ejemplo 2.9

Mostrar el contenido del buffer

SQL> l 1 select * 2* from proveedores SQL>

Ejemplo 2.10

Aadir una lnea a la orden del buffer

SQL> SQL> 1 2 3* SQL>

i where prv_num > 2 l select * from proveedores where prv_num > 2

Ejemplo 2.11

Borrar lnea y cambiar texto

SQL> SQL> 1 2* SQL> 2* SQL>

del l select * from proveedores c/proveedores/tiendas from tiendas

2.6 Las ordenes de cheros

23

Ejemplo 2.12

Manera de mostrar un error

SQL> select art_num 2 from proveedores; select art_num * ERROR en linea 1: ORA-00904: "ART_NUM": identificador no valido SQL>

2.6.
El

Las rdenes de cheros

SQL*Plus tambin tiene rdenes para manejar cheros. Podemos guardar el contenido del buer en un chero del directorio actual, teniendo por defecto la extensin sql. Asimismo, podemos recuperar un chero del subdirectorio al buer. Ver la tabla 2.2.
!orden host edit

Orden
shell chero [chero[.ext]]

Uso
Permite, sin salirse del shell. Permite, sin salirse del

SQL*Plus, ejecutar ciertas rdenes del SQL*Plus, ejecutar proceso batch.

Invoca al editor por defecto con el contenido del chero o del

get chero save chero @chero[.ext] spool


chero

buer.

Carga un chero del sistema operativo en el Guarda el

buer

buer.

en un chero especicado del sistema opera-

tivo. Por defecto la extensin es

sql.

Ejecuta el contenido del chero. Por defecto la extensin es

sql.
Almacena el resultado de una consulta en un chero del sistema operativo con extensin

spool out|off start


chero

lst.

Manda el chero anterior a la impresora por defecto, o no; en ambos casos se cierra el chero. Ejecuta el contenido del chero de rdenes especicado. Por defecto la extensin es

sql.

Tabla 2.2: rdenes de cheros Veamos el ejemplo 2.13 donde combinaremos una serie de rdenes de cheros: 1) Listaremos el contenido del

buer.

2) Dicho contenido se salvar en un chero del sistema operativo, ch-con, y cuya extensin por defecto ser sql.

24

SQL*Plus

3) Se ejecutar y se guardar el resultado de dicha consulta en un chero del sistema operativo en el subdirectorio por defecto, denominado resul.lst.

Ejemplo 2.13

Salvar el buffer y guardar la ejecucin en un chero

SQL> l 1 select * 2* from proveedores SQL> save fich-con Creado archivo fich-con.sql SQL> spool resul SQL> @fich-con PRV_NUM ---------1 2 3 4 5 PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp

5 filas seleccionadas. SQL> spool off SQL> !less resul.lst SQL>

2.7.

El editor del Sistema Operativo


SQL y/o tambin rdenes de SQL*Plus
4
en un chero y

Podemos introducir rdenes de propio editor con la orden

para ello usaremos un editor del sistema operativo . Tambin podemos denirnos nuestro

define.

Formato:
DEF[INE]_EDITOR = nombre_editor
donde

nombre_editor es el nombre de cualquier editor disponible en el sistema operativo. jed edit.


como editor por defecto y

El ejemplo 2.14 nos muestra como denirnos el editor que sea el que se invoque cuando tecleamos la orden

operativo.

4 Podemos

usar cualquier editor, o bien, el que sea en ese momento el editor por defecto del sistema

2.8 Ayudas

25

Ejemplo 2.14

SQL> define_editor = jed SQL>

Denicin de editor

Podemos editar con la orden

sql,

o bien el contenido del

por defecto, el contenido

afiedt.buf.

buer (afiedt.buf). del buer y adems, se

edit

cualquier chero cuya extensin por defecto sea Si no especicamos nada se editar, guardar en un chero denominado

Formato:
ED[IT] [nombre_fichero|afiedt]
En los ejemplos 2.15 y 2.16 observamos como se editar el chero contenido del

buer afiedt.buf.

consulta.sql

y el

Ejemplo 2.15

SQL> edit consulta

Edicin de chero

Ejemplo 2.16

SQL> edit afiedt SQL> edit

Edicin del buffer

o bien, simplemente:

Cuando tenemos un chero con rdenes lnea, ver la tabla 2.3.

SQL*Plus

y sentencias

SQL,

puede ser reco-

mendable introducir comentarios que nos permitan aclarar lo que hace la orden de cada

Orden

rem[ark] texto /* texto */

Uso
Se coloca al comienzo de la lnea y slo es vlido para esa lnea. Se coloca al comienzo del comentario y se cierra al nal del texto.

Tabla 2.3: rdenes de comentarios

2.8.

Ayudas
describe
y

Existen dos rdenes que nos ayudan de distinta manera a la hora de manejar una base de datos. Son las rdenes

help.

26

SQL*Plus

describe:

Esta orden nos muestra informacin de las columnas de las tablas, de

las vistas, o de los sinnimos , indicndonos nmero de columnas, nombre de las columnas y restricciones que deben cumplir las columnas (ver ejemplo 2.17).

Formato:
DESC[RIBE] nombre_objeto
donde

nombre_objeto

es el nombre del objeto a describir.

Ejemplo 2.17

Descripcin de un objeto

SQL> describe proveedores Nombre ----------------------------------------PRV_NUM PRV_NOM

?Nulo? -------NOT NULL NOT NULL

Tipo ------------NUMBER(38) VARCHAR2(25)

Esta orden nos devuelve una tabla

que contiene tres columnas. El signicado de

cada una de ellas se muestra en la tabla 2.4.

Nombre Signicado
Nombre Nulo? Tipo Muestra los nombres de las columnas en el mismo orden que se dieron en el momento de la creacin de la tabla. Nos dice si las correspondientes columnas pueden contener valores nulos o no. Muestra el tipo de dato asignado a las columnas en el momento de su creacin.

Tabla 2.4: Informacin de la orden

describe

help: Esta orden nos muestra informacin acerca de las rdenes de SQL y/o SQL*Plus 7 especicadas en nombre_orden.

Formato:
HELP [nombre_orden]
tablas, las vistas y los sinnimos son objetos de la BD que se crean con el lenguaje DDL. manejando un SGBD relacional, por tanto toda la informacin que nos devuelve el sistema viene en forma de tabla. 7 La respuesta de Oracle viene dada en ingls.
6 Estamos 5 Las

2.9 Formateado de consultas

27

Ejemplo 2.18

SQL> help save SAVE ----

Ayuda de una orden

Saves the contents of the SQL buffer in a host operating system script. In iSQL*Plus, click the Save Script button to save the Input area contents to a script. SAV[E] file_name[.ext] [CRE[ATE] | REP[LACE] | APP[END]] Not available in iSQL*Plus

Esta orden permite a los usuarios obtener una documentacin de referencia del

Oracle

mientras se est trabajando con el

SQL*Plus.

Si se introduce nicamente

una porcin de la orden se mostrarn los formatos de todas las opciones de esa orden (ver ejemplo 2.18).

2.9.
consulta

Formateado de consultas
SQL y producir informes simples.

Las rdenes de formateo se utilizan para formatear los resultados procedentes de una

Existen varias rdenes de formateo, veremos las ms interesantes.

2.9.1. Cabeceras y pies de pginas


Existen dos rdenes que nos permiten colocar cabeceras y pies de pginas a los informes que podemos obtener como resultado de una consulta.

btitle: Esta orden coloca un ttulo, que puede estar compuesto de varias lneas, en
la parte inferior de cada pgina del informe.

Formato:
BTI[TLE] [espc. [var | text] ...] | [OFF|ON] ttitle: Esta orden coloca un ttulo en la parte superior de cada pgina, numera las
pginas y coloca la fecha actual.

28

SQL*Plus

Formato:
TTI[TLE] [espc. [var | text] ...] | [off|on]

Las opciones de estas rdenes son:

espc text var

Esta opcin representa una o ms de las clusulas usadas para colocar y formatear el texto, ver la tabla 2.5. Es el texto que queremos que aparezca en la cabecera o a pie de pgina y ha de colocarse entre comillas simples.

Esta opcin representa una variable del usuario o del sistema y debe especicarse en mayscula, ver la tabla 2.6.

o|on

Por defecto la opcin es

off.

Espc.

s[kip] [n] le[ft] ce[nter] r[ight]

Uso
Salta al comienzo de una nueva lnea Alinea el texto por la izquierda. Centra el texto. Alinea el texto por la derecha.

veces.

Tabla 2.5: Especicaciones para las rdenes

btitle

ttitle

Var.

SQL.LNO SQL.PNO SQL.RELEASE SQL.SQLCODE SQL.USER

Uso
Nmero de la lnea actual. Nmero de la pgina actual. Nmero de versin actual de Cdigo de error actual. Identicativo del usuario.

Oracle.

Tabla 2.6: Variables para las rdenes

btitle

ttitle

En el ejemplo 2.19 hemos realizado una consulta y el resultado aparecera formateado de la siguiente manera: una cabecera centrada que nos indicar que corresponde con el informe del da y a pie de pgina el nombre de la cuenta de ejecutando dicha consulta.

Oracle

desde donde se est

2.9 Formateado de consultas

29

Ejemplo 2.19

Ttulo y pie de pgina

SQL> SQL> SQL> 2

ttitle center 'Informe del dia' btitle skip SQL.USER skip 'UCA' select * from proveedores; Informe del dia PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp

PRV_NUM ---------1 2 3 4 5 GADESCHI UCA

5 filas seleccionadas.

2.9.2. Formateado de columnas


La orden una

column permite sentencia select.

cambiar las cabeceras y formatos de cualquier columna de

Formato:
COL[UMN] [{nom_columna|expresin} [opcin ...]]
Donde expresin corresponde a columnas virtuales obtenidas por clculo, funcin o expresin matemtica . En la tabla 2.7 se muestran algunas de las principales opciones de esta orden. La opcin

format, column

a su vez, tiene una sintaxis propia para poder especicar los for-

matos, ver la tabla 2.8. La orden no cambia la denicin de una columna en la tabla, sino que la

modica para obtener un informe con un formato dado. Se modica la salida por pantalla o impresora de dicha columna. En el ejemplo 2.20 se puede observar cmo formatear columnas.

1) Le asignamos un alias a la columna opciones de

column.

art_nom

para luego poder utilizarlo con otras

8 Ver

Lenguaje de Manipulacin de Datos.

30

SQL*Plus

2) Reducimos el ancho de la columna

art_nom art_pv

a 6 caracteres. tenga 5 dgitos solamente.

3) Por ltimo, queremos que la columna

ali[as]

Opcin

Uso
nombre Asigna un alias a una columna que se podr utilizar en las rdenes de columna. Elimina los valores de los atributos asignados a una columna. Especica los formatos de pantalla de las columnas. Dene las cabeceras de las columnas. Alinea las cabeceras de las columnas a la izquierda, al centro o a la derecha. Si no se usa esta orden, las columnas denidas como

cle[ar] for[mat] formato hea[ding] texto jus[tify]{l|c|r}

number

se alinean a la derecha y los otros tipos de

columna a la izquierda.

Tabla 2.7: Opciones para la orden

column

Opcin Ejemplo Uso


9 $ 999 $999 Determina el nmeros de dgitos enteros de la columna especicada. Muestra un signo dolar al comienzo de cada la de la columna indicada. Fija la anchura en caracteres de la columna especicada.

An

A6

Tabla 2.8: Opciones para la orden

format

2.10.

Variables del sistema


set y se comprueba su contenido con la orden

Las variables del sistema son como opciones de programas ms que variables. Cada variable del sistema controla algunos aspectos de las operaciones del bles del sistema se establecen con la orden

SQL*Plus. Las varia-

show. set:

establece un aspecto del entorno del

SQL*Plus

para la seccin actual. Para seguido por el nombre de

colocar una variable del sistema, se usa esta orden

set

una variable del sistema y un valor para esa variable.

Formato:
SET variable_sistema valor

2.10 Variables del sistema

31

Esta orden tiene muchas opciones, algunas de ellas las podemos ver en la tabla 2.9 . Y en el ejemplo 2.21 observamos la manera de establecer un valor para estas opciones.

a) Establecer un mximo de 20 registros por pgina. b) Muestra por pantalla las rdenes cuando las ejecutamos desde un chero. c) Desactiva la pausa.

Ejemplo 2.20

Formateo de columnas

SQL> SQL> SQL> SQL> 2 3

column art_nom alias nombre column nombre format a6 column art_pv format 99999 select * from articulos where art_num < 4;

ART_NUM ART_NO ART_PESO ART_COL ART_PC ART_PV ART_PRV ---------- ------ ---------- ------- ---------- ------ ---------1 impres 150 rojo 400 580 4 ora 2 calcul adora 3 calend ario 3 filas seleccionadas. 150 negro 100 blanco 4000 420 4700 600 1 4

Ejemplo 2.21

SQL> set pages 20 SQL> set echo on SQL> set pause off SQL>

Establecer variables

show:

nos muestra el valor de una variable del sistema. Visualiza el valor de una

caracterstica de la orden rdenes de la orden

show,

SQL*Plus. Podemos colocar ms de una variable del sistema despus de


y cada una se visualiza en una lnea separada.

set, o bien todas (all) las caractersticas de set, o de otras

9 La

opcin subrayada es la opcin por defecto.

32

SQL*Plus

Formato:
SHO[W] variable_sistema [,variable_sistema]
Esta orden tambin nos muestra los valores de otras variables como podemos ver en la tabla 2.10. En el ejemplo 2.22 vemos la utilidad de esta orden. Primero nos muestra el nmero de registros que est establecido por pginas y despus el nombre del esquema desde donde estamos trabajando.

Ejemplo 2.22

SQL> show pages pagesize 20 SQL> show user USER es "GADESCHI" SQL>

Valores de variables

2.11.

Entrada y salida de datos


SQL*Plus

Todo lenguaje de programacin tiene un apartado dedicado a la entrada de datos tanto por teclado como por pantalla y lo mismo ocurre con la salida de los datos obtenidos como resultado de la ejecucin de programas. El producto

tambin dispone de un conjunto de rdenes para regular la entrada y salida de datos.

2.11.1. Denicin de variables


La denicin de variables se realiza con la orden

define

que ya hemos usado para

predenir un editor de texto. Esta orden permite a los usuarios especicar variables y asignarles un valor de tipo carcter. O bien, listar el valor y el tipo de variable de una o de varias variables.

auto[commit]

Variable

Valor

off|on| imm[ediate] &|c|off|on

Uso
Controla cundo

dientes en la base de datos.

Oracle realiza los cambios penon realiza los cam-

bios pendientes despus de cada orden

define

imm[ediate]

SQL.
on.

funciona igual que la opcin

Conjunto de caracteres usados para prejar la sustitucin de variables a Ver el ejemplo 2.28.

c. on

off

controla

si se hace o no la sustitucin de las variables.

contina en la siguiente pgina

2.11 Entrada y salida de datos

33

continuacin de la pgina anterior

Variable
echo

Valor

off|on

Uso

on nos mostrara por pantalla las rdenes cuando ejecutamos ordenes del chero de arranque.

off hace que este producto

SQL*Plus

desde un

los ejecute sin visualizarlos.

feed[back] lin[esize] long newp[age] pages[ize] pau[se]

6|n|off|on 80|n 80|n 1|n 14|n

Informa del n consulta. nea.

de registros que devuelve una activa o desactiva la opcin.

off|on

Establece el nmero total de caracteres por lEstablece la anchura mxima en caracteres para mostrar y copiar valores Estable el n

long.

de lneas en blanco de cabecera y

de pie de pgina.

off|on|texto on hace que SQL*Plus

Establece el nmero de lneas por pginas.

return

espere a que se presione

despus de visualizar cada pgina de la

salida.

off hace que no haya pausa en la visua-

lizacin de pginas. texto es el mensaje que se visualizar en la parte inferior de la pantalla mientras se espera la pulsacin de la tecla

show[mode]

off|on

return.
on

hace que

SQL*Plus

visualice la disposicin

antigua y la nueva de una caracterstica su valor cuando se cambia. lizacin de ambas.

set y off detiene la visua-

spa[ce] sqlp[rompt] ti[me] verify

1|n

SQL>|texto
off|on off|on

Nmero de espacios entre columnas. Sustituye el indicativo por defecto por texto.

on nos muestra la off lo desactiva.

hora despus de cada orden,

Controla que aparezca o no el valor anterior y posterior de la variable cuando hacemos una sustitucin de variables con el operador &.

Tabla 2.9: Variables del sistema

La sintaxis es la siguiente:

Formato:
DEF[INE] [nom_variable]|[nom_variable = 'texto']

nom_variable

Es el nombre que le vamos a dar a la variable.

34

SQL*Plus

Variable

all bti[tle] lno parameters

Uso
Muestra el conjunto de todas las opciones. Muestra el ttulo actual de pie de pgina. Nos indica el n

de la lnea actual.

Muestra el valor actual de un o ms parmetros de inicializacin. Se puede poner una cadena de caracteres despus de la orden para que nos muestre un subconjunto de parmetros cuyos nombres incluya esa cadena.

pno rel[ease] spoo[l] tti[tle] user

Muestra el n

de la pgina actual.

Muestra la versin actual de

Oracle.

Nos indica si la salida va a un chero de

spool.

Muestra el ttulo de cabecera de pgina actual. Nos muestra el nombre del usuario bajo el cual estamos trabajando en ese momento.

Tabla 2.10: Valor de variables

texto

La variable queda denida con texto.

En los ejemplos 2.23 y 2.24 vemos como asignarle el valor 20 de tipo caracter a la variable var1 y como visualizar el contenido de dicha variable.

Ejemplo 2.23

Asignar valor a variable

SQL> define var1=20 SQL>

Ejemplo 2.24

SQL> define var1 DEFINE VAR1 SQL>

Visualizar el valor de variable

= "20" (CHAR)

Podemos borrar la denicin de una variable con la orden

undefine

como sigue:

Formato:
UNDEF[INE] nom_variable
En el ejemplo 2.25 vemos cmo borrar la denicin de la variable var1 denida anteriormente y comprobar que no tiene valor.

2.11 Entrada y salida de datos

35

Ejemplo 2.25

SQL> undefine var1 SQL> define var1 SP2-0135: el simbolo var1 es UNDEFINED (INDEFINIDO) SQL>

Eliminar valor de variable

2.11.2. Uso de operadores con variables


Las variables tambin se pueden utilizar sin necesidad de denirlas previamente como hemos visto en el apartado anterior. Para ello utilizamos los operadores y doble

ampersand

ampersand

(&)

(&&).

Ambos operadores (& y &&) actuan de la misma manera sobre una variable aunque la semntica exacta es diferente dependiendo de si la variable tratada est denida previamente o no.

Formato:
&[&]nombre_variable
Variable no denida previamente:

&var1: En una sentencia

SQL

es posible dejar indeterminado el nombre de

una columna o de una tabla, y dejar que

SQL

nos solicite dicho valor antes

SQL

de ejecutar dicha sentencia. Si la variable del sistema

verify10

est activada,

nos mostrar el valor anterior y el actual suministrado por el usuario.

Para solicitar la sustitucin de la variable por el valor dado por el usuario se emplea el operador

ampersand

(&) delante de la variable en la consulta

SQL.

En el ejemplo 2.26 podemos observar cmo se utiliza dicho operador y cmo le damos un valor a la variable. Dicho operador (&) est denido por defecto, pero podemos denirlo con cualquier otro caracter usando la orden de en el ejemplo 2.28.

SQL*Plus set como podemos observar

&&var1: El sistema pide al usuario un valor para la variable var1 que es colocado en el lugar de la instruccin donde aparece, quedando as denida la variable con ese valor a partir de ese momento. El ejemplo 2.31 nos muestra como se realiza esto. En principio, suponemos que la variable del sistema la orden

verify est activada. El sistema nos pide un valor para

la variable var1 y nos muestra el resultado de la consulta. Cuando damos

run

ya no nos vuelve a pedir que introduzcamos el valor para dicha

variable. Con el doble

ampersand

una vez que hemos introducido un valor ya

10 Ver

tabla 2.9.

36

SQL*Plus

queda jado para toda la sesin a menos que utilicemos la orden para redenir el valor de la variable.

undefine

Tenemos que tener cuidado a la hora de denir variable usando el doble

persand ya que la ltima orden del ejemplo 2.31 nos borrar todos los registros
antes.

am-

de la tabla mostrados anteriormente y no nos preguntar el nombre de la tabla ya que tomar como valor de la variable var1 el que ya le habiamos dado

Variable denida previamente: Los dos operadores tienen el mismo funcionamiento en este caso. No se solicita al usuario ningn valor, usando el que tenga la variable actualmente.

Las variables pueden ser usadas en interactivo, o sea, en una consulta realizada desde el indicativo del

SQL*Plus, o bien, en una consulta contenida en un chero.

SQL> select * 2 from &var1; Introduzca un valor para var1: proveedores antiguo 2: from &var1 nuevo 2: from proveedores PRV_NUM ---------1 2 3 4 5 PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp

Ejemplo 2.26

Uso de variables con &

5 filas seleccionadas.

2.11.3. Uso de variables con distintas rdenes


El operador

ampersand (&) se puede utilizar para recibir distintos argumentos cuando


start
y @ es

utilizamos algunas de las rdenes de cheros. Cuando usamos las rdenes posible pasarles distintos argumentos al chero que queremos ejecutar.

Tenemos dos formatos distintos para realizar la misma orden, como podemos ver a continuacin:

2.11 Entrada y salida de datos

37

Formato:
START nombre_fichero arg_1 arg_2 @nombre_fichero arg_1 arg_2
Tambin podemos utilizar este operador con rdenes de observar en el ejemplo 2.27. En el ejemplo 2.29, &1 se va a sustituir por el valor de arg_1, mientras que &2 se va a sustituir por el valor de arg_2. En este caso los nombres de las variables a continuacin del operador

SQL*Plus

como podemos

ampersand

(&) deben ser nmericos (1 y 2, en este caso). La sustitucin se

hace en el orden: el primer argumento va a la primera variable, el segundo a la segunda, y as sucesivamente.

Ejemplo 2.27

Uso de variables con & (cont.)

SQL> describe &tab Introduzca un valor para tab: proveedores Nombre ?Nulo? Tipo --------------------- -------- ---------------------------PRV_NUM NOT NULL NUMBER(38) PRV_NOM NOT NULL VARCHAR2(25)

Ejemplo 2.28

Redenicin de operador

SQL> set define # SQL> select * 2 from #var1; Introduzca un valor para var1: proveedores antiguo 2: from #var1 nuevo 2: from proveedores PRV_NUM ---------1 2 3 4 5 PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp

5 filas seleccionadas.

Ejemplo 2.29

SELECT &1 FROM &2;

Contenido del chero nombre_chero

38

SQL*Plus

En el ejemplo 2.30 vemos cmo podemos utilizar el operador con rdenes de En este ejemplo nos decribir la denicin de la tabla que le indiquemos.

SQL*Plus.

Ejemplo 2.30

SQL> describe &var Introduzca un valor para var: Nombre ?Nulo? ------------------- -------PRV_NUM NOT NULL PRV_NOM NOT NULL

Uso del operador & con rdenes de SQL*Plus

proveedores Tipo -------------------NUMBER(38) VARCHAR2(25)

2.12.
producto

Ficheros de rdenes
SQL*Plus.

Los cheros de rdenes son cheros del sistema operativo que contienen rdenes del

Cuando el usuario entra en el producto

SQL*Plus, Oracle
login.sql.

comprueba si existe en Si existe este chero, lo

el subdirectorio actual un chero especial llamado

ejecuta, realizando las rdenes que tenga en su interior. Estas se ejecutan secuencialmente y en el mismo orden en que aparecen en dicho chero.

SQL*Plus as SQL; todas ellas se ejecutarn antes que el producto SQL*Plus proporcione el indicativo SQL>. sta puede ser una forma conveniente de crearse un entorno individual dentro del producto SQL*Plus.
Se pueden colocar en este chero cualquier orden propia del producto como sentencias El ejemplo 2.32 nos muestra un chero de rdenes.

2.12 Ficheros de ordenes

39

Ejemplo 2.31

Uso de variables con & y &&

SQL> select * 2 from &&var1; Introduzca un valor para var1: proveedores antiguo 2: from &&var1 nuevo 2: from proveedores PRV_NUM ---------1 2 3 4 5 PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp

5 filas seleccionadas. SQL> run 1 select * 2* from &&var1 antiguo 2: from &&var1 nuevo 2: from proveedores PRV_NUM ---------1 2 3 4 5 PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp

5 filas seleccionadas. SQL> delete from &var1; SQL>

40

SQL*Plus

Ejemplo 2.32

REM nos muestra el nombre del usuario SHOW user

Fichero de rdenes: login.sql

REM establecemos a 16 el nmero mximo de registros por pgina SET pages 16 REM nos mostrar la versin del Oracle SHOW release REM establecemos el editor por defecto DEFINE_EDITOR = jed /* activamos la pausa y hacemos que nos muestre el mensaje 'pulsa return ' despus de cada pgina */ SET PAUSE ON SET PAUSE 'pulsa return ' REM nos mostrar la fecha de hoy con formato por defecto SELECT sysdate FROM dual;

2.13 Resumen de ordenes de SQL*Plus

41

2.13.
Ejemplo 2.33

Resumen de rdenes de SQL*Plus


Lista de todas las rdenes del SQL*Plus

SQL> help index Enter Help [topic] for help. @ @@ / ACCEPT APPEND ARCHIVE LOG ATTRIBUTE BREAK BTITLE CHANGE CLEAR COLUMN COMPUTE CONNECT COPY DEFINE DEL DESCRIBE DISCONNECT EDIT EXECUTE EXIT GET HELP HOST INPUT LIST PASSWORD PAUSE PRINT PROMPT QUIT RECOVER REMARK REPFOOTER REPHEADER RESERVED RESERVED RUN SAVE SET SHOW SHUTDOWN SPOOL SQLPLUS START STARTUP STORE TIMING TTITLE UNDEFINE VARIABLE WHENEVER WHENEVER

WORDS(SQL) WORDS (PL/SQL)

OSERROR SQLERROR

Parte 2

Lenguaje de Manipulacion de Datos

Cap tulo 3

Manipulacion de datos
Este captulo estudia las cuatro rdenes para manipular la informacin de la Base de Datos. Podemos modicar la tabla resultante de una consulta para obtener un mejor resultado como puede ser eliminacin de tuplas repetidas, clasicacin de las tuplas o identicar a las columnas por un nuevo nombre.

3.1.

Introduccin
DML)
se utiliza para realizar las operaciones

El lenguaje de manipulacin de datos ( explicacin la podemos ver en la tabla 3.1.

de mantenimiento y consulta de una base de datos. Est formado por cuatro rdenes y su

Orden Operacin
select insert update delete
Muestra el contenido de una tabla. Introduce registros en una tabla. Actualiza un atributo o campo de una tabla. Elimina uno o varios registros de una tabla.

Tabla 3.1: rdenes del Lenguaje de Manipulacin de Datos

46

Manipulacion de datos

3.2.

La orden select
select
se utiliza, principalmente, para realizar cualquier consulta a una o

La orden para ello.

a varias tablas o vistas de nuestro o de otros esquemas siempre que tengamos privilegio

Esta orden no slo es la que ms se emplea en el a mltiples tablas, usar funciones, etc.

SQL,

sino que es la ms verstil.

Puede tomar un aspecto realmente complejo, incorporar varias consultas anidadas, afectar

Cualquier consulta a una o a varias tablas de la base de datos, deber constar, como mnimo, de una sentencia formada por la orden

select

y la clusula

from.

La sintaxis de esta orden es bastante compleja. Nosotros iremos estudiando cada una de las clusulas paso a paso. La estructura general de esta orden es la siguiente:

Formato:
SELECT nombre de las columnas FROM nombre de las tablas [WHERE condiciones de seleccin de tuplas] [GROUP BY nombre de columnas] [HAVING condiciones de seleccin de grupos] [ORDER BY nmeros o nombre de columnas];

3.2.1. Proyeccin de una tabla


La operacin de proyeccin es una operacin del lgebra relacional de aparicin de izquierda a derecha de dichas columnas. La lista de las columnas que queremos proyectar aparecern despus de la orden que en la clusula

que consiste en

seleccionar una o varias columnas o atributos de una o varias tablas, indicando el orden

select

separadas por comas y en el orden en que queremos que aparezcan en el resultado. Mientras

from

indicaremos los nombres de las tablas cuyas columnas queremos

seleccionar, separadas tambin por comas (ver ejemplo 3.1). Un caso especial es cuando queremos proyectar todas las columnas de una tabla dada. Para ello utilizamos un asterisco (*) en vez de los nombres de las columnas, como podemos observar en el ejemplo 3.2.

1 Corresponde

con la operacin de proyeccin del lgebra relacional representada por la letra griega .

3.2 La orden select

47

Ejemplo 3.1

SQL> select prv_num, prv_nom 2 from proveedores; PRV_NUM ---------1 2 3 4 5 PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp

Proyeccin de datos de los proveedores

5 filas seleccionadas.

Ejemplo 3.2

SQL> select * 2 from proveedores; PRV_NUM ---------1 2 3 4 5 PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp

Proyeccin de todos los datos de los proveedores

5 filas seleccionadas.

En esta consulta, el orden de aparicin de las columnas, de izquierda a derecha, es el mismo orden en que fueron creadas las columnas, cuando se cre la tabla con la orden

create table

del lenguaje DDL. El resultado es otra tabla, obtenida mediante la

proyeccin de todas las columnas de la tabla de partida.

3.2.2. Seleccin de las de una tabla


Una tabla est formada por un conjunto de las, tuplas o registros. Cuando realizamos una consulta, podemos proyectar una serie de columnas en un orden especco, pero tambin podemos seleccionar un conjunto de tuplas y no todas las que forman la tabla . Este subconjunto est formado por las tuplas que cumplan unas determinadas condiciones.

2 Esta

operacin se corresponde con la operacin de seleccin ( ) del lgebra relacional.

48

Manipulacion de datos

Las condiciones de seleccin pueden tener criterios diferentes y se especican en la clusula

where.

Esta clusula es opcional y se coloca a continuacin de la clusula

from.

Esta clusula tiene el siguiente formato:

Formato:
SELECT colum1, colum3, colum4 FROM nom_tabla WHERE criterio de seleccin de filas;
El criterio en una clusula

where se establece mediante una expresin lgica compuesta not


(negacin),

por una serie de condiciones, cada una de las cuales toma el valor verdadero o falso, combinado con los operadores lgicos formar parte del resultado. Las condiciones pueden utilizar los siguientes operadores:

and (Y

lgico) y

or (O

lgico). Si

una la cumple la condicin, har que el valor de la expresin lgica sea verdadero, y

Comparacin con un valor

=, <>, !=, <, >, <=, >=

).

Comparacin con un intervalo de valores (between). Comparacin con una lista de valores (in). Comparacin con un patrn (like). Test sobre la indeterminacin de un valor (is Test todos o al menos uno (all, Test de existencia (exists).

null).

any).

3.2.2.1.

Uso de los operadores lgicos

Una expresin lgica puede contener un nmero cualquiera de operadores lgicos.

Operador and:

Para que una la sea seleccionada debe cumplirse a la vez las dos

condiciones, que se unen mediante dicho operador.

Operador or: La la se selecciona si se cumple, por lo menos, una de las condiciones
unidas por este operador.

operadores de comparacin <>y != realizan las mismas funciones, por lo tanto podemos utiliza uno y otro indistintamente.

3 Los

3.2 La orden select

49

Prioridad de los operadores lgicos :

Si el nmero de expresiones lgicas es impor-

tante, el resultado depende del orden en que se efecten las operaciones elementales.

SQL efecta primero las comparaciones, despus las negaciones con not, despus los Y logicos con and y, nalmente, los O logicos con or. Conviene, para mayor seguridad, emplear parntesis
Este orden se dene por la prioridad de los operadores. El que agrupen a las expresiones.

Operador not:
resultado.

este operador utilizado junto con otro operador invierte el valor del

3.2.2.2.

Seleccin por comparacin con un valor

Comparacin con una constante : El caso ms sencillo consiste en comparar el valor


de una columna con una constante. La constante debe ser compatible con el tipo de columna considerada. El

SQL admite dos tipos de constantes:

Las constantes de tipo cadena de caracteres. Las constantes de tipo numricas.

Siempre que utilicemos cadenas de caracteres en una consulta entre comillas simples. La sintaxis es la siguiente:

SQL, sta ir siempre

Formato:
WHERE nom_columna operador_de_comparacion constante

Comparacin usando expresiones aritmticas :

Una expresin aritmtica puede in-

cluir operadores aritmticos (+, -, *, /), nombres de columnas y constantes. El * y el / tienen el nivel mximo de prioridad. El valor de una expresin aritmtica es indeterminado si contiene una columna cuyo valor es indeterminado; la comparacin con esta expresin no se ejecuta nunca.

En el ejemplo 3.3 podemos comprobar cmo se utilizan los operadores lgicos para unir dos expresiones de comparacin.

50

Manipulacion de datos

Ejemplo 3.3

Artculos que pesan ms de 100g el nmero de su proveedor es igual a 5

SQL> select art_num, art_nom 2 from articulos 3 where art_peso > 100 and art_prv = 5; ART_NUM ---------4 5 6 7 ART_NOM -------------------lampara lampara lampara lampara

4 filas seleccionadas.

3.2.2.3.

Seleccin por comparacin con un intervalo


between
permite seleccionar las las cuya columna especicada contenga

El operador

un valor que se encuentre dentro de un intervalo determinado, incluyendo a los propios valores que determinan el intervalo.

Formato:
WHERE nom_columna BETWEEN valor1 AND valor2
En realidad, el operador lgico. Para seleccionar las las cuya columna contiene un valor externo a un intervalo determinado, se emplear el operador

between

equivale a combinar dos comparaciones con un

not between.
Los proveedores cuyo nmero est entre 2 y 5

Ejemplo 3.4

SQL> select * 2 from proveedores 3 where prv_num between 2 and 5; PRV_NUM ---------2 3 4 5 PRV_NOM ------------------------estilograficas reunidas mecanica de precision sanjita electrolamp

4 filas seleccionadas.

3.2 La orden select

51

Podemos comprobar que en el ejemplo 3.4 aparecen los proveedores que cumplen la condicin de seleccin. Observamos que tambin aparecen los datos de los proveedores cuyos nmeros son el lmite inferior y el superior del intervalo.

3.2.2.4.

Seleccin por comparacin con una lista


in
permite seleccionar las las para las cuales se cumple que una de sus

El operador

columnas contiene un valor incluido en una lista de valores dada.

Formato:
WHERE nom_columna IN (valor1, valor2, ...)
El empleo de este operador equivale a combinar comparaciones con un

lgico.

Para seleccionar las las cuya columna contiene un valor distinto del existente en una lista, es preciso emplear el operador

not in

como podemos observa en el ejemplo 3.5.

Ejemplo 3.5

SQL> select * 2 from tiendas 3 where tda_pob not in 4 ('paris', 'barcelona', 'palencia', 'lyon'); TDA_NUM ---------1 2 3 5 6 7 8 10 TDA_POB -------------------madrid-batan madrid-centro pamplona trujillo jaen valencia requena gerona

Datos de las tiendas que no estn en las ciudades indicadas

TDA_GER ------------------------contesfosques, jordi martinez, juan dominguez, julian mendez, pedro marin, raquel petit, joan marcos, pilar gomez, gabriel

8 filas seleccionadas.

3.2.2.5.

Seleccin por comparacin con un patrn

Las consultas de correspondencia con un patrn recuperan las para las que el contenido de una columna de texto se corresponde con un texto dado, es decir, comprueban si el valor de un columna se ajusta a un patrn especicado

52

Manipulacion de datos

El operador

like

permite seleccionar las las que contienen en la columna indicada

(de tipo alfanumrico) un valor coincidente con el patrn dado. Con los operadores

in,

el valor de la columna debe coincidir exactamente con

la constante que sigue. Si se produce un error de codicacin, o se ha olvidado el valor exacto, no es posible encontrar la la buscada por este medio. Por lo tanto tendremos que recurrir a la bsqueda con un patrn. Para denir el patrn disponemos de dos caracteres especiales que, en el momento de la comparacin con el valor de la columna correspondiente, representan: % cualquier secuencia de ninguno o de varios caracteres. _ (subrayado) un carcter cualquiera, slo uno.

Formato:
WHERE nom_columna LIKE 'patrn'
Para seleccionar las las cuya columna contiene un valor que no debe coincidir con el patrn, bastar emplear el operador

not like. varchar2 por eso coloca entre comillas simples.


Datos de los gerentes de las tiendas de Madrid

El patrn debe de ser del tipo de dato

Ejemplo 3.6

SQL> select tda_num, tda_ger 2 from tiendas 3 where tda_pob like 'madrid%'; TDA_NUM ---------1 2 TDA_GER ------------------------contesfosques, jordi martinez, juan

2 filas seleccionadas.

3.2.2.6.
valor

Seleccin con un valor indeterminado


sta no interviene jams en una seleccin por comparacin de valores. Ahora

Si el valor de una columna no ha sido inicializado en una determinada la, o sea, tiene

null,

bien, es posible comprobar si el valor no ha sido inicializado gracias al operador o al operador opuesto

is not null.

is null,

Formato:
WHERE nom_columna IS NULL

3.2 La orden select

53

ste es el nico test de comprobacin que permite seleccionar una la cuando el valor de una columna es indeterminado.

Ejemplo 3.7

SQL> select art_num, art_nom 2 from articulos 3 where art_col is null; ART_NUM ---------8 9 ART_NOM -------------------pesacartas 1-500 pesacartas 1-1000

Datos de los artculos que no tienen denido el color

2 filas seleccionadas.

3.2.2.7.

Resumen
select:
son obligatorias en cada consulta

Notas sobre el uso de la orden

Las clusulas La clusula

select

from

SQL.

from

deber ir a continuacin de la clusula

select.

No es necesario seleccionar o proyectar todas las columnas de una tabla. Las columnas se muestran de izquierda a derecha en el orden especicado en la clusula

select.

Si queremos proyectar todas las columnas de una tabla usaremos el asterisco (*) y stas aparecern en el mismo orden en que fueron creadas. Las las se muestran en el orden en que estn almacenadas. Los usuarios pueden obtener informacin de sus propias tablas, o bien de aquellas a las que se les haya dado permiso de acceso. Las clusulas

select

from

aparecern precediendo a cualquier otra clusula.

Notas sobre el empleo de la clusula

where: where
debern ser parte de la tabla espe-

Las columnas especicadas en la clusula cicada en la clusula

from.

Las columnas utilizadas en la clusula la lista de la orden

select.

where no tienen que estar necesariamente en

54

Manipulacion de datos

Las comparaciones de series de caracteres en la clusula necesario. La clusula

where

requieren que s-

tas estn acotadas entre comillas simples, en las comparaciones numricas no es

where

deber especicar los mismos caracteres, maysculas o minscu-

las, que hubiera en las tablas de la base de datos.

3.3.
El

Eliminacin de registros repetidos


SQL visualiza por defecto el resultado de una consulta, sin eliminar las repeticiones
distinct
despus de la orden

de las ocurrencias devueltas. Se puede obtener el resultado de una consulta sin dichas repeticiones introduciendo la clusula

select.

El ejemplo 3.8 nos muestra los distintos colores que tienen los artculos. Hemos eliminado las tuplas que no tienen denido el color. Tambin podemos observar que la tabla resultante nos muestra los colores ordenados alfabticamente.

3.4.
select

Renombrar columnas
de una consulta pueden cambiarse temporalmente, incluyendo el nuevo nombre

Los nombres de las columnas, expresiones y funciones que aparecen en la clusula en la clusula

select

despus del nombre de la columna, separado por un espacio.

El nuevo nombre o alias ir entre comillas dobles si se compone de dos o ms palabras, o si queremos que aparezca tal cual lo hemos escrito en maysculas o en minsculas, como se muestra en el ejemplo 3.9. El cambio de nombres nicamente mantiene su efecto durante el tiempo de la consulta; los nombres de las columnas de las tablas permanecen y no les afecta el cambio.

Ejemplo 3.8

Mostrar todos los colores de los artculos

SQL> select distinct art_col 2 from articulos 3 where art_col is not null; ART_COL ------azul blanco negro rojo verde 5 filas seleccionadas.

3.5 Clasicacion de las

55

Ejemplo 3.9

Mostrar todos los colores de los artculos

SQL> select distinct art_col "Colores" 2 from articulos 3 where art_col is not null; Colores ------azul blanco negro rojo verde 5 filas seleccionadas.

3.5.

Clasicacin de las
4

Cuando no se determina el orden en que se desean obtener las las, puede suceder que se obtengan resultados distintos en dos ejecuciones consecutivas de una misma consulta , a causa de esta misma indeterminacin. Se puede solicitar la clasicacin de las las seleccionadas segn el valor de una o varias columnas. Una clasicacin no necesita la existencia de un ndice; el consulta. Para ello, es preciso aadir la clusula o

SQL

crea un ndice temporal si ello le sirve para optimizar la

order by,

seguida del nombre de las columnas

sobre las cuales se desea elaborar la clasicacin separadas por comas. Si se aade

desc

asc

se est precisando el orden ascendente o descendente con el que se realizar la

misma. Por defecto se hace en orden ascendente. Los valores indeterminados (null) se visualizan agrupados, al principio de la tabla si el orden es descendente y al nal si es ascendente.

Formato:
ORDER BY {nom_columna | entero} [asc|desc], ...
sta es la nica instruccin en la que el

SQL tiene en cuenta el orden de las columnas.


select.

As, nosotros podemos especicar el nombre de la columna por la que queremos ordenar o bien la posicin que ocupa dicha columna en la lista de la orden

La columna sobre la que se realiza la clasicacin debe, obligatoriamente, formar parte de la lista de columnas incluidas en la clusula tablas incluidas en la clusula

from.

select,

o bien, pertenecer a una de las

Si utilizamos la clusula

distinct

forzozamente la

SQL no tiene predenido un orden de aparicin de las tuplas, en cambio, el mismo orden en que fueron creadas.

4 El

Oracle las mostrar en

56

Manipulacion de datos

columna de ordenacin tiene que estar en la lista de columnas a proyectar por la orden

select, SQL> 2 3 4

ver el ejemplo 3.10.

Ejemplo 3.10

select art_num Numero, art_nom Nombre from articulos where art_num < 10 order by art_pc; NOMBRE -------------------impresora calendario lampara lampara lampara lampara pesacartas 1-500 pesacartas 1-1000 calculadora

Datos de los artculos ordenados ascendente por su precio de compra

NUMERO ---------1 3 5 4 7 6 8 9 2

9 filas seleccionadas. SQL> select distinct art_nom Nombre 2 from articulos 3 where art_num < 10 4 order by art_pc; order by art_pc * ERROR en linea 4: ORA-01791: no es una expresion obtenida bajo SELECT

3.5.1. Resumen
La clusula

order by deber ser la ltima clusula en aparecer en la consulta SQL.

Esta clusula es el nico sistema existente para ordenar los datos segn el criterio que se desee, ya que las tablas almacenan las las conforme stas han sido introducidas. La clusula

order by

nicamente clasica las las obtenidas en la consulta.

Por omisin, la secuencia ser ascendente. Para ordenaciones descendentes se deber especicar explcitamente.

3.6 La orden insert

57

Puede mezclarse ordenaciones ascendentes y descendentes en la misma clusula

order by.
Puede clasicarse por columnas que no formen parte de la consulta, siempre que formen parte de alguna de las tablas especicadas en la clusula La secuencia de las columnas especicadas en la clusula

from.
determina la

order by

secuencia de las claves de clasicacin, esto es, los valores de una columna sern clasicados con valores iguales de las columnas precedentes, y as sucesivamente. Las columnas con valores nulos (null) se evaluarn al nal de todas si el orden es

asc

y al principio si son

desc.

3.6.

La orden insert

Esta orden se emplea para aadir nuevas las a una tablaya existente. Su formulacin ms sencilla sirve para aadir una la cada vez. Para ello, se citar el nombre de la tabla, el nombre de las columnas que hay que inicializar y el valor que se les desea dar. Si no se indica el nombre, se supone que las columnas que deben recibir los valores son todas las de la tabla, en el orden de izquierda a derecha tal como fueron creadas dichas columnas. El formato general para esta orden es:

Formato:
INSERT INTO nom_tabla [(nom_column1, nom_column2, ...)] VALUES (valor1, valor2, ...);

3.6.1. Insercin de todas las columnas de un registro


Cuando damos un valor para cada una de las columnas de un nuevo registro, se puede simplicar el formato de la sentencia

insert.

Formato:
INSERT INTO nom_tabla VALUES (valor1, valor2, ...);
El orden de los valores situados entre parntesis deber corresponder exactamente con el orden que se les dio a las columnas cuando fueron denidas las tablas en su creacin. Si se desea dejar una columna sin valor, debe indicarse explcitamente mediante el operador nulo.

null,

situado en la posicin que tiene la columna que queremos dejar con valor

58

Manipulacion de datos

3.6.2. Insercin parcial de columnas en un registro


Para insertar nicamente unos cuantos valores en un registro, incluyendo un valor para cada columna declarada como en la clusula

no null,

explcitamente se jar qu columnas debern

recibir los valores especicados. Para este tipo de insercin, los nombres de las columnas

insert que van situados entre parntesis no necesitan estar situados en un values.

orden determinado, pero debern corresponderse directamente con los correspondientes valores situados tambin entre parntesis en la clusula

Formato:
INSERT INTO nom_tabla (nom_column3, nom_column2, ...) VALUES (val3, val2, ...);
En el ejemplo 3.11 hemos insertado una tupla en la relacin

Tiendas

de varias formas.

En el ltimo caso, hemos dejado el nombre del gerente sin especicar.

3.6.3. Insertar datos desde otra tabla


Pueden insertarse datos en una tabla, usando los registros de una o varias tablas, siempre que asociemos a la orden la clusula tabla

values. La clusula select insert los situara en

insert

una consulta

select

en vez de una clusu-

anidada obtendra los datos deseados de una tabla y la otra tabla. Si dos tablas tuvieran columnas con idntica

denicin, la siguiente proposicin podra insertar todos los datos desde la tabla

x.

a la

Ejemplo 3.11

SQL> insert into tiendas 2 values (16, 'Pto. Real', 'Martin, Luis'); 1 fila creada. ... SQL> insert into tiendas (tda_num, tda_ger, tda_pob) 2 values (16,' Martin, Luis', 'Pto. Real'); 1 fila creada. ... SQL> insert into tiendas 2 values (16, 'Pto. Real', null); 1 fila creada.

Insercin de tuplas en una tabla

3.6 La orden insert

59

Formato:
INSERT INTO x SELECT * FROM y;
O bien, se puede especicar qu columnas de la tabla columnas que se deseen de la tabla

y.

recibirn datos desde las

Formato:
INSERT INTO x [(nom_column1, nom_column3, ...)] SELECT {nom_columna | expresin} FROM y [WHERE criterio de seleccin];
La tabla emisora,

y,

debe existir con anterioridad y los tipos de datos deben corres-

ponderse plenamente o, al menos, ser del mismo tipo. La clusula

select

anidada en la

insert

no se incluye entre parntesis, dado que no

se trata, en realidad, de una consulta anidada. La clusula en una consulta asociada a

insert.

order by

no puede intervenir

No es necesario que las correspondientes columnas

de las dos tablas tengan el mismo nombre. El orden de columnas en la clusula deber corresponder con el orden de columnas especicado en la clusula expresiones y funciones pueden ser usadas en la clusula datos procedentes de clculos matemticos.

select

select insert. Las

anidada para insertar

Es posible crear una tabla e insertar las en ella con una sola operacin con la orden

create

del Lenguaje de Denicin de Datos.

3.6.4. Resumen
Una tabla deber estar creada antes de poder insertar datos en ella. La lista de nombres de columnas se utiliza cuando:

Se insertan unas cuantas columnas que existen en la denicin de la tabla. Se introducen columnas en una secuencia diferente en la que fueron creadas.

Las columnas de la tabla que no aparezcan en la orden

null.
En la clusula valor

insert tomarn como valor


siempre y cuando en la

values

pueden especicarse valores

null,

denicin de restriccin de integridad correspondiente no aparezca especicado el

not null.

60

Manipulacion de datos

Los valores debern colocarse en el mismo orden en el que aparecen sus correspondientes columnas en la clusula

insert.

Si se omite la lista de columnas, deber especicarse un valor para cada una de las columnas de la tabla. Si se omiten las columnas, los valores a insertar debern seguir la misma secuencia seguida por las correspondientes columnas cuando se cre la tabla. Los valores insertados debern corresponder con el tipo de dato de la columna correspondiente. Los valores tipo carcter debern ir entre comillas simples. La especicacin de las las a copiar tiene la misma sintaxis que la de las consultas

SQL. Podr ser tan compleja como se desee con excepcin de la clusula order by
que no puede ser utilizada. Las columnas que aparezcan en la clusula mientras que las que aparecen en la

select

insert

son receptoras de los datos,

son columnas emisoras.

La secuencia y tipo de datos de las columnas que aparecen en la clusula por la subconsulta.

insert

debern corresponder con la secuencia y tipo de datos de las columnas obtenidas

3.7.

La orden update

Esta orden cambia o actualiza los datos existentes de una tabla, especicando sus nuevos valores en las columnas seleccionadas. Pueden cambiarse todos los valores de una columna para todos los registros, o bien nicamente algunos valores para registros especcos. La clusula

where

es usada para seleccionar las las que sern actualizadas.

La modicacin a realizar es una expresin que admite constantes, nombres de columnas e incluso consultas anidadas. La formacin general de la orden es, pues, multila. Para modicar una sola la, basta escribir un criterio de tal modo que se seleccione slo esa la. Para modicar todas las las de una tabla, no es necesario incluir una clusula

where.

Formato:
UPDATE nom_tabla SET nom_columna = nuevovalor [,nom_columna = nuevovalor] [WHERE criterio de seleccin de los registros];

3.7 La orden update

61

3.7.1. Clusula set


Pueden emplearse consultas anidadas en la clusula igual que en la clusula

where.

set

de una sentencia

update,

al

Formato:
UPDATE nom_tabla SET nom_columna = (SELECT nom_columna FROM ...), ... [WHERE condicin];
Si la consulta anidada asociada a la clusula

set no devuelve ningn valor y la columna select

admite nulos, dejar dicha columna vaca para todas las tuplas de la tabla. La clusula anidada. Hay que tener en cuenta que si la clusula

where

de una orden

update

tambin puede tener una sentencia

set

lleva varias columnas separadas por

comas igualadas a una consulta anidada, estas columnas van entre parntesis.

Formato:
SET (nom_columna1, nom_columna2) = (consulta anidada)
Ejemplo 3.12 Actualizacin del peso de un artculo

SQL> update articulos 2 set art_peso = (select art_peso 3 from articulos 4 where art_num = 27) 5 where art_num = 24; 1 fila actualizada.

En el ejemplo 3.12, el peso del artculo n mismo peso que tiene el artculo n

24 se ha actualizado pasando a tener el

27.

3.7.2. Resumen
update
opera en todas las las que cumplen la condicin

where.

Si la clusula

where

es omitida, todas las las sern actualizadas.

Puede establecerse una columna a valor

null

si la denicin de restriccin de inte-

gridad para esa columna en la tabla lo permite.

62

Manipulacion de datos

Puede establecerse una columna igual a una expresin aritmtica compuesta de columnas y constantes (+, -, *, /).

Tambin pueden utilizarse funciones clusula

set. set

Oracle

que operen en una nica columna en la

Si el valor de la clusula

proviene de una consulta anidada, deber haber exac-

tamente las mismas columnas que las especicadas en la subconsulta y, adems, si son ms de una columna debern ir entre parntesis.

Cada subconsulta deber ser subconsulta a una nica la para cada registro a actualizar.

3.8.

La orden delete
delete. Podemos borrar todos

Los registros de una tabla pueden borrarse con la orden los registros o bien algunos segn un criterio de seleccin.

Formato:
DELETE [FROM] tabla [WHERE criterio de seleccin de un registro];
Si una orden

delete

no contiene una clusula

where,

todas las las de la tabla sern

borradas. Sin embargo, la tabla contina existiendo en la base de datos, y podrn insertarse nuevas columnas en ella usando la orden parcialmente, ya que la orden

delete

insert.

Los registros no pueden borrarse

afecta al registro completo.

La formulacin general de la orden es multila. Para suprimir una sla la basta escribir un criterio que permita seleccionar slo esa. Para suprimir todos los registros de una tabla no hace falta incluir una clusula

where.

El criterio de seleccin de tuplas puede obtenerse a partir del resultado de una consulta anidada en la clusula

where.
Eliminacin de algunas tuplas de la tabla art_2

Ejemplo 3.13

SQL> delete from art_2 2 where art_num > 20; 6 filas suprimidas.

3.9 Diferencias entre drop, delete y truncate

63

3.9.

Diferencias entre drop, delete y truncate


delete, drop5
y

La diferencia entre las rdenes

truncate6

consiste en lo siguiente:

La orden

delete,

sin un criterio de seleccin, hace que todos los datos de la tabla

se borren, pero la denicin de dicha tabla permanece en el diccionario de datos. La orden

drop elimina, adems, la denicin de la tabla en el Diccionario de Datos, truncate


borra todas las tuplas de una tabla pero no borra la denicin

liberando por ello el espacio ocupado en la base de datos. La orden ella y as

de la tabla del Diccionario de Datos y, adems, puede liberar el espacio ocupado por

Oracle

puede disponer de dicho espacio para otros objetos.

5 Orden 6 Orden

del Lenguaje de Denicin de Datos. del Lenguaje de Denicin de Datos.

Cap tulo 4

Funciones y expresiones
Este captulo nos muestra las distintas funciones de las que disponemos as como la manera de utilizarlas. Se introduce el concepto de grupo de tuplas analizando las ventajas y los problemas que presenta su uso.

4.1.

Introduccin

Una base de datos, normalmente, est formada por toda una serie de estructuras de datos que contienen tipos de datos diferentes. A estos datos se les pueden aplicar los operadores aritmticos y las funciones, tanto numricas como de carcter. Dichas funciones se pueden utilizar tanto con registros como con grupos de registros que cumplan una determinada condicin.

4.2.

Expresiones

Las expresiones aritmticas nos permiten realizar clculos numricos con los datos de la base de datos. De hecho, es posible combinar el valor de diferentes columnas entre s o bien con constantes numricas, utilizando los cuatro operadores aritmticos (+, -, *, /). Si se trata de una operacin de visualizacin, basta con escribir la expresin aritmtica en la clusula u

order by.

select como si fuera una columna. Lo mismo sucede en una clusula where

66

Funciones y expresiones

Ejemplo 4.1

SQL> select art_num Numero, art_nom Nombre, 2 (art_pv - art_pc) Beneficio 3 from articulos; NUMERO ---------3 2 1 4 5 6 7 8 9 10 11 12 13 14 15 NOMBRE BENEFICIO -------------------- ---------calendario 180 calculadora 700 impresora 180 lampara 880 lampara 900 lampara 880 lampara 880 pesacartas 1-500 1600 pesacartas 1-1000 2000 boligrafo 20 boligrafo 20 boligrafo lujo 40 boligrafo lujo 40 boligrafo lujo 40 boligrafo lujo 40

Benecio de los artculos

15 filas seleccionadas.

4.3.

La tabla dual
dual
es una tabla pequea pero til. Proporcionada por

La tabla

Oracle,

se emplea

para probar funciones o realizar clculos rpidos. Se crea en el momento de la instalacin y creacin de la base de datos y slo tiene una columna y una la. En el ejemplo 4.2 podemos ver la descripcin de esta pequea tabla.

Ejemplo 4.2

SQL> describe dual Nombre ?Nulo? Tipo ------------------------------------- -------- ------------------------DUMMY VARCHAR2(1)

Descripcin de la tabla dual

4.4 Funciones

67

4.4.

Funciones

Una funcin manipula conjuntos de datos y devuelve un resultado. Las funciones pueden operar con cero, uno, dos, o ms argumentos. El formato es el siguiente:

Formato:
nom_funcin(arg1, arg2, ...)
Las funciones se dividen en dos tipos:

Funciones de registros nicos (o escalares).

Funciones numricas. Funciones de caracteres: devuelven un valor de tipo carcter o bien devuelven un valor de tipo numrico. Funciones de fechas. Funciones de conversin. Otras funciones.

Funciones de funciones de grupos.

Estas funciones dieren en el nmero de registros sobre los cuales actan. Una funcin de registro nico devuelve un nico registro como resultado por cada registro de la tabla o vista consultado, mientras que las funciones de grupos devuelven un nico registro como resultado por cada grupo de registros consultados. Las funciones de registros aparecen en la lista de la orden consulta no lleve la clusula

group by)

y en la clusula

select where.

(suponiendo que la

Las funciones de grupos aparecen en la lista de la orden

having,

siempre que la consulta tenga la clusula

group by.

select

y en la clusula

4.4.1. Funciones numricas


Las funciones numricas pueden aparecer en la clusula en la clusula

select de una sentencia SQL, where, o bien en la clusula order by. Las distintas funciones que podemos

aplicar a los datos de tipo numrico se pueden ver en la tabla 4.1. Los ejemplos 4.3 y 4.4 nos muestran cmo usar estas funciones para realizar clculos nmericos.

68

Funciones y expresiones

4.4.2. Funciones de caracteres


A las series de caracteres tambin se les puede aplicar funciones especiales para manipularlas. Podemos realizar toda una serie de operaciones con estas cadenas. En la tabla 4.2 se indica las funciones de caracteres que devuelven un valor de tipo carcter y cmo podemos usarlas, mientras que en la tabla 4.3 vemos algunas de las funciones que se aplican a cadenas de caracteres y que nos devuelven un valor numrico como resultado. En los ejemplos 4.5 y 4.6 hacemos uso de dos tipos distintos de estas funciones. En uno cambiamos el aspecto de salida de los datos de una columna, mientras que en el otro contamos para conocer quin es el proveedor con el nombre ms largo.

Ejemplo 4.3

Raz cuadrada de 27

SQL> select sqrt(27) "raiz de 27" 2 from dual; raiz de 27 ----------5,19615242 1 fila seleccionada.

Ejemplo 4.4

3 elevado al cubo

SQL> select power(3,3) "3 elevado al cubo" 2 from dual; 3 elevado al cubo ----------------27 1 fila seleccionada.

4.4.3. Funciones de conversin


Estas funciones convierten un valor de un tipo de dato en otro. La forma general es:

Formato:
nom_funcin(tipo_dato1,tipo_dato2)

4.4 Funciones

69

Ejemplo 4.5

Inicial de los nombres de clientes en mayscula

SQL> select initcap(clt_nom) "Nombre" 2 from clientes; Nombre -------------------Margarita Miguel Jean Michel Antoni Marcel Pablo Gerad Consuelo Pau Jorge Pablo Diego Joaquin Jacinto Pedro 16 filas seleccionadas.

La tabla 4.4 muestra algunas de las funciones ms usadas de conversin de datos. Estas funciones normalmente se utilizan cuando queremos dar formato a columnas de tipo fecha .

4.4.4. Otras funciones


Existen otras funciones que no podemos incluirlas en ninguno de los grupos en que hemos dividido las funciones. Dichas funciones aparecen en la tabla 4.5 junto con sus usos. En el ejemplo 4.7 hemos aplicado una de estas funciones con la tabla el nombre de la cuenta de usuario desde donde estamos trabajando.

dual

para saber

1 Ver

captulo 7.

70

Funciones y expresiones

Ejemplo 4.6

Qu proveedor tiene el nombre ms largo?

SQL> select prv_num numero, length(prv_nom) nombre 2 from proveedores; NUMERO NOMBRE ---------- ---------1 16 2 23 3 21 4 7 5 11 5 filas seleccionadas.

Ejemplo 4.7

SQL> select user 2 from dual; USER -----------------------------GADESCHI 1 fila seleccionada.

Quin soy?

4.4.5. Funciones de grupo


Al igual que las funciones anteriores se aplican al valor de una columna, las funciones de grupo efectan operaciones sobre un conjunto de valores de una columna dentro de un grupo de las. Un grupo es un subconjunto de las de una tabla en la que el valor de una columna es constante. Los grupos se especican mediante la clusula

group by,

seguida del nombre

de la columna sobre la cual se efecta la agrupacin. Cuando no existe la clusula

by,

group

el grupo est formado por todo el conjunto de las seleccionadas. Las funciones de grupo se muestran en la tabla 4.6; algunas de ellas aceptan las opciones

distinct

all. distinct, se eliminarn null no se tienen en cuenta

El argumento de la funcin contiene el nombre de la columna sobre el cual debe ejercerse el clculo. Si el argumento viene precedido de la opcin antes las repeticiones de valores. Los valores indeterminados o nunca. Si la funcin se incluye en la clusula

select,

se visualizar como una columna o

una expresin. De hecho, el resultado de una bsqueda que se realiza sobre una funcin es una tabla que contiene una sola columna, el valor de la funcin, y una sola la que resume los valores de la columna de todas las las.

4.5 Consultas por grupos

71

Dentro de una clusula los operadores aritmticos.

select,

podemos incluir varias funciones y combinarlas con

4.5.

Consultas por grupos

group by para formar los grupos con los elementos que tenga los mismos valores en la columnas indicadas y having
La nocin de grupo introduce dos nuevos tipos de clusulas: para seleccionar solamente los grupos que cumplan las condiciones impuestas.

4.5.1. La clusula group by


La clusula

group by

reordena la tabla que resulta de una consulta

select

en un

nmero mnimo de grupos tales que, en el interior de cada uno, la columna especicada tenga el mismo valor para cada la. Este tratamiento no afecta a la organizacin fsica de la tabla. Cuando se emplea una clusula

group by,

las funciones de grupo se calculan para

cada grupo. Esta clusula permite, generalmente, la visualizacin del valor de la columna comn, seguida de aquellos valores de las funciones aplicadas a cada grupo. La clusula consulta con la

group by se utiliza orden select.

para denir mltiples grupos de las dentro de una

Formato:
GROUP BY nom_columna [,nom_columna,...]
Tambin puede aadirse a la consulta una clusula en la seleccin de las las, o bien, la clusula la consulta resultante. En el ejemplo 4.8 primero hemos eliminado los artculos que no tienen denido el color, despus hemos formado grupos por colores y dentro de cada grupo hemos hallado el precio de compra ms caro. En el ejemplo 4.9 hemos formado directamente los grupos dandole un nombre al grupo de los artculos que no tienen denido el color, y posteriormente hemos hallado el precio mximo de compra. Se puede observar que la clusula

order by para ordenar por distintas columnas

where,

para establecer un criterio

group by

ordena

las tuplas ascendentemente por el atributo por el cual formamos los grupos.

4.5.2. Resumen
Un grupo se dene como las las que tienen un valor comn en una o ms columnas. Estas columnas se muestran en la clusula

group by.

72

Funciones y expresiones

Se devuelve una la por cada grupo formado. Por ejemplo, si se agrupa por colores, se obtendr una la resumen de informacin por cada uno de los colores diferentes que hubiera. Todos los tems de la lista especicada en la clusula nivel de agrupacin. Las columnas que no aparezcan en la clusula clusula

select debern ser del mismo


no podrn aparecer en la

select,

group by

excepto como argumentos para agrupar funciones.

Ejemplo 4.8

Precio mximo de los artculos por color

SQL> 2 3 4

select art_col Color, max(art_pc) "maximo precio compra" from articulos1 where art_col is not null group by art_col;

COLOR maximo precio compra ------- -------------------azul 2100 blanco 2000 negro 4000 rojo 2100 verde 2100 5 filas seleccionadas.

Ejemplo 4.9

Precio mximo de los artculos por color, contando a los indenidos

SQL> select nvl(art_col,'indefinido') Color, 2 max(art_pc) "maximo precio compra" 3 from articulos1 4 group by art_col; COLOR maximo precio compra ---------- -------------------azul 2100 blanco 2000 negro 4000 rojo 2100 verde 2100 indefinido 3000 6 filas seleccionadas.

Las consultas

select

pueden agrupar informacin segn el valor de ms de una co-

lumna al mismo tiempo.

4.6 Los valores null y la funcion nvl

73

4.5.3. La clusula having


having equivale a la clusula where pero aplicada a grupos. Esta clusula generalmente no puede emplearse si antes no ha sido especicada la clusula group by. De hecho, el criterio especicado en la clusula having afecta al valor de una funcin calculada sobre un grupo. La clusula having se utiliza para restringir los grupos seleccionados en el resultado de la consulta una vez ejecutada sta con la clusula group by.
La clusula Los grupos que no cumplen el criterio especicado en la clusula en el resultado.

having no se incluyen

Formato:
HAVING nom_funcin o expresin

Ejemplo 4.10

Qu color lo llevan ms de dos artculos?

SQL> 2 3 4 5

select nvl(art_col,'indefinido') Color, count(*) "Numero de elementos" from articulos1 group by art_col having count(*) > 2;

COLOR Numero de elementos ---------- ------------------azul 3 rojo 4 2 filas seleccionadas.

En el ejemplo 4.10 primero hemos formado grupos por colores pero solamente hemos mostrado aquellos grupos que tienen ms de dos elementos.

4.6.

Los valores null y la funcin nvl


null
es un valor indeterminado; por tanto, los valores nulos no se utilizan

El valor

cuando se evalan expresiones o funciones. Si un valor

un clculo aritmtico, el resultado ser siempre nulo (null).

null

se emplea, por ejemplo, en

Algunas veces se podra desear sustituir temporalmente el valor nulo por otro valor sobre todo cuando se realizan clculos aritmticos. Para sustituir temporalmente el valor nulo por cualquier otro se deber usar la funcin

nvl

(ver tabla 4.5).

74

Funciones y expresiones

Vamos a ver dos ejemplos del uso de esta funcin, una con valores de tipo caracter y otra con valores de tipo numrico. Comprese el ejemplo 4.11 con el 3.9. En los dos hemos mostrado los colores distintos que tienen los artculos. En el ejemplo 3.9 hemos eliminado las tuplas que no tienen color, con lo cual la consulta devuelve solamente 5 las, mientras que en el ejemplo 4.11 a los artculos que no tienen color le hemos asignado la cadena de caracteres indenido y la consulta nos dice que devuelve 6 las en vez de 5.

Ejemplo 4.11

Mostrar todos los colores de los artculos, incluido los nulos

SQL> select distinct nvl(art_col,'indefinido') "Colores" 2 from articulos1; Colores ---------azul blanco indefinido negro rojo verde 6 filas seleccionadas.

Los ejemplos 4.12 y 4.13 muestra el uso de esta funcin con columnas de tipo numricas. En el ejemplo 4.12 hemos usado la funcin usado la funcin

nvl

para asignarle un valor momentneo al

peso y luego calcular la media aritmetica con la funcin

nvl con lo cual las tuplas que no tienen denido el peso no se eligen para

avg. En el ejemplo 4.13 no hemos

calcular la media aritmetica. Vemos que en este segundo ejemplo, la media de pesos es mayor que en el primer caso, ya que se divide por un nmero menor de elementos.

Ejemplo 4.12

Peso medio de los artculos, forma1

SQL> select avg(nvl(art_peso,0)) "Peso medio" 2 from articulos1; Peso medio ---------181,333333 1 fila seleccionada.

4.6 Los valores null y la funcion nvl

75

Ejemplo 4.13

Peso medio de los artculos, forma 2

SQL> select avg(art_peso) "Peso medio" 2 from articulos1; Peso medio ---------209,230769 1 fila seleccionada.

abs(n) ceil(n) cos(n) cosh(n)

Funcin

Uso
Retorna el valor absoluto del nmero Retorna el coseno de Retorna el coseno radianes. Retorna

Retorna el menor entero mayor o igual a

n. n, expresado en radianes. hiperblico de n, expresado n-sima


potencia.

n.

en

exp(n) floor(n) ln(n) log(m,n) mod(m,n) power(m,n) round(n[,m])

elevado a la

Retorna el mayor entero menor que o igual a Retorna el logaritmo natural de que 0. Retorna el logaritmo, base Retorna el resto de si

n,

si

n.

es mayor

m Retorna n
Retorna

dividido por

m, de n. n. Devuelve m,

es 0.

elevado a la redondeado

del punto decimal; si

m
sign(n) sin(n) sinh(n) sqrt(n) tan(n) tanh(n) trunc(n[,m])

n-esima potencia. a m lugares a la derecha


es omitido, a 0 lugares. Si

es negativo redondea a la izquierda del punto

n =0, la funcin n >0, la funcin retorna 1. Retorna el seno de n, expresado en radianes. Retorna el seno hiperblico de n, expresado en raSi la funcin retorna -1; si retorna 0; si dianes. Retorna la raz cuadrada de Retorna la tangente de radianes. Retorna

decimal.

n <0,

n.

El valor de

no

puede ser negativo. Devuelve un resultado real. Retorna la tangente hiperblica de

n, expresado en radianes. n, expresado en


posiciones decimales; si

truncado a

es omitido, a 0 lugares.

Tabla 4.1: Funciones numricas

76

Funciones y expresiones

Funcin
chr(n)

Uso
Retorna el caracter que tiene equivalente binario a

en el conjunto de con

caracteres de la base de datos.

concat(serie1,serie2) initcap(serie) lower(serie) lpad(serie1,n [,serie2]) ltrim(serie, [conjunto])

Retorna

serie1 concatenada rie2. Equivale a usar ||.

se-

Pone en maysculas la letra inicial de

serie.
Pone

serie con todas las letras en mi-

serie1, rellenada a la izquierda con una longitud n con la secuencia de caracteres de serie2.
Retorna Elimina caracteres desde la izquierda de

nsculas.

serie, que comiencen con el carclpad pero el relleno se efecltrim

ter a eliminar hasta el primer carcter no incluido en

rpad(serie1, n [,serie2]) rtrim(serie1, [conjunto]) soundex(serie) substr(serie,m [,n]) upper(serie)

conjunto. serie1.

Igual que Igual que

ta a la derecha de derecha de la

serie1.

pero a partir de la

Retorna una cadena de caracteres conteniendo la representacion fontica de

serie.

Extrae un trozo de en la posicin longitud. Retorna

y de

serie comenzando n caracteres de

serie

con todos los caracte-

res en maysculas.

Tabla 4.2: Funciones carcter que devuelven carcter

Funcin

ascii(serie)

Uso
Retorna la representacin decimal en el conjunto de caracteres de la base de datos del primer de

length(serie)

serie.

byte

Retorna el nmero de caracteres de

serie.

Tabla 4.3: Funciones carcter que devuelven un nmero

4.6 Los valores null y la funcion nvl

77

Funcin

to_char(d[,fmt[,'ndl']])

Uso
Convierte

de tipo de datos fecha

a un valor de tipo de dato mato de fecha mato,

varchar2

en el formato especicado por el for-

varchar2

fmt. Si se omite el for-

es convertido a un valor de con formato por defecto.

ndl
to_char(n[,fmt])

especica el lenguaje en el que se

devolvern los nombres del da, del mes y sus abreviaturas. Convierte

number a un valor de tipo de dato varchar2,


de tipo de datos

usando el formato de nmero opcional

to_date(ch[,fmt[,'ndl']])

fmt.

Convierte

varchar2
funcin

ch

de

tipo

char

a tipo de datos fecha.

ndl
o

tiene el mismo signicado que en la

to_number(ch[,fmt])

to_char.

Convierte

varchar2

ch,

de

tipo

a tipo

number

char

(entero).

Tabla 4.4: Funciones de conversin de tipos de datos

Funcin

Uso nvl(exp1,exp2) Si exp1

es nulo devuelve

nulo devuelve

exp1.

exp2 ; si exp1
convierte

no es

Los argumentos pueden

ser de cualquier tipo de dato. Si los tipos de datos son diferentes tipo de datos de

uid user

exp1.

Oracle

exp2

al

Retorna un entero como identicador nico del usuario actual. Retorna el nombre del usuario actual de

cle.

Ora-

Tabla 4.5: Otras funciones

78

Funciones y expresiones

avg([distinct|all] n) count(*|[distinct|all] expr)

Funcin

Uso
Calcula la media aritmtica de la consulta. Si se especica

n.

expr, devuelve registros cuando expr es


not null.
Devuelve el valor mximo de Devuelve el valor mnimo de de

Retorna el nmero de registros de

max([distinct|all] expr) min([distinct|all] expr) stddev([distinct|all] x) sum([distinct|all] n) variance([distinct|all] x)

expr. expr. n.

Devuelve la desviacin estndar

x, un nmero.

Devuelve la suma de valores de Devuelve la varianza de mero.

x, un n-

Tabla 4.6: Funciones de grupo

Cap tulo 5

Consultas anidadas
En este captulo podremos comprobar cmo relizar una consulta cuando los criterios de seleccin los obtenemos del resultado de una consulta, llamada anidada. Tambin se estudiar los diferentes operadores de que disponemos.

5.1.

Introduccin
where
o

Hemos visto que la informacin que devuelve una consulta un criterio denido en una clusula

having.

select puede ltrarse segn select.

Puede ocurrir, y de hecho ocurre,

que los criterios de seleccin de tuplas sean el resultado, a su vez, de una consulta

Para hacer esto, debemos anidar las consultas, donde el resultado de una constituye el punto de partida para la ejecucin de la del nivel inmediatamente superior. Con esto conseguimos que el criterio de seleccin de tuplas sea el resultado de una consulta a la base de datos. Tericamente, no hay lmite para el nmero de niveles de anidacin. Debemos tener en cuenta que las consultas de nivel inferior deben ir entre parntesis. A veces se puede expresar el mismo tipo de consulta mediante una unin de tablas . El lenguaje

SQL ofrece a menudo la posibilidad de escribir de distintos modos una misma

consulta, pero el tiempo invertido en la obtencin del resultado vara segn la expresin y tambin segn la lgica seguida por el optimizador para organizar la consulta. Por tanto, no es posible decir a priori cul es la formulacin ms ecaz.

1 Esta

operacin corresponde al producto natural o join. Ver captulo 6.

80

Consultas anidadas

En

SQL,

las consultas cuyo criterio de seleccin depende del resultado devuelto por

otra consulta, se denomina consultas anidadas. La subconsulta se evala en primer lugar y el resultado se sustituye dinmicamente en la consulta de nivel superior. Las consultas anidadas tambin se pueden usar en la clusula mismo efecto que en la clusula La columna de la clusula

where.

having,

produciendo el

where

de la consulta de primer nivel, debe ser del mismo

tipo que los valores devueltos por la subconsulta. Las expresiones y las funciones pueden incluirse como columnas de las consultas anidadas. Hemos de sealar que una consulta anidada no puede contener la clusula ya que sta se utiliza para ordenar el resultado de una consulta principal.

order by,

Formato:
SELECT nom_columna, expresiones, etc. FROM nom_tabla WHERE nom_columna operador_de_comparacin (SELECT nom_columna(s), expresiones, etc. FROM nom_tabla [WHERE criterio de seleccin de las filas] [GROUP BY nom_columna, ...] [HAVING nom_columna, expresiones, etc.]...);

5.2.

Devolucin de un solo valor


where
principal.

Una subconsulta puede devolver un nico valor que sirve como valor de comparacin de la consulta de la clusula

Una primera consulta determinara el valor del criterio de seleccin, y la segunda ltrara la tabla en base a este valor. La consulta interior puede obtener valores desde otra tabla diferente a la referenciada en la clusula

select

exterior.

El ejemplo 5.1 nos muestra cmo utilizamos el resultado de una consulta, llamada consulta anidada, como criterio de seleccin de una consulta principal.

5.3.

Combinacin con operadores lgicos


or
y

Podemos combinar dos consultas anidadas mediante los operadores lgicos utilizadas en la clusula

and.

Las columnas devueltas por una consulta interior debern corresponderse con las columnas

where

de la consulta exterior, tanto en su nmero como en el

5.3 Combinacion con operadores logicos

81

tipo de datos.

Ejemplo 5.1

Clientes que viven en el mismo pais que el no 3

SQL> select clt_num numero, clt_nom nombre, clt_apell apellido 2 from clientes 3 where clt_pais = 4 (select clt_pais 5 from clientes 6 where clt_num = 3); NUMERO ---------3 4 6 8 NOMBRE -------------------jean michel marcel gerad APELLIDO ------------------------dupont dupret souris courbon

4 filas seleccionadas.

Formato:
WHERE nom_columna operador comparativo (consulta anidada) operador_lgico nom_columna operador comparativo (consulta anidada)
Los ejemplos 5.2 y 5.3 tienen dos criterios de seleccin en la clusula empleado diferentes operadores de comparacin.

where

y cada

uno de ellos se obtiene a partir del resultado de una consulta anidada. Vemos que hemos

Ejemplo 5.2

Articulos con el mismo color que el no 15 o el peso igual al no 3

SQL> 2 3 4 5 6 7 8 9 10

select art_num numero, art_nom nombre from articulos where art_col = (select art_col from articulos where art_num = 15) or art_peso = (select art_peso from articulos where art_num = 3); NOMBRE -------------------calculadora calendario boligrafo lujo

NUMERO ---------2 3 15

3 filas seleccionadas.

82

Consultas anidadas

Ejemplo 5.3

Articulos con el mismo color que el no 15 o un peso superior al del no 3

SQL> 2 3 4 5 6 7 8 9 10

select art_num numero, art_nom nombre from articulos where art_col = (select art_col from articulos where art_num = 15) or art_peso > (select art_peso from articulos where art_num = 3); NOMBRE -------------------impresora calculadora lampara lampara lampara lampara boligrafo lujo

NUMERO ---------1 2 4 5 6 7 15

7 filas seleccionadas.

5.4.

Devolucin de mltiples las


all
(todos) o

La consulta anidada debe incluirse en una clusula lista (in) o uno de los operadores

any

where

que tenga un operador de

(al menos uno).

Ciertas subconsultas pueden retornar una lista de valores, en tales consultas deber usarse el operador

in o not in para unir la consulta del primer nivel con la lista de valores

obtenidos por la subconsulta. El operador de comparacin  =  es ms eciente cuando se conoce que la subconsulta devolver una nica la. Esto ocurre siempre que utilicemos este operador con la clave primaria de una tabla. Si observamos los ejemplos 5.2 y 5.3, veremos que hemos utilizado el operador de igualdad cuando tenamos la certeza de que la consulta anidada solamente poda devolvernos un nico valor y hemos utilizado el operador mayor que cuando haba posibilidad de que la consulta anidada devolviera ms de una tupla.

5.5 Devolucion de m ltiples columnas u

83

5.5.

Devolucin de mltiples columnas


where
de la

Puede darse tambin el caso de que las subconsultas devuelvan ms de una columna. En tales subconsultas, el orden de las columnas expresadas en la clusula consulta de nivel inferior. Las columnas de la clusula estar situadas entre parntesis. El ejemplo 5.4 vemos que la consulta anidad devuelve una ncia tupla que contiene dos columnas. Dichas columnas se corresponden plenamente con las expresadas en la clusula consulta de primer nivel, deber corresponder al orden de columnas seleccionadas por la

where

del nivel superior debern

where

de la consulta principal.

Formato:
WHERE (nom_columna1, nom_columna2) operador (consulta anidada)
Ejemplo 5.4 Articulos que tengan el mismo color y el mismo peso que el no 10

SQL> select art_num numero, art_nom nombre 2 from articulos 3 where (art_col,art_peso) = 4 (select art_col, art_peso 5 from articulos 6 where art_num = 10); NUMERO ---------10 12 NOMBRE -------------------boligrafo boligrafo lujo

2 filas seleccionadas.

5.6.

Subconsultas correlacionadas
select

Cuando se realiza una consulta anidada, sta se evala totalmente y su resultado, una tabla temporal, se utiliza como criterio de seleccin en la consulta inmediata superior. El nombre de las columnas en la clusula tabla denida en la clusula de la consulta anidada se relaciona con la

from

de dicha consulta.

Esto no siempre es tan sencillo, ya que a veces la consulta superior y la anidada correspondiente pueden estar correlacionadas. Es decir, la consulta anidada no se evala totalmente devolviendo una tabla temporal, sino que para cada valor de la consulta

84

Consultas anidadas

superior realiza una evaluacin de la consulta anidada. Esto signica que un valor obtenido mediante una subconsulta depende de una variable que recibe un valor desde la consulta de nivel superior. Las consultas anidadas correlacionadas nos pueden obligar a usar alias para las tablas denidas en las clusulas

from

correspondientes.

Formato:
SELECT alias1.nom_columna1, alias1.nom_columna4 FROM nom_tabla1 alias1 WHERE criterio_de_seleccin (SELECT alias2.nom_columna1 FROM nom_tabla1 alias2 WHERE alias1.nom_columna3=alias2.nom_columna5);
Donde

nom_tabla1

es la misma tabla en las dos consultas pero le hemos asignado di-

ferentes alias para identicar qu columnas pertenecen a la tabla de la consulta anidada y qu columnas corresponden a la tabla de la consulta principal. Esta consulta se realiza tomando cada tupla de la consulta externa y entrando en la interna para evaluar su contenido y devolver o no el valor a la clusula La clusula

where

de la consulta superior.

where

de la consulta anidada comprueba que el valor que viene de la

consulta externa sea igual al valor en la consulta interna, y as evaluarla y devolver el, o los valores a la clusula

where

externa.

El ejemplo 5.5 nos muestra una consulta correlacionada donde la tabla de la consulta anidada y de la consulta principal es la misma. Esto hace que tengamos que utilizar alias para las tablas y as poder identicar a los atributos implicados en dicha consulta.

5.7.

Operadores

Hasta este momento hemos visto los operadores de comparacin, los operadores lgicos, los patrones, el operador de intervalo y nos queda por ver los operadores todo, al menos uno y el operador de existencia.

5.7.1. Los operadores any y all


La lista obtenida por una subconsulta puede tratarse mediante los operadores todos puesta por un operador comparativo (=, operadores

all

o al menos uno

any.

La subconsulta debe colocarse en una clusula

all

any

where com<>, !=, <, >, <=, >=) seguido por uno de los

y, tras ste, por la consulta anidada.

5.7 Operadores

85

Ejemplo 5.5

Datos de los artculos que tienen el mismo color de los que pesan ms de 10g

SQL> select art_num numero, art_nom nombre 2 from articulos t1 3 where art_num in 4 (select art_num 5 from articulos t2 6 where t1.art_col = t2.art_col and t2.art_peso > 10); NUMERO ---------1 2 3 4 5 6 7 10 11 12 13 14 15 NOMBRE -------------------impresora calculadora calendario lampara lampara lampara lampara boligrafo boligrafo boligrafo lujo boligrafo lujo boligrafo lujo boligrafo lujo

13 filas seleccionadas.

Formato:
SELECT nom_columna, expresiones, etc. FROM tabla WHERE columna operador_de_comparacin ANY ALL (Subconsulta que retorna mltiples valores);

El operador

any

comprueba que al menos una columna de la tabla de la consulta

principal cumpla la condicin de la consulta anidada para que sea verdadero el criterio de seleccin de la clusula El operador

where. where ser verdadero.

all

comprueba que la condicin de la consulta anidada se cumpla para

todas las tuplas de la consulta anidada y as el criterio de la clusula El ejemplo 5.6 nos muestra el uso del operador blanco.

any.

Se desea encontrar todos los

artculos cuyos pesos sean mayores que el peso de cualquiera de los artculos de color

86

Consultas anidadas

5.7.2. Resumen
Con el operador

all la condicin se cumple si la comparacin se verica para todos any


la condicin se cumple si la comparacin se verica para uno

los valores invocados por la consulta anidada. Con el operador

al menos de los valores invocados por la consulta anidada. El empleo de

any

y/o

all

es bastante delicado y puede llevar fcilmente a cometer

errores. Es preferible emplear en su lugar consultas que hagan uso de funciones sobre los grupos o sobre las consultas de existencia. El operador El operador

in

es equivalente a =

any. all
o <>all.

not in

es equivalente a !=

Ejemplo 5.6

Artculos que pesen ms que cualquiera de los de color blanco

SQL> select art_num numero, art_nom nombre 2 from articulos 3 where art_peso > any 4 (select art_peso 5 from articulos 6 where art_col = 'blanco'); NUMERO NOMBRE ---------- -------------------3 calendario 2 calculadora 1 impresora 4 lampara 5 lampara 6 lampara 7 lampara 10 boligrafo 11 boligrafo 12 boligrafo lujo 13 boligrafo lujo 14 boligrafo lujo 15 boligrafo lujo 13 filas seleccionadas.

5.7.3. El operador exists


El operador existencial

exists

se emplea para realizar consultas de existencia, con-

sultas en que necesitemos utilizar el cuanticador universal para todo o la operacin de divisin del lgebra relacional.

5.8 Consulta anidada en una clausula having

87

La subconsultas de existencia debe colocarse dentro de una clusula de la palabra clave de una la por lo menos.

where y despus exists. La condicin se cumple si la consulta anidada da un resultado

Formato:
SELECT columnas FROM tabla WHERE EXISTS (Subconsulta que retorna uno o mltiples valores);
La existencia de las de la consulta interna se puede utilizar para cualicar las en una consulta exterior. La consulta anidada ser cierta si encuentra una o ms las. En caso contrario, la clusula La clusula

where

no sera cierta y no se ejecutara la consulta superior.

select

de la consulta anidada no tiene necesariamente que llevar especi-

cado los nombres de las columnas, ya que lo nico que se chequea es si existe al menos una la que cumpla la condicin, luego debemos utilizar el asterisco (*). En el ejemplo 5.7 observamos que se nos mostrar la tabla

Sanjita.

Proveedores

siempre que exista el proveedor

5.8.

Consulta anidada en una clusula having


having permite especicar un criterio de seleccin que debe vericar los

Una clusula

grupos. Este criterio puede, a su vez, depender del resultado de una consulta anidada.

Formato:
HAVING {columna | funcin} {operador_de_comparacin | lista} {(subconsulta anidada) | constante | columna | funcin}
El ejemplo 5.8 nos muestra cmo hacemos una seleccin de entre todos los grupos obtenidos. La seleccin se hace en base al criterio expresado en la clusula

having.

88

Consultas anidadas

Ejemplo 5.7

Si tenemos un proveedor que se llame sanjita muestra todos los proveedores

SQL> select prv_num numero, prv_nom nombre 2 from proveedores 3 where exists 4 (select * 5 from proveedores 6 where prv_nom = 'sanjita'); NUMERO ---------1 2 3 4 5 NOMBRE ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp

5 filas seleccionadas.

Ejemplo 5.8

SQL> 2 3 4 5 6

select art_col color from articulos group by art_col having avg(art_peso) >= (select avg(art_peso) from articulos);

Colores de los artculos cuya media de pesos es superior a la media de todos los artculos

COLOR ------blanco verde 2 filas seleccionadas.

Cap tulo 6

Consultas a multiples tablas


Presentamos en este captulo cmo podemos hacer uso de los operadores de reunin y de los tradicionales de conjuntos para obtener informacin procedente de varias tablas. Tambin se muestran unas recomendaciones para optimizar nuestras consultas.

6.1.

Bsquedas multitablas

6.1.1. Introduccin
Las consultas que realizamos normalmente requieren informacin que estn repartida o contenida en ms de una tabla. Para poder hacer esto, necesitamos que una columna contenga la misma informacin en diferentes tablas y sea este campo el que nos sirva de unin entre las diversas tablas. Estas columnas que nos sirven para recabar informacin entre tablas se denominan claves forneas y la operacin que nos permite hacer esto corresponde a la operacin de producto natural o

join1 .

6.1.2. Producto cartesiano


La operacin de producto cartesiano une cada la de una tabla con cada una de las las de la otra tabla.

1 En

lgebra relacional esta operacin se representa con el smbolo

90

Consultas a m ltiples tablas u

Formato:
SELECT tab1.nom_colum, tab2.nom_colum,... FROM tab1, tab2, ...;

El proceso que se sigue es el siguiente: si la clusula

from

incluye varias tablas, se

comienza realizando el producto cartesiano de las mismas. Dicho producto es, a su vez, una tabla derivada de la concatenacin de las las de una tabla original con las las de otra (o de otras) tambin original; es decir, cada la de una tabla es emparejada sucesivamente con todas las las de la otra. Si la primera tabla contiene

las, y la segunda

producto cartesiano de estas dos tablas estar formado por una tabla con Posteriormente, se proyectarn las columnas seleccionadas en la clusula informacin que no es cierta.

select

MxN

N,

el

las.

y stas

aparecern en el mismo orden especicado. La tabla resultante de esta operacin contiene

La consulta del ejemplo 6.1 nos da una tabla donde aparecen los datos principales de los artculos cuyos nmeros sean menores que 4 y de sus proveedores. Podemos comprobar, observando este ejemplo, que los proveedores estn asignados a todos los artculos, cuando sabemos que realmente un artculo slo lo suministra un proveedor. Si obsevamos ms detenidamente dicho ejemplo, vemos que en primer lugar hemos hecho un producto cartesiano entre las tablas denominan

Proveedores
o

Articulos

y, posteriormente, hemos aplicado un

criterios de seleccin dodne el n

producto theta 2

del artculos sea menor que 4. Esta dos operaciones se

6.1.3. Producto natural


Esta operacin se realizar sobre las columnas que contienen la misma informacin en tablas distintas ya que si esto no lo tenemos en cuenta, lo que realizaremos es un producto cartesiano con las consecuencias de prdida de informacin, informacin redundante e inconsistencia de los datos. Si lo que queremos es reunir informacin entre tablas pero que el resultado sea correcto, debemos realizar un producto natural o no ocurrir lo mismo que lo visto en el ejemplo 6.1. Para ello, debemos tener al menos una columna comn en las tablas sobre las que vamos a realizar esta operacin, o sea, la unin de tablas se hace mediante la igualdad de valores entre esas columnas. Las columnas comunes se corresponden con las claves forneas.

join entre tabla y as

2 En

lgebra relacional se expresa con el smbolo

6.1 B squedas multitablas u

91

Ejemplo 6.1

Producto cartesiano entre proveedores y pesos

SQL> select art_num numero, art_nom nombre, proveedores.* 2 from articulos, proveedores 3 where art_num < 4; NUMERO ---------1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 NOMBRE PRV_NUM PRV_NOM -------------------- ---------- ------------------------impresora 1 catio electronic calculadora 1 catio electronic calendario 1 catio electronic impresora 2 estilograficas reunidas calculadora 2 estilograficas reunidas calendario 2 estilograficas reunidas impresora 3 mecanica de precision calculadora 3 mecanica de precision calendario 3 mecanica de precision impresora 4 sanjita calculadora 4 sanjita calendario 4 sanjita impresora 5 electrolamp calculadora 5 electrolamp calendario 5 electrolamp

15 filas seleccionadas.

Para realizar un producto natural basta con especicar en la clusula columnas buscadas y escribir una condicin de igualdad en la clusula columnas que permiten la unin de las tablas. La clusula de todas las tablas.

from

select where entre

las las

debe contener el nombre

Formato:
SELECT tab1.nom_colum, tab2.nom_colum, ... FROM tab1, tab2, ... WHERE tab1.colum = tab2.colum AND ... ;
Vemos que la clusula

from contiene ms de una tabla, luego se comenzar realizando el where.


La tabla as formada

producto cartesiano. Posteriormente, se descartarn todas las las resultantes del producto que no cumplan el criterio de unin contenido en la clusula ser posteriormente ordenada segn las columnas indicadas en la clusula

order by.

La

bsqueda concluye con la proyeccin de las columnas que se especican en la clusula

select.
Esta descripcin del proceso se corresponde con una concepcin tpica del razonamiento humano. En la realidad, el optimizador desempea un importante papel, efectuando, de forma inmediata, las selecciones y proyecciones sobre las tablas iniciales, de modo que la tabla resultante del producto cartesiano jams se genera en el sistema.

92

Consultas a m ltiples tablas u

Por ejemplo, si realmente lo que queremos es saber quien suministra realmente cada artculos, la consulta sera la mostrada en el ejemplo 6.2. Slo se van a seleccionar las tuplas en las que el cdigo del proveedor sea el mismo en las dos tablas.

Ejemplo 6.2

Datos de los artculos y del proveedor que lo suministra

SQL> select art_num numero, art_nom nombre, proveedores.* 2 from articulos, proveedores 3 where art_prv = prv_num; NUMERO ---------2 10 11 12 15 14 13 8 9 1 3 4 5 6 7 NOMBRE PRV_NUM PRV_NOM -------------------- ---------- ------------------------calculadora 1 catio electronic boligrafo 2 estilograficas reunidas boligrafo 2 estilograficas reunidas boligrafo lujo 2 estilograficas reunidas boligrafo lujo 2 estilograficas reunidas boligrafo lujo 2 estilograficas reunidas boligrafo lujo 2 estilograficas reunidas pesacartas 1-500 3 mecanica de precision pesacartas 1-1000 3 mecanica de precision impresora 4 sanjita calendario 4 sanjita lampara 5 electrolamp lampara 5 electrolamp lampara 5 electrolamp lampara 5 electrolamp

15 filas seleccionadas.

La clusula

where

puede soportar condiciones de seleccin de tuplas, utilizando los

operadores ya vistos, junto con los criterios de unin entre tablas (producto natural) siempre que estn combinados con operadores lgicos. Por ejemplo, en el ejemplo 6.1 aparecen artculos con proveedores que no son realmente quienes los suministra. Esto lo podemos subsanar realizando un producto natural ms el mismo criterio de seleccin que hemos aplicado en dicho ejemplo (ver ejemplo 6.3).

6.1.4. Resumen
A modo de resumen, podemos resaltar los siguientes puntos:

Las tablas que van a formar parte de un producto natural se especican en la clusula

from.
La clusula

where especica los criterios para unir las tablas, as como el de seleccin select.

de los registros. Las columnas que se quieren proyectar de una u otra tabla irn en la clusula

6.1 B squedas multitablas u

93

Puede utilizarse la expresin

nom_tabla.*

para obtener todas las columnas de una

tabla en los productos cartesiano y natural. Las columnas con igual nombre en ambas tablas debern llevar un prejo con el nombre de la tabla a la que pertenece, o bien un alias, separado por un punto. Si los nombres de las columnas son nicos en todas las tablas del producto, no ser necesario usar como prejo el nombre de su tabla. Pueden realizarse tantos productos sobre tablas como se desee. El criterio de correspondencia para las tablas se denomina predicado de unin o criterio de unin. Pueden utilizarse ms de un par de columnas para especicar la condicin de unin entre dos tablas cualquiera. Cuando se quiere realizar el producto natural entre menos

n-1

tablas, es necesario tener al

condiciones de unin para evitar productos cartesianos.

Ejemplo 6.3

SQL> select art_num numero, art_nom nombre, proveedores.* 2 from articulos, proveedores 3 where art_prv = prv_num and art_num < 4; NUMERO ---------2 1 3

Datos de los artculos y sus proveedores cuyos no son menores que 4

NOMBRE PRV_NUM PRV_NOM -------------------- ---------- ------------------------calculadora 1 catio electronic impresora 4 sanjita calendario 4 sanjita

3 filas seleccionadas.

6.1.5. Unin externa


Esta unin, tambin llamada

outer-joins, permite resolver problemas del siguiente tipo:

se desea obtener una lista de las en funcin de un criterio que es funcin de la unin con otra tabla, si la condicin de unin no se cumple, la la normalmente no aparece en el resultado. Pues bien, para visualizar todas las las, incluidas las que no cumplen este criterio, es preciso realizar una unin externa. En

Oracle

una unin externa se identica mediante la presencia del smbolo (+)

en la clusula determinados.

where,

despus del nombre de la columna donde pueden no darse valores

94

Consultas a m ltiples tablas u

La unin externa devuelve todas las las recuperadas por medio de un producto natural y, adems, aade las tuplas de una tabla que no estn emparejadas con las tuplas de la otra tabla. Una unin externa hace que el

SQL

suministre columnas nulas o vacas en una tabla

para las las que no cumplen la condicin de unin. Por ejemplo, queremos saber los datos de los articulos y la fecha en que se han vendido cuyos nmeros sean mayores que 4. Si un artculo an no se han vendio tambin queremos que aparezcan sus datos. Esto lo podemos ver resuelto en el ejemplo 6.4. Obsrvese que le hemos dado formato al atributo fecha para que no aparezca tal como se han introducido los valores. Ver captulo 7.

Ejemplo 6.4

Datos de artculos cuyos no es mayor que 4 que se han vendido o no

SQL> select art_num numero, art_nom nombre, 2 to_date(vnt_fch,'yymmdd') fecha 3 from articulos,ventas 4 where art_num = vnt_art(+) and art_num > 3; NUMERO ---------4 4 5 6 7 8 9 10 10 11 12 13 13 14 15 15 NOMBRE -------------------lampara lampara lampara lampara lampara pesacartas 1-500 pesacartas 1-1000 boligrafo boligrafo boligrafo boligrafo lujo boligrafo lujo boligrafo lujo boligrafo lujo boligrafo lujo boligrafo lujo FECHA -------06/01/91 09/01/91 11/01/91 11/01/91 06/01/91 11/01/91 06/01/91 10/01/91 10/01/91 22/02/92 06/01/91 09/01/91 09/05/01

16 filas seleccionadas.

6.1.6. Autouniones
A veces queremos realizar una unin entre dos tablas que no son distintas, es decir, las dos tablas que queremos unir son, en realidad, la misma tabla. Esto se produce cuando el criterio de unin afecta al valor de una columna en relacin al valor de esta misma columna en otra la de la misma tabla. Una tabla puede estar unida dentro de s misma en columnas que contengan el mismo tipo de informacin. Una autounin une las de una tabla con ella misma o con otras las en la misma tabla.

6.1 B squedas multitablas u

95

Formato:
SELECT alias1.columna, alias2.columna, ... FROM tabla1 alias1, tabla1 alias2 WHERE alias1.columna = alias2.columna;
Cuando realizamos este tipo de unin es necesario utilizar alias pues tenemos que diferenciar cuando estamos haciendo referencia a una tabla y cuando hacemos referencia a la otra tabla, sabiendo que las dos tablas son la misma.

Ejemplo 6.5

Autouniones

SQL> 2 3 4

select t1.clt_num numero, t1.clt_nom nombre, t1.clt_apell from clientes t1, clientes t2 where t1.clt_pais = t2.clt_pais and t2.clt_nom like 'm%' and t2.clt_num > 10; NOMBRE -------------------margarita miguel antoni pablo consuelo pau jorge pablo diego joaquin jacinto CLT_APELL ------------------------borras perez llopis goqi roman roca mancha curro cortes fernandez duran

NUMERO ---------1 2 5 7 9 10 11 12 13 14 15

11 filas seleccionadas.

El ejemplo 6.5 nos muestra los datos de los clientes que viven en el mismo pas de los que su nmero es mayor que 10 y su nombre comienza por

m.

6.1.7. Resumen
Una tabla puede unirse consigo misma como si fueran dos tablas separadas. La autounin es til para unir una la de una tabla con otra de la misma tabla. Al igual que en cualquier otra unin, la unin se realiza entre columnas que contienen el mismo tipo de informacin. A la tabla se deber asignar un alias para sincronizar qu columnas van a ser obtenidas de la tabla.

96

Consultas a m ltiples tablas u

6.1.8. Uniones no comunes


Cabe observar que la unin entre tablas puede quedar especicada mediante cualquiera de los operadores de comparacin (=,

<>, !=, <, >, <=, >=, between, in, like).

Tambin podemos llamar a esta unin unin mediante la no igualdad.

Ejemplo 6.6

Clasicar los artculos cuyos no estn comprendidos entre 2 y 10, segn su peso

SQL> select art_num numero, art_nom nombre, peso_nom tipo 2 from articulos, pesos 3 where art_peso between peso_min and peso_max 4 and art_num between 2 and 10; NUMERO ---------3 10 2 4 5 6 7 NOMBRE -------------------calendario boligrafo calculadora lampara lampara lampara lampara TIPO --------leve leve ligero medio medio medio medio

7 filas seleccionadas.

El ejemplo 6.6 nos muestra cmo podemos hacer estos tipos de uniones. Segn el peso de cada artculo los hemos clasicados utilizando la clasicacin expresada en la tabla

Pesos.

6.2.

Operadores conjuntistas
SGBD.

Las operaciones conjuntistas son cuatro: unin, interseccin, diferencia y producto cartesiano (ya visto anteriormente) de conjuntos. Slo la unin y el producto cartesiano es comn a todos los Las otras dos operaciones son muy potentes pero slo se dan de forma excepcional en los criterio de unin entre tablas. Hay ocasiones en las que se necesita combinar informaciones de tipo similar. Un ejemplo clsico de esto puede ser dos o ms listas de direcciones que se unen antes de empezar una campaa de publicidad por correos. Dependiendo del propsito particular de la campaa se puede enviar cartas de una de las siguientes maneras:

SGBD. En cuanto al producto cartesiano, su realizacin

es automtica cuando se hacen consultas que afectan a varias tablas y no indicamos un

6.2 Operadores conjuntistas

97

A todo el mundo de ambas listas (mientras se evite enviar dos cartas a alguien que se encuentra en las dos listas) Slamente a aquellas personas que estn en ambas listas. Slamente a aquellas personas que estn en una lista y no en la otra.

Para realizar estas tres combinaciones de listas,

intersect
operadores

minus.

Oracle

utiliza los operadores

union,

Hay que tener presente que, por lo general, las consultas

union, intersect y minus no pueden llevar las by. Si la clusula order by se usa en una consulta, sta deber especicarse por posicin3 .

select afectadas por los clusulas distinct y order

6.2.1. El operador union


Este operador efecta la unin de los resultados de dos consultas

select. Esto signica

que, partiendo de dos tablas temporales, se puede crear una tercera que contenga el conjunto de las de las dos tablas iniciales, eliminando o no las las repetidas. Si al operador idnticas. En las dos tablas el tipo de columnas debe ser compatible. Si las tablas unidas pertenecen a subconjuntos de la misma tabla, el uso de este operador es completamente equivalente al de un operador lgico

union

le sigue la palabra clave

all,

entonces se seleccionan tambin las las

or

colocado entre dos condiciones.

Este operador retorna todas las las de mltiples consultas.

Formato:
SELECT nom_columna, ... FROM nom_tabla, ... [WHERE condiciones] {UNION | UNION ALL} SELECT nom_columna, ... FROM nom_tabla, ... [WHERE condiciones] [ORDER BY entero];
La clusula

order by

no afecta a la segunda consulta, sino al resultado global.

En el ejemplo 6.7 se ha obtenido una lista con todos los nmeros de los artculos independientemente de s se han vendido o no.

3 Ver

captulo 3.

98

Consultas a m ltiples tablas u

Ejemplo 6.7

Los nmeros de todos los artculos que se han vendido o no

SQL> 2 3 4 5

select art_num numero from articulos union select vnt_art from ventas;

NUMERO ---------1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 15 filas seleccionadas.

6.2.2. El operador intersect


Este operador encuentra las tuplas comunes en las dos consultas.

Formato:
SELECT nom_columna, ... FROM nom_tabla, ... [WHERE condiciones] INTERSECT SELECT nom_columna, ... FROM nom_tabla, ... [WHERE condiciones] [ORDER BY entero];

En el ejemplo 6.8 solamente aparecen los nmeros de los artculos que se han vendido.

6.2 Operadores conjuntistas

99

Ejemplo 6.8

Los nmeros de todos los artculos que se han vendido

SQL> 2 3 4 5

select art_num numero from articulos intersect select vnt_art from ventas;

NUMERO ---------1 2 3 4 6 9 10 11 12 13 14 15 12 filas seleccionadas.

6.2.3. El operador minus


El operador

minus

obtiene todas las las seleccionadas por la primera consulta pero

no por la siguiente.

Formato:
SELECT nom_columna, ... FROM nom_tabla, ... [WHERE condiciones] MINUS SELECT nom_columna, ... FROM nom_tabla, ... [WHERE condiciones] [ORDER BY entero];

El ejemplo 6.9 nos muestra solamente los artculos que an no se han vendido y podemos hacer una comparacin con los ejemplos 6.7 y 6.8 ya mostrados.

100

Consultas a m ltiples tablas u

6.3.
posible.

Consejos prcticos para escribir una consulta

Vamos a resumir los requisitos necesarios para realizar una consulta de la mejor manera

Determinar las tablas que han de participar, e incluirlas en la clusula

from.

Decidir qu columnas se desean visualizar o proyectar y su orden de aparicin para incluirlas en la clusula Si la clusula

select. select,
salvo las

group by

select

conlleva funciones sobre grupos, ser necesario una clusula

que agrupe todas las columnas citadas en la clusula

funciones en cuestin. Determinar las condiciones de seleccin que limitan la consulta. Las condiciones con proyeccin sobre grupos deben gurar en una clusula valores individuales, aparecern en una clusula

having; where.

las que se reeren a

Cuando se tenga que emplear una funcin sobre grupos en una clusula realizar una consulta anidada. Para fusionar los resultados procedentes de dos clusulas el operador

where,

cuando haya necesidad de un valor de una columna de otra tabla distinta, hay que

union. order by.

select, basta con emplear

Hay que precisar el orden de aparicin de las las del resultado de una consulta con una clusula

Los posibles alias que demos a las columnas, debern estar en la primera consulta cuando usamos los operadores conjuntistas.

Ejemplo 6.9

Los nmeros de todos los artculos que no se han vendido

SQL> 2 3 4 5

select art_num numero from articulos minus select vnt_art from ventas;

NUMERO ---------5 7 8 3 filas seleccionadas.

6.4 Optimizacion de las consultas

101

6.4.

Optimizacin de las consultas

6.4.1. Introduccin
Con el lenguaje

SQL

es posible expresar una misma consulta de distintos modos,

aunque no siempre es fcil decidir la mejor forma de expresar una consulta compleja. Es mejor usar una unin de tablas o una consulta anidada? Interesa el empleo del operador

exists?

A todas estas preguntas vamos a intentar dar respuesta en este apartado. Las

reglas que siguen facilitarn a buen seguro la tarea del programador novel. Para ilustrar nuestro punto de vista examinemos una consulta sencilla que afecta a dos tablas: visualizar los datos de los clientes que han comprado el artculo n

3.

Existen, al menos, cuatro formulaciones diferentes para esta consulta: una unin entre tablas, una consulta anidada, una consulta correlacionada y una consulta basada en el operador

exists4 .

1)

Unin entre tablas : establecer un producto cartesiano entre las tablas Clientes y Ventas
mediante una igualdad en el nmero del cliente en ambas tablas, teniendo en cuenta que slo necesitamos los datos de aquellos clientes que han comprado el artculo n Ver ejemplo 6.10.

3.

2)

Consulta anidada : listar a todos los clientes cuyo nmero se incluye en el conjunto de
los que han comprado el artculo n 3. Ver ejemplo 6.11.

3)

Consulta correlacionada :

listar a los clientes cuya nmero pertenezca al conjunto de

nmeros de clientes que han comprado el artculo n 4)

3. Ver ejemplo 6.12.

Consulta de existencia : listar a los clientes 3 en la tabla Ventas. Ver ejemplo 6.13.

si existen que han comprado el artculo n

6.4.2. Ecacia
Autorizar varias formulaciones para una misma consulta puede considerarse una ventaja del lenguaje, si cada usuario es libre de elegir su propia manera de plantear el problema. Por desgracia, en la situacin actual de las versiones del

SQL, estas distintas formulaciones SQL

arrojan tiempos de ejecucin con frecuencia muy distintos y a veces hasta inesperados. Ello obliga al usuario a comprobar el comportamiento de su versin de para cada tipo de consulta y para cada formulacin, si pretenden optimizar sus aplicaciones. La razn de ello estriba en que las tcnicas utilizadas por el optimizador para organizar la consulta depende de la formulacin de la consulta y del

SGBDR 5 .

4 Ver

5 Sistema

preguntas 6.4.4 y 6.4.5. de Gestin de Bases de Datos Relacionales.

102

Consultas a m ltiples tablas u

6.4.3. Unin entre tablas o consulta anidada


Como se ve en el ejemplo propuesto en el apartado 6.4.1, la unin ofrece con frecuencia una formulacin ms concisa, pero quizs menos clara. Las subconsultas tienen la ventaja de descomponer el problema, lo que hace que las consultas sean ms fciles de escribir y de comprender.

La unin es indispensable para transcribir una consulta que pretende recuperar informacin derivada de distintas tablas.
En efecto, una consulta mediante subconsulta permite slo la visualizacin de informaciones situadas en la tabla exterior. Por el contrario, las uniones resultan inoperantes en determinadas consultas multitablas.

Cuando la consulta consiste en recuperar informacin de una sola tabla, pero siendo necesaria otra para condicionar la seleccin de las las de la primera, siempre es mejor el uso de una consulta anidada.
As, se puede comprobar fcilmente que no es posible ninguna condicin de unin para solucionar una consulta que efecta una operacin conjuntista de diferencia. Esto es lgico, dado que la consulta niega el enlace entre las tablas. Por el contrario, la solucin es inmediata con el operador en el ejemplo anterior (not delante de

in o con exists, dado que basta con invertir las condiciones in o exists).

6.4.4. Empleo del cuanticador existencial


verdadero (true) si la consulta tiene resultado no vaco. Por lo tanto, una la de la consulta exterior forma parte del resultado si existe en la tabla interior al menos una la que satisface las condiciones de la clusula precedida de Recordemos que la expresin exists (select *

from

...) es un predicado que vale

not,

where de la subconsulta. Cuando la expresin est

el predicado se evalua como verdadero si no existe ninguna la de la

tabla interior que satisface las condiciones exigidas. Examinando las consultas que se pueden hacer a una base de datos, se llega fcilmente a la conclusin de que toda subconsulta precedida por el operador sada con el operador

exists.

in

puede ser expre-

Pero lo inverso no es verdad; algunas consultas no pueden

expresarse sino con la ayuda del operador Como conclusin, el operador El operador

exists.
si se excepta el hecho de que permite ex-

in

in ante una subconsulta puede ser sustituido por exists.

es, pues, redundante en

SQL,

presar una consulta de manera conjuntista, algo que algunos usuarios preeren en lugar

6.4 Optimizacion de las consultas

103

del enfoque predicativo de

exists.

El operador

in

a veces es necesario, porque los opti-

mizadores no son perfectos y el tiempo de ejecucin de la consulta con mucho mayor en algunos casos. Por otra parte,

exists

puede ser

exists

es necesario para expresar el cuanticador universal

muy conocido en lgica, pero que no est representado directamente en la expresin para todo puede formularse con la ayuda de uno o dos

not exists.

for all, SQL. En general,

6.4.5. Solucin al ejercicio propuesto


1) Producto natural entre las tablas: se realiza el producto natural entre las tablas y

Clientes Ventas, y se seleccionan las tuplas de los clientes que han comprado el artculo 3.
Producto natural

Ejemplo 6.10

SQL> select clt_num numero, clt_nom nombre, clt_apell apellido 2 from clientes, ventas 3 where clt_num = vnt_clt and vnt_art = 3; NUMERO ---------6 13 NOMBRE -------------------marcel diego APELLIDO ------------------------souris cortes

2 filas seleccionadas.

104

Consultas a m ltiples tablas u

2) Consulta anidada: se realiza una consulta anidada por obtener los n han comprado el artculo n

de clientes que

3. Esta consulta sirve de criterio de seleccin para obtener

los datos de los clientes que lo han comprado.

Ejemplo 6.11

SQL> select clt_num numero, clt_nom nombre, clt_apell apellido 2 from clientes 3 where clt_num in 4 (select vnt_clt 5 from ventas 6 where vnt_art = 3); NUMERO ---------6 13 NOMBRE -------------------marcel diego APELLIDO ------------------------souris cortes

Consulta anidada

2 filas seleccionadas.

3) Consulta correlacionada: para cada tupla de la tabla

Clientes
o
3.

se comprueba mediante

una consulta correlacionada si ha comprado el artculo n

Ejemplo 6.12

SQL> select clt_num numero, clt_nom nombre, clt_apell apellido 2 from clientes 3 where 3 in 4 (select vnt_art 5 from ventas 6 where vnt_clt = clt_num); NUMERO ---------6 13 NOMBRE -------------------marcel diego APELLIDO ------------------------souris cortes

Consulta correlacionada

2 filas seleccionadas.

6.4 Optimizacion de las consultas

105

4) Consulta de existencia: para cada cliente de la tabla

Clientes

se comprueba mediante

una consulta si es verdad (existe) que el cliente ha comprado el artculo n

3.

Ejemplo 6.13

Consulta de existencia

SQL> select clt_num numero, clt_nom nombre, clt_apell apellido 2 from clientes 3 where exists 4 (select * 5 from ventas 6 where vnt_clt = clt_num and vnt_art = 3); NUMERO ---------6 13 NOMBRE -------------------marcel diego APELLIDO ------------------------souris cortes

2 filas seleccionadas.

Cap tulo 7

Tratamiento de fechas
Oracle proporciona un buen mtodo para el tratamiento de las fechas. Este captulo nos muestra las diferentes maneras que tenemos de expresarlas.

7.1.

Aritmtica de fechas
posee la capacidad de almacenar y calcular fechas, as como el nmero de

Oracle

segundos, minutos, horas, das, meses y aos entre fechas dadas. Tambin tiene la facilidad de formatear las fechas de cualquier manera que se pueda concebir, desde un simple 15MAR-97 a Decimoquinto da del mes de marzo en el ao 764 del reinado de Luis IX. Para almacenar y operar con fechas,

Oracle proporciona el tipo de datos date que posee

unas propiedades nicas y especiales y que se almacena en un formato interno especial que incluye, no slo el mes, da y ao, sino tambin horas, minutos y segundos. Los benecios que proporcionan todos estos detalles deberan ser obvios. As podemos siempre almacenar automticamente la fecha, la fecha y hora, la fecha, hora y minuto, o la fecha, hora, minuto y el segundo de cualquier suceso. Los productos el

date

SQL*Plus

SQL reconocen las columnas que tienen como tipo de dato

y comprenden las instrucciones aritmticas que se hacen con ellas, denominadas

aritmtica de fechas. Tenemos que tener en cuenta que si sumamos un 1 a una fecha se obtiene otra fecha: el siguiente da. Mientras que si restamos una fecha de otra se obtiene un nmero: la cantidad de das entre las dos fechas.

108

Tratamiento de fechas

Sin embargo, puesto que las fechas de

Oracle

contienen horas, minutos y segundos,

realizar una aritmtica de fechas puede provocar un poco de confusin, por ejemplo obtenga este nmero fraccional de das entre hoy y maana es que no es un da exacto.

Oracle

puede decir que la diferencia entre hoy y maana es de .5339 das. La razn de que se

Oracle guarda tambin

las horas, los minutos y los segundos junto a las fechas por lo que la diferencia entre fechas

El formato por defecto de la fecha se incluye en el chero de arranque del sistema como un parmetro ms. Cualquier usuario puede cambiar el formato para una sesin de trabajo, o bien de forma permante incluyendo las rdenes en su chero de arraque (login.sql). En la tabla 7.1 vemos la expresin, la denicin y el tipo de dato que resulta de hacer algunas operaciones con las fechas. Suponemos que x representa a un nmero entero.

Expresin
fecha + x fecha + x/24 fecha - x fecha - x/24 fecha - fecha

Denicin
Aadira un nmero de das. Aadira un nmero de horas. Restara un nmero de das. Restara un nmero de horas. Determina el nmero de das entre ambas fechas.

Tipo de dato devuelto


date date date date
numrico

Tabla 7.1: Operaciones con fechas

La tabla

dual 1

proporcionada por

Oracle,

es la tabla que se emplea para probar las

funciones o realizar clculos rpidos.

7.2.

La funcin sysdate
2

Esta funcin es bastante importante ya que

Oracle

la utiliza para extraer del sistema

operativo la fecha y la hora actual . No necesita argumentos. Por ejemplo para saber la fecha de hoy, debemos usar esta funcin junto con la tabla

dual,

ya que el sistema debe devolvernos la consulta en formato tabla.

1 Ver

2 Esta

captulo 4. funcin se puede usar igual que cualquier otra funcin, ver captulo 4.

7.3 Funciones de fecha

109

Ejemplo 7.1

SQL> select sysdate 2 from dual; SYSDATE -------18/11/04 1 fila seleccionada.

Fecha actual

El ejemplo 7.1 nos muestra el resultado de la utilizacin de dicha funcin. El formato en que nos aparece es el formato por defecto que est denido en el chero de arranque de

Oracle.

7.3.

Funciones de fecha
date y devuelven valores months_between que devuelve un dato

Las funciones de fecha operan con valores de tipo de datos de este mismo tipo de datos, excepto la funcin de tipo numrico.

En la tabla 7.2 se muestran las funciones de fechas ms usuales.

add_months(d,n) last_day(d) months_between(d1,d2) next_day(d,char) round(d[,'formato']) sysdate trunc(d[,'formato'])

Funcin

Uso
Aade

meses a la fecha

d.

Devuelve la fecha del ltimo da del mes que contiene la fecha chas

d.

Devuelve el nmero de meses entre las fe-

d1

d2.

Devuelve la fecha del siguiente da despus de la fecha dada donde

char

es el nombre

de los das de la semana. Devuelve la fecha (en formato por defecto) ms cercana (anterior o posterior) segn la precisin que le indiquemos con quiere argumentos. Devuelve la fecha (en formato por defecto) anterior que primero cumple con la precisin indicada con

formato.

Devuelve la hora y el da actual. No re-

formato.

Tabla 7.2: Funciones de fecha

110

Tratamiento de fechas

La funcin

sysdate no se puede usar en la clusula de restriccin de integridad check3 .

7.4.

Formatos y conversin de fechas


4

Anteriormente hemos dicho que las fechas se pueden expresar en distintos formatos. Tambin podemos convertir cadenas de caracteres en fechas y viceversa . Las funciones

to_char

to_date

se parecen en que ambas tienen poderosas capaci-

dades para formatear, a parte de realizar una conversin de datos. El formato es el siguiente:

Formato:
TO_CHAR(fecha[,'formato']) TO_DATE(cadena[,'formato'])

fecha

La fecha debe ser una columna denida como tipo de datos

date

puede ser una cadena ni en el caso de que se encuentre en el formato La nica manera de usar una cadena donde aparece encerrndola en el interior de una funcin

to_date.

fecha

en la

Oracle y no dd-mm-yy. funcin to_char es


en

cadena

Es una cadena literal, un nmero literal o una columna de la base de datos

que contiene cadenas o nmeros. En todos los casos, menos en uno, el formato se corresponder con el descrito con

formato. Slo en

el caso en que la cadena est en

el formato denido en el chero de arranque, ste se puede omitir.

formato

Es una coleccin de ms de cuarenta opciones, que se pueden combinar, virtual-

mente, de un nmero innito de formas. En la tabla 7.3 se muestran las distintas opciones con sus respectivos efectos. Los formatos de fechas vistos se usan tanto con la funcin funcin

to_date.

to_char

como con la

El ejemplo 7.2 nos muestra los datos de los clientes que han relizado alguna compra y la fecha en que la realizaron. La fecha aparece con formato por defecto. El ejemplo 7.3 nos muestra la fecha y la hora actual segn el formato especicado. Para ello, la funcin

sysdate

debemos convertirla al tipo de datos

char.

3 Creacin 4 Ver

de una tabla con el lenguaje de denicin de datos. captulo 4.

7.4 Formatos y conversion de fechas

111

Ejemplo 7.2

Los clientes y las fechas de compras

SQL> select vnt_clt numero, clt_nom nombre, clt_apell apellido, 2 to_date(vnt_fch,'yymmdd') fecha 3 from clientes, ventas 4 where clt_num=vnt_clt and clt_pais = 'e'; NUMERO ---------1 1 1 5 7 7 7 13 13 NOMBRE -------------------margarita margarita margarita antoni pablo pablo pablo diego diego APELLIDO ------------------------borras borras borras llopis goqi goqi goqi cortes cortes FECHA -------10/01/91 10/01/91 10/01/91 06/01/91 06/01/91 06/01/91 06/01/91 10/01/91 09/01/91

9 filas seleccionadas.

Ejemplo 7.3

Fecha y hora

SQL> select to_char(sysdate,'dd-mm-yy hh:mi:ss') "Fecha y hora" 2 from dual; Fecha y hora ----------------15-12-04 02:33:07 1 fila seleccionada.

Elemento Uso
MM MON Mon mon MONTH Month month DDD DD Nmero del mes. Abreviatura de tres letras del mes. Como MON pero slo con la primera letra en mayscula. Como MON pero en minscula. El nombre del mes. Como MONTH pero con la primera letra en mayscula. El nombre del mes en minscula. Nmero del da del ao. Nmero del da del mes.

contina en la siguiente pgina

112

Tratamiento de fechas

continuacin de la pgina anterior

Elemento
D DY Dy dy DAY Day day YYYY SYYYY YYY YY Y YEAR Year year Q WW W J HH HH12 HH24 MI SS SSSSS

Uso

Nmero del da de la semana. Abreviatura de tres letras del da. Como DY, pero teniendo la primera letra en mayscula. Como DY, pero todo en minsculas. El nombre del da de la semana. El da de la semana con la primera en mayscula. El da de la semana en minscula. El ao con los cuatro dgitos. Ao con signo, 1000 a.C. = -1000. Los tres ltimos dgitos del ao. Los dos ltimos dgitos del ao. El ltimo dgito del ao. El ao escrito con letras. Como YEAR con las iniciales en maysculas. Como YEAR con todas las letras en minsculas. Nmero de trimestre. Nmero de semana en el ao. Nmero de semana en el mes. Das Julianos desde el 31 de diciembre de 4713 a.C.. Hora del da, siempre de 1-12. Lo mismo que HH. Hora del da de 1-24. Minuto de la hora. Segundo del minuto. Segundos desde la medianoche, siempre desde 0-86399. Puntuacin para ser incorporada. Muestra A.M. o P.M., dependiendo del momento del da. Lo mismo pero en minscula. El mismo efecto que A.M. El mismo efecto que a.m. Lo mismo que A.M. pero sin puntos. Lo mismo que a.m. pero sin puntos. Lo mismo que P.M. pero sin puntos. Lo mismo que p.m. pero sin puntos. Muestra B.C. o A.D. dependiendo de la fecha. Lo mismo que B.C. Lo mismo que B.C. pero en minsculas. Lo mismo que b.c. Lo mismo que B.C. pero sin los puntos.

/,-:.;texto A.M. a.m. P.M. p.m. AM am PM pm B.C. A.D. b.c. a.d. BC o AD

contina en la siguiente pgina

7.4 Formatos y conversion de fechas

113

continuacin de la pgina anterior

Elemento Uso
bc o ad

Lo mismo que b.c. pero sin los puntos. Tabla 7.3: Formatos de fechas

APENDICES

Apndice A e

Denicion de las tablas


Tiendas:
un nmero de identicacin nico no vaco ( que se encuentra la tienda (

tda_pob ) y el nombre del gerente (tda_ger ).

tda_num ),

el rea geogrca en

Clientes: un nmero de identicacin nico no vaco (clt_num ), el apellido del cliente (clt_apell ), su nombre (clt_nom ), nacionalidad (clt_pais ) y su ciudad (clt_pob ). Artculos:
su peso (

art_num ), el nombre del artculo (art_nom ), art_peso ), su color (art_col ), el precio de compra (art_pc ), el precio de venta (art_pv ) y el nmero del proveedor (art_prv ).
un nmero de identicacin nico (

Proveedores: un nmero de identicacin nico (prv_num ), y el nombre del proveedor (prv_nom ). Ventas:
vnt_clt ), el nmero de la tienda de adquisicin (vnt_tda ), vnt_art ), la cantidad vendida (vnt_cant ), el precio de venta total (vnt_precio ) y la fecha de la venta (vnt_fch ). Se supone que un cliente
el nmero del cliente ( el nmero del artculo adquirido ( no va a comprar dos veces el mismo artculo en un mismo da y en la misma tienda.

Suministros: el nmero del artculo (smt_art ) y el nmero del proveedor que los suministra (smt_prv ). Pesos:
el nombre de la clasicacin del peso ( mximo (

peso_max ) para cada uno.

peso_nom ), el peso mnimo (peso_min ) y

Apndice B e

Tablas
ART_NUM ------1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ART_NOM ART_PESO ART_COL ART_PC ART_PV ART_PRV -------------------- -------- ------- ------ ------ ------impresora 150 rojo 400 580 4 calculadora 150 negro 4000 4700 1 calendario 100 blanco 420 600 4 lampara 550 rojo 2100 2980 5 lampara 550 blanco 2000 2900 5 lampara 550 azul 2100 2980 5 lampara 550 verde 2100 2980 5 pesacartas 1-500 2400 4000 3 pesacartas 1-1000 3000 5000 3 boligrafo 20 rojo 20 40 2 boligrafo 20 azul 20 40 2 boligrafo lujo 20 rojo 60 100 2 boligrafo lujo 20 verde 60 100 2 boligrafo lujo 20 azul 60 100 2 boligrafo lujo 20 negro 60 100 2

Artculos

120

Tablas

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

TDA_POB -------------------madrid-batan madrid-centro pamplona barcelona trujillo jaen valencia requena palencia gerona lyon paris

TDA_GER ------------------------contesfosques, jordi martinez, juan dominguez, julian peqa, jose maria mendez, pedro marin, raquel petit, joan marcos, pilar castroviejo, lorenzo gomez, gabriel madoux, jean fouet, paul

Tiendas
CLT_NUM ------1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CLT_APELL --------------------borras perez dupont dupret llopis souris goqi courbon roman roca mancha curro cortes fernandez duran minguin CLT_NOM CLT_PAIS CLT_POB -------------- -------- ----------margarita e madrid miguel e madrid jean f paris michel f lyon antoni e barcelona marcel f paris pablo e pamplona gerad f lyon consuelo e jaen pau e gerona jorge e valencia pablo e barcelona diego e madrid joaquin e madrid jacinto e pamplona pedro e pamplona

Clientes

121

PRV_NUM ------1 2 3 4 5

PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp

Proveedores
VNT_CLT VNT_TDA VNT_ART VNT_CANT VNT_PRECIO VNT_FC ------- ---------- ---------- ---------- ---------- -----5 4 4 1 2980 910106 7 3 10 1 40 910106 7 3 11 2 80 910106 7 3 14 3 300 910106 8 11 2 1 4700 910109 6 12 3 2 1200 910109 6 12 15 2 200 910109 13 1 4 1 2980 910109 13 1 3 1 600 910110 1 2 2 1 4700 910110 1 2 12 1 100 910110 1 2 13 10 1000 910110 4 11 1 8 4640 910111 4 11 10 7 280 910111 3 7 6 1 2980 910111 3 7 9 2 10000 910111

Ventas
PESO_NOM PESO_MIN PESO_MAX --------- ---------- ---------leve 0 100 ligero 101 500 medio 501 2500 pesado 2501 9999

Pesos

Apndice C e

Descripcion de las tablas


Nombre -------------------------------------ART_NUM ART_NOM ART_PESO ART_COL ART_PC ART_PV ART_PRV ?Nulo? Tipo -------- -------------------------NOT NULL NUMBER(38) NOT NULL VARCHAR2(20) NUMBER(38) VARCHAR2(7) NOT NULL NUMBER(38) NOT NULL NUMBER(38) NUMBER(38)

Articulos
Nombre ?Nulo? Tipo -------------------------------------- -------- -------------------------CLT_NUM NOT NULL NUMBER(38) CLT_APELL NOT NULL VARCHAR2(25) CLT_NOM VARCHAR2(20) CLT_PAIS VARCHAR2(8) CLT_POB VARCHAR2(20)

Clientes

124

Descripcion de las tablas

Nombre ?Nulo? Tipo -------------------------------------- -------- -------------------------TDA_NUM NOT NULL NUMBER(38) TDA_POB NOT NULL VARCHAR2(20) TDA_GER VARCHAR2(25)

Tiendas
Nombre ?Nulo? Tipo -------------------------------------- -------- -------------------------PRV_NUM NOT NULL NUMBER(38) PRV_NOM NOT NULL VARCHAR2(25)

Proveedores
Nombre -------------------------------------VNT_CLT VNT_TDA VNT_ART VNT_CANT VNT_PRECIO VNT_FCH ?Nulo? Tipo -------- -------------------------NOT NULL NUMBER(38) NOT NULL NUMBER(38) NOT NULL NUMBER(38) NUMBER(38) NUMBER(38) NOT NULL VARCHAR2(6)

Ventas
Nombre -------------------------------------PESO_NOM PESO_MIN PESO_MAX ?Nulo? Tipo -------- -------------------------NOT NULL VARCHAR2(9) NOT NULL NUMBER(38) NOT NULL NUMBER(38)

Pesos

Bibliografa

[Abbe02]

Abbey, M.; Corey, M. & Abramson, I.

Oracle9i. Gua de aprendizaje


Osborne McGraw-Hill, 2002. [Abra06] Abramson, I.; Abbey, M. & Corey, M.

Oracle Database 10g. Gua de aprendizaje


Osborne McGraw-Hill, 2006. [Conn05] Connolly, T. & Begg, C.

Sistemas de Bases de Datos


Pearson Addison-Wesley, 4 [Elma07]

edicin, 2005.

Elmasri, R. & Navathe, S.B.

Fundamentos de sistemas de Bases de Datos


Addison-Wesley, 5 [Garc96]

edicin, 2007.

Garv Garca, E.; Rodrguez Almendros, M. L.; Velasco Anguita, F.

Uso de Oracle: SQL y PL/SQL


Proyecto Sur de Ediciones, S.L., 1996. [Koch94] Koch, G.

Oracle. Manual de referencia


McGraw-Hill/Interamericana de Espaa, S.A., 1994. [Lone02] Loney, K. & Theriault, M.

Oracle9i. Manual del administrador


Osborne McGraw-Hill, 2006.

126

Bibliografa

[Lone06]

Loney, K. & Bryla, B.

Oracle Database 10g. Manual del administrador


Osborne McGraw-Hill, 2006. [Mare92] Mare, C.; Ledant, G.

SQL Iniciacin, programacin y prcticas avanzadas


Masson, S.A., 1992. [Orac92]

Manuales de Oracle
Oracle Corporation, 1992. Prez, C.

[Pere02]

Oracle9i. Administracin y Anlisis de Bases de Datos


Ra-Ma, 2002. [Silb06] Silberschatz, A.; Korth, H. & Sudarshan, S.

Fundamentos de Bases de Datos


McGraw-Hill, 5 [Smin93] Smine, H.

edicin, 2006.

ORACLE. Arquitectura, administracin y optimizacin


Daz de Santos, 1993.

Referencias electronicas
http://www.oracle.com http://juno.uca.es/index.htm http://ora.u440.com