Está en la página 1de 144

ESCUELA SUPERIOR DE INGENIERÍA DE CÁDIZ INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN

PRÁCTICAS DE BDI
Curso 201112

Prof. Dra. M

a

Esther Gadeschi Díaz

Dpto. Lengua jes y Sistemas Informáticos Universidad de Cádiz

´ndice general I
1 SGBD Oracle
1. El lenguaje SQL
1.1. 1.2. 1.3. 1.4. 1.5. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Evolución histórica del lenguaje

1
3
3 4 5 7 8 8 10 11

SQL

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

SQL en los SGBDR

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

SQL en los sistemas no relacionales
Principios básicos 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 características generales . . . . . . . . . . . . . . . . .

2. SQL*Plus
2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Identicación ante el

15
15 17 19 20 21 23 24 25

SQL*Plus

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

Conexión con otros usuarios Introducción de órdenes Las órdenes de edición

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

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

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

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

. . . . . .7. . . . . . . . . . . . . Resumen . . . . . . . . . . . . .6. .2. . . . . . . . . . . . 2. . 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2. . . . . . . . . .9. . . . . . . . . . . . . . . 2. .1. . . . . . . . . 2. . .6. 3. . .6. Renombrar columnas . . . . . . . . . . .1. . . 3. .10. . . . .3.2. . . . . . Ficheros de órdenes . . . . 3. . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introducción . . . Uso de variables con distintas órdenes . . . . . . . . . . . . . . . . . . . .6. . . . . . . . . . . . Eliminación de registros repetidos . .13. . . . . . . . . . . . . . La orden 3. . .5.2. Inserción parcial de columnas en un registro . . . . . . . . . . . . insert . . . . . . . . . . . . . 2 Lenguaje de Manipulación de Datos 3. . . . . . . . . . . . . . . . . . . . . . . . . . . 2. . 2. . .11. . . . . . . . . . . . . La orden 3. . . . . . . . . .11. 3. . . . . . . . . . . . . . . .2. . . . . . . . . . . . . Uso de operadores con variables . . . . . 3. . . . . . . . . . . . . . Formateado de consultas . . . Resumen de órdenes de SQL*Plus . . .11. Entrada y salida de datos 2. . . . . . . . . . . . . . . . .2. . . . .9. . . .II ´ndice general I 2. . . . 3. .1. . . . . . . . . . . . . . .12. . . .1. . . . . . . . . . . . . . . 43 45 45 46 46 47 54 54 55 56 57 57 58 58 59 60 61 select . . . . . . . . Cláusula set . . . Inserción de todas las columnas de un registro . . . . . . . . . . . . . . . Proyección de una tabla Selección de las de una tabla . . . . . . 3. . . . . 3. . . . . . . . . . . . . . . . . . . . . Cabeceras y pies de páginas . . . . . . . Insertar datos desde otra tabla . update . . Clasicación de las 3. 27 27 29 30 32 32 35 36 38 41 Formateado de columnas .7. . Variables del sistema 2. 3. . . . . . . . . . .9. . . . 2. . . . . . . . . . . . . . . .1. . . . . . . . . .3. . . . . . . . . . . . . . . . . . . . .2. . . . . . . Resumen . . La orden 3. . . .4. . . . . . . . . . . . . Denición de variables 2.3. . . . . . . . . . . . . . . . . . .5. .1. . . . . . . Manipulación de datos 3. . . . . . . . . . . . . . . . . . . . . . . .11. . . . . . . . . .6. . . . . . . . . . . . .4.

. . . . . . . . . . . . . . . . . . . . . . .7. .3. . . . . . 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. . . . . . . . . . . . 5. . . . Devolución de múltiples las . . . . . 5. . . . . . . . . . . . . . . .7. .1. . . . . . . . . . . . . . . . . . . .4. . .4. 4. . . . . . . . . . . Funciones numéricas Funciones de caracteres . . . . . . . . . . 3. . . . . . . . . . . . . . . .5. Funciones de grupo . . . . . . . . . . . . Funciones de conversión . . . . . . . . . .9. 4. . . . . . . . . . . . . . . . . . . La cláusula group by . . . . . . . . . . . . Otras funciones . . . . Los operadores any y all .5. . . .4. . . . . . 4. . . 4. .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. . . . . La cláusula . . . . . .1. 4. . . . . . Expresiones La tabla . . . . . . . 4. 5. . . Los valores null y la función nvl . . . . . . . . . .2. . . Operadores 5. .3. . . . . . . . . . . .7. . . . . . . . . . . . . . . . . . . . . Diferencias entre drop. . . . . . . . . . . . . 5. . . . . . . . . . . . . . . . .4. . . . . 79 79 80 80 82 83 83 84 84 86 Combinación con operadores lógicos . . . . . . . . . . . . . . . . . . . . . 4. 5. . . . . . . . . . . . . . . 3. . .2. Devolución de un solo valor . . . . . .4. . . . . . . . . . . Consultas por grupos . . . . . .5. . . . . .´ndice general I III 3. . . . .8. . . . . . . . .6. . . . . . . . . . . . delete y truncate . . . . 4. Resumen . . . .6. . . . . . . . . . . . . . . . . . . . . . . . . . . 65 65 65 66 67 67 68 68 69 70 71 71 71 73 73 dual Funciones 4. . . . .7. . Subconsultas correlacionadas . . . . Introducción . . . . . . . . having . . . . . . . . . . 5. . . . . . . . . . . 4. . . . . . .5. . . . . .4.3. .1. . . . . . . . . . . .2. .2. . . Funciones y expresiones 4. . . . . 4. . . . . . . 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Devolución de múltiples columnas . . . .4. . . Consultas anidadas 5. . . . . 4. . .1. Resumen . . . . . . . . . . . . . . .2. . . . . . . . . . . . . .5. . . . . . . . . . . . .4. . . . . . . . . Introducción . . . . .5. . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . .3. . . . . . . . . 61 62 63 La orden delete . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . .2. . . . . . . . . . . . 110 . . . .2. . . . . . 7. . . . . . . . . . .3. . . . . . . . . . . . .4. . . . . . . . .1. . . . . . . . . . . . . . . . . . 6. . . . .4. Resumen . . 6. . . . . . . . . . Aritmética de fechas La función 107 . . . 7. . . . . . . . . . . . .3. . . . . . . . . . . .1. . . . . . . . . . . 6. . . . . . . . . . . . . . . . Consejos prácticos para escribir una consulta . . . . . . . 101 Ecacia . . . . . . . . Uniones no comunes . . . . . . . . . . . . . . . .4. . . .3. . . . . . . .3. . . . .4. . . . . . . . . . . . . . . . . . 6. . . . . . . . . Tratamiento de fechas 7. . . . . . . . . 6. . . .1. . . 6. . . . . . . . . . . . . . . . . .1. . . . . . . . .1. . . .3. . . . .7. . . . 101 . . . 101 Introducción .4. . . . .1. . . . .1. 6. . 100 Optimización de las consultas 6. . . . . 7. .2. . . . . . .2. .2. . . . . . . Introducción . . . . . . .1. . . . . . . . . . . . . . . 86 87 Consulta anidada en una cláusula having . . . . .4. Búsquedas multitablas 6. . . . Consultas a múltiples tablas 6. . . . . . . . . . . . . . . . . . . . . . . 6. . . . . . . . . . . . . . . . . .5. . . . . . . . . . . . . . 107 . . . . .5. . 6. . . . . . . . . . . . . . . . . . . . . . . . . .4. . . . . . . . . . . Operadores conjuntistas 6. . . . . 6. . . .1. . . . . . . . . . . . . . . . . . 5. . .2. . . . .1. . . . . . . .4. . . Producto natural . . .7. . . . . . .6. . . . . . . . . . . . . . . . 6.4. . . . . . . . . . . . . . . . . . . 109 sysdate Funciones de fecha Formatos y conversión de fechas . . . . . . . . . . . . . . . . . . 6. . . . . . . . . . . . . . . 6. . . . Unión externa . . . . . 6. .2. . . . 102 Unión entre tablas o consulta anidada Empleo del cuanticador existencial . . Autouniones . . . . . . . . . . . . . union minus intersect . . 6. . . . . . . . . . . . . . . . . . .1. . . . . . . . 6. . .2. . 108 .1. . . .IV ´ndice general I 5. . . . . . .8. 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . El operador El operador El operador . . . . .1. .8. . . . . . . . . 102 Solución al ejercicio propuesto . . . . . 89 89 89 89 90 92 93 94 95 96 96 97 98 99 Resumen . . . . . . . . . . Producto cartesiano . 103 7. . . . . . .3. . . . El operador exists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Descripción de las tablas Bibliografía Referencias electrónicas 115 117 119 123 125 127 . Tablas C.´ndice general I V APÉNDICES A. Denición de las tablas B.

.

. . . .´ndice de figuras I 1. . . . . . . . . . . .1. . . . . . . . . . . . . . . Operadores . . . . 9 . . .

.

2. . . . . . . . . . . . . . . . . 45 4. . . . . . . . . . 4. . . . .4. . . . . . . .5. . . . . . . . . . . . . . . . . . . Órdenes de edición . . . . . . . . . . . . . . . . . . . . . . . . . . . Funciones de grupo . . . . . . . . . . . .7. . . . . . . . . 2. . . .8. . 3. . . . . . . . . . . . . . . . Funciones numéricas . . . . . . . . . . . . . . . . . . . . . 2. .3. . . . . . . . . . . . .6. . . .1. . . . . . . . . . . . . Órdenes de comentarios Información de la orden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .´ndice de tablas I 1. . . . 75 76 76 77 77 78 Funciones carácter que devuelven carácter Funciones carácter que devuelven un número . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2. . . . . . . Resumen cronológico Órdenes del lenguaje . . . . . . . . . . . . . . .10. . . . . . . . . . . . Funciones de conversión de tipos de datos Otras funciones . . . . . . . . . . . . . . ttitle . . y Especicaciones para las órdenes Variables para las órdenes Opciones para la orden Opciones para la orden Variables del sistema btitle y ttitle . . .5. . . . . . . . . . . . . . . . . . . . . . 4. . . . . 2. . . . . . . . . . . 2. . . . . . . . . . . . . .1. . . .3. . . . . . .2. . 2. .1. 2.6. . . . 2. . . . . . 1. . . . column format . . . . . . . . describe btitle . . . Valor de variables . . . . . . 4. . . . 2. . .9. .2. . . Órdenes del Lenguaje de Manipulación de Datos . . . . . . . . . . . . 4. . . . . . . . . . . 2. . . . . 4. . . . . . . . . . . . . . .1. . 6 12 SQL . . . 21 23 25 26 28 28 30 30 33 34 Órdenes de cheros .

. . . . . . . . . Operaciones con fechas . . . . . .X ´ndice de tablas I 7. . . . . . . . . . . . . . . . . . . . . . . . . 7. .3. . . . . . 109 . .1. . . . . . .2. 113 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Funciones de fecha Formatos de fechas . . . . 7.

.20. . . . . . . . . . . . . . . . . . . . . . 2. . . . . . . . . . . . . . . .13. . . . . . . . . . .4. . . . . . . . 2.16. . . . 2. . . . . . . . . Borrar línea y cambiar texto . . 2. . . . . . . . . . . . . . . . . . . 2. .1. .9. . . .5. . . . . . . . . . . . . . . . . . . . . Conexión con usuario .17. . . . . Denición de editor . . . . . . . . . . . . . . . . . . . .11. . . . . . . . . . . . . . . . buer y guardar la ejecución en un chero . . . .6. Identicación ante el producto . Formateo de columnas . . . . . . . . . . Conexión con usuario . . . . . . . . 2. . . . . . . . 2. . . . . . . . . . . . .8. . . . . Salida del producto . . . . . . . . . . . . . . . . .19. . . Conexión con usuario . . . . . . . . . . . . . . . . 2. . . . . .12. . . . .18. . . . . . . . . Identicación ante el producto . . . . . 2. . . . . . . . . . . . . 2. . . . . . . . . . . . . . . . .3. . . . . . . Manera de mostrar un error 2. . . . . . .7. . . .15. . . . . . . . . . . . . . . . . . . . . . . . . . . . . Añadir una línea a la orden del buer . . . . . . . . . . . 2. . . . . 18 18 18 18 19 20 20 20 22 22 22 23 24 25 25 25 26 27 29 31 buer . . . . . . . . . . . . . . . . . . . . . . .´ndice de ejemplos I 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Salvar el . . . . . . . . 2.14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2. . . . Título y pie de página 2. . . . . . . . . . . . . . . . . . . . . . . . . . 2. . . . Edición de chero .10. . . . . . . . . 2. . . . . . . . Desconexión con usuario Mostrar el contenido del . . . . . . 2. . Ayuda de una orden 2. . . . . . . Identicación ante el producto . . . . Descripción de un objeto . . . . . . . Edición del buer . . . . 2. .

. . . . .) . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. . . . .32. . . Asignar valor a variable . . . . . 3. .5. . . . Fichero de órdenes: SQL*Plus . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. . . . Mostrar todos los colores de los artículos Mostrar todos los colores de los artículos . . .8. . . . . . . .2. . . .11. . . . . 3. . . . . Visualizar el valor de variable 2. . . . . . . . . .33. . . . . Valores de variables . . 4. . . . . . . . . . Los proveedores cuyo número esté entre 2 y 5 . . . . . . . . Uso de variables con & . . . . . . . . .2. . . . . . . .21. . . . . . . . . . . . . . . . . . . . . . Uso del operador & con órdenes de 2. . .28. . . . . . . . . . .6. . 2. . . . . . . . . . . .22. . . . . . . . 3. . . . . . . 4. . . . .30. 2. . . . . . . . . . . . Actualización del peso de un artículo . . . .27. . . . . . . . . . . . . . . . . . . . . . . . 3. . . . . . . . . . . 2.31. . . Contenido del chero nombre_chero . . .23. . 3. . . . . . . . . . Redenición de operador . . . . . . .25. . . . . . . . . . . . . . . . .9. . . . . . . . . 3. . 3. . . . . SQL*Plus . . . . . . . . . Uso de variables con & (cont. . . . . . . . . . . . . . . 3. Uso de variables con & y && 2. . . . Eliminar valor de variable . . . . . 2. . . .29. . . . . 2. . . . . . . . . . . . .3. Proyección de todos los datos de los proveedores . . .1. . . . . . 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. . . . . . . . . . . . . . . . .13. . . . . . . . . . . . . . .12. . . . Benecio de los artículos . . Lista de todas las órdenes del 3. .3. . . . . . . . . . . . . . . 4. . . . 3. . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . 2. . . . . . . . . . . . . . . . Datos de las tiendas que no están en las ciudades indicadas . . 2. . Eliminación de algunas tuplas de la tabla art_2 . . . . . . . . . . . .XII ´ndice de ejemplos I 2. . . . . . . . . Descripción de la tabla Raíz cuadrada de 27 dual . . . . . . .10. . Datos de los artículos que no tienen denido el color . . . Datos de los gerentes de las tiendas de Madrid . . . Establecer variables . . . . . . 3. . .sql . . . . . . . . . . . . . . . Proyección de datos de los proveedores . . .24. . . . . . . . . . . . . . . . Datos de los artículos ordenados ascendente por su precio de compra 3. . login. . . . . . . . . . . . . . .7. . . . . Inserción de tuplas en una tabla . . . . . . . . . .26. . . . . . . . . . . . . . . . .4. . . . . . . . . . . . Artículos que pesan más de 100g ó el número de su proveedor es igual a 5 . . . . . . . . . .

. . . . . . . . . Articulos que tengan el mismo color y el mismo peso que el n o 10 . . . . .4. . . . . o o 15 o el peso igual al n o 3 . . . . . Producto natural . .11. .6. . . . 6. . . . . . . . . . . . . . . .5. . . . . . 4. . 88 91 92 93 94 95 6. .3. . . . . . . . . . . . . . . . 68 69 70 70 72 72 73 74 74 75 81 81 82 83 Inicial de los nombres de clientes en mayúscula . . . . . .9. forma 2 .13. . .1. Precio máximo de los artículos por color . 5. . . . . . . .8. . . . . . . . . Autouniones . . . 4. contando a los indenidos 4. . Peso medio de los artículos. . 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 o 3. .10. 6. . Los números de todos los artículos que no se han vendido . . . . . . . . . . . . . . Datos de los artículos que tienen el mismo color de los que pesan más de 10g 85 Artículos que pesen más que cualquiera de los de color blanco . . . . . . . . . . . Datos de los artículos y sus proveedores cuyos n Datos de artículos cuyos n o son menores que 4 . . . . o es mayor que 4 que se han vendido o no . . . . . .1. . 5. . . . . . 100 . . . . . Los números de todos los artículos que se han vendido . . . . . . . 5. . . . . . . 6. . . . . . .7. . . . . . . . . . .8. 3 elevado al cubo . . . . . 5. . . . . . . . . . . . .7. . . . . . . . . . . . . . . . . . . ¾Qué proveedor tiene el nombre más largo? . . . . . . . . . . . Peso medio de los artículos. . . . . . . . . 5. . . . . . . . 15 o un peso superior al del n o 3 . . . . . . 4. . .2.3. . . . . . . según su 96 98 99 . . 6. . . . . 5. . . . 4. . . . . 4. . . . 5. . . . .4. . . . . . Precio máximo de los artículos por color. . . . . . . . Clasicar los artículos cuyos n peso o estén comprendidos entre 2 y 10. . . . . . . . Los números de todos los artículos que se han vendido o no . . . 4.4. . . .7. . . . . . .9. .5. . . . . . . . 6. . . . . . . . .10. . .8. . . .´ndice de ejemplos I XIII 4. . . . . . . . . . . . . . . . . . . . . . . . 103 6. .6. . . . . . . . . . . . . . . . . . . ¾Qué color lo llevan más de dos artículos? . 6. . . 4. . . . . . .6. . . incluido los nulos . 6. 4. . . . .12. . . . . 5. . . . . . . . . . . . . . Mostrar todos los colores de los artículos. . . . . . . . . . . . . . . . . . . Producto cartesiano entre proveedores y pesos Datos de los artículos y del proveedor que lo suministra . . . . . forma1 . . . . . . . . 86 Si tenemos un proveedor que se llame sanjita muestra todos los proveedores 88 Colores de los artículos cuya media de pesos es superior a la media de todos los artículos . .2. . . . . . ¾Quién soy? . . . 6.5. . .

. . . . . . . . . . . . . . . . . . . . . . 104 6. 7.1. .3. 7. . . . . . . . .13. . . . . . . . Consulta correlacionada 6. . . . . . . . . . . . . . . . . . . . . . .11. . . . . . . . . . . .XIV ´ndice de ejemplos I 6. . Consulta de existencia 7. . . . . . . . . . . . . . . . . . . . . . . . . . 109 Los clientes y las fechas de compras . . . . . . . . . 105 Fecha actual . Consulta anidada . . . . . 104 . . . . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . . . .12. . . . . . . . . . . . . 111 . . . . . . . . . . . . . . . . 111 Fecha y hora . . . . . .

Parte 1 SGBD Oracle .

.

Como lenguaje de datos que es. Por los programadores. El SQL se puede usar: Por los usuarios no habituales (no-programadores).1. Manipular datos. 1. Consultar datos. etc. analistas. nos permite: Denir datos.. Controlar el acceso a los datos. Introducción SQL es un lenguaje de cuarta generación. no procedimental ya que le El lenguaje decimos lo que queremos y el sistema se encarga de plantear el mejor modo de obtenerlo.Cap´ ıtulo 1 El lenguaje SQL Se muestran las características fundamentales de este lenguaje. la estructura general y las ventajas que presenta. como son: los principios básicos. . o en segundo plano. o De forma interactiva.

de momento incompatibles entre sí. inspirándose en el System/R. sino que podrían ser la base de un producto comercial útil. especialmente. . por razones legales. El artículo del Dr. versiones ocial. ya se aprovechaba del SQL en 1979. Query Language. lenguaje estructurado de consultas. Uno de estos lenguajes fue denominado SEQUEL1 . IBM. bloques de cualicación correlativos. La norma ANSI de 1986 (SQL-86 ). por ello. un derivado del ALPHA. pro- 19801989: IBM se implantó por n en productos comerciales en el año 1981 con el SQL/DS y. el proyecto System/R incluía trabajos sobre lenguajes de consulta de bases de datos.4 El lenguaje SQL 1. El objetivo del proyecto llamado System/R. 19771979: La implementación 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. Estas primeras instalaciones Ingre. otro ejemplo fue el Oracle. que cubre dos primeros niveles de normalización.2. lenguaje estructurado de consulta inglés. fue enri- queciendose con funciones predicativas (cláusula existencial. antes que ductos relacionales. Un ejemplo de éstos fue el lenguaje predicativo IBM System/R fue distribuida a una serie de instalaciones para evaluación en 1978 y 1979. En la tabla 1. del concepto relacional y proporcionar alguna experiencia en la implementación efectiva SGBD 19741975: La primera fase del proyecto System/R produjo un mínimo prototipo de un SGBD relacional. ). Este mismo año. lanzado por RTI en 1976 con QUEL. Además del propio SGBD. que había sido renombrado como SQL . . La nueva implementación soportaba consultas multitabla y permitía que varios usuarios compartieran el acceso a los datos. e IBM concluyó que las bases de datos relacionales no solamente eran factibles. En 1979 el proyecto de investigación System/R llegó al nal. producto que. la pronunciación SEQUEL permaneció y continua hoy día. A pesar del cambio de nombre.1 podemos ver un resumen de la evolución de las bases de datos relacionales. el grupo X3H2 del ANSI propuso el SQL como un estándar Esta tecnología desarrollada por SQL. en el año 1982 con el DB2. incluyendo un importante proyecto de investigación IBM. construido en un principio como un lenguaje algebraico. Este período fue aprovechado por varias rmas para proponer. raticando en 1986. Codd desencadenó una racha de investi- gaciones en base de datos relacionales. . . cuando ya existían por todo el mundo varias decenas de es el resultado de presiones por parte de los fabricantes y. 19761977: El prototipo de investigación System/R fue reescrito desde el principio. dentro de de un E. El lenguaje SQL. fue demostrar la operabilidad relacional. Evolución histórica del lenguaje SQL SQL está íntimamente relacionada con el desarrollo de las La historia del lenguajes bases de datos relacionales. sólo puede ser 1 Acrónimo 2 Structured de Structured English QUEry Language.

1. Los SGBDR 3 disponen no sólo de un lenguaje de consultas poderoso y conciso. hasta que en 1999. 19901999: En 1992 se ratica el estándar ANSI denominado SQL-92 que ha sido am- pliamente implementado y que fue una revisión importante del estándar que realmente el SQL-89. a menudo. el cual y estandarizó los generadores de secuneicas o valores autogenerados. software. Los analistas esperan con impaciencia las ampliaciones anunciadas de la norma y.1. llamado de cuarta generación. especialmente.3 SQL en los SGBDR 5 considerado como un pobre conjunto de principios que sólo imperfectamente representa el modelo relacional. permitiendo la escritura rápida de complejas aplicaciones. . de Gestión de Ficheros. su generalización para los productos comercializados. se produjo el siguiente estándar importante del SQL. 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. ANSI se toma como punto de referencia por aunque el mismo DB2 en el que se inspira la norma se aleja bastante de ésta. 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 clásico de COBOL o C Este con SGF 4 . El se convirtió en un estándar legal establecido por En 1989 se publicó una norma extendida para características de ANSI. sino también de un conjunto integrado de herramientas ecaces que explotan en toda su extensión dicho lenguaje. SQL denominada SQL-89 SQL-86 y actual- mente los sistemas de bases de datos son normalmente compatibles al menos con las SQL-89. son mucho más complejos. El nivel 2 de la norma los fabricantes de SGBDR. el programador puede soli- de Gestión de Bases de Datos Relacionales. los productos comerciales por lo general se alejan más o menos de la norma y. Durante siete años se lanzaron varios estándares que atacaban aspectos especícos del SQL.3. A partir de este estándar se sabía que existían muchos aspectos por resolver para SQL pudiera ofrecer las capacidades de bases de datos requeridas y para satisfacer las necesidades de los usuarios. SQL en los SGBDR Todos los informáticos están de acuerdo en armar que la generación de las bases de datos relacionales ha modicado considerablemente los hábitos de los programadores. En cualquier momento de la gestión de una pantalla. De igual modo. En el año 2003 salió un nuevo estándar del introdujo la noción de 2003 : XML SQL llamado SQL:2003. esto incluye comumnas que se utilizan como identicadores. el SQL-99 o SQL3.

conservando la riqueza de los lenguajes de la tercera. el lenguaje SQL se utiliza siempre que deba expresarse una . Un generador de estados de la base de datos que se imprimen en papel o se visualizan en el monitor. como visualizar ciertos datos de otra tabla. o tratamientos más complejos que impliquen el empleo de C o COBOL. Un estado de la base se obtiene ejecutando una consulta SQL asociada a una descripción precisa del formato de salida.1: Resumen cronológico citar la ejecución automática de una consulta SQL que tanto puede realizar una actualización.6 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 artículo 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 estándares SQL IBM anuncia DB2 Se ratica el estándar ANSI SQL Sybase introduce SGBDR para procesamiento de transacciones Se ratica el estándar ISO SQL Ashton-Tate y Microsoft anuncian SQL Server para OS/2 IBM anuncia la versión 2 de DB2 Primera entrega de servidores de bases de datos SQL para OS/2 Se ratica el estándar ANSI SQL2 Se ratica el estándar SQL3 Nuevo estándar llamado SQL:2003 Tabla 1. por ejemplo). Un generador de aplicaciones que utiliza las pantallas y los estados precedentes y que permite la denición de menús jerarquizados así como la ejecución de tratamientos diversos de los datos. Estos tratamientos pueden ser simples tareas de manipulación de datos escritos en los procedimientos de un lenguaje de tercera generación ( SQL. Un generador de esquemas conceptuales. propuestos por algunos programas. Un módulo de programas de utilidades que facilitan principalmente el acceso a los datos o a aplicaciones distantes en un entorno de bases de datos distribuidas. que permiten la descripción interactiva completa de la estructura de los datos (entidades. En todos los niveles. atributos. enlaces. condiciones) a utilizar por los restantes módulos. se aprovecha plenamente la potencia de las herramientas de cuarta generación. De este modo.

las grandes bases de datos de tipo red o jerárquica como IDMS/R de CULLINET DATACOM/DB de CCA proponen interfases SQL que permiten la compatibilidad con el DB2 de IBM. Traductor externo/conceptual. una manipulación o un control de datos. la conectividad de los sistemas es. Conexión con el sistema operativo y el equipo físico. Hoy en día es obligado para todos los De aquí que el INGRES*STAR.4 SQL en los sistemas no relacionales 7 denición. por ejemplo. tanto en sus La razón de este hecho es doble. DBASE o COBOL puede utilizarlo al cabo de pocas horas. SQL Server. un programador de SGBD que no presente las facilidades de una lenguaje de acceso de cuarta generación. Optimizador de las consultas. tal extensión ofrece apreciables servicios para la mayoría de las aplicaciones que emplean las funciones fundamentales del lenguaje SQL. el nexo imprescindible entre los diversos componentes del SQL es. por lo que estas emulaciones sólo funcionan a medias. El lenguaje central. que puedan comunicarse entre sí mediante el lenguaje normalizado del servidor. SGF como en el resto de los SGBD software han no relacionales. SQL*STAR partida. Y es que el SQL después de un aprendizaje muy rápido. Estamos ante una proliferación de servidores de o bases de datos. Ya hemos señalado que estos sistemas no relacionales carecen de un núcleo SQL. No obstante. un elemento fundamental de la organización de la información. Por otra parte.4. de particiones de aplicaciones y de medios de comunicación transparentes. cada vez está resultando comercialmente más difícil vender un usuario llega a pensar en lógica.1. Con un poco de C. . Gestión de los cheros e índices. el SQLBASE. que pretenden imponerse en un mercado vertiginoso. que permiten la elaboración de una informática realmente compartida en un entorno heterogéneo. 1. Los usuarios y los analistas han de disponer de tratamientos distribuidos. un elemento SGDBR. pues. descabalgando la SGF y SGBD. Por ejemplo. el o competencia ajena. incompatibles de SQL se está imponiendo como un lenguaje universal. SQL en los sistemas no relacionales El SQL se ha hecho tan indispensable que la mayoría de las casas de optado por adoptarlo. Citemos. hoy por hoy. El núcleo comprende los programas que generan el conjunto del sistema: Compilador SQL. Traductor conceptual/interno. Por una parte.

5 En inglés llamado join. Diferencia La diferencia de conjuntos es una operación 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. diferencia y producto.2.5.5.1. 1. Principios básicos del lenguaje SQL 1. A este n se dispone de la asignación relacional. elimina las repeticiones de las que resulten de este recorte. SQL expondremos brevemente los princiSQL aprovecha la sencillez del lenguaje algebraico. Unión La operación unión de conjuntos permite agrupar las las. a saber: proyección. Principios Todos los operadores algebraicos se aplican a la totalidad de las las de las relaciones.1. El resultado de una operación (consulta) es una nueva relación. unión. la tabla resultante tendrá M*N las. cierre.1. Equivale a Proyección recortar verticalmente la tabla. selección. Selección Esta operación realiza un corte horizontal de la relación para retener sólo las las que cumplen una determinada condición respecto a los valores de una columna o conjunto de columnas. si la primera tabla tiene M N. mediante una formulación muy 1. Operadores primitivos propios Este operador permite elegir sólo las columnas que interesan.1). obtenidas mediante selección sobre varias tablas efectuando un o lógico.8 El lenguaje SQL 1. susceptible de ser empleada a su vez en una nueva operación. Esto es lo que se conoce como el resultado de una operación. intersección y división (ver gura 1. Veremos cómo el cercana al lenguaje natural. Esto signica que. cobrando por una parte concisión y por otra claridad. por su importancia práctica. 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. otros tres: producto natural o unión . El enfoque conjuntista y el lenguaje algebraico Para comprender bien la losofía del lenguaje pios en que se basa. que permite afectar a una relación propiedad de Codd ha enumerado una veintena de operadores que se derivan de cinco primitivos. .5. Además de ello. A estos cinco operadores bási5 cos deben agregarse.1.5.

5 Principios basicos del lenguaje SQL 9 Selección Proyección 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 Intersección a b c x y a a b b c c x y x y x y Unión 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 División 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 a Figura 1. selección se multi-tablas: el producto 1.´ 1. Para ello el operador denomina clave foránea a un atributo. que permite establecer implícitamente un enlace entre dos tablas. De aquí se deduce el importante papel que desempeña una clave foránea . pero combinado con una obtiene un operador particularmente útil en las consultas natural. Una clave foránea debe tener todos los valores de sus atributos nulos o ninguno de ellos. 6 Se . El producto natural sólo es posible realizarlo cuando dos tablas tienen producto natural junta las dos tablas concatenando las las 6 cuyo valor de columna es idéntico en ambas.5. tal vez compuesto. Operadores primitivos derivados El Producto natural un dominio común.1: Operadores El producto presenta de por sí poco interés.3.1. de una relación R2 cuyos valores deben concordar con los de la clave primaria de alguna relación R1 (donde R1 y R2 no necesariamente son distintos).

Esta operación permite crear una tabla a partir de las comunes de dos de tablas.2. El SQL permite obtener este tipo de formulaciones.5. es fundamental. se debe escribir delante el nombre de la tabla a la que pertenece seguido de un punto. poco procedimental.5. aunque el tipo de comparación que más se utiliza es el Intersección La intersección de dos tablas no es un operador primitivo básico. Tenemos que tener en cuenta. dado que puede reunir datos dispersos pero liga- dos entre sí. y suele ir acompañada de where algebraica sobre las tablas especicadas la cláusula distinct7 a n de evitar las repeticiones de las.10 El lenguaje SQL producto natural de igualdad. por esencia. 7 Ver capítulo 3.1. que en caso de existir ambigüedad en el nombre de una columna. La cláusula permite expresar todas las condiciones de selección (horizontales) relativas a las tablas y estas condiciones expresan el modo de enlace entre las tablas. El ideal está en expresar globalmente la consulta precedente entrelazando los operadores primitivos y sin recurrir a tablas intermedias. . División La operación de división permite expresar de forma sencilla el cuanticador universal para todo elemento que. Combinación de operadores primitivos Se pueden realizar operaciones combinando operadores primitivos propios con operadores primitivos derivados para realizar consultas más complejas.4. La condición de concatenación contiene un operador comparativo que puede ser de cualquier clase. SQL está compuesta de varias cláusulas: La forma general de una consulta Formato: selecciona las columnas deseadas lista de tablas que intervienen en la consulta criterio de selección de filas formación de grupos por columna(s) con valores indénticos [HAVING] criterio de selección de grupos [ORDER BY] ordenación de tuplas en la consulata La cláusula en la cláusula SELECT FROM [WHERE] [GROUP BY] select realiza una proyección from. 1. además. 1. pero puede obtenerse fácilmente mediante dos diferencias. Forma general de una consulta SQL La forma de una consulta SQL es.

debemos advertir que la sintaxis del lenguaje no es siempre tan transparente. columnas índices.. la creación del esquema conceptual.). una vez sentado el principio general. La tabla 1. lenguaje de manipulación de datos. por convenio explícito. el SQL permite expresar. Estructura y características generales 1.3. El intérprete o el compilador traducirá automáticamente la consulta. el que un lenguaje de usuario. o sea.5 Principios basicos del lenguaje SQL 11 Formato: nombre_tabla. Por éstas. lenguaje de denición de datos. vistas. con claridad y precisión.5. Las consultas que necesitan una lógica más compleja se construyen a su vez con una formulación menos inmediata. órdenes de DML . 11 En esta tabla se muestran solamente algunas de las órdenes del SQL embebido. incluidas las condiciones de enlace. Con él denimos todas las estructuras necesarias para manipulación de dicha base de datos. De este modo.´ 1. lenguaje de control de datos. 9 Data 8 Data . un gran número de operadores del álgebra relacional. DML permite el manejo de las tablas y de las vistas mediante las correspondientes Denition Language.3. órdenes de control de transacciones. un limitado número de órdenes 8 o palabras claves.1. órdenes de control de 11 sesiones y órdenes de SQL embebido. SQL es más un lenguaje de programación 1. Pero.2 muestra un resumen de estas órdenes . 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). Estructura SQL sólo contiene. 10 Data Manipulation Language. En la práctica.. Además de que las versiones actuales del lenguaje presentan innumerables trampas capaces de desanimar a más de un principiante. en forma de secuencia óptima de consulta algebraica. y otras razones que veremos. distribuidos en seis grandes grupos funcionales: órdenes de DDL y 9 10 de DCL . Esta sencillez de escritura se consigue gracias a que el lenguaje exime al programador de explicar el orden en que deben ejecutarse las operaciones. Control Language.nombre_columna Construir una consulta multi-tabla en SQL resulta extemadamente fácil: basta con escribir el nombre de las tablas afectadas tras la cláusula where from y expresar en la cláusula todas las condiciones a cumplir. El lenguaje El DDL permite crear todas las estructuras de la base de datos (tablas.5. el usuario no tiene necesidad de conocer la existencia de índices para efectuar las consultas o clasicaciones.

Las órdenes de control de transacciones manejan los cambios realizados por las órdenes de DML. Garantiza la independencia entre el nivel conceptual y el nivel interno. 12 Es 13 Ver . 1. Características del lenguaje SQL es manejable bajo dos modalidades distintas: El lenguaje En interactivo. El usuario no nota la presencia de un índice o de un agrupamiento 14 .3. crea y controla directamente a la base de datos. Respeta la independencia entre el nivel conceptual y las aplicaciones. un objeto de Oracle que soporta privilegios tanto de objetos como del sistema. Las órdenes del control de sesiones permite a los usuarios controlar las propiedades de su sesión en curso. 14 Estructuras adicionales para la mejora de la búsqueda y recuperación de información. Es un lenguaje cerrado: el resultado de una consulta es una nueva relación. al igual que el lenguaje algebraico del que procede.2: Órdenes del lenguaje SQL cuatro operaciones fundamentales sobre los datos.2. incluyendo la habilitación y deshabilitación de funciones o Las órdenes del precompiladores de role12 . ya que permite la creación y manejo de esquemas externos (o visualizaciones) personalizadas. capítulo 5. consulta. entre otras cosas. reejándolos en la base de datos. Además podemos destacar de este lenguaje lo siguiente: Es ensamblista pues. lo que implica.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. SQL embebido incorpora órdenes de los lenguajes DML.5. más test). Corresponde al SQL embebido. que las consultas pueden ser anidadas 13 . Como un módulo que proporciona un potente lenguaje de consultas interpretadas en un lenguaje huésped como el C o el COBOL. del DDL y órdenes de control en un programa de lenguaje procedural. usando necesariamente los ORACLE. enfoca las relaciones de forma global (cuantos más barridos de tablas. Es asunto del gestor de la base de datos conseguir la optimización de las ejecuciones.

mediante las prioridades requeridas. por el mismo lenguaje SQL. y a una gestión ecaz de las visualizaciones. Cada la a la que se accede para su modicación queda automáticamente bloqueada por el sistema. El diccionario es accesible.´ 1. el SQL contiene el concepto de transacción. En particular.5 Principios basicos del lenguaje SQL 13 Garantiza una seguridad total de los datos. Utiliza constantemente un diccionario dinámico centralizado. gracias a una distribución selectiva de las prioridades de acceso. Permite la gestión multi-usuario de los datos. El cumplimiento de las condiciones de integridad está plenamente garantizado en las versiones actuales del SQL. que permite restaurar el estado anterior de la base en caso de anomalías. . Esto se resuelve con la cláusula with check option.

.

Los corchetes indica que lo que va dentro es opcional.Cap´ ıtulo 2 SQL*Plus Este capítulo nos permite conocer y familiarizarnos con el producto SQL*Plus . entrada/salida de datos. y las órdenes SQL*Plus suministradas por Oracle.1. En especial con las siguientes características: identicación de usuario. Introducción Oracle SQL*Plus 1 El producto de tuido por las órdenes SQL es un intérprete de línea de órdenes. presentación de resultados y control de transacciones. este libro se va a seguir la misma nomenclatura que se sigue en los manuales de Oracle. SQL*Plus suministra al usuario un acceso directo a la base de datos. que constituyen un conjunto adicional al anterior. Esta nomenclatura se va a mantener en todo el texto. en función de los privilegios que se tengan asignados. permitiendo un mejor acceso a la base de datos. Está consti- del estándar ANSI. personalización del entorno de trabajo y realización de informes. introducción de órdenes. Este producto puede ser utilizado por muchos tipos de usuarios. 2. mantener y manipular la base de datos. Las llaves indican que es obligatorio especicar alguna opción. comprobación y manipulación de la base de datos. La barra vertical (|) separa a las distintas opciones. 1 En . Las opciones establecidas por defecto están subrayadas. Los programadores se basan en él para crear. utilización de variables. El administrador del sistema también se basa en él para mantener y hacer un seguimiento de la base de datos. Cualquiera de los dos tipos de órdenes se pueden ejecutar directamente desde el indicador El SQL o en segundo plano. enfocados a la creación.

es la esencia de todas las bases de datos relacionales. Como ya hemos visto. devolviendo un mensaje de estado que indica el éxito o el fracaso de la operación. de entre todas las opciones que se ofrecen para extraer datos de una base de datos extraordinaria herramienta. columnas. dar formato y controlar los datos según las necesidades. reformas de números y textos. en un chero. La alternativa es muy sencilla. cambios y sumas y otros. de hecho. títulos. debiendo el usuario conocer las órdenes y teclearlas para obtener la información 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. Los informes se pueden escribir completamente mientras se trabaja interactivamente con este producto. etc. Si se estuviera obligado a usar introducir todos los mandatos nuevamente. el usuario nal se basa en datos. cuando se abandona el entorno de trabajo. la manera de distinguir entre las 2 Ver Lenguaje de Manipulación de Datos. etc. se puede escribir mandatos que trabajen con cabeceras de páginas. . El producto secuencialmente. Todos las órdenes Oracle. SQL*Plus inmediatamente produce el informe formateado con las especi- caciones dadas. SQL*Plus es una SQL manipulan la base de datos de una u otra forma comportándose select2 se comporta de forma diferente.16 SQL*Plus Por último. Pensamos que. No existen ayudas de ningún tipo: menús. mientras se ejecuta una consulta SQL. sin embargo. Normalmente se usan como descriptor de informes interactivo. proporcionando un control sencillo sobre los títulos. formatos. esto es. La orden la base de datos y devolviendo una copia de la información que se haya solicitado. los informes complejos que se necesitan producir periódicamente y que se quiere que se impriman en lugar de salir por la pantalla. cada vez que se quisiese obtener el mismo informe habría que SQL*Plus puede entonces leer este chero y ejecutar las órdenes SQL*Plus como las consultas en SQL. teclas especiales. que son palabras reservadas. cabeceras de columnas. Simplemente se escriben los mandatos. SQL*Plus para extraer información de la base de SQL constituye la esencia de una base de datos Oracle. El uso más común de SQL*Plus es para consultas simples e impresión de informes. Se pueden crear informes renados y bien formateados. SQL*Plus es la implementación especíca que hace Oracle de SQL con características adicionales que permiten recuperar.. Para responder a preguntas rápidas que probablemente no volverán a repetirse es una buena aproximación. el de introducir en un chero tanto las órdenes de formateo del SQL*Plus solamente de esta forma interactiva. subtotales y totales. Más comunes son. Se pueden formatear los informes de acuerdo con los gustos y necesidades del usuario usando sólo unas pocas órdenes. línea a línea. Desafortunadamente. Cuando utilizamos el último método. éste olvida rápidamente todas las instrucciones que se le han dado. no modicando en nada de una manera similar.

2 Identificacion 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 (. versiones posteriores de asterisco. ver ejemplo 2. el usuario puede modicar alguno de estos parámetros. Actúan directamente sobre el entorno de SQL*Plus. las órdenes de datos. Cuando se ejecuta este producto. vamos a ir viendo cada una de ellas y los pasos a seguir desde el indicador del sistema operativo: 1) Introducir sólo la orden a continuación del indicativo del sistema operativo y esperar a que 2. SQL*Plus nos pregunte el identicativo de usuario y la contraseña. SQL*Plus no se almacenan en un área temporal. SQL*Plus SQL afectan a la base afectan al entorno de trabajo del uso de las órdenes 2. ver ejemplo 2. 3 En Oracle existen productos que ya no cumplen esta norma del uso del .1. se selecciona un entorno determinado a través de una lista de parámetros de entorno que queda rellenado con unos valores por defecto.2. el cual permanecerá hasta que sufra una modicación posterior o hasta que abandone el entorno de trabajo. Identicación ante el SQL*Plus SQL* seguido de un nombre de producto indica que dicho producto es una El prejo herramienta de desarrollo de aplicaciones .´ 2. en donde cumplen su función. la contraseña no aparecerá en pantalla cuando nos conectamos como en los ejemplos 2.3.4. ver ejemplo 2) Especicar el identicativo de usuario y dejar que sea el por la contraseña. Para salir del producto SQL*Plus y devolver el control al sistema operativo basta con teclear una de las siguientes órdenes exit o quit. Por supuesto.2.) y las de Las órdenes SQL*Plus SQL terminan no. apoyándose en órdenes dentro de un marco especíco.1 y 2.2. Resumiendo. SQL*Plus el que pregunte 3) Especicar en la línea de órdenes el identicativo y contraseña separados por un barra inclinada (/) en la línea de órdenes del sistema operativo cuando se invoca al producto SQL*Plus. A través de las órdenes SQL*Plus. y las órdenes SQL. El el acceso directo a la base de datos a través del uso de órdenes Para conectar con la base de datos hay distintas maneras. ver ejemplo 2. 3 SQL que se ejecutan SQL*Plus permite de SQL y SQL*Plus.

Oracle Corporation. 2002.2.Production JServer Release 9.2.0.18 SQL*Plus Ejemplo 2.1. Enter user-name: nombre_usuario@juno Enter password: SQL> Ejemplo 2. Enter password: SQL> Ejemplo 2.0.3 Identificación ante el producto > sqlplus nombre_usuario@juno/clave SQL*Plus: Release 9.Production > Salida del producto .2.Production JServer Release 9.0 .1 > sqlplus Identificación ante el producto SQL*Plus: Release 9.Production on Wed Apr 14 16:36:12 2004 Copyright (c) 1982. Oracle Corporation.2.0 .0.2.0 .0 . Connected to: Oracle9i Enterprise Edition Release 9.0 .2 > sqlplus nombre_usuario@juno Identificación ante el producto SQL*Plus: Release 9.0 .0.2.Production on Tue Apr 13 16:35:01 2004 Copyright (c) 1982.1.1. 2002. All rights reserved.4 SQL> exit Disconnected from Oracle9i Enterprise Edition Release 9.0.0.1.1.0. 2002.Production on Tue Apr 13 16:28:13 2004 Copyright (c) 1982. All rights reserved.Production SQL> Ejemplo 2.2.1. All rights reserved.1.0 . Oracle Corporation.

ya que tomará por defecto el indicativo de la cuenta del sistema operativo y por contraseña. SQL*Plus nos pida identicativo Ejemplo 2. 2.´ 2. la misma que esté vigente en ese momento en el sistema. Oracle del producto SQL*Plus y si queremos continuar trabajando. La conexión se puede hacer desde dentro del SQL*Plus. Si la conexión no se produce debido a cualquier error. no hace falta introducir el indicativo de usuario ni la contraseña.5 Conexión con usuario SQL> conn nombre_usuario@juno/clave Connected. sólo introducir el identicativo de usuario y esperar que el producto nos pida la clave (ver ejemplo 2. SQL> .3 Conexion con otros usuarios 19 Cuando el DBA ha decidido que el nombre de usuario sea el mismo del sistema opera- tivo. Conexión con otros usuarios Oracle puede conectarse con otro usuario.O. la clave es visible por pantalla (ver ejemplo 2. 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.6). En este caso. sólo tiene que conocer Cualquier usuario de propio producto nos desconecta el identicativo del usuario y su contraseña. SQL*Plus 3) O también. debemos volver a conectarnos.7).3. Estos identicativos de los usuarios son de la siguiente forma: Formato: ops$identificativo_S.5). solamente dando la orden y esperando que de usuario y clave (ver ejemplo 2. 2) O bien.

0.4.7 Conexión con usuario SQL> conn Enter user-name: nombre_usuario@juno Enter password: Connected.6 Conexión con usuario SQL> conn nombre_usuario@juno Introduzca la clave: Connected.Production JServer Release 9. tendremos que conectarnos Ejemplo 2. Introducción de órdenes SQL*Plus SQL reconoce la primera palabra de una sentencia El producto SQL y pregunta por líneas adicionales de instrucciones numerando las líneas.0.2. Si queremos volver al producto. Esto permite la identación para .Production SQL> 2. SQL.8).8 Desconexión con usuario SQL*Plus. no se distingue entre mayúsculas y minúsculas. Para desconectarnos de una cuenta. disconnect (ver ejemplo 2.0 .20 SQL*Plus Ejemplo 2.2. tecleamos la orden SQL> disconnect SQL> Disconnected from Oracle9i Enterprise Edition Release 9. SQL es libre. pudiéndose incluso partir palabras en líneas consecutivas.0 .1.1. Las órdenes se situan en el buer por omisión del SQL. pero sin salirnos del de nuevo a una cuenta de usuario. SQL> Ejemplo 2. Por eso pueden ser editadas y reejecutadas sin tener que introducir nuevamente toda la sentencia El formato de las órdenes permitir una fácil lectura. SQL> La clave no aparecerá en pantalla en los apartados 2 y 3 anteriores.

buer. Lista la línea actual. Las órdenes de edición del producto SQL*Plus se pueden ver en la tabla 2. el SQL*Plus permitirá su modicación y posterior ejecución. Mediante unas órdenes. 2. buer haciendo n que dicha línea pase a Añade una línea con el texto después de la línea actual. r[un] Un punto y coma (. buer. Cambia viejo por nuevo en la línea actual.1: Órdenes de edición Las órdenes de edición afectan: a la línea actual o a la línea siguiente a la actual. Una línea en blanco y después introduciendo en la línea de órdenes SQL. o . buer. El punto y coma no se introduce en el El buer de edición y no puede ser editado.5 Las ordenes de edicion 21 Las órdenes SQL se ejecutan cuando se detecta: SQL. Lista todas las líneas del Lista la línea n del ser la línea actual del editor. se sitúa en un buer. SQL*Plus reconoce la primera palabra de una orden de formateado y no pregunta nada más con líneas adicionales. Añade líneas al buer. Junto a los números de línea aparece un asterisco (*) que indica cuál es la línea actual. en su lugar se establecerá el parámetro especicado. Cuando una sentencia Tenemos que tener en cuenta que en el ejecutada. Borra la línea actual. Lista desde la línea Ejecuta el hasta la actual. Borra todas las líneas del Borra la pantalla. Las órdenes de formateado del SQL*Plus no se sitúan así mismo en el buer de edición.´ ´ 2. Las órdenes de edición SQL se introduce en el entorno SQL*Plus.1. 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 Añade texto al nal de la línea actual. Tabla 2.) al nal de la sentencia Una barra (/) en la línea de órdenes. Borra texto de la línea actual. Lista y ejecuta la orden del buer.5.

11 Borrar línea y cambiar texto SQL> SQL> 1 2* SQL> 2* SQL> del l select * from proveedores c/proveedores/tiendas from tiendas . ver ejemplo 2. Ejemplo 2.9 Mostrar el contenido del buffer SQL> l 1 select * 2* from proveedores SQL> Ejemplo 2. Veamos algunos ejemplos de cómo manejar estas las órdenes: Mostramos el contenido del buer.9. el lugar donde el intérprete ha encontrado el error sintáctico. Añadimos una línea al nal de la línea actual y pasa a ser la nueva línea actual .11.22 SQL*Plus también para indicar. Borrar la línea actual y cambiar el nombre de la tabla . en caso de error. ver ejemplo 2. ver ejemplo 2.10 Añadir una línea 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.10. donde cada línea está numerada y la línea actual además está marcada con un asterisco. ver ejemplo 2.12.

y cuya extensión por defecto será sql. 2) Dicho contenido se salvará en un chero del sistema operativo. El Las órdenes de cheros SQL*Plus también tiene órdenes para manejar cheros. Ver la tabla 2.ext]] Uso Permite. Carga un chero del sistema operativo en el Guarda el buer buer.2. Por defecto la extensión es sql. Tabla 2. Por defecto la extensión es sql. ch-con. Permite. sin salirse del shell.13 donde combinaremos una serie de órdenes de cheros: 1) Listaremos el contenido del buer. sin salirse del SQL*Plus. Asimismo. Invoca al editor por defecto con el contenido del chero o del get chero save chero @chero[. en un chero especicado del sistema opera- tivo. Almacena el resultado de una consulta en un chero del sistema operativo con extensión spool out|off start chero lst. en ambos casos se cierra el chero.2: Órdenes de cheros Veamos el ejemplo 2. . select art_num * ERROR en linea 1: ORA-00904: "ART_NUM": identificador no valido SQL> 2.´ 2.6 Las ordenes de ficheros 23 Ejemplo 2.6. Manda el chero anterior a la impresora por defecto. !orden host edit Orden shell chero [chero[. Ejecuta el contenido del chero. Por defecto la extensión es sql. ejecutar proceso batch.12 Manera de mostrar un error SQL> select art_num 2 from proveedores. Ejecuta el contenido del chero de órdenes especicado. Podemos guardar el contenido del buer en un chero del directorio actual. teniendo por defecto la extensión sql. podemos recuperar un chero del subdirectorio al buer. ejecutar ciertas órdenes del SQL*Plus.ext] spool chero buer. o no.

como editor por defecto y El ejemplo 2.13 Salvar el buffer y guardar la ejecución en un fichero SQL> l 1 select * 2* from proveedores SQL> save fich-con Creado archivo fich-con.14 nos muestra como denirnos el editor que sea el que se invoque cuando tecleamos la orden operativo. 4 Podemos usar cualquier editor. También podemos denirnos nuestro define. Ejemplo 2.lst SQL> 2.7.lst. El editor del Sistema Operativo SQL y/o también ó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 . jed edit.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.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. o bien. Formato: DEF[INE]_EDITOR = nombre_editor donde nombre_editor es el nombre de cualquier editor disponible en el sistema operativo. el que sea en ese momento el editor por defecto del sistema . SQL> spool off SQL> !less resul.

buf). Ayudas describe y Existen dos órdenes que nos ayudan de distinta manera a la hora de manejar una base de datos.8.15 SQL> edit consulta Edición de fichero Ejemplo 2. Tabla 2. 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 línea y sólo es válido para esa línea. Son las órdenes help. del buer y además. simplemente: Cuando tenemos un chero con órdenes línea. buer (afiedt. ver la tabla 2. se edit cualquier chero cuya extensión por defecto sea Si no especicamos nada se editará.3: Órdenes de comentarios 2.buf.16 observamos como se editar el chero contenido del buer afiedt.buf.16 SQL> edit afiedt SQL> edit Edición del buffer o bien. . guardará en un chero denominado Formato: ED[IT] [nombre_fichero|afiedt] En los ejemplos 2.15 y 2.8 Ayudas 25 Ejemplo 2. Se coloca al comienzo del comentario y se cierra al nal del texto.3. o bien el contenido del por defecto. consulta.2. SQL*Plus y sentencias SQL. el contenido afiedt.14 SQL> define_editor = jed SQL> Definición de editor Podemos editar con la orden sql.sql y el Ejemplo 2.

7 La respuesta de Oracle viene dada en inglés.4. indicándonos número de columnas. Formato: HELP [nombre_orden] tablas. Ejemplo 2. El signicado de cada una de ellas se muestra en la tabla 2. o de los sinónimos . Nombre Signicado Nombre Nulo? Tipo Muestra los nombres de las columnas en el mismo orden que se dieron en el momento de la creación de la tabla. Nos dice si las correspondientes columnas pueden contener valores nulos o no. 6 Estamos 5 Las . por tanto toda la información que nos devuelve el sistema viene en forma de tabla.17 Descripción 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 6 que contiene tres columnas. Tabla 2. de las vistas. manejando un SGBD relacional.4: Información de la orden describe help: Esta orden nos muestra información acerca de las órdenes de SQL y/o SQL*Plus 7 especicadas en nombre_orden. Muestra el tipo de dato asignado a las columnas en el momento de su creación.26 SQL*Plus describe: Esta orden nos muestra información de las columnas de las tablas. 5 Formato: DESC[RIBE] nombre_objeto donde nombre_objeto es el nombre del objeto a describir. las vistas y los sinónimos son objetos de la BD que se crean con el lenguaje DDL. nombre de las columnas y restricciones que deben cumplir las columnas (ver ejemplo 2.17).

numera las páginas y coloca la fecha actual.2.. In iSQL*Plus.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. 2. 2. Formato: BTI[TLE] [espc. . [var | text] . que puede estar compuesto de varias líneas.9.1. veremos las más interesantes.9. SAV[E] file_name[.] | [OFF|ON] ttitle: Esta orden coloca un título en la parte superior de cada página.. btitle: Esta orden coloca un título. Si se introduce únicamente una porción de la orden se mostrarán los formatos de todas las opciones de esa orden (ver ejemplo 2.18). Las órdenes de formateo se utilizan para formatear los resultados procedentes de una Existen varias órdenes de formateo. en la parte inferior de cada página del informe. click the Save Script button to save the Input area contents to a script. consulta Formateado de consultas SQL y producir informes simples. Cabeceras y pies de páginas Existen dos órdenes que nos permiten colocar cabeceras y pies de páginas a los informes que podemos obtener como resultado de una consulta.ext] [CRE[ATE] | REP[LACE] | APP[END]] Not available in iSQL*Plus Esta orden permite a los usuarios obtener una documentación de referencia del Oracle mientras se está trabajando con el SQL*Plus.

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 día y a pie de página el nombre de la cuenta de ejecutando dicha consulta.28 SQL*Plus Formato: TTI[TLE] [espc.6.5: Especicaciones para las órdenes btitle y ttitle Var. Oracle desde donde se está . Número de la página actual. Alinea el texto por la derecha. SQL.RELEASE SQL. Espc. ver la tabla 2. Esta opción representa una variable del usuario o del sistema y debe especicarse en mayúscula.LNO SQL.. s[kip] [n] le[ft] ce[nter] r[ight] Uso Salta al comienzo de una nueva línea Alinea el texto por la izquierda. Número de versión actual de Código de error actual. o|on Por defecto la opción es off. Centra el texto. n veces.PNO SQL. Identicativo del usuario. Tabla 2.5..] | [off|on] Las opciones de estas órdenes son: espc text var Esta opción representa una o más de las cláusulas usadas para colocar y formatear el texto. Oracle. [var | text] .SQLCODE SQL. Es el texto que queremos que aparezca en la cabecera o a pie de página y ha de colocarse entre comillas simples. ver la tabla 2.6: Variables para las órdenes btitle y ttitle En el ejemplo 2. Tabla 2.USER Uso Número de la línea actual.

20 se puede observar cómo formatear columnas.9. ver la tabla 2.19 Título y pie de página SQL> SQL> SQL> 2 ttitle center 'Informe del dia' btitle skip SQL. función o expresión matemática . La opción 8 format.9 Formateado de consultas 29 Ejemplo 2. 2.7 se muestran algunas de las principales opciones de esta orden.]] Donde expresión corresponde a columnas virtuales obtenidas por cálculo. column a su vez. . 1) Le asignamos un alias a la columna opciones de column.8. sino que la modica para obtener un informe con un formato dado. art_nom para luego poder utilizarlo con otras 8 Ver Lenguaje de Manipulación de Datos. Formateado de columnas La orden una column permite sentencia select. La orden no cambia la denición de una columna en la tabla. En la tabla 2... 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. Se modica la salida por pantalla o impresora de dicha columna. En el ejemplo 2.USER skip 'UCA' select * from proveedores. tiene una sintaxis propia para poder especicar los for- matos. cambiar las cabeceras y formatos de cualquier columna de Formato: COL[UMN] [{nom_columna|expresión} [opción .2.

tenga 5 dígitos solamente. Muestra un signo dolar al comienzo de cada la de la columna indicada. Formato: SET variable_sistema valor . al centro o a la derecha. 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. An A6 Tabla 2. 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.7: Opciones para la orden column Opción Ejemplo Uso 9 $ 999 $999 Determina el números de dígitos enteros de la columna especicada. Elimina los valores de los atributos asignados a una columna. Alinea las cabeceras de las columnas a la izquierda. Variables del sistema set y se comprueba su contenido con la orden Las variables del sistema son como opciones de programas más que variables.8: Opciones para la orden format 2. queremos que la columna ali[as] Opción Uso nombre Asigna un alias a una columna que se podrá utilizar en las órdenes de columna.10. set: establece un aspecto del entorno del SQL*Plus para la sección actual. 3) Por último. Si no se usa esta orden.30 SQL*Plus 2) Reducimos el ancho de la columna art_nom art_pv a 6 caracteres. Dene las cabeceras de las columnas. Cada variable del sistema controla algunos aspectos de las operaciones del bles del sistema se establecen con la orden SQL*Plus. Tabla 2. Fija la anchura en caracteres de la columna especicada. Las varia- show. Especica los formatos de pantalla de las columnas.

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.9 . ART_NUM ART_NO ART_PESO ART_COL ART_PC ART_PV ART_PRV ---------. b) Muestra por pantalla las órdenes cuando las ejecutamos desde un chero. set.---------1 impres 150 rojo 400 580 4 ora 2 calcul adora 3 calend ario 3 filas seleccionadas.-----.21 observamos la manera de establecer un valor para estas opciones.2. o de otras 9 La opción subrayada es la opción por defecto.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.---------. .10 Variables del sistema 31 Esta orden tiene muchas opciones. algunas de ellas las podemos ver en la tabla 2. SQL*Plus. Visualiza el valor de una característica de la orden órdenes de la orden show.-----. Ejemplo 2. Podemos colocar más de una variable del sistema después de y cada una se visualiza en una línea separada. Y en el ejemplo 2. o bien todas (all) las características de set. c) Desactiva la pausa. 150 negro 100 blanco 4000 420 4700 600 1 4 Ejemplo 2. 9 a) Establecer un máximo de 20 registros por página.---------.------.

11. Primero nos muestra el número de registros que está establecido por páginas y después el nombre del esquema desde donde estamos trabajando. Oracle realiza los cambios penon realiza los cam- bios pendientes después de cada orden define imm[ediate] SQL. c.10.variable_sistema] Esta orden también nos muestra los valores de otras variables como podemos ver en la tabla 2. listar el valor y el tipo de variable de una o de varias variables. 2. O bien. El producto también dispone de un conjunto de órdenes para regular la entrada y salida de datos. auto[commit] Variable Valor off|on| imm[ediate] &|c|off|on Uso Controla cuándo dientes en la base de datos. on. funciona igual que la opción Conjunto de caracteres usados para prejar la sustitución de variables a Ver el ejemplo 2. Entrada y salida de datos SQL*Plus Todo lenguaje de programación 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 ejecución de programas. Ejemplo 2. on u off controla si se hace o no la sustitución de las variables.11.22 SQL> show pages pagesize 20 SQL> show user USER es "GADESCHI" SQL> Valores de variables 2.28.32 SQL*Plus Formato: SHO[W] variable_sistema [. continúa en la siguiente página . Esta orden permite a los usuarios especicar variables y asignarles un valor de tipo carácter. Denición de variables La denición de variables se realiza con la orden define que ya hemos usado para predenir un editor de texto. En el ejemplo 2.1.22 vemos la utilidad de esta orden.

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.2. nea. on nos muestra la off lo desactiva. Sustituye el indicativo por defecto por texto. set y off detiene la visua- spa[ce] sqlp[rompt] ti[me] verify 1|n SQL>|texto off|on off|on Número de espacios entre columnas. . off|on Establece el número total de caracteres por líEstablece la anchura máxima en caracteres para mostrar y copiar valores Estable el n o long. hora después de cada orden. de líneas en blanco de cabecera y de pie de página. off hace que este producto SQL*Plus desde un los ejecute sin visualizarlos. Tabla 2.11 Entrada y salida de datos 33 continuación de la página anterior Variable echo Valor off|on Uso on nos mostraría por pantalla las órdenes cuando ejecutamos ordenes del chero de arranque. o de registros que devuelve una activa o desactiva la opción. Controla que aparezca o no el valor anterior y posterior de la variable cuando hacemos una sustitución de variables con el operador &. on hace que SQL*Plus visualice la disposición antigua y la nueva de una característica su valor cuando se cambia. off|on|texto on hace que SQL*Plus Establece el número de líneas por páginas. off hace que no haya pausa en la visua- lización de páginas. lización de ambas. texto es el mensaje que se visualizará en la parte inferior de la pantalla mientras se espera la pulsación de la tecla show[mode] off|on return. return espere a que se presione después de visualizar cada página de la salida.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.

Muestra el título de cabecera de página actual. .23 Asignar valor a variable SQL> define var1=20 SQL> Ejemplo 2. Muestra el título actual de pie de página. Nos muestra el nombre del usuario bajo el cual estamos trabajando en ese momento.23 y 2. Se puede poner una cadena de caracteres después de la orden para que nos muestre un subconjunto de parámetros cuyos nombres incluya esa cadena. Muestra la versión actual de Oracle. Tabla 2.24 SQL> define var1 DEFINE VAR1 SQL> Visualizar el valor de variable = "20" (CHAR) Podemos borrar la denición de una variable con la orden undefine como sigue: Formato: UNDEF[INE] nom_variable En el ejemplo 2. Muestra el valor actual de un o más parámetros de inicialización. Ejemplo 2. Nos indica si la salida va a un chero de spool.24 vemos como asignarle el valor 20 de tipo caracter a la variable var1 y como visualizar el contenido de dicha variable. Nos indica el n o de la línea actual. pno rel[ease] spoo[l] tti[tle] user Muestra el n o de la página actual.25 vemos cómo borrar la denición de la variable var1 denida anteriormente y comprobar que no tiene valor. En los ejemplos 2.34 SQL*Plus Variable all bti[tle] lno parameters Uso Muestra el conjunto de todas las opciones.10: Valor de variables texto La variable queda denida con texto.

28. nos mostrará el valor anterior y el actual suministrado por el usuario. Para ello utilizamos los operadores y doble ampersand ampersand (&) (&&).31 nos muestra como se realiza esto. . Dicho operador (&) está denido por defecto. Si la variable del sistema verify10 está activada. Ambos operadores (& y &&) actuan de la misma manera sobre una variable aunque la semántica exacta es diferente dependiendo de si la variable tratada está denida previamente o no. El sistema nos pide un valor para la variable var1 y nos muestra el resultado de la consulta.9. suponemos que la variable del sistema la orden verify está activada. pero podemos denirlo con cualquier otro caracter usando la orden de en el ejemplo 2. 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. Con el doble ampersand una vez que hemos introducido un valor ya 10 Ver tabla 2. y dejar que SQL nos solicite dicho valor antes SQL de ejecutar dicha sentencia. Cuando damos run ya no nos vuelve a pedir que introduzcamos el valor para dicha variable. Uso de operadores con variables Las variables también se pueden utilizar sin necesidad de denirlas previamente como hemos visto en el apartado anterior. Para solicitar la sustitución de la variable por el valor dado por el usuario se emplea el operador ampersand (&) delante de la variable en la consulta SQL. En principio.11 Entrada y salida de datos 35 Ejemplo 2.11. En el ejemplo 2.25 SQL> undefine var1 SQL> define var1 SP2-0135: el simbolo var1 es UNDEFINED (INDEFINIDO) SQL> Eliminar valor de variable 2. El ejemplo 2. quedando así denida la variable con ese valor a partir de ese momento.2.26 podemos observar cómo se utiliza dicho operador y cómo le damos un valor a la variable.2. 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 instrucción donde aparece.

2.3. como podemos ver a continuación: . 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.31 nos borrará todos los registros antes. Cuando usamos las órdenes posible pasarles distintos argumentos al chero que queremos ejecutar. Las variables pueden ser usadas en interactivo.11. SQL> select * 2 from &var1. o bien. Tenemos dos formatos distintos para realizar la misma orden. 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. o sea. undefine Tenemos que tener cuidado a la hora de denir variable usando el doble persand ya que la última orden del ejemplo 2.36 SQL*Plus queda jado para toda la sesión a menos que utilicemos la orden para redenir el valor de la variable. No se solicita al usuario ningún valor. en una consulta realizada desde el indicativo del SQL*Plus. 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. en una consulta contenida en un chero. usando el que tenga la variable actualmente.26 Uso de variables con & 5 filas seleccionadas.

La sustitución se hace en el orden: el primer argumento va a la primera variable. el segundo a la segunda. y así sucesivamente.27 Uso de variables con & (cont.29.) SQL> describe &tab Introduzca un valor para tab: proveedores Nombre ?Nulo? Tipo --------------------.29 SELECT &1 FROM &2. &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 continuación del operador SQL*Plus como podemos ampersand (&) deben ser númericos (1 y 2.28 Redefinición de operador SQL> set define # SQL> select * 2 from #var1. Ejemplo 2.-------.---------------------------PRV_NUM NOT NULL NUMBER(38) PRV_NOM NOT NULL VARCHAR2(25) Ejemplo 2.11 Entrada y salida de datos 37 Formato: START nombre_fichero arg_1 arg_2 @nombre_fichero arg_1 arg_2 También podemos utilizar este operador con órdenes de observar en el ejemplo 2.27. en este caso).2. 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. En el ejemplo 2. Contenido del fichero nombre_fichero .

Ejemplo 2. .38 SQL*Plus En el ejemplo 2. lo el subdirectorio actual un chero especial llamado ejecuta. comprueba si existe en Si existe este chero. Se pueden colocar en este chero cualquier orden propia del producto como sentencias El ejemplo 2. SQL*Plus.12. Ésta puede ser una forma conveniente de crearse un entorno individual dentro del producto SQL*Plus. todas ellas se ejecutarán antes que el producto SQL*Plus proporcione el indicativo SQL>.sql.30 SQL> describe &var Introduzca un valor para var: Nombre ?Nulo? ------------------. 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.30 vemos cómo podemos utilizar el operador con órdenes de En este ejemplo nos decribirá la denición de la tabla que le indiquemos. Oracle login.32 nos muestra un chero de órdenes.-------PRV_NUM NOT NULL PRV_NOM NOT NULL Uso del operador & con órdenes de SQL*Plus proveedores Tipo -------------------NUMBER(38) VARCHAR2(25) 2. Los cheros de órdenes son cheros del sistema operativo que contienen órdenes del Cuando el usuario entra en el producto SQL*Plus. producto Ficheros de órdenes SQL*Plus.

´ 2. SQL> delete from &var1. 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.12 Ficheros de ordenes 39 Ejemplo 2. 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> .31 Uso de variables con & y && SQL> select * 2 from &&var1.

sql REM establecemos a 16 el número máximo de registros por página SET pages 16 REM nos mostrará la versión 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 ' después de cada página */ SET PAUSE ON SET PAUSE 'pulsa return ' REM nos mostrará la fecha de hoy con formato por defecto SELECT sysdate FROM dual. .40 SQL*Plus Ejemplo 2.32 REM nos muestra el nombre del usuario SHOW user Fichero de órdenes: login.

13 Resumen de ordenes de SQL*Plus 41 2. Ejemplo 2.13.´ 2. @ @@ / 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 .33 Resumen de órdenes de SQL*Plus Lista de todas las órdenes del SQL*Plus SQL> help index Enter Help [topic] for help.

.

Parte 2 ´ Lenguaje de Manipulacion de Datos .

.

Actualiza un atributo o campo de una tabla. Tabla 3.1. 3.1. Podemos modicar la tabla resultante de una consulta para obtener un mejor resultado como puede ser eliminación de tuplas repetidas.Cap´ ıtulo 3 ´ Manipulacion de datos Este capítulo estudia las cuatro órdenes para manipular la información de la Base de Datos. Está formado por cuatro órdenes y su Orden Operación select insert update delete Muestra el contenido de una tabla. de mantenimiento y consulta de una base de datos. Introduce registros en una tabla. Introducción DML) se utiliza para realizar las operaciones El lenguaje de manipulación de datos ( explicación la podemos ver en la tabla 3.1: Órdenes del Lenguaje de Manipulación de Datos . Elimina uno o varios registros de una tabla. clasicación de las tuplas o identicar a las columnas por un nuevo nombre.

Proyección de una tabla La operación de proyección es una operación del álgebra relacional de aparición de izquierda a derecha de dichas columnas. Mientras from indicaremos los nombres de las tablas cuyas columnas queremos seleccionar. separadas también por comas (ver ejemplo 3. Nosotros iremos estudiando cada una de las cláusulas paso a paso. La lista de las columnas que queremos proyectar aparecerán después de la orden que en la cláusula 1 que consiste en seleccionar una o varias columnas o atributos de una o varias tablas. para realizar cualquier consulta a una o La orden para ello.2.1).2. Para ello utilizamos un asterisco (*) en vez de los nombres de las columnas. usar funciones.1. indicando el orden select separadas por comas y en el orden en que queremos que aparezcan en el resultado. Un caso especial es cuando queremos proyectar todas las columnas de una tabla dada. incorporar varias consultas anidadas. 3.46 ´ Manipulacion de datos 3. 1 Corresponde con la operación de proyección del álgebra relacional representada por la letra griega Π.2. . como podemos observar en el ejemplo 3. principalmente. SQL. La sintaxis de esta orden es bastante compleja. deberá constar. sino que es la más versátil. a varias tablas o vistas de nuestro o de otros esquemas siempre que tengamos privilegio Esta orden no sólo es la que más se emplea en el a múltiples tablas. de una sentencia formada por la orden select y la cláusula from. Puede tomar un aspecto realmente complejo. La orden select select se utiliza. afectar Cualquier consulta a una o a varias tablas de la base de datos. como mínimo. La estructura general de esta orden es la siguiente: Formato: SELECT nombre de las columnas FROM nombre de las tablas [WHERE condiciones de selección de tuplas] [GROUP BY nombre de columnas] [HAVING condiciones de selección de grupos] [ORDER BY números o nombre de columnas]. etc.

. cuando se creó la tabla con la orden create table del lenguaje DDL. Este subconjunto está formado por las tuplas que cumplan unas determinadas condiciones. PRV_NUM ---------1 2 3 4 5 PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp Proyección de datos de los proveedores 5 filas seleccionadas.2.2 La orden select 47 Ejemplo 3. de izquierda a derecha. 3. podemos proyectar una serie de columnas en un orden especíco. obtenida mediante la proyección de todas las columnas de la tabla de partida. En esta consulta. Ejemplo 3. el orden de aparición de las columnas. prv_nom 2 from proveedores. 2 2 Esta operación se corresponde con la operación de selección (σ ) del álgebra relacional. Selección de las de una tabla Una tabla está formada por un conjunto de las. tuplas o registros.2.1 SQL> select prv_num. PRV_NUM ---------1 2 3 4 5 PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp Proyección de todos los datos de los proveedores 5 filas seleccionadas. El resultado es otra tabla. es el mismo orden en que fueron creadas las columnas.2 SQL> select * 2 from proveedores.3. pero también podemos seleccionar un conjunto de tuplas y no todas las que forman la tabla . Cuando realizamos una consulta.

por lo tanto podemos utiliza uno y otro indistintamente. >= ). Esta cláusula es opcional y se coloca a continuación de la cláusula from. Operador and: Para que una la sea seleccionada debe cumplirse a la vez las dos condiciones.1. Comparación con un patrón (like). Si una la cumple la condición. Uso de los operadores lógicos Una expresión lógica puede contener un número cualquiera de operadores lógicos. Operador or: La la se selecciona si se cumple. combinado con los operadores lógicos formará parte del resultado. por una serie de condiciones. Test sobre la indeterminación de un valor (is Test todos o al menos uno (all. Las condiciones pueden utilizar los siguientes operadores: and (Y lógico) y or (O lógico). El criterio en una cláusula where se establece mediante una expresión lógica compuesta not (negación). any). operadores de comparación <>y != realizan las mismas funciones. cada una de las cuales toma el valor verdadero o falso. 3 Los . por lo menos.48 ´ Manipulacion de datos Las condiciones de selección pueden tener criterios diferentes y se especican en la cláusula where. colum4 FROM nom_tabla WHERE criterio de selección de filas. Test de existencia (exists). y Comparación con un valor 3 ( =. 3. <. Comparación con una lista de valores (in). >. colum3. Comparación con un intervalo de valores (between). hará que el valor de la expresión lógica sea verdadero. una de las condiciones unidas por este operador.2. !=. <>. que se unen mediante dicho operador. null). <=.2. Esta cláusula tiene el siguiente formato: Formato: SELECT colum1.

este operador utilizado junto con otro operador invierte el valor del 3. después los Y logicos con and y. la comparación con esta expresión no se ejecuta nunca.2 La orden select 49 Prioridad de los operadores lógicos : Si el número de expresiones lógicas es impor- tante.2. El valor de una expresión aritmética es indeterminado si contiene una columna cuyo valor es indeterminado. SQL efectúa primero las comparaciones. En el ejemplo 3. los O logicos con or. nombres de columnas y constantes. . Conviene.2. /). *. el resultado depende del orden en que se efectúen las operaciones elementales. La constante debe ser compatible con el tipo de columna considerada. El * y el / tienen el nivel máximo de prioridad. ésta irá siempre Formato: WHERE nom_columna operador_de_comparacion constante Comparación usando expresiones aritméticas : Una expresión aritmética puede in- cluir operadores aritméticos (+. La sintaxis es la siguiente: SQL. -. Las constantes de tipo numéricas. El SQL admite dos tipos de constantes: • • Las constantes de tipo cadena de caracteres. Siempre que utilicemos cadenas de caracteres en una consulta entre comillas simples. después las negaciones con not.2.3 podemos comprobar cómo se utilizan los operadores lógicos para unir dos expresiones de comparación. Operador not: resultado. emplear paréntesis Este orden se dene por la prioridad de los operadores. Selección por comparación con un valor Comparación con una constante : El caso más sencillo consiste en comparar el valor de una columna con una constante.3. para mayor seguridad. nalmente. El que agrupen a las expresiones.

ART_NUM ---------4 5 6 7 ART_NOM -------------------lampara lampara lampara lampara 4 filas seleccionadas. Formato: WHERE nom_columna BETWEEN valor1 AND valor2 En realidad.4 SQL> select * 2 from proveedores 3 where prv_num between 2 and 5. art_nom 2 from articulos 3 where art_peso > 100 and art_prv = 5. Los proveedores cuyo número esté entre 2 y 5 Ejemplo 3.3.2. incluyendo a los propios valores que determinan el intervalo. Selección por comparación con un intervalo between permite seleccionar las las cuya columna especicada contenga El operador un valor que se encuentre dentro de un intervalo determinado. . PRV_NUM ---------2 3 4 5 PRV_NOM ------------------------estilograficas reunidas mecanica de precision sanjita electrolamp 4 filas seleccionadas. 3. el operador lógico.2.3 Artículos que pesan más de 100g ó el número de su proveedor es igual a 5 SQL> select art_num. Para seleccionar las las cuya columna contiene un valor externo a un intervalo determinado.50 ´ Manipulacion de datos Ejemplo 3. se empleará el operador between equivale a combinar dos comparaciones con un Y not between.

3. Ejemplo 3. 3. juan dominguez.5..4.) El empleo de este operador equivale a combinar comparaciones con un O lógico. es preciso emplear el operador not in como podemos observa en el ejemplo 3.2. julian mendez. jordi martinez.2. pedro marin. joan marcos. Selección por comparación con un patrón Las consultas de correspondencia con un patrón recuperan las para las que el contenido de una columna de texto se corresponde con un texto dado. Observamos que también aparecen los datos de los proveedores cuyos números son el límite inferior y el superior del intervalo. 'barcelona'.2 La orden select 51 Podemos comprobar que en el ejemplo 3..2. es decir.5. 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 están en las ciudades indicadas TDA_GER ------------------------contesfosques. raquel petit. 'lyon'). valor2. Formato: WHERE nom_columna IN (valor1. Para seleccionar las las cuya columna contiene un valor distinto del existente en una lista. 'palencia'.5 SQL> select * 2 from tiendas 3 where tda_pob not in 4 ('paris'.4 aparecen los proveedores que cumplen la condición de selección. . comprueban si el valor de un columna se ajusta a un patrón especicado . pilar gomez. gabriel 8 filas seleccionadas.2. Selección por comparación 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.3.

Para denir el patrón disponemos de dos caracteres especiales que.6 SQL> select tda_num. sólo uno. es posible comprobar si el valor no ha sido inicializado gracias al operador o al operador opuesto is not null. en el momento de la comparación con el valor de la columna correspondiente. el valor de la columna debe coincidir exactamente con la constante que sigue.52 ´ Manipulacion de datos El operador like permite seleccionar las las que contienen en la columna indicada (de tipo alfanumérico) un valor coincidente con el patrón dado. representan: % cualquier secuencia de ninguno o de varios caracteres. Por lo tanto tendremos que recurrir a la búsqueda con un patrón. Con los operadores = o in. 3. is null. Ahora Si el valor de una columna no ha sido inicializado en una determinada la. jordi martinez. Si se produce un error de codicación. Formato: WHERE nom_columna IS NULL .2. TDA_NUM ---------1 2 TDA_GER ------------------------contesfosques. o sea. varchar2 por eso coloca entre comillas simples. Datos de los gerentes de las tiendas de Madrid El patrón debe de ser del tipo de dato Ejemplo 3.6. _ (subrayado) un carácter cualquiera.2. bastará emplear el operador not like. valor Selección con un valor indeterminado ésta no interviene jamás en una selección por comparación de valores. Formato: WHERE nom_columna LIKE 'patrón' Para seleccionar las las cuya columna contiene un valor que no debe coincidir con el patrón. tiene null. o se ha olvidado el valor exacto. no es posible encontrar la la buscada por este medio. tda_ger 2 from tiendas 3 where tda_pob like 'madrid%'. juan 2 filas seleccionadas. bien.

2. Notas sobre el empleo de la cláusula where: where deberán ser parte de la tabla espe- Las columnas especicadas en la cláusula cicada en la cláusula from. No es necesario seleccionar o proyectar todas las columnas de una tabla. Las columnas utilizadas en la cláusula la lista de la orden select. Las las se muestran en el orden en que están almacenadas.3. Los usuarios pueden obtener información de sus propias tablas. Resumen select: son obligatorias en cada consulta Notas sobre el uso de la orden Las cláusulas La cláusula select y from SQL. o bien de aquellas a las que se les haya dado permiso de acceso. ART_NUM ---------8 9 ART_NOM -------------------pesacartas 1-500 pesacartas 1-1000 Datos de los artículos que no tienen definido el color 2 filas seleccionadas. from deberá ir a continuación de la cláusula select. Si queremos proyectar todas las columnas de una tabla usaremos el asterisco (*) y éstas aparecerán en el mismo orden en que fueron creadas. Las columnas se muestran de izquierda a derecha en el orden especicado en la cláusula select. Las cláusulas select y from aparecerán precediendo a cualquier otra cláusula. where no tienen que estar necesariamente en .2 La orden select 53 Éste es el único test de comprobación que permite seleccionar una la cuando el valor de una columna es indeterminado.7 SQL> select art_num.7. Ejemplo 3.2. art_nom 2 from articulos 3 where art_col is null. 3.

como se muestra en el ejemplo 3. El ejemplo 3. incluyendo el nuevo nombre Los nombres de las columnas. separado por un espacio. ART_COL ------azul blanco negro rojo verde 5 filas seleccionadas. El Eliminación de registros repetidos SQL visualiza por defecto el resultado de una consulta. los nombres de las columnas de las tablas permanecen y no les afecta el cambio.8 nos muestra los distintos colores que tienen los artículos.9. También podemos observar que la tabla resultante nos muestra los colores ordenados alfabéticamente. El nuevo nombre o alias irá entre comillas dobles si se compone de dos o más palabras. en las comparaciones numéricas no es where deberá especicar los mismos caracteres.3. expresiones y funciones que aparecen en la cláusula en la cláusula select después del nombre de la columna. El cambio de nombres únicamente mantiene su efecto durante el tiempo de la consulta. que hubiera en las tablas de la base de datos. . Hemos eliminado las tuplas que no tienen denido el color. 3. Ejemplo 3. mayúsculas o minúscu- las. select Renombrar columnas de una consulta pueden cambiarse temporalmente. Se puede obtener el resultado de una consulta sin dichas repeticiones introduciendo la cláusula select.54 ´ Manipulacion de datos Las comparaciones de series de caracteres en la cláusula necesario. sin eliminar las repeticiones distinct después de la orden de las ocurrencias devueltas.8 Mostrar todos los colores de los artículos SQL> select distinct art_col 2 from articulos 3 where art_col is not null. o si queremos que aparezca tal cual lo hemos escrito en mayúsculas o en minúsculas. 3.4. La cláusula where requieren que és- tas estén acotadas entre comillas simples.

3. es preciso añadir la cláusula o SQL crea un índice temporal si ello le sirve para optimizar la order by. obligatoriamente. . Clasicación de las 4 Cuando no se determina el orden en que se desean obtener las las.5. o bien. al principio de la tabla si el orden es descendente y al nal si es ascendente. el consulta.. seguida del nombre de las columnas sobre las cuales se desea elaborar la clasicación separadas por comas. formar parte de la lista de columnas incluidas en la cláusula tablas incluidas en la cláusula from. el mismo orden en que fueron creadas. Colores ------azul blanco negro rojo verde 5 filas seleccionadas. select. Se puede solicitar la clasicación de las las seleccionadas según el valor de una o varias columnas. puede suceder que se obtengan resultados distintos en dos ejecuciones consecutivas de una misma consulta . Así.´ 3. Ésta es la única instrucción en la que el SQL tiene en cuenta el orden de las columnas. pertenecer a una de las Si utilizamos la cláusula distinct forzozamente la SQL no tiene predenido un orden de aparición de las tuplas.5 Clasificacion de filas 55 Ejemplo 3. nosotros podemos especicar el nombre de la columna por la que queremos ordenar o bien la posición que ocupa dicha columna en la lista de la orden La columna sobre la que se realiza la clasicación debe. select.. Si se añade desc asc se está precisando el orden ascendente o descendente con el que se realizará la misma. Formato: ORDER BY {nom_columna | entero} [asc|desc]. a causa de esta misma indeterminación. Para ello. en cambio. Una clasicación no necesita la existencia de un índice. Los valores indeterminados (null) se visualizan agrupados. Por defecto se hace en orden ascendente. 4 El Oracle las mostrará en .9 Mostrar todos los colores de los artículos SQL> select distinct art_col "Colores" 2 from articulos 3 where art_col is not null.

1. Ejemplo 3.10 select art_num Numero. Esta cláusula es el único sistema existente para ordenar los datos según el criterio que se desee. NOMBRE -------------------impresora calendario lampara lampara lampara lampara pesacartas 1-500 pesacartas 1-1000 calculadora Datos de los artículos ordenados ascendente por su precio de compra NUMERO ---------1 3 5 4 7 6 8 9 2 9 filas seleccionadas. art_nom Nombre from articulos where art_num < 10 order by art_pc. . order by art_pc * ERROR en linea 4: ORA-01791: no es una expresion obtenida bajo SELECT 3.10. Por omisión. La cláusula order by únicamente clasica las las obtenidas en la consulta.5. la secuencia será ascendente. SQL> select distinct art_nom Nombre 2 from articulos 3 where art_num < 10 4 order by art_pc. Resumen La cláusula order by deberá ser la última cláusula en aparecer en la consulta SQL. Para ordenaciones descendentes se deberá especicar explícitamente. ya que las tablas almacenan las las conforme éstas han sido introducidas.56 ´ Manipulacion de datos columna de ordenación tiene que estar en la lista de columnas a proyectar por la orden select. SQL> 2 3 4 ver el ejemplo 3.

El formato general para esta orden es: Formato: INSERT INTO nom_tabla [(nom_column1. Las columnas con valores nulos (null) se evaluarán al nal de todas si el orden es asc y al principio si son desc.6..)] VALUES (valor1.. 3.).. Formato: INSERT INTO nom_tabla VALUES (valor1. Para ello. .3. determina la order by secuencia de las claves de clasicación. La orden insert Esta orden se emplea para añadir nuevas las a una tablaya existente. debe indicarse explícitamente mediante el operador nulo.6 La orden insert 57 Puede mezclarse ordenaciones ascendentes y descendentes en la misma cláusula order by.1. . en el orden de izquierda a derecha tal como fueron creadas dichas columnas. Si no se indica el nombre. el nombre de las columnas que hay que inicializar y el valor que se les desea dar. Si se desea dejar una columna sin valor. Su formulación más sencilla sirve para añadir una la cada vez. . Inserción de todas las columnas de un registro Cuando damos un valor para cada una de las columnas de un nuevo registro. valor2. y así sucesivamente. los valores de una columna serán clasicados con valores iguales de las columnas precedentes. situado en la posición que tiene la columna que queremos dejar con valor . se supone que las columnas que deben recibir los valores son todas las de la tabla.6... Puede clasicarse por columnas que no formen parte de la consulta. valor2. esto es.). null. nom_column2. El orden de los valores situados entre paréntesis deberá corresponder exactamente con el orden que se les dio a las columnas cuando fueron denidas las tablas en su creación.. se citará el nombre de la tabla. siempre que formen parte de alguna de las tablas especicadas en la cláusula La secuencia de las columnas especicadas en la cláusula from. 3. se puede simplicar el formato de la sentencia insert.

incluyendo un valor para cada columna declarada como en la cláusula no null. pero deberán corresponderse directamente con los correspondientes valores situados también entre paréntesis en la cláusula Formato: INSERT INTO nom_tabla (nom_column3. nom_column2. 'Pto.. 'Pto. Si dos tablas tuvieran columnas con idéntica denición. 'Martin. . 1 fila creada. val2.58 ´ Manipulacion de datos 3. Real'.. En el ejemplo 3.. tda_pob) 2 values (16.' Martin. 1 fila creada.3. y a la Ejemplo 3.6. . Real'). En el último caso. usando los registros de una o varias tablas. 1 fila creada. Para este tipo de inserción.2. Luis'). orden determinado. La cláusula select insert los situaría en insert una consulta select en vez de una cláusu- anidada obtendría los datos deseados de una tabla y la otra tabla.. hemos dejado el nombre del gerente sin especicar..11 SQL> insert into tiendas 2 values (16. explícitamente se jará qué columnas deberán recibir los valores especicados. siempre que asociemos a la orden la cláusula tabla values.. .). 'Pto.) VALUES (val3. tda_ger. la siguiente proposición podría insertar todos los datos desde la tabla x.. los nombres de las columnas insert que van situados entre paréntesis no necesitan estar situados en un values. Inserción parcial de columnas en un registro Para insertar únicamente unos cuantos valores en un registro. SQL> insert into tiendas 2 values (16. .. Insertar datos desde otra tabla Pueden insertarse datos en una tabla. 3. Luis'. SQL> insert into tiendas (tda_num.11 hemos insertado una tupla en la relación Tiendas de varias formas. Real'. null). Inserción de tuplas en una tabla .6.

La cláusula select anidada en la insert no se incluye entre paréntesis.3. . nom_column3. y. dado que no se trata. x recibirán datos desde las Formato: INSERT INTO x [(nom_column1.. La cláusula en una consulta asociada a insert. . al menos. 3. Resumen Una tabla deberá estar creada antes de poder insertar datos en ella. select select insert.)] SELECT {nom_columna | expresión} FROM y [WHERE criterio de selección]. La lista de nombres de columnas se utiliza cuando: • • Se insertan unas cuantas columnas que existen en la denición de la tabla. en realidad. En la cláusula valor insert tomarán como valor siempre y cuando en la values pueden especicarse valores null.. de una consulta anidada. se puede especicar qué columnas de la tabla columnas que se deseen de la tabla y. debe existir con anterioridad y los tipos de datos deben corres- ponderse plenamente o. ser del mismo tipo. O bien. La tabla emisora. Las anidada para insertar Es posible crear una tabla e insertar las en ella con una sola operación con la orden create del Lenguaje de Denición de Datos.6 La orden insert 59 Formato: INSERT INTO x SELECT * FROM y.6. denición de restricción de integridad correspondiente no aparezca especicado el not null. Se introducen columnas en una secuencia diferente en la que fueron creadas. Las columnas de la tabla que no aparezcan en la orden null. order by no puede intervenir No es necesario que las correspondientes columnas de las dos tablas tengan el mismo nombre.4. El orden de columnas en la cláusula deberá corresponder con el orden de columnas especicado en la cláusula expresiones y funciones pueden ser usadas en la cláusula datos procedentes de cálculos matemáticos.

basta escribir un criterio de tal modo que se seleccione sólo esa la. no es necesario incluir una cláusula where. insert deberán corresponder con la secuencia y tipo de datos de las columnas obtenidas 3. Pueden cambiarse todos los valores de una columna para todos los registros. Si se omiten las columnas. Los valores tipo carácter deberán ir entre comillas simples. multila. Las columnas que aparezcan en la cláusula mientras que las que aparecen en la select insert son receptoras de los datos. deberá especicarse un valor para cada una de las columnas de la tabla. o bien únicamente algunos valores para registros especícos. son columnas emisoras. nombres de columnas e incluso consultas anidadas. La secuencia y tipo de datos de las columnas que aparecen en la cláusula por la subconsulta. Los valores insertados deberán corresponder con el tipo de dato de la columna correspondiente. La orden update Esta orden cambia o actualiza los datos existentes de una tabla. La cláusula where es usada para seleccionar las las que serán actualizadas.60 ´ Manipulacion de datos Los valores deberán colocarse en el mismo orden en el que aparecen sus correspondientes columnas en la cláusula insert. pues.7. especicando sus nuevos valores en las columnas seleccionadas. . La modicación a realizar es una expresión que admite constantes. Si se omite la lista de columnas. Formato: UPDATE nom_tabla SET nom_columna = nuevovalor [.nom_columna = nuevovalor] [WHERE criterio de selección de los registros]. La especicación de las las a copiar tiene la misma sintaxis que la de las consultas SQL. los valores a insertar deberán seguir la misma secuencia seguida por las correspondientes columnas cuando se creó la tabla. Podrá ser tan compleja como se desee con excepción de la cláusula order by que no puede ser utilizada. Para modicar todas las las de una tabla. La formación general de la orden es. Para modicar una sola la.

2. 1 fila actualizada. Si la cláusula where es omitida.3.. dejará dicha columna vacía para todas las tuplas de la tabla. Puede establecerse una columna a valor null si la denición de restricción de inte- gridad para esa columna en la tabla lo permite. . todas las las serán actualizadas. al Formato: UPDATE nom_tabla SET nom_columna = (SELECT nom_columna FROM .12.7 La orden update 61 3. nom_columna2) = (consulta anidada) Ejemplo 3. estas columnas van entre paréntesis..1. Cláusula set Pueden emplearse consultas anidadas en la cláusula igual que en la cláusula where..12 Actualización del peso de un artículo SQL> update articulos 2 set art_peso = (select art_peso 3 from articulos 4 where art_num = 27) 5 where art_num = 24. Si la consulta anidada asociada a la cláusula set no devuelve ningún valor y la columna select admite nulos.7. La cláusula anidada.). Formato: SET (nom_columna1. . Resumen update opera en todas las las que cumplen la condición where. set de una sentencia update. 3.7. Hay que tener en cuenta que si la cláusula where de una orden update también puede tener una sentencia set lleva varias columnas separadas por comas igualadas a una consulta anidada. el peso del artículo n mismo peso que tiene el artículo n o o 24 se ha actualizado pasando a tener el 27. En el ejemplo 3. [WHERE condición]..

13 SQL> delete from art_2 2 where art_num > 20. La orden delete delete. Cada subconsulta deberá ser subconsulta a una única la para cada registro a actualizar. Para suprimir todos los registros de una tabla no hace falta incluir una cláusula where. la tabla continúa existiendo en la base de datos. *. ó /). También pueden utilizarse funciones cláusula set.8. -. Los registros no pueden borrarse afecta al registro completo. set Oracle que operen en una única columna en la Si el valor de la cláusula proviene de una consulta anidada. Podemos borrar todos Los registros de una tabla pueden borrarse con la orden los registros o bien algunos según un criterio de selección. y podrán insertarse nuevas columnas en ella usando la orden parcialmente.62 ´ Manipulacion de datos Puede establecerse una columna igual a una expresión aritmética compuesta de columnas y constantes (+. si son más de una columna deberán ir entre paréntesis. todas las las de la tabla serán borradas. Formato: DELETE [FROM] tabla [WHERE criterio de selección de un registro]. deberá haber exac- tamente las mismas columnas que las especicadas en la subconsulta y. 6 filas suprimidas. 3. El criterio de selección de tuplas puede obtenerse a partir del resultado de una consulta anidada en la cláusula where. Eliminación de algunas tuplas de la tabla art_2 Ejemplo 3. además. Si una orden delete no contiene una cláusula where. . La formulación general de la orden es multila. Para suprimir una sóla la basta escribir un criterio que permita seleccionar sólo esa. ya que la orden delete insert. Sin embargo.

sin un criterio de selección. La orden drop elimina. hace que todos los datos de la tabla se borren. del Lenguaje de Denición de Datos.9 Diferencias entre drop.9. pero la denición de dicha tabla permanece en el diccionario de datos. delete y truncate 63 3. delete y truncate delete. . la denición de la tabla en el Diccionario de Datos. además.3. 5 Orden 6 Orden del Lenguaje de Denición de Datos. Diferencias entre drop. La orden ella y así de la tabla del Diccionario de Datos y. puede liberar el espacio ocupado por Oracle puede disponer de dicho espacio para otros objetos. truncate borra todas las tuplas de una tabla pero no borra la denición liberando por ello el espacio ocupado en la base de datos. drop5 y La diferencia entre las órdenes truncate6 consiste en lo siguiente: La orden delete. además.

.

4. Si se trata de una operación de visualización. tanto numéricas como de carácter. Se introduce el concepto de grupo de tuplas analizando las ventajas y los problemas que presenta su uso.Cap´ ıtulo 4 Funciones y expresiones Este capítulo nos muestra las distintas funciones de las que disponemos así como la manera de utilizarlas. De hecho. normalmente. *. basta con escribir la expresión aritmética en la cláusula u order by. -. Dichas funciones se pueden utilizar tanto con registros como con grupos de registros que cumplan una determinada condición. A estos datos se les pueden aplicar los operadores aritméticos y las funciones. select como si fuera una columna. Expresiones Las expresiones aritméticas nos permiten realizar cálculos numéricos con los datos de la base de datos. utilizando los cuatro operadores aritméticos (+. está formada por toda una serie de estructuras de datos que contienen tipos de datos diferentes. Introducción Una base de datos. 4.1. Lo mismo sucede en una cláusula where . /). es posible combinar el valor de diferentes columnas entre sí o bien con constantes numéricas.2.

2 podemos ver la descripción de esta pequeña tabla.---------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 Beneficio de los artículos 15 filas seleccionadas.66 Funciones y expresiones Ejemplo 4. se emplea para probar funciones o realizar cálculos rápidos. Se crea en el momento de la instalación y creación de la base de datos y sólo tiene una columna y una la.3. La tabla dual dual es una tabla pequeña pero útil.-------.------------------------DUMMY VARCHAR2(1) Descripción de la tabla dual . Proporcionada por La tabla Oracle. NUMERO ---------3 2 1 4 5 6 7 8 9 10 11 12 13 14 15 NOMBRE BENEFICIO -------------------. Ejemplo 4.2 SQL> describe dual Nombre ?Nulo? Tipo ------------------------------------.1 SQL> select art_num Numero. 2 (art_pv . 4. art_nom Nombre. En el ejemplo 4.art_pc) Beneficio 3 from articulos.

• • • • • Funciones numéricas.3 y 4.4. uno. Funciones de funciones de grupos.1.. Las funciones de registros aparecen en la lista de la orden consulta no lleve la cláusula group by) y en la cláusula select where. Funciones Una función manipula conjuntos de datos y devuelve un resultado. . El formato es el siguiente: Formato: nom_función(arg1. Funciones de conversión. mientras que las funciones de grupos devuelven un único registro como resultado por cada grupo de registros consultados..4 nos muestran cómo usar estas funciones para realizar cálculos númericos. o bien en la cláusula order by. select y en la cláusula 4. . Funciones de fechas.) Las funciones se dividen en dos tipos: Funciones de registros únicos (o escalares). Las funciones pueden operar con cero. Funciones de caracteres: devuelven un valor de tipo carácter o bien devuelven un valor de tipo numérico.4 Funciones 67 4. Funciones numéricas Las funciones numéricas pueden aparecer en la cláusula en la cláusula select de una sentencia SQL.4. Estas funciones dieren en el número de registros sobre los cuales actúan. siempre que la consulta tenga la cláusula group by. Otras funciones. where. arg2.4.1. (suponiendo que la Las funciones de grupos aparecen en la lista de la orden having. Las distintas funciones que podemos aplicar a los datos de tipo numérico se pueden ver en la tabla 4. o más argumentos. dos. Los ejemplos 4. Una función de registro único devuelve un único registro como resultado por cada registro de la tabla o vista consultado.

En uno cambiamos el aspecto de salida de los datos de una columna.4 3 elevado al cubo SQL> select power(3.3. Funciones de caracteres A las series de caracteres también se les puede aplicar funciones especiales para manipularlas.3) "3 elevado al cubo" 2 from dual.3 Raíz cuadrada de 27 SQL> select sqrt(27) "raiz de 27" 2 from dual. 3 elevado al cubo ----------------27 1 fila seleccionada.19615242 1 fila seleccionada.68 Funciones y expresiones 4. La forma general es: Formato: nom_función(tipo_dato1. En los ejemplos 4. Ejemplo 4. Ejemplo 4.4. mientras que en la tabla 4. mientras que en el otro contamos para conocer quién es el proveedor con el nombre más largo. En la tabla 4. 4. raiz de 27 ----------5.2 se indica las funciones de caracteres que devuelven un valor de tipo carácter y cómo podemos usarlas.tipo_dato2) .4.3 vemos algunas de las funciones que se aplican a cadenas de caracteres y que nos devuelven un valor numérico como resultado. Podemos realizar toda una serie de operaciones con estas cadenas.2.5 y 4. Funciones de conversión Estas funciones convierten un valor de un tipo de dato en otro.6 hacemos uso de dos tipos distintos de estas funciones.

Estas funciones normalmente se utilizan cuando queremos dar formato a columnas de tipo fecha . 1 4. En el ejemplo 4. . Nombre -------------------Margarita Miguel Jean Michel Antoni Marcel Pablo Gerad Consuelo Pau Jorge Pablo Diego Joaquin Jacinto Pedro 16 filas seleccionadas.7 hemos aplicado una de estas funciones con la tabla el nombre de la cuenta de usuario desde donde estamos trabajando.4. Otras funciones Existen otras funciones que no podemos incluirlas en ninguno de los grupos en que hemos dividido las funciones.4 muestra algunas de las funciones más usadas de conversión de datos.5 junto con sus usos. dual para saber 1 Ver capítulo 7.4. Dichas funciones aparecen en la tabla 4.4.4 Funciones 69 Ejemplo 4.5 Inicial de los nombres de clientes en mayúscula SQL> select initcap(clt_nom) "Nombre" 2 from clientes. La tabla 4.

length(prv_nom) nombre 2 from proveedores. Ejemplo 4. y una sola la que resume los valores de la columna de todas las las. algunas de ellas aceptan las opciones distinct y all. Los valores indeterminados o nunca. NUMERO NOMBRE ---------. las funciones de grupo efectúan operaciones sobre un conjunto de valores de una columna dentro de un grupo de las. Las funciones de grupo se muestran en la tabla 4. el valor de la función. USER -----------------------------GADESCHI 1 fila seleccionada.6 ¿Qué proveedor tiene el nombre más largo? SQL> select prv_num numero. Cuando no existe la cláusula by. . Si el argumento viene precedido de la opción antes las repeticiones de valores. seguida del nombre de la columna sobre la cual se efectúa la agrupación. ¿Quién soy? 4. el resultado de una búsqueda que se realiza sobre una función es una tabla que contiene una sola columna.5. De hecho. distinct.70 Funciones y expresiones Ejemplo 4.6.---------1 16 2 23 3 21 4 7 5 11 5 filas seleccionadas. se eliminarán null no se tienen en cuenta El argumento de la función contiene el nombre de la columna sobre el cual debe ejercerse el cálculo.7 SQL> select user 2 from dual.4. Funciones de grupo Al igual que las funciones anteriores se aplican al valor de una columna. Si la función se incluye en la cláusula select. se visualizará como una columna o una expresión. Los grupos se especican mediante la cláusula group by. group el grupo está formado por todo el conjunto de las seleccionadas. Un grupo es un subconjunto de las de una tabla en la que el valor de una columna es constante.

1. Esta cláusula permite. Resumen Un grupo se dene como las las que tienen un valor común en una o más columnas. seguida de aquellos valores de las funciones aplicadas a cada grupo. la visualización del valor de la columna común.5 Consultas por grupos 71 Dentro de una cláusula los operadores aritméticos.. podemos incluir varias funciones y combinarlas con 4.5. generalmente. o bien.. y posteriormente hemos hallado el precio máximo de compra. la cláusula la consulta resultante. La cláusula group by La cláusula group by reordena la tabla que resulta de una consulta select en un número mínimo de grupos tales que.5. La cláusula consulta con la group by se utiliza orden select.8 primero hemos eliminado los artículos que no tienen denido el color.5. . select.2. para denir múltiples grupos de las dentro de una Formato: GROUP BY nom_columna [.] También puede añadirse a la consulta una cláusula en la selección de las las. en el interior de cada uno. Se puede observar que la cláusula order by para ordenar por distintas columnas where. las funciones de grupo se calculan para cada grupo. para establecer un criterio group by ordena las tuplas ascendentemente por el atributo por el cual formamos los grupos. Cuando se emplea una cláusula group by. Estas columnas se muestran en la cláusula group by. Consultas por grupos group by para formar los grupos con los elementos que tenga los mismos valores en la columnas indicadas y having La noción de grupo introduce dos nuevos tipos de cláusulas: para seleccionar solamente los grupos que cumplan las condiciones impuestas. En el ejemplo 4.9 hemos formado directamente los grupos dandole un nombre al grupo de los artículos que no tienen denido el color.4.. 4. después hemos formado grupos por colores y dentro de cada grupo hemos hallado el precio de compra más caro. 4. Este tratamiento no afecta a la organización física de la tabla. En el ejemplo 4. la columna especicada tenga el mismo valor para cada la.nom_columna.

COLOR maximo precio compra ------.-------------------azul 2100 blanco 2000 negro 4000 rojo 2100 verde 2100 indefinido 3000 6 filas seleccionadas.8 Precio máximo de los artículos por color SQL> 2 3 4 select art_col Color. .'indefinido') Color. contando a los indefinidos SQL> select nvl(art_col. Ejemplo 4. max(art_pc) "maximo precio compra" from articulos1 where art_col is not null group by art_col.-------------------azul 2100 blanco 2000 negro 4000 rojo 2100 verde 2100 5 filas seleccionadas. Ejemplo 4. Las columnas que no aparezcan en la cláusula cláusula select deberán ser del mismo no podrán aparecer en la select. se obtendrá una la resumen de información por cada uno de los colores diferentes que hubiera. Las consultas select pueden agrupar información según el valor de más de una co- lumna al mismo tiempo. si se agrupa por colores. Todos los ítems de la lista especicada en la cláusula nivel de agrupación.72 Funciones y expresiones Se devuelve una la por cada grupo formado. Por ejemplo. group by excepto como argumentos para agrupar funciones.9 Precio máximo de los artículos por color. 2 max(art_pc) "maximo precio compra" 3 from articulos1 4 group by art_col. COLOR maximo precio compra ---------.

null se emplea. el criterio especicado en la cláusula having afecta al valor de una función calculada sobre un grupo. Los valores null y la función nvl null es un valor indeterminado.5. count(*) "Numero de elementos" from articulos1 group by art_col having count(*) > 2.´ 4.5).6 Los valores null y la funcion nvl 73 4. Si un valor un cálculo aritmético. La cláusula Los grupos que no cumplen el criterio especicado en la cláusula en el resultado.10 primero hemos formado grupos por colores pero solamente hemos mostrado aquellos grupos que tienen más de dos elementos. COLOR Numero de elementos ---------.6. La cláusula having having equivale a la cláusula where pero aplicada a grupos. Esta cláusula generalmente no puede emplearse si antes no ha sido especicada la cláusula group by. 4.------------------azul 3 rojo 4 2 filas seleccionadas.10 ¿Qué color lo llevan más de dos artículos? SQL> 2 3 4 5 select nvl(art_col. De hecho. La cláusula having se utiliza para restringir los grupos seleccionados en el resultado de la consulta una vez ejecutada ésta con la cláusula group by. por tanto. los valores nulos no se utilizan El valor cuando se evalúan expresiones o funciones. having no se incluyen Formato: HAVING nom_función o expresión Ejemplo 4. Para sustituir temporalmente el valor nulo por cualquier otro se deberá usar la función nvl (ver tabla 4. . por ejemplo.'indefinido') Color.3. en Algunas veces se podría desear sustituir temporalmente el valor nulo por otro valor sobre todo cuando se realizan cálculos aritméticos. el resultado será siempre nulo (null). En el ejemplo 4.

12 hemos usado la función usado la función nvl para asignarle un valor momentáneo al peso y luego calcular la media aritmetica con la función nvl con lo cual las tuplas que no tienen denido el peso no se eligen para avg. Ejemplo 4.74 Funciones y expresiones Vamos a ver dos ejemplos del uso de esta función. En los dos hemos mostrado los colores distintos que tienen los artículos. . forma1 SQL> select avg(nvl(art_peso.12 Peso medio de los artículos. Ejemplo 4.'indefinido') "Colores" 2 from articulos1. Vemos que en este segundo ejemplo.11 a los artículos 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. una con valores de tipo caracter y otra con valores de tipo numérico. ya que se divide por un número menor de elementos.9 hemos eliminado las tuplas que no tienen color. mientras que en el ejemplo 4.0)) "Peso medio" 2 from articulos1.11 con el 3.12 y 4.9. Peso medio ---------181. con lo cual la consulta devuelve solamente 5 las. Compárese el ejemplo 4. En el ejemplo 4. Los ejemplos 4. En el ejemplo 3. En el ejemplo 4.13 no hemos calcular la media aritmetica.333333 1 fila seleccionada.13 muestra el uso de esta función con columnas de tipo numéricas. Colores ---------azul blanco indefinido negro rojo verde 6 filas seleccionadas. incluido los nulos SQL> select distinct nvl(art_col.11 Mostrar todos los colores de los artículos. la media de pesos es mayor que en el primer caso.

n. expresado en radianes. es mayor m Retorna n Retorna n m dividido por m. expresado en posiciones decimales. n. Devuelve m.13 Peso medio de los artículos. El valor de n no puede ser negativo. Tabla 4. si n n. Retorna decimal. n. Retorna el seno hiperbólico de n.n) mod(m.m]) m n-esima potencia. elevado a la redondeado del punto decimal. es 0. n <0. Retorna la tangente hiperbólica de n. n. Retorna Retorna el menor entero mayor o igual a n. expresado n-ésima potencia. la función n >0. hiperbólico de n. a 0 lugares. n. a m lugares a la derecha es omitido. si retorna 0. si m n truncado a m es omitido. forma 2 SQL> select avg(art_peso) "Peso medio" 2 from articulos1. expresado en raSi la función retorna -1. abs(n) ceil(n) cos(n) cosh(n) Función Uso Retorna el valor absoluto del número Retorna el coseno de Retorna el coseno radianes.n) round(n[. Retorna el seno de n. Peso medio ---------209. Devuelve un resultado real.m]) e elevado a la Retorna el mayor entero menor que o igual a Retorna el logaritmo natural de que 0. la función retorna 1.230769 1 fila seleccionada. expresado en radianes. expresado en radianes. Si es negativo redondea a la izquierda del punto n =0. a 0 lugares. en exp(n) floor(n) ln(n) log(m.1: Funciones numéricas . Retorna la raíz cuadrada de Retorna la tangente de radianes. de n.´ 4. Retorna el logaritmo. si m sign(n) sin(n) sinh(n) sqrt(n) tan(n) tanh(n) trunc(n[. base Retorna el resto de si n. si dianes.6 Los valores null y la funcion nvl 75 Ejemplo 4.n) power(m.

Pone serie con todas las letras en mi- serie1. serie1. Extrae un trozo de en la posición longitud. n [. serie. se- Pone en mayúsculas la letra inicial de serie. Retorna m y de serie comenzando n caracteres de serie con todos los caracte- res en mayúsculas. Equivale a usar ||.serie2) initcap(serie) lower(serie) lpad(serie1. byte Retorna el número de caracteres de serie. [conjunto]) Retorna serie1 concatenada rie2. Retorna Elimina caracteres desde la izquierda de núsculas. Tabla 4.76 Funciones y expresiones Función chr(n) Uso Retorna el caracter que tiene equivalente binario a n en el conjunto de con caracteres de la base de datos. rellenada a la izquierda con una longitud n con la secuencia de caracteres de serie2.serie2]) ltrim(serie.2: Funciones carácter que devuelven carácter Función ascii(serie) Uso Retorna la representación decimal en el conjunto de caracteres de la base de datos del primer de length(serie) serie. Tabla 4. Igual que Igual que túa a la derecha de derecha de la serie1.m [. [conjunto]) soundex(serie) substr(serie.serie2]) rtrim(serie1. pero a partir de la Retorna una cadena de caracteres conteniendo la representacion fonética de serie.n]) upper(serie) conjunto. concat(serie1. que comiencen con el caráclpad pero el relleno se efecltrim ter a eliminar hasta el primer carácter no incluido en rpad(serie1.3: Funciones carácter que devuelven un número .n [.

exp2) Si exp1 es nulo devuelve nulo devuelve exp1.fmt]) especica el lenguaje en el que se devolverán los nombres del día. varchar2 en el formato especicado por el for- varchar2 d fmt.fmt[.´ 4. Tabla 4.fmt[.6 Los valores null y la funcion nvl 77 Función to_char(d[. de tipo a tipo number char (entero). Retorna el nombre del usuario actual de cle.'ndl']]) fmt. exp2 . Ora- Tabla 4. ndl to_char(n[. de tipo de datos n usando el formato de número opcional to_date(ch[. Convierte varchar2 función ch de tipo char a tipo de datos fecha.'ndl']]) Uso Convierte d de tipo de datos fecha a un valor de tipo de dato mato de fecha mato.5: Otras funciones . Si se omite el for- es convertido a un valor de con formato por defecto. si exp1 convierte no es Los argumentos pueden ser de cualquier tipo de dato.fmt]) to_char. ndl o o tiene el mismo signicado que en la to_number(ch[. Oracle exp2 al Retorna un entero como identicador único del usuario actual. Si los tipos de datos son diferentes tipo de datos de uid user exp1.4: Funciones de conversión de tipos de datos Función Uso nvl(exp1. del mes y sus abreviaturas. Convierte varchar2 ch. Convierte number a un valor de tipo de dato varchar2.

devuelve registros cuando expr es not null. n. un número. Devuelve la desviación estándar x. Devuelve la suma de valores de Devuelve la varianza de mero. x.6: Funciones de grupo . expr. un nú- Tabla 4.78 Funciones y expresiones avg([distinct|all] n) count(*|[distinct|all] expr) Función Uso Calcula la media aritmética de la consulta. expr. Si se especica n. Devuelve el valor máximo de Devuelve el valor mínimo de de Retorna el número de registros de max([distinct|all] expr) min([distinct|all] expr) stddev([distinct|all] x) sum([distinct|all] n) variance([distinct|all] x) expr.

donde el resultado de una constituye el punto de partida para la ejecución de la del nivel inmediatamente superior. También se estudiará los diferentes operadores de que disponemos. pero el tiempo invertido en la obtención del resultado varía según la expresión y también según la lógica seguida por el optimizador para organizar la consulta. select puede ltrarse según select.Cap´ ıtulo 5 Consultas anidadas En este capítulo podremos comprobar cómo relizar una consulta cuando los criterios de selección los obtenemos del resultado de una consulta. Teóricamente. de una consulta Para hacer esto. no hay límite para el número de niveles de anidación. El lenguaje 1 SQL ofrece a menudo la posibilidad de escribir de distintos modos una misma consulta. Por tanto. 5. Ver capítulo 6. . a su vez. no es posible decir a priori cuál es la formulación más ecaz. llamada anidada. Debemos tener en cuenta que las consultas de nivel inferior deben ir entre paréntesis. debemos anidar las consultas. 1 Esta operación corresponde al producto natural o join. y de hecho ocurre. que los criterios de selección de tuplas sean el resultado. Puede ocurrir. A veces se puede expresar el mismo tipo de consulta mediante una unión de tablas . Con esto conseguimos que el criterio de selección de tuplas sea el resultado de una consulta a la base de datos. Introducción where o Hemos visto que la información que devuelve una consulta un criterio denido en una cláusula having.1.

. Hemos de señalar que una consulta anidada no puede contener la cláusula ya que ésta se utiliza para ordenar el resultado de una consulta principal. etc. . llamada consulta anidada. etc. y la segunda ltraría la tabla en base a este valor.3. La subconsulta se evalúa en primer lugar y el resultado se sustituye dinámicamente en la consulta de nivel superior. las consultas cuyo criterio de selección depende del resultado devuelto por otra consulta.]. order by.] [HAVING nom_columna.). expresiones. FROM nom_tabla WHERE nom_columna operador_de_comparación (SELECT nom_columna(s). Devolución de un solo valor where principal... produciendo el where de la consulta de primer nivel.2. 5. se denomina consultas anidadas. Formato: SELECT nom_columna. FROM nom_tabla [WHERE criterio de selección de las filas] [GROUP BY nom_columna. La consulta interior puede obtener valores desde otra tabla diferente a la referenciada en la cláusula select exterior.80 Consultas anidadas En SQL. Combinación con operadores lógicos or y Podemos combinar dos consultas anidadas mediante los operadores lógicos utilizadas en la cláusula and. etc. Las consultas anidadas también se pueden usar en la cláusula mismo efecto que en la cláusula La columna de la cláusula where. expresiones. Una subconsulta puede devolver un único valor que sirve como valor de comparación de la consulta de la cláusula Una primera consulta determinaría el valor del criterio de selección. Las columnas devueltas por una consulta interior deberán corresponderse con las columnas where de la consulta exterior. como criterio de selección de una consulta principal. debe ser del mismo tipo que los valores devueltos por la subconsulta.. 5. El ejemplo 5. tanto en su número como en el . expresiones. Las expresiones y las funciones pueden incluirse como columnas de las consultas anidadas. having.1 nos muestra cómo utilizamos el resultado de una consulta.

1 Clientes que viven en el mismo pais que el no 3 SQL> select clt_num numero. clt_apell apellido 2 from clientes 3 where clt_pais = 4 (select clt_pais 5 from clientes 6 where clt_num = 3). clt_nom nombre. NUMERO ---------3 4 6 8 NOMBRE -------------------jean michel marcel gerad APELLIDO ------------------------dupont dupret souris courbon 4 filas seleccionadas. NOMBRE -------------------calculadora calendario boligrafo lujo NUMERO ---------2 3 15 3 filas seleccionadas.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.3 Combinacion con operadores logicos 81 tipo de datos. Vemos que hemos Ejemplo 5. where y cada uno de ellos se obtiene a partir del resultado de una consulta anidada.´ ´ 5. Ejemplo 5.2 y 5. . 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).3 tienen dos criterios de selección en la cláusula empleado diferentes operadores de comparación. Formato: WHERE nom_columna operador comparativo (consulta anidada) operador_lógico nom_columna operador comparativo (consulta anidada) Los ejemplos 5.

4. veremos que hemos utilizado el operador de igualdad cuando teníamos la certeza de que la consulta anidada solamente podía devolvernos un único valor y hemos utilizado el operador mayor que cuando había posibilidad de que la consulta anidada devolviera más de una tupla. 5. . 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.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.3. El operador de comparación  =  es más eciente cuando se conoce que la subconsulta devolverá una única la. NOMBRE -------------------impresora calculadora lampara lampara lampara lampara boligrafo lujo NUMERO ---------1 2 4 5 6 7 15 7 filas seleccionadas. 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). Si observamos los ejemplos 5.2 y 5. Devolución de múltiples las all (todos) o La consulta anidada debe incluirse en una cláusula 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.82 Consultas anidadas Ejemplo 5. Esto ocurre siempre que utilicemos este operador con la clave primaria de una tabla.

5. art_nom nombre 2 from articulos 3 where (art_col. una tabla temporal. art_peso 5 from articulos 6 where art_num = 10). 5. el orden de las columnas expresadas en la cláusula consulta de nivel inferior. Es decir. sino que para cada valor de la consulta . se utiliza como criterio de selección en la consulta inmediata superior.4 Articulos que tengan el mismo color y el mismo peso que el no 10 SQL> select art_num numero. El ejemplo 5.6. ésta se evalúa totalmente y su resultado. la consulta anidada no se evalúa totalmente devolviendo una tabla temporal. En tales subconsultas. NUMERO ---------10 12 NOMBRE -------------------boligrafo boligrafo lujo 2 filas seleccionadas. Subconsultas correlacionadas select Cuando se realiza una consulta anidada. Dichas columnas se corresponden plenamente con las expresadas en la cláusula consulta de primer nivel.art_peso) = 4 (select art_col. Devolución de múltiples columnas where de la Puede darse también el caso de que las subconsultas devuelvan más de una columna.4 vemos que la consulta anidad devuelve una úncia tupla que contiene dos columnas.5 Devolucion de m´ ltiples columnas u 83 5. Formato: WHERE (nom_columna1. Esto no siempre es tan sencillo. ya que a veces la consulta superior y la anidada correspondiente pueden estar correlacionadas. nom_columna2) operador (consulta anidada) Ejemplo 5. deberá corresponder al orden de columnas seleccionadas por la where del nivel superior deberán where de la consulta principal. El nombre de las columnas en la cláusula tabla denida en la cláusula de la consulta anidada se relaciona con la from de dicha consulta. Las columnas de la cláusula estar situadas entre paréntesis.´ 5.

Formato: SELECT alias1. Los operadores any y all La lista obtenida por una subconsulta puede tratarse mediante los operadores todos puesta por un operador comparativo (=. where de la consulta anidada comprueba que el valor que viene de la consulta externa sea igual al valor en la consulta interna.nom_columna5). >=) seguido por uno de los y. alias1. La subconsulta debe colocarse en una cláusula all o any where com<>. el operador de intervalo y nos queda por ver los operadores todo. !=. Esto signica que un valor obtenido mediante una subconsulta depende de una variable que recibe un valor desde la consulta de nivel superior.5 nos muestra una consulta correlacionada donde la tabla de la consulta anidada y de la consulta principal es la misma. tras éste. Las consultas anidadas correlacionadas nos pueden obligar a usar alias para las tablas denidas en las cláusulas from correspondientes.nom_columna1 FROM nom_tabla1 alias2 WHERE alias1. al menos uno y el operador de existencia. Operadores Hasta este momento hemos visto los operadores de comparación. . 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 cláusula La cláusula where de la consulta superior. los operadores lógicos.7. 5.1. >. 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.7.nom_columna1. o los valores a la cláusula where externa. <=. operadores all o al menos uno any. 5.nom_columna3=alias2. <. los patrones.nom_columna4 FROM nom_tabla1 alias1 WHERE criterio_de_selección (SELECT alias2. por la consulta anidada. y así evaluarla y devolver el. El ejemplo 5. Esto hace que tengamos que utilizar alias para las tablas y así poder identicar a los atributos implicados en dicha consulta.84 Consultas anidadas superior realiza una evaluación de la consulta anidada.

art_col = t2. 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. El operador any comprueba que al menos una columna de la tabla de la consulta principal cumpla la condición de la consulta anidada para que sea verdadero el criterio de selección de la cláusula El operador where. Se desea encontrar todos los artículos cuyos pesos sean mayores que el peso de cualquiera de los artículos de color .7 Operadores 85 Ejemplo 5. art_nom nombre 2 from articulos t1 3 where art_num in 4 (select art_num 5 from articulos t2 6 where t1.5 Datos de los artículos que tienen el mismo color de los que pesan más de 10g SQL> select art_num numero.6 nos muestra el uso del operador blanco. etc.5.art_peso > 10).art_col and t2. Formato: SELECT nom_columna. where será verdadero. all comprueba que la condición de la consulta anidada se cumpla para todas las tuplas de la consulta anidada y así el criterio de la cláusula El ejemplo 5. any. FROM tabla WHERE columna operador_de_comparación ANY ó ALL (Subconsulta que retorna múltiples valores). expresiones.

El operador El operador in es equivalente a = any. Es preferible emplear en su lugar consultas que hagan uso de funciones sobre los grupos o sobre las consultas de existencia. Con el operador al menos de los valores invocados por la consulta anidada.7. El operador exists El operador existencial exists se emplea para realizar consultas de existencia.3. .7.86 Consultas anidadas 5. all o <>all. Resumen Con el operador all la condición se cumple si la comparación se verica para todos any la condición se cumple si la comparación se verica para uno los valores invocados por la consulta anidada. art_nom nombre 2 from articulos 3 where art_peso > any 4 (select art_peso 5 from articulos 6 where art_col = 'blanco'). con- sultas en que necesitemos utilizar el cuanticador universal para todo o la operación de división del álgebra relacional.6 Artículos que pesen más que cualquiera de los de color blanco SQL> select art_num numero. 5. El empleo de any y/o all es bastante delicado y puede llevar fácilmente a cometer errores. not in es equivalente a != Ejemplo 5.-------------------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. NUMERO NOMBRE ---------.2.

.8 Consulta anidada en una clausula having 87 La subconsultas de existencia debe colocarse dentro de una cláusula de la palabra clave de una la por lo menos. Proveedores siempre que exista el proveedor 5. La selección se hace en base al criterio expresado en la cláusula having. Formato: HAVING {columna | función} {operador_de_comparación | lista} {(subconsulta anidada) | constante | columna | función} El ejemplo 5. En el ejemplo 5. Consulta anidada en una cláusula having having permite especicar un criterio de selección que debe vericar los Una cláusula grupos.´ 5.8 nos muestra cómo hacemos una selección de entre todos los grupos obtenidos. a su vez. En caso contrario.8. La consulta anidada será cierta si encuentra una o más las. luego debemos utilizar el asterisco (*). 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 condición. Este criterio puede. La condición se cumple si la consulta anidada da un resultado Formato: SELECT columnas FROM tabla WHERE EXISTS (Subconsulta que retorna uno o múltiples valores). depender del resultado de una consulta anidada.7 observamos que se nos mostrará la tabla Sanjita. la cláusula La cláusula where no sería cierta y no se ejecutaría la consulta superior. La existencia de las de la consulta interna se puede utilizar para cualicar las en una consulta exterior. where y después exists.

7 Si tenemos un proveedor que se llame «sanjita» muestra todos los proveedores SQL> select prv_num numero. 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). .88 Consultas anidadas Ejemplo 5. NUMERO ---------1 2 3 4 5 NOMBRE ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp 5 filas seleccionadas. Colores de los artículos cuya media de pesos es superior a la media de todos los artículos COLOR ------blanco verde 2 filas seleccionadas. prv_nom nombre 2 from proveedores 3 where exists 4 (select * 5 from proveedores 6 where prv_nom = 'sanjita').

1. necesitamos que una columna contenga la misma información en diferentes tablas y sea este campo el que nos sirva de unión entre las diversas tablas.1. . Estas columnas que nos sirven para recabar información entre tablas se denominan claves foráneas y la operación que nos permite hacer esto corresponde a la operación de producto natural o join1 . Búsquedas multitablas 6. Para poder hacer esto. También se muestran unas recomendaciones para optimizar nuestras consultas. 6. Introducción Las consultas que realizamos normalmente requieren información que están repartida o contenida en más de una tabla. 1 En álgebra relacional esta operación se representa con el símbolo . 6.1.2.1.Cap´ ıtulo 6 Consultas a multiples ´ tablas Presentamos en este capítulo cómo podemos hacer uso de los operadores de reunión y de los tradicionales de conjuntos para obtener información procedente de varias tablas. Producto cartesiano La operación de producto cartesiano une cada la de una tabla con cada una de las las de la otra tabla.

tab2.nom_colum. posteriormente. a su vez. lo que realizaremos es un producto cartesiano con las consecuencias de pérdida de información. Producto natural Esta operación se realizará sobre las columnas que contienen la misma información en tablas distintas ya que si esto no lo tenemos en cuenta. hemos aplicado un criterios de selección dodne el n producto theta 2 del artículos sea menor que 4. join entre tabla y así 2 En álgebra relacional se expresa con el símbolo θ. observando este ejemplo... debemos realizar un producto natural o no ocurrirá lo mismo que lo visto en el ejemplo 6. Si obsevamos más detenidamente dicho ejemplo. vemos que en primer lugar hemos hecho un producto cartesiano entre las tablas denominan Proveedores o y Articulos y. Dicho producto es. la unión de tablas se hace mediante la igualdad de valores entre esas columnas. select MxN N. Si la primera tabla contiene M las. .. cuando sabemos que realmente un artículo sólo lo suministra un proveedor..90 Consultas a m´ ltiples tablas u Formato: SELECT tab1. Las columnas comunes se corresponden con las claves foráneas.1. y la segunda producto cartesiano de estas dos tablas estará formado por una tabla con Posteriormente. tab2. es decir. información redundante e inconsistencia de los datos. Si lo que queremos es reunir información entre tablas pero que el resultado sea correcto.3. el las. y éstas aparecerán en el mismo orden especicado.1. o sea. FROM tab1. una tabla derivada de la concatenación de las las de una tabla original con las las de otra (o de otras) también original. Para ello. debemos tener al menos una columna común en las tablas sobre las que vamos a realizar esta operación. .. se comienza realizando el producto cartesiano de las mismas. La tabla resultante de esta operación contiene La consulta del ejemplo 6. se proyectarán las columnas seleccionadas en la cláusula información que no es cierta. que los proveedores están asignados a todos los artículos.nom_colum. cada la de una tabla es emparejada sucesivamente con todas las las de la otra. Podemos comprobar.1 nos da una tabla donde aparecen los datos principales de los artículos cuyos números sean menores que 4 y de sus proveedores. Esta dos operaciones se 6. El proceso que se sigue es el siguiente: si la cláusula from incluye varias tablas..

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 cláusula columnas buscadas y escribir una condición de igualdad en la cláusula columnas que permiten la unión de las tablas. La cláusula 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 cláusula

from contiene más de una tabla, luego se comenzará realizando el where.
La tabla así formada

producto cartesiano. Posteriormente, se descartarán todas las las resultantes del producto que no cumplan el criterio de unión contenido en la cláusula será posteriormente ordenada según las columnas indicadas en la cláusula

order by.

La

búsqueda concluye con la proyección de las columnas que se especican en la cláusula

select.
Esta descripción del proceso se corresponde con una concepción típica del razonamiento humano. En la realidad, el optimizador desempeña un importante papel, efectuando, de forma inmediata, las selecciones y proyecciones sobre las tablas iniciales, de modo que la tabla resultante del producto cartesiano jamás 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 artículos, la consulta sería la mostrada en el ejemplo 6.2. Sólo se van a seleccionar las tuplas en las que el código del proveedor sea el mismo en las dos tablas.

Ejemplo 6.2

Datos de los artículos 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 cláusula

where

puede soportar condiciones de selección de tuplas, utilizando los

operadores ya vistos, junto con los criterios de unión entre tablas (producto natural) siempre que estén combinados con operadores lógicos. Por ejemplo, en el ejemplo 6.1 aparecen artículos con proveedores que no son realmente quienes los suministra. Esto lo podemos subsanar realizando un producto natural más el mismo criterio de selección 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 cláusula

from.
La cláusula

where especica los criterios para unir las tablas, así como el de selección select.

de los registros. Las columnas que se quieren proyectar de una u otra tabla irán en la cláusula

6.1 B´ squedas multitablas u

93

Puede utilizarse la expresión

nom_tabla.*

para obtener todas las columnas de una

tabla en los productos cartesiano y natural. Las columnas con igual nombre en ambas tablas deberán 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 unión o criterio de unión. Pueden utilizarse más de un par de columnas para especicar la condición de unión entre dos tablas cualquiera. Cuando se quiere realizar el producto natural entre menos

n-1

n

tablas, es necesario tener al

condiciones de unión 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 artículos 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. Unión externa
Esta unión, también llamada

outer-joins, permite resolver problemas del siguiente tipo:

se desea obtener una lista de las en función de un criterio que es función de la unión con otra tabla, si la condición de unión 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 unión externa. En

Oracle

una unión externa se identica mediante la presencia del símbolo (+)

en la cláusula determinados.

where,

después del nombre de la columna donde pueden no darse valores

Ver capítulo 7. en realidad. 2 to_date(vnt_fch. Esto lo podemos ver resuelto en el ejemplo 6. además.94 Consultas a m´ ltiples tablas u La unión externa devuelve todas las las recuperadas por medio de un producto natural y. es decir. 6.4 Datos de artículos cuyos no es mayor que 4 que se han vendido o no SQL> select art_num numero.'yymmdd') fecha 3 from articulos. añade las tuplas de una tabla que no están emparejadas con las tuplas de la otra tabla. Si un artículo aún no se han vendio también queremos que aparezcan sus datos. las dos tablas que queremos unir son.4. 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. la misma tabla.1. Una unión externa hace que el SQL suministre columnas nulas o vacías en una tabla para las las que no cumplen la condición de unión. Esto se produce cuando el criterio de unión afecta al valor de una columna en relación al valor de esta misma columna en otra la de la misma tabla.6. Ejemplo 6. .ventas 4 where art_num = vnt_art(+) and art_num > 3. Autouniones A veces queremos realizar una unión entre dos tablas que no son distintas. Una autounión une las de una tabla con ella misma o con otras las en la misma tabla. Por ejemplo. Obsérvese que le hemos dado formato al atributo fecha para que no aparezca tal como se han introducido los valores. Una tabla puede estar unida dentro de sí misma en columnas que contengan el mismo tipo de información. art_nom nombre. queremos saber los datos de los articulos y la fecha en que se han vendido cuyos números sean mayores que 4.

Cuando realizamos este tipo de unión es necesario utilizar alias pues tenemos que diferenciar cuando estamos haciendo referencia a una tabla y cuando hacemos referencia a la otra tabla. t1.clt_nom nombre.. sabiendo que las dos tablas son la misma.1. . A la tabla se deberá asignar un alias para sincronizar qué columnas van a ser obtenidas de la tabla. .columna.5 nos muestra los datos de los clientes que viven en el mismo país de los que su número es mayor que 10 y su nombre comienza por m.clt_pais and t2.columna = alias2. Al igual que en cualquier otra unión. Resumen Una tabla puede unirse consigo misma como si fueran dos tablas separadas.1 B´ squedas multitablas u 95 Formato: SELECT alias1.clt_nom like 'm%' and t2. 6. El ejemplo 6.clt_pais = t2. Ejemplo 6.clt_apell from clientes t1. FROM tabla1 alias1. alias2.6. tabla1 alias2 WHERE alias1.columna.columna.7.clt_num > 10.clt_num numero. 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. la unión se realiza entre columnas que contienen el mismo tipo de información. La autounión es útil para unir una la de una tabla con otra de la misma tabla. t1..5 Autouniones SQL> 2 3 4 select t1. clientes t2 where t1.

6. like).2. >=. 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. según su peso SQL> select art_num numero.6 Clasificar los artículos cuyos no estén comprendidos entre 2 y 10. Ejemplo 6.6 nos muestra cómo podemos hacer estos tipos de uniones. En cuanto al producto cartesiano. También podemos llamar a esta unión unión mediante la no igualdad. between. El ejemplo 6. art_nom nombre. <>.8. !=. <=. Sólo la unión y el producto cartesiano es común a todos los Las otras dos operaciones son muy potentes pero sólo se dan de forma excepcional en los criterio de unión entre tablas.96 Consultas a m´ ltiples tablas u 6. intersección. diferencia y producto cartesiano (ya visto anteriormente) de conjuntos. pesos 3 where art_peso between peso_min and peso_max 4 and art_num between 2 and 10. Dependiendo del propósito particular de la campaña se puede enviar cartas de una de las siguientes maneras: SGBD. Operadores conjuntistas SGBD. >. <. peso_nom tipo 2 from articulos. Un ejemplo clásico de esto puede ser dos o más listas de direcciones que se unen antes de empezar una campaña de publicidad por correos. Las operaciones conjuntistas son cuatro: unión. Hay ocasiones en las que se necesita combinar informaciones de tipo similar.1. Según el peso de cada artículo los hemos clasicados utilizando la clasicación expresada en la tabla Pesos. su realización es automática cuando se hacen consultas que afectan a varias tablas y no indicamos un . Uniones no comunes Cabe observar que la unión entre tablas puede quedar especicada mediante cualquiera de los operadores de comparación (=. in.

. . entonces se seleccionan también las las or colocado entre dos condiciones.. [WHERE condiciones] [ORDER BY entero]. por lo general.. Este operador retorna todas las las de múltiples consultas. sino al resultado global. Si al operador idénticas. Si la cláusula order by se usa en una consulta. En el ejemplo 6..1.. Oracle utiliza los operadores union. Si las tablas unidas pertenecen a subconjuntos de la misma tabla. . Sólamente a aquellas personas que están en una lista y no en la otra.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) Sólamente a aquellas personas que están en ambas listas. . intersect y minus no pueden llevar las by. partiendo de dos tablas temporales. Esto signica que. el uso de este operador es completamente equivalente al de un operador lógico union le sigue la palabra clave all.2.7 se ha obtenido una lista con todos los números de los artículos independientemente de sí se han vendido o no. FROM nom_tabla.. select afectadas por los cláusulas distinct y order 6. La cláusula order by no afecta a la segunda consulta.. eliminando o no las las repetidas. intersect operadores y minus. se puede crear una tercera que contenga el conjunto de las de las dos tablas iniciales. 3 Ver capítulo 3. ésta deberá especicarse por posición3 . En las dos tablas el tipo de columnas debe ser compatible. Para realizar estas tres combinaciones de listas. FROM nom_tabla.6. [WHERE condiciones] {UNION | UNION ALL} SELECT nom_columna. las consultas union.. Hay que tener presente que. . El operador union Este operador efectúa la unión de los resultados de dos consultas select. Formato: SELECT nom_columna..

.. NUMERO ---------1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 15 filas seleccionadas. Formato: SELECT nom_columna. En el ejemplo 6.98 Consultas a m´ ltiples tablas u Ejemplo 6.. FROM nom_tabla... . FROM nom_tabla. ..2. El operador intersect Este operador encuentra las tuplas comunes en las dos consultas...2. 6.8 solamente aparecen los números de los artículos que se han vendido.. [WHERE condiciones] [ORDER BY entero]. . .7 Los números de todos los artículos que se han vendido o no SQL> 2 3 4 5 select art_num numero from articulos union select vnt_art from ventas. [WHERE condiciones] INTERSECT SELECT nom_columna.

3.2 Operadores conjuntistas 99 Ejemplo 6.7 y 6. . El ejemplo 6. El operador minus El operador minus obtiene todas las las seleccionadas por la primera consulta pero no por la siguiente. ..2. Formato: SELECT nom_columna.. NUMERO ---------1 2 3 4 6 9 10 11 12 13 14 15 12 filas seleccionadas. .9 nos muestra solamente los artículos que aún no se han vendido y podemos hacer una comparación con los ejemplos 6. . FROM nom_tabla.8 Los números de todos los artículos que se han vendido SQL> 2 3 4 5 select art_num numero from articulos intersect select vnt_art from ventas.. [WHERE condiciones] MINUS SELECT nom_columna.. .. 6... [WHERE condiciones] [ORDER BY entero].6.8 ya mostrados.. FROM nom_tabla.

Para fusionar los resultados procedentes de dos cláusulas el operador where.3. las que se reeren a Cuando se tenga que emplear una función sobre grupos en una cláusula realizar una consulta anidada. e incluirlas en la cláusula from. where. Determinar las condiciones de selección que limitan la consulta. NUMERO ---------5 7 8 3 filas seleccionadas. basta con emplear Hay que precisar el orden de aparición de las las del resultado de una consulta con una cláusula Los posibles alias que demos a las columnas. Decidir qué columnas se desean visualizar o proyectar y su orden de aparición para incluirlas en la cláusula Si la cláusula select. será necesario una cláusula que agrupe todas las columnas citadas en la cláusula funciones en cuestión.9 Los números de todos los artículos que no se han vendido SQL> 2 3 4 5 select art_num numero from articulos minus select vnt_art from ventas. select. Consejos prácticos 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. posible. order by. Las condiciones con proyección sobre grupos deben gurar en una cláusula valores individuales. salvo las group by select conlleva funciones sobre grupos. Ejemplo 6. o cuando haya necesidad de un valor de una columna de otra tabla distinta.100 Consultas a m´ ltiples tablas u 6. select. deberán estar en la primera consulta cuando usamos los operadores conjuntistas. aparecerán en una cláusula having. . hay que union.

12. o 3. La razón de ello estriba en que las técnicas utilizadas por el optimizador para organizar la consulta depende de la formulación de la consulta y del SGBDR 5 . al menos.4. Consulta de existencia : listar a los clientes 3 en la tabla Ventas.11.5.4. si pretenden optimizar sus aplicaciones. 2) Consulta anidada : listar a todos los clientes cuyo número se incluye en el conjunto de los que han comprado el artículo n 3.13.4.4. Ver ejemplo 6.10. teniendo en cuenta que sólo necesitamos los datos de aquellos clientes que han comprado el artículo n Ver ejemplo 6. Ver ejemplo 6. Existen. Por desgracia.´ 6. Las reglas que siguen facilitarán a buen seguro la tarea del programador novel. aunque no siempre es fácil decidir la mejor forma de expresar una consulta compleja.2. 1) Unión entre tablas : establecer un producto cartesiano entre las tablas Clientes y Ventas mediante una igualdad en el número del cliente en ambas tablas. de Gestión de Bases de Datos Relacionales.4 Optimizacion de las consultas 101 6. en la situación actual de las versiones del SQL.4 y 6. estas distintas formulaciones SQL arrojan tiempos de ejecución con frecuencia muy distintos y a veces hasta inesperados. 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 artículo n o 3. .1. si existen que han comprado el artículo n o 6. ¾Es mejor usar una unión de tablas o una consulta anidada? ¾Interesa el empleo del operador exists? A todas estas preguntas vamos a intentar dar respuesta en este apartado. si cada usuario es libre de elegir su propia manera de plantear el problema. cuatro formulaciones diferentes para esta consulta: una unión entre tablas. una consulta anidada. Introducción Con el lenguaje SQL es posible expresar una misma consulta de distintos modos. Ello obliga al usuario a comprobar el comportamiento de su versión de para cada tipo de consulta y para cada formulación. 4 Ver 5 Sistema preguntas 6.4. o 3) Consulta correlacionada : listar a los clientes cuya número pertenezca al conjunto de números de clientes que han comprado el artículo n 4) o 3. Optimización de las consultas 6. Ver ejemplo 6. una consulta correlacionada y una consulta basada en el operador exists4 . Ecacia Autorizar varias formulaciones para una misma consulta puede considerarse una ventaja del lenguaje.

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 cláusula precedida de Recordemos que la expresión exists (select * from .1.3. Esto es lógico. una consulta mediante subconsulta permite sólo la visualización de informaciones situadas en la tabla exterior. Examinando las consultas que se pueden hacer a una base de datos. redundante en SQL. pero quizás menos clara. Las subconsultas tienen la ventaja de descomponer el problema. Unión entre tablas o consulta anidada Como se ve en el ejemplo propuesto en el apartado 6. where de la subconsulta.4. algunas consultas no pueden expresarse sino con la ayuda del operador Como conclusión. dado que la consulta niega el enlace entre las tablas. Así. Cuando la consulta consiste en recuperar información de una sola tabla. es. in puede ser expre- Pero lo inverso no es verdad. pero siendo necesaria otra para condicionar la selección de las las de la primera. la solución es inmediata con el operador en el ejemplo anterior (not delante de in o con exists.4.. lo que hace que las consultas sean más fáciles de escribir y de comprender. la unión ofrece con frecuencia una formulación más concisa. las uniones resultan inoperantes en determinadas consultas multitablas. se llega fácilmente a la conclusión de que toda subconsulta precedida por el operador sada con el operador exists. Empleo del cuanticador existencial verdadero (true) si la consulta tiene resultado no vacío.. si se exceptúa el hecho de que permite ex- in in ante una subconsulta puede ser sustituido por exists.4. En efecto. Por lo tanto. el operador El operador exists. dado que basta con invertir las condiciones in o exists). pues.) es un predicado que vale not. presar una consulta de manera conjuntista. algo que algunos usuarios preeren en lugar . Por el contrario.102 Consultas a m´ ltiples tablas u 6. Cuando la expresión está el predicado se evalua como verdadero si no existe ninguna la de la tabla interior que satisface las condiciones exigidas. se puede comprobar fácilmente que no es posible ninguna condición de unión para solucionar una consulta que efectúa una operación conjuntista de diferencia. siempre es mejor el uso de una consulta anidada. La unión es indispensable para transcribir una consulta que pretende recuperar información derivada de distintas tablas. Por el contrario.4. 6.

´ 6. y se seleccionan las tuplas de los clientes que han comprado el artículo 3.4 Optimizacion de las consultas 103 del enfoque predicativo de exists. porque los opti- mizadores no son perfectos y el tiempo de ejecución de la consulta con mucho mayor en algunos casos.10 SQL> select clt_num numero.5. ventas 3 where clt_num = vnt_clt and vnt_art = 3. El operador in a veces es necesario. En general. exists puede ser exists es necesario para expresar el cuanticador universal muy conocido en lógica. SQL.4. clt_nom nombre. Por otra parte. Solución al ejercicio propuesto 1) Producto natural entre las tablas: se realiza el producto natural entre las tablas y Clientes Ventas. . NUMERO ---------6 13 NOMBRE -------------------marcel diego APELLIDO ------------------------souris cortes 2 filas seleccionadas. pero que no está representado directamente en la expresión para todo puede formularse con la ayuda de uno o dos not exists. clt_apell apellido 2 from clientes. 6. for all. Producto natural Ejemplo 6.

clt_nom nombre.11 SQL> select clt_num numero. 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 correlacionada 2 filas seleccionadas.12 SQL> select clt_num numero. se comprueba mediante una consulta correlacionada si ha comprado el artículo n Ejemplo 6. Esta consulta sirve de criterio de selección para obtener los datos de los clientes que lo han comprado. 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 anidada 2 filas seleccionadas. Ejemplo 6. clt_nom nombre. 3) Consulta correlacionada: para cada tupla de la tabla Clientes o 3.104 Consultas a m´ ltiples tablas u 2) Consulta anidada: se realiza una consulta anidada por obtener los n han comprado el artículo n o o de clientes que 3. .

NUMERO ---------6 13 NOMBRE -------------------marcel diego APELLIDO ------------------------souris cortes 2 filas seleccionadas.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). Ejemplo 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 artículo n o 3. .´ 6.

.

denominadas aritmética de fechas. hora y minuto. desde un simple 15MAR-97 a Decimoquinto día del mes de marzo en el año 764 del reinado de Luis IX. minuto y el segundo de cualquier suceso. Los benecios que proporcionan todos estos detalles deberían ser obvios. Aritmética de fechas posee la capacidad de almacenar y calcular fechas. Tenemos que tener en cuenta que si sumamos un 1 a una fecha se obtiene otra fecha: el siguiente día. . la fecha y hora. día y año. 7. días. meses y años entre fechas dadas. Para almacenar y operar con fechas. así como el número de Oracle segundos. Este capítulo nos muestra las diferentes maneras que tenemos de expresarlas. la fecha. sino también horas.1. También tiene la facilidad de formatear las fechas de cualquier manera que se pueda concebir. Los productos el date SQL*Plus y SQL reconocen las columnas que tienen como tipo de dato y comprenden las instrucciones aritméticas que se hacen con ellas. 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. o la fecha.Cap´ ıtulo 7 Tratamiento de fechas Oracle proporciona un buen método para el tratamiento de las fechas. Así podemos siempre almacenar automáticamente la fecha. Mientras que si restamos una fecha de otra se obtiene un número: la cantidad de días entre las dos fechas. horas. minutos y segundos. hora. minutos. no sólo el mes.

función se puede usar igual que cualquier otra función. Por ejemplo para saber la fecha de hoy. ya que el sistema debe devolvernos la consulta en formato tabla.sql). Determina el número de días entre ambas fechas. La función sysdate 2 Esta función es bastante importante ya que Oracle la utiliza para extraer del sistema operativo la fecha y la hora actual . ver capítulo 4. Tipo de dato devuelto date date date date numérico Tabla 7. Restaría un número de horas.1: Operaciones con fechas La tabla dual 1 proporcionada por Oracle.108 Tratamiento de fechas Sin embargo. puesto que las fechas de Oracle contienen horas. debemos usar esta función junto con la tabla dual. No necesita argumentos. o bien de forma permante incluyendo las órdenes en su chero de arraque (login. Cualquier usuario puede cambiar el formato para una sesión de trabajo. 1 Ver 2 Esta capítulo 4. 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 parámetro más. Restaría un número de días.fecha Denición Añadiría un número de días. por ejemplo obtenga este número fraccional de días entre hoy y mañana es que no es un día exacto. La razón de que se Oracle guarda también las horas.x fecha . realizar una aritmética de fechas puede provocar un poco de confusión. Oracle puede decir que la diferencia entre hoy y mañana es de . Expresión fecha + x fecha + x/24 fecha .5339 días.1 vemos la expresión.x/24 fecha . . Añadiría un número de horas. la denición y el tipo de dato que resulta de hacer algunas operaciones con las fechas. En la tabla 7. es la tabla que se emplea para probar las funciones o realizar cálculos rápidos. Suponemos que x representa a un número entero.2. minutos y segundos. 7.

7. No re- formato.d2) next_day(d. Devuelve la fecha (en formato por defecto) más cercana (anterior o posterior) según la precisión que le indiquemos con quiere argumentos. Devuelve la fecha (en formato por defecto) anterior que primero cumple con la precisión indicada con formato.3.n) last_day(d) months_between(d1.2: Funciones de fecha . Devuelve la fecha del siguiente día después de la fecha dada donde char es el nombre de los días de la semana. excepto la función de tipo numérico.'formato']) sysdate trunc(d[. Devuelve el número de meses entre las fe- d1 y d2. Devuelve la fecha del último día del mes que contiene la fecha chas d. En la tabla 7. 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.1 SQL> select sysdate 2 from dual. Devuelve la hora y el día actual. Fecha actual El ejemplo 7. SYSDATE -------18/11/04 1 fila seleccionada. Tabla 7. El formato en que nos aparece es el formato por defecto que esté denido en el chero de arranque de Oracle. add_months(d. 7.3 Funciones de fecha 109 Ejemplo 7.1 nos muestra el resultado de la utilización de dicha función.char) round(d[.'formato']) Función Uso Añade n meses a la fecha d.2 se muestran las funciones de fechas más usuales.

110

Tratamiento de fechas

La función

sysdate no se puede usar en la cláusula de restricción de integridad check3 .

7.4.

Formatos y conversión de fechas
4

Anteriormente hemos dicho que las fechas se pueden expresar en distintos formatos. También podemos convertir cadenas de caracteres en fechas y viceversa . Las funciones

to_char

y

to_date

se parecen en que ambas tienen poderosas capaci-

dades para formatear, a parte de realizar una conversión 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 encerrándola en el interior de una función

to_date.

fecha

en la

Oracle y no dd-mm-yy. función to_char es
en

cadena

Es una cadena literal, un número literal o una columna de la base de datos

que contiene cadenas o números. En todos los casos, menos en uno, el formato se corresponderá con el descrito con

formato. Sólo en

el caso en que la cadena esté en

el formato denido en el chero de arranque, éste se puede omitir.

formato

Es una colección de más de cuarenta opciones, que se pueden combinar, virtual-

mente, de un número 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 función función

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 según el formato especicado. Para ello, la función

sysdate

debemos convertirla al tipo de datos

char.

3 Creación 4 Ver

de una tabla con el lenguaje de denición de datos. capítulo 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 Número del mes. Abreviatura de tres letras del mes. Como MON pero sólo con la primera letra en mayúscula. Como MON pero en minúscula. El nombre del mes. Como MONTH pero con la primera letra en mayúscula. El nombre del mes en minúscula. Número del día del año. Número del día del mes.

continúa en la siguiente página

112

Tratamiento de fechas

continuación de la página 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

Número del día de la semana. Abreviatura de tres letras del día. Como DY, pero teniendo la primera letra en mayúscula. Como DY, pero todo en minúsculas. El nombre del día de la semana. El día de la semana con la primera en mayúscula. El día de la semana en minúscula. El año con los cuatro dígitos. Año con signo, 1000 a.C. = -1000. Los tres últimos dígitos del año. Los dos últimos dígitos del año. El último dígito del año. El año escrito con letras. Como YEAR con las iniciales en mayúsculas. Como YEAR con todas las letras en minúsculas. Número de trimestre. Número de semana en el año. Número de semana en el mes. Días Julianos desde el 31 de diciembre de 4713 a.C.. Hora del día, siempre de 1-12. Lo mismo que HH. Hora del día de 1-24. Minuto de la hora. Segundo del minuto. Segundos desde la medianoche, siempre desde 0-86399. Puntuación para ser incorporada. Muestra A.M. o P.M., dependiendo del momento del día. Lo mismo pero en minúscula. 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 minúsculas. 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

continúa en la siguiente página

c. pero sin los puntos. Tabla 7.3: Formatos de fechas .4 Formatos y conversion de fechas 113 continuación de la página anterior Elemento Uso bc o ad Lo mismo que b.´ 7.

.

´ APENDICES .

.

la cantidad vendida (vnt_cant ). el número de la tienda de adquisición (vnt_tda ). el precio de venta total (vnt_precio ) y la fecha de la venta (vnt_fch ). Artículos: su peso ( art_num ). y el nombre del proveedor (prv_nom ). tda_num ). el apellido del cliente (clt_apell ). nacionalidad (clt_pais ) y su ciudad (clt_pob ). el área geográca en Clientes: un número de identicación único no vacío (clt_num ).Ap´ndice A e ´ Definicion de las tablas Tiendas: un número de identicación único no vacío ( que se encuentra la tienda ( tda_pob ) y el nombre del gerente (tda_ger ). el nombre del artículo (art_nom ). Suministros: el número del artículo (smt_art ) y el número del proveedor que los suministra (smt_prv ). vnt_art ). el precio de compra (art_pc ). un número de identicación único ( Proveedores: un número de identicación único (prv_num ). Pesos: el nombre de la clasicación del peso ( máximo ( peso_max ) para cada uno. el precio de venta (art_pv ) y el número del proveedor (art_prv ). art_peso ). Ventas: vnt_clt ). peso_nom ). Se supone que un cliente el número del cliente ( el número del artículo adquirido ( no va a comprar dos veces el mismo artículo en un mismo día y en la misma tienda. el peso mínimo (peso_min ) y . su color (art_col ). su nombre (clt_nom ).

.

Ap´ndice 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

Artículos

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

.

-------.-------------------------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 .Ap´ndice 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 -------------------------------------.

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 VARCHAR2(9) NOT NULL NUMBER(38) NOT NULL NUMBER(38) Pesos .-------------------------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 -------.

Oracle.B. Oracle Database 10g. & Abramson. Manual del administrador Osborne McGraw-Hill.A.. M. Uso de Oracle: SQL y PL/SQL Proyecto Sur de Ediciones. E. & Begg. [Abra06] Abramson. I. I. & Navathe.. . 5 [Garc96] a edición. 2002. Abbey. C. 2007. Guía de aprendizaje Osborne McGraw-Hill. Garví García.. M. Manual de referencia McGraw-Hill/Interamericana de España. & Theriault. Guía de aprendizaje Osborne McGraw-Hill. R. Sistemas de Bases de Datos Pearson Addison-Wesley. L. 2006. 1994. Oracle9i. Oracle9i. Fundamentos de sistemas de Bases de Datos Addison-Wesley.. K.Bibliograf´a ı [Abbe02] Abbey. M. & Corey. S. 4 [Elma07] a edición. [Conn05] Connolly. S.. S. Rodríguez Almendros.L. Corey. 2006. G. 2005. [Lone02] Loney. M.. Velasco Anguita. [Koch94] Koch. 1996. Elmasri. M. F. T. M.

SQL Iniciación. Manual del administrador Osborne McGraw-Hill. 1992. . & Bryla. G. S. Korth. 1992. Ledant. [Silb06] Silberschatz.. Oracle Database 10g. H. ORACLE. [Orac92] Manuales de Oracle Oracle Corporation. 2002. Arquitectura. K.126 Bibliograf´a ı [Lone06] Loney.. [Mare92] Marèe. programación y prácticas avanzadas Masson. C. a edición. administración y optimización Díaz de Santos. B.. 2006. Pérez. C. Administración y Análisis de Bases de Datos Ra-Ma. 2006. [Pere02] Oracle9i.A. & Sudarshan. A. 1993. Fundamentos de Bases de Datos McGraw-Hill. S. 5 [Smin93] Smine. H.

es/index.com .uca.htm http://ora.Referencias ´ electronicas http://www.oracle.u440.com http://juno.