Beruflich Dokumente
Kultur Dokumente
PRCTICAS DE BDI
Curso 201112
Prof. Dra. M
ndice general I
1 SGBD Oracle
1. El lenguaje SQL
1.1. 1.2. 1.3. 1.4. 1.5. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Evolucin histrica del lenguaje
1
3
3 4 5 7 8 8 10 11
SQL
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SQL
SQL
. . . . . . . . . . . . . . . . . .
2. SQL*Plus
2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Identicacin ante el
15
15 17 19 20 21 23 24 25
SQL*Plus
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ayudas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
II
ndice general I
2.9.
27 27 29 30 32 32 35 36 38 41
Formateado de columnas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.11.2. Uso de operadores con variables . . . . . . . . . . . . . . . . . . . . 2.11.3. Uso de variables con distintas rdenes . . . . . . . . . . . . . . . . . 2.12. Ficheros de rdenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.13. Resumen de rdenes de
SQL*Plus
. . . . . . . . . . . . . . . . . . . . . . .
43
45
45 46 46 47 54 54 55 56 57 57 58 58 59 60 61
select
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.
insert
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.7.
La orden 3.7.1.
update
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Clusula
set
ndice general I
III
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61 62 63
La orden
delete
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Diferencias entre
drop, delete
truncate
. . . . . . . . . . . . . . . . . .
4. Funciones y expresiones
4.1. 4.2. 4.3. 4.4. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Expresiones La tabla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
65 65 66 67 67 68 68 69 70 71 71 71 73 73
dual
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones numricas
4.5.
group by . having
. . . . . . . . . . . . . . . . . . . . . . . . .
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La clusula . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6.
Los valores
null
y la funcin
nvl
. . . . . . . . . . . . . . . . . . . . . . .
5. Consultas anidadas
5.1. 5.2. 5.3. 5.4. 5.5. 5.6. 5.7. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Devolucin de un solo valor . . . . . . . . . . . . . . . . . . . . . . . . . .
79
79 80 80 82 83 83 84 84 86
Combinacin con operadores lgicos . . . . . . . . . . . . . . . . . . . . . . Devolucin de mltiples las . . . . . . . . . . . . . . . . . . . . . . . . . . Devolucin de mltiples columnas . . . . . . . . . . . . . . . . . . . . . . . Subconsultas correlacionadas . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores 5.7.1. 5.7.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Los operadores
any
all
. . . . . . . . . . . . . . . . . . . . . . .
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IV
ndice general I
5.7.3. 5.8.
El operador
exists
. . . . . . . . . . . . . . . . . . . . . . . . . . .
86 87
having .
. . . . . . . . . . . . . . . . . .
89
89 89 89 90 92 93 94 95 96 96 97 98 99
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
union minus
intersect
. . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3. 6.4.
Consejos prcticos para escribir una consulta . . . . . . . . . . . . . . . . . 100 Optimizacin de las consultas 6.4.1. 6.4.2. 6.4.3. 6.4.4. 6.4.5. . . . . . . . . . . . . . . . . . . . . . . . . . 101
7. Tratamiento de fechas
7.1. 7.2. 7.3. 7.4. Aritmtica de fechas La funcin
107
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
sysdate
Funciones de fecha
ndice general I
APNDICES
A. Denicin de las tablas B. Tablas C. Descripcin de las tablas Bibliografa Referencias electrnicas
115
117 119 123 125 127
ndice de guras I
1.1.
Operadores
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ndice de tablas I
1.1. 1.2.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6 12
SQL
. . . . . . . . . . . . . . . . . . . . . . . . . . .
rdenes de edicin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21 23 25 26 28 28 30 30 33 34
describe btitle
. . . . . . . . . . . . . . . . . . . . . . . y
Especicaciones para las rdenes Variables para las rdenes Opciones para la orden Opciones para la orden Variables del sistema
btitle
y
ttitle .
. . . . . . . . . . . . .
ttitle
. . . . . . . . . . . . . . . . .
column format
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.
45
Funciones numricas
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
75 76 76 77 77 78
Funciones carcter que devuelven un nmero . . . . . . . . . . . . . . . . . Funciones de conversin de tipos de datos Otras funciones . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones de grupo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ndice de tablas I
Operaciones con fechas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Funciones de fecha Formatos de fechas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
ndice de ejemplos I
Identicacin ante el producto . . . . . . . . . . . . . . . . . . . . . . . . . Identicacin ante el producto . . . . . . . . . . . . . . . . . . . . . . . . . Identicacin ante el producto . . . . . . . . . . . . . . . . . . . . . . . . . Salida del producto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conexin con usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conexin con usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conexin con usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Desconexin con usuario Mostrar el contenido del . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18 18 18 18 19 20 20 20 22 22 22 23 24 25 25 25 26 27 29 31
buer
. . . . . . . . . . . . . . . . . . . . . . . .
buer
. . . . . . . . . . . . . . . . . . . . .
2.11. Borrar lnea y cambiar texto . . . . . . . . . . . . . . . . . . . . . . . . . . 2.12. Manera de mostrar un error 2.13. Salvar el . . . . . . . . . . . . . . . . . . . . . . . . . .
buer
buer
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.17. Descripcin de un objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.18. Ayuda de una orden 2.19. Ttulo y pie de pgina 2.20. Formateo de columnas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XII
ndice de ejemplos I
2.21. Establecer variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.22. Valores de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.23. Asignar valor a variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31 32 34 34 35 36 37 37 37 38 39 40 41 47 47 50 50 51 52 53 54 55 56 58 61 62 66 66 68
. . . . . . . . . . . . . . . . . . . . . . . . . . .
2.26. Uso de variables con & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.27. Uso de variables con & (cont.) . . . . . . . . . . . . . . . . . . . . . . . . . 2.28. Redenicin de operador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.29. Contenido del chero nombre_chero . . . . . . . . . . . . . . . . . . . . . 2.30. Uso del operador & con rdenes de 2.31. Uso de variables con & y && 2.32. Fichero de rdenes:
SQL*Plus
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
login.sql .
2.33. Lista de todas las rdenes del 3.1. 3.2. 3.3. 3.4. 3.5. 3.6. 3.7. 3.8. 3.9.
SQL*Plus .
. . . . . . . . . . . . . . . . . . . .
Proyeccin de todos los datos de los proveedores . . . . . . . . . . . . . . . Artculos que pesan ms de 100g el nmero de su proveedor es igual a 5 . Los proveedores cuyo nmero est entre 2 y 5 . . . . . . . . . . . . . . . .
Datos de las tiendas que no estn en las ciudades indicadas . . . . . . . . . Datos de los gerentes de las tiendas de Madrid . . . . . . . . . . . . . . . . Datos de los artculos que no tienen denido el color . . . . . . . . . . . . . Mostrar todos los colores de los artculos Mostrar todos los colores de los artculos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.11. Insercin de tuplas en una tabla . . . . . . . . . . . . . . . . . . . . . . . . 3.12. Actualizacin del peso de un artculo . . . . . . . . . . . . . . . . . . . . .
3.13. Eliminacin de algunas tuplas de la tabla art_2 . . . . . . . . . . . . . . . 4.1. 4.2. 4.3. Benecio de los artculos . . . . . . . . . . . . . . . . . . . . . . . . . . . . Descripcin de la tabla Raz cuadrada de 27
dual
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ndice de ejemplos I
XIII
3 elevado al cubo
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68 69 70 70 72 72 73 74 74 75 81 81 82 83
Inicial de los nombres de clientes en mayscula . . . . . . . . . . . . . . . . Qu proveedor tiene el nombre ms largo? . . . . . . . . . . . . . . . . . . Quin soy? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Precio mximo de los artculos por color . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
4.11. Mostrar todos los colores de los artculos, incluido los nulos . . . . . . . . . 4.12. Peso medio de los artculos, forma1 . . . . . . . . . . . . . . . . . . . . . .
4.13. Peso medio de los artculos, forma 2 . . . . . . . . . . . . . . . . . . . . . . 5.1. 5.2. 5.3. 5.4. 5.5. 5.6. 5.7. 5.8. Clientes que viven en el mismo pais que el n Articulos con el mismo color que el n Articulos con el mismo color que el n
3. . . . . . . . . . . . . . . .
o o
15 o el peso igual al n
. . . . . .
3 . .
10
. . . . .
Datos de los artculos que tienen el mismo color de los que pesan ms de 10g 85 Artculos que pesen ms que cualquiera de los de color blanco . . . . . . . 86
Si tenemos un proveedor que se llame sanjita muestra todos los proveedores 88 Colores de los artculos cuya media de pesos es superior a la media de todos los artculos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 91 92 93 94 95
Datos de los artculos y del proveedor que lo suministra . . . . . . . . . . . Datos de los artculos y sus proveedores cuyos n Datos de artculos cuyos n
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Los nmeros de todos los artculos que se han vendido o no . . . . . . . . . Los nmeros de todos los artculos que se han vendido . . . . . . . . . . . .
Los nmeros de todos los artculos que no se han vendido . . . . . . . . . . 100 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
XIV
ndice de ejemplos I
6.11. Consulta anidada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 6.12. Consulta correlacionada 6.13. Consulta de existencia 7.1. 7.2. 7.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Fecha actual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Los clientes y las fechas de compras . . . . . . . . . . . . . . . . . . . . . . 111 Fecha y hora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Parte 1
SGBD Oracle
Cap tulo 1
El lenguaje SQL
Se muestran las caractersticas fundamentales de este lenguaje, como son: los principios bsicos, la estructura general y las ventajas que presenta.
1.1.
Introduccin
SQL
es un lenguaje de cuarta generacin, no procedimental ya que le
El lenguaje
decimos lo que queremos y el sistema se encarga de plantear el mejor modo de obtenerlo. Como lenguaje de datos que es, nos permite:
Denir datos. Consultar datos. Manipular datos. Controlar el acceso a los datos.
El
El lenguaje SQL
1.2.
SGBD
19741975: La primera fase del proyecto System/R produjo un mnimo prototipo de un SGBD relacional. Adems del propio SGBD, el proyecto System/R inclua trabajos
sobre lenguajes de consulta de bases de datos. Uno de estos lenguajes fue denominado
SEQUEL1 .
19761977:
El prototipo de investigacin
System/R
nueva implementacin soportaba consultas multitabla y permita que varios usuarios compartieran el acceso a los datos. En la tabla 1.1 podemos ver un resumen de la evolucin de las bases de datos relacionales. El lenguaje
19771979:
La implementacin de
de clientes de
System/R y de 2 su lenguaje de base de datos, que haba sido renombrado como SQL , por razones legales. A pesar del cambio de nombre, la pronunciacin SEQUEL permaneci y continua hoy da. En 1979 el proyecto de investigacin System/R lleg al nal, e IBM concluy que las bases de datos relacionales no solamente eran factibles, sino
que podran ser la base de un producto comercial til. Este perodo fue aprovechado por varias rmas para proponer, antes que ductos relacionales. Un ejemplo de stos fue el lenguaje predicativo
IBM
Ingre, lanzado por RTI en 1976 con QUEL, un derivado del ALPHA; otro ejemplo fue el Oracle, producto que, inspirndose en el System/R, ya se aprovechaba del SQL en 1979.
IBM, pro-
19801989:
IBM se implant por n en productos comerciales en el ao 1981 con el SQL/DS y, especialmente, en el ao 1982 con el DB2. Este mismo ao, el grupo X3H2 del ANSI propuso el SQL como un estndar
Esta tecnologa desarrollada por
SQL, de momento incompatibles entre s. La norma ANSI de 1986 (SQL-86 ), que cubre dos primeros niveles de normalizacin,
versiones
ocial, raticando en 1986, cuando ya existan por todo el mundo varias decenas de
es el resultado de presiones por parte de los fabricantes y, por ello, slo puede ser
1 Acrnimo
2 Structured
de Structured English QUEry Language, lenguaje estructurado de consulta ingls. Query Language, lenguaje estructurado de consultas.
considerado como un pobre conjunto de principios que slo imperfectamente representa el modelo relacional. Los analistas esperan con impaciencia las ampliaciones anunciadas de la norma y, especialmente, su generalizacin para los productos comercializados. El nivel 2 de la norma los fabricantes de
SGBDR,
ANSI
aunque el mismo
DB2
aleja bastante de sta. De igual modo, los productos comerciales por lo general se alejan ms o menos de la norma y, a menudo, son mucho ms complejos. El se convirti en un estndar legal establecido por En 1989 se public una norma extendida para caractersticas de
SQL-86
y actual-
mente los sistemas de bases de datos son normalmente compatibles al menos con las
SQL-89.
19901999:
ANSI
denominado
SQL-92
pliamente implementado y que fue una revisin importante del estndar que realmente el
SQL-89.
A partir de este estndar se saba que existan muchos aspectos por resolver para
para satisfacer las necesidades de los usuarios. Durante siete aos se lanzaron varios estndares que atacaban aspectos especcos del
SQL, hasta que en 1999, se produjo el siguiente estndar importante del SQL, el SQL-99 o SQL3.
En el ao 2003 sali un nuevo estndar del introdujo la nocin de
2003 :
XML
SQL
llamado
SQL:2003,
el cual
SGBDR 3
tambin de un conjunto integrado de herramientas ecaces que explotan en toda su extensin dicho lenguaje, permitiendo la escritura rpida de complejas aplicaciones. El incremento de la productividad es espectacular: los usuarios apuntan de manera uniforme muchas ventajas en las aplicaciones de cierta entidad con respecto al entorno clsico de
COBOL o C
Este
con
SGF 4 .
software,
El lenguaje SQL
Fecha
1970 1974 1974 1978 1979 1981 1981 1982 1983 1986 1986 1987 1988 1988 1989 1992 1999 2003
Acontecimiento Codd dene el modelo de Base Datos relacional Comienza el proyecto System/R de IBM Primer artculo que describe el lenguaje SEQUEL Test de clientes del System/R ORACLE introduce el primer SGBDR comercial Relacional Technology introduce Ingres IBM anuncia SQL/DS ANSI forma el comit de estndares SQL IBM anuncia DB2 Se ratica el estndar ANSI SQL Sybase introduce SGBDR para procesamiento de transacciones Se ratica el estndar ISO SQL Ashton-Tate y Microsoft anuncian SQL Server para OS/2 IBM anuncia la versin 2 de DB2 Primera entrega de servidores de bases de datos SQL para OS/2 Se ratica el estndar ANSI SQL2 Se ratica el estndar SQL3 Nuevo estndar llamado SQL:2003
Tabla 1.1: Resumen cronolgico
SQL
Un generador de estados de la base de datos que se imprimen en papel o se visualizan en el monitor. Un estado de la base se obtiene ejecutando una consulta SQL asociada
a una descripcin precisa del formato de salida.
Un generador de aplicaciones que utiliza las pantallas y los estados precedentes y que
permite la denicin de mens jerarquizados as como la ejecucin de tratamientos diversos de los datos. Estos tratamientos pueden ser simples tareas de manipulacin de datos escritos en los procedimientos de un lenguaje de tercera generacin (
De este modo, se aprovecha plenamente la potencia de las herramientas de cuarta generacin, conservando la riqueza de los lenguajes de la tercera.
permiten la descripcin interactiva completa de la estructura de los datos (entidades, atributos, enlaces, condiciones) a utilizar por los restantes mdulos.
SQL
Compilador
SQL.
Traductor externo/conceptual. Optimizador de las consultas. Traductor conceptual/interno. Gestin de los cheros e ndices. Conexin con el sistema operativo y el equipo fsico.
SQL
SGF
SGBD
software
han
no relacionales.
Por una parte, cada vez est resultando comercialmente ms difcil vender un usuario llega a pensar en lgica, un programador de
SGBD
que no presente las facilidades de una lenguaje de acceso de cuarta generacin. Y es que el
SQL despus de un aprendizaje muy rpido. Con un poco de C, DBASE o COBOL puede utilizarlo al cabo de pocas horas.
Por otra parte, la conectividad de los sistemas es, hoy por hoy, un elemento fundamental de la organizacin de la informacin. Los usuarios y los analistas han de disponer de tratamientos distribuidos, de particiones de aplicaciones y de medios de comunicacin transparentes. Por ejemplo, las grandes bases de datos de tipo red o jerrquica como
IDMS/R de CULLINET
DATACOM/DB de CCA proponen interfases SQL que permiten la compatibilidad con el DB2 de IBM. Estamos ante una proliferacin de servidores de
o
bases de datos, que permiten la elaboracin de una informtica realmente compartida en un entorno heterogneo. Citemos, por ejemplo, el o
INGRES*STAR, que pretenden imponerse en un mercado vertiginoso, descabalgando la SGF y SGBD, incompatibles de SQL se est imponiendo como un lenguaje universal.
partida, que puedan comunicarse entre s mediante el lenguaje normalizado del servidor.
SQL, por lo
que estas emulaciones slo funcionan a medias. No obstante, tal extensin ofrece apreciables servicios para la mayora de las aplicaciones que emplean las funciones fundamentales del lenguaje
SQL.
El lenguaje SQL
1.5.
SQL expondremos brevemente los princiSQL aprovecha la sencillez del lenguaje algebraico,
cobrando por una parte concisin y por otra claridad, mediante una formulacin muy
1.5.1.1.
Principios
Todos los operadores algebraicos se aplican a la totalidad de las las de las relaciones. El resultado de una operacin (consulta) es una nueva relacin, susceptible de ser empleada a su vez en una nueva operacin. Esto es lo que se conoce como el resultado de una operacin.
cierre. A este n se dispone de la asignacin relacional, que permite afectar a una relacin
propiedad de
Codd ha enumerado una veintena de operadores que se derivan de cinco primitivos, a saber: proyeccin, seleccin, unin, diferencia y producto. A estos cinco operadores bsi5 cos deben agregarse, por su importancia prctica, otros tres: producto natural o unin , interseccin y divisin (ver gura 1.1).
1.5.1.2. Operadores primitivos propios
Este operador permite elegir slo las columnas que interesan. Equivale a
Proyeccin
recortar verticalmente la tabla. Adems de ello, elimina las repeticiones de las que resulten de este recorte.
Seleccin
Esta operacin realiza un corte horizontal de la relacin para retener slo las
las que cumplen una determinada condicin respecto a los valores de una columna o conjunto de columnas.
Unin
La operacin
unin
Diferencia
La
diferencia
crea una tercera a partir de las las de la primera tabla en la que se eliminan aquellas las que se repiten en la segunda tabla.
Producto cartesiano
El
la de la primera tabla con todas las las de la segunda. Esto signica que, si la primera tabla tiene
N,
M*N
las.
5 En
Seleccin
Proyeccin
Producto
111111 000000 111111 000000 111111 000000 111111 000000 111111 000000
111 000 111 000 111 000 111 000 111 000 111 000 111 000 111 000 111 000 111 000 111 000 111 000
Interseccin
a b c
x y
a a b b c c
x y x y x y
Unin
Diferencia
111111 000000 111111 000000 111111 000000 111111 000000 111111 000000 111111 000000 111111 000000 1111 0000 1111111 0000000 111111 000000 1111 0000 1111111 0000000 111111 000000 1111 0000 1111111 0000000 111111 000000 1111 0000 1111111 0000000 111111 000000 1111 0000 1111111 0000000 111111 000000 1111 0000 1111111 0000000 111111 000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000
Join (natural)
1111 0000 1111 0000 1111 0000 1111 0000 1111 0000 1111 0000
1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000 1111111 0000000
Divisin
a1 b1 a2 b1 a3 b2
b1 c1 b2 c2 b3 c3
a1 b1 c1 a2 b1 c1 a3 b2 c2
a a a b c
x y z x y
x z
El
producto
natural.
1.5.1.3.
Producto natural
un dominio comn. El
producto natural slo es posible realizarlo cuando dos tablas tienen producto natural junta las dos tablas concatenando las las
6
cuyo valor de columna es idntico en ambas. De aqu se deduce el importante papel que desempea una clave fornea , que permite establecer implcitamente un enlace entre dos tablas. Para ello el operador
denomina clave fornea a un atributo, tal vez compuesto, de una relacin R2 cuyos valores deben concordar con los de la clave primaria de alguna relacin R1 (donde R1 y R2 no necesariamente son distintos). Una clave fornea debe tener todos los valores de sus atributos nulos o ninguno de ellos.
6 Se
10
El lenguaje SQL
producto natural
de igualdad.
dos entre s. La condicin de concatenacin contiene un operador comparativo que puede ser de cualquier clase, aunque el tipo de comparacin que ms se utiliza es el
Interseccin
La
interseccin
puede obtenerse fcilmente mediante dos diferencias. Esta operacin permite crear una tabla a partir de las comunes de dos de tablas.
Divisin
La operacin de
divisin
1.5.1.4.
Se pueden realizar operaciones combinando operadores primitivos propios con operadores primitivos derivados para realizar consultas ms complejas.
SQL
expresar globalmente la consulta precedente entrelazando los operadores primitivos y sin recurrir a tablas intermedias. El
SQL permite obtener este tipo de formulaciones. SQL est compuesta de varias clusulas:
Formato:
selecciona las columnas deseadas lista de tablas que intervienen en la consulta criterio de seleccin de filas formacin de grupos por columna(s) con valores indnticos [HAVING] criterio de seleccin de grupos [ORDER BY] ordenacin de tuplas en la consulata
La clusula en la clusula
distinct7
a n de evitar las
repeticiones de las. La clusula permite expresar todas las condiciones de seleccin (horizontales)
relativas a las tablas y estas condiciones expresan el modo de enlace entre las tablas. Tenemos que tener en cuenta, adems, que en caso de existir ambigedad en el nombre de una columna, se debe escribir delante el nombre de la tabla a la que pertenece seguido de un punto.
7 Ver
captulo 3.
11
Formato:
nombre_tabla.nombre_columna
Construir una consulta multi-tabla en
SQL
where
from
y expresar en la clusula
Esta sencillez de escritura se consigue gracias a que el lenguaje exime al programador de explicar el orden en que deben ejecutarse las operaciones. El intrprete o el compilador traducir automticamente la consulta, en forma de secuencia ptima de consulta algebraica. En la prctica, el usuario no tiene necesidad de conocer la existencia de ndices para efectuar las consultas o clasicaciones. De este modo, el
SQL
operadores del lgebra relacional. Pero, una vez sentado el principio general, debemos advertir que la sintaxis del lenguaje no es siempre tan transparente. Las consultas que necesitan una lgica ms compleja se construyen a su vez con una formulacin menos inmediata. Adems de que las versiones actuales del lenguaje presentan innumerables trampas capaces de desanimar a ms de un principiante. Por stas, y otras razones que veremos, el que un lenguaje de usuario.
SQL
es ms un lenguaje de programacin
DDL permite crear todas las estructuras de la base de datos (tablas, vistas, columnas
ndices...), o sea, la creacin del esquema conceptual. Con l denimos todas las estructuras necesarias para manipulacin de dicha base de datos. El
DCL
revoke).
DML permite el manejo de las tablas y de las vistas mediante las correspondientes
Denition Language, lenguaje de denicin de datos. Control Language, lenguaje de control de datos. 10 Data Manipulation Language, lenguaje de manipulacin de datos. 11 En esta tabla se muestran solamente algunas de las rdenes del SQL embebido.
9 Data
8 Data
12
El lenguaje SQL
ddl
create drop alter truncate
dml
select insert delete update
dcl
grant revoke
Transacciones
commit rollback savepoint
Sesiones
alter session set role
Embebido
open close fetch execute
SQL
cuatro operaciones fundamentales sobre los datos. Las rdenes de control de transacciones manejan los cambios realizados por las rdenes
de
Las rdenes del control de sesiones permite a los usuarios controlar las propiedades de su sesin en curso, incluyendo la habilitacin y deshabilitacin de funciones o Las rdenes del precompiladores de
role12 .
SQL
DML,
del
DDL
ORACLE.
1.5.3.2.
El lenguaje
En interactivo, consulta, crea y controla directamente a la base de datos. Como un mdulo que proporciona un potente lenguaje de consultas interpretadas en un lenguaje husped como el
o el
Es ensamblista pues, al igual que el lenguaje algebraico del que procede, enfoca las relaciones de forma global (cuantos ms barridos de tablas, ms test). Es un lenguaje cerrado: el resultado de una consulta es una nueva relacin, lo que implica, entre otras cosas, que las consultas pueden ser anidadas
13
Respeta la independencia entre el nivel conceptual y las aplicaciones, ya que permite la creacin y manejo de esquemas externos (o visualizaciones) personalizadas. Garantiza la independencia entre el nivel conceptual y el nivel interno. El usuario no nota la presencia de un ndice o de un agrupamiento
14
un objeto de Oracle que soporta privilegios tanto de objetos como del sistema. captulo 5. 14 Estructuras adicionales para la mejora de la bsqueda y recuperacin de informacin.
12 Es 13 Ver
13
Garantiza una seguridad total de los datos, gracias a una distribucin selectiva de las prioridades de acceso, y a una gestin ecaz de las visualizaciones. Permite la gestin multi-usuario de los datos. Cada la a la que se accede para su modicacin queda automticamente bloqueada por el sistema. En particular, el
SQL
de la base en caso de anomalas. Utiliza constantemente un diccionario dinmico centralizado. El diccionario es accesible, mediante las prioridades requeridas, por el mismo lenguaje
SQL.
El cumplimiento de las condiciones de integridad est plenamente garantizado en las versiones actuales del
Cap tulo 2
SQL*Plus
Este captulo nos permite conocer y familiarizarnos con el producto SQL*Plus . En especial con las siguientes caractersticas: identicacin de usuario, introduccin de rdenes, utilizacin de variables, entrada/salida de datos, personalizacin del entorno de trabajo y realizacin de informes.
2.1.
Introduccin
Oracle SQL*Plus 1
El producto de
SQL
del estndar
ANSI,
SQL*Plus
suministradas por
Oracle,
que
constituyen un conjunto adicional al anterior, permitiendo un mejor acceso a la base de datos, presentacin de resultados y control de transacciones. Cualquiera de los dos tipos de rdenes se pueden ejecutar directamente desde el indicador El
SQL*Plus
los privilegios que se tengan asignados. Este producto puede ser utilizado por muchos tipos de usuarios. Los programadores se basan en l para crear, mantener y manipular la base de datos. El administrador del sistema tambin se basa en l para mantener y hacer un seguimiento de la base de datos.
este libro se va a seguir la misma nomenclatura que se sigue en los manuales de Oracle. Los corchetes indica que lo que va dentro es opcional. Las llaves indican que es obligatorio especicar alguna opcin. La barra vertical (|) separa a las distintas opciones. Las opciones establecidas por defecto estn subrayadas. Esta nomenclatura se va a mantener en todo el texto.
1 En
16
SQL*Plus
SQL*Plus
SQL constituye la esencia de una base de datos Oracle; de hecho, es la esencia de todas las bases de datos relacionales. SQL*Plus es la implementacin especca que hace Oracle de SQL con caractersticas adicionales que permiten recuperar,
Como ya hemos visto, dar formato y controlar los datos segn las necesidades. Pensamos que, de entre todas las opciones que se ofrecen para extraer datos de una base de datos extraordinaria herramienta. Todos las rdenes
Oracle, SQL*Plus
es una
de una manera similar, devolviendo un mensaje de estado que indica el xito o el fracaso de la operacin. La orden la base de datos y devolviendo una copia de la informacin que se haya solicitado. No existen ayudas de ningn tipo: mens, teclas especiales, etc., debiendo el usuario conocer las rdenes y teclearlas para obtener la informacin de la base de datos Las rdenes
Oracle.
SQL*Plus
las consultas realizadas a la base de datos. Normalmente se usan como descriptor de informes interactivo. Se pueden crear informes renados y bien formateados, proporcionando un control sencillo sobre los ttulos, cabeceras de columnas, subtotales y totales, reformas de nmeros y textos, etc. El uso ms comn de
SQL*Plus
pueden formatear los informes de acuerdo con los gustos y necesidades del usuario usando slo unas pocas rdenes, que son palabras reservadas. Los informes se pueden escribir completamente mientras se trabaja interactivamente con este producto, esto es, se puede escribir mandatos que trabajen con cabeceras de pginas, ttulos, columnas, formatos, cambios y sumas y otros, mientras se ejecuta una consulta
SQL. SQL*Plus
caciones dadas. Para responder a preguntas rpidas que probablemente no volvern a repetirse es una buena aproximacin. Ms comunes son, sin embargo, los informes complejos que se necesitan producir peridicamente y que se quiere que se impriman en lugar de salir por la pantalla. Desafortunadamente, cuando se abandona el entorno de trabajo, ste olvida rpidamente todas las instrucciones que se le han dado. Si se estuviera obligado a usar introducir todos los mandatos nuevamente. La alternativa es muy sencilla. Simplemente se escriben los mandatos, lnea a lnea, en un chero. El producto secuencialmente. Cuando utilizamos el ltimo mtodo, el de introducir en un chero tanto las rdenes de formateo del
SQL*Plus
solamente
de esta forma interactiva, cada vez que se quisiese obtener el mismo informe habra que
SQL*Plus
SQL*Plus
SQL,
2 Ver
17
rdenes de uno y las rdenes de otro es que las rdenes y las consultas de todas con un punto y coma (;) y las de Las rdenes
SQL*Plus
SQL terminan
no.
SQL*Plus no se almacenan en un rea temporal. Actan directamente sobre el entorno de SQL*Plus. Cuando se ejecuta este producto, se selecciona un entorno
determinado a travs de una lista de parmetros de entorno que queda rellenado con unos valores por defecto. A travs de las rdenes
de estos parmetros, el cual permanecer hasta que sufra una modicacin posterior o hasta que abandone el entorno de trabajo. Resumiendo, las rdenes de datos, y las rdenes
SQL.
SQL*Plus
2.2.
El prejo
herramienta de desarrollo de aplicaciones , apoyndose en rdenes dentro de un marco especco, en donde cumplen su funcin.
SQL
que se ejecutan
Para conectar con la base de datos hay distintas maneras, vamos a ir viendo cada una de ellas y los pasos a seguir desde el indicador del sistema operativo:
1) Introducir slo la orden a continuacin del indicativo del sistema operativo y esperar a que 2.1.
SQL*Plus
2) Especicar el identicativo de usuario y dejar que sea el por la contrasea, ver ejemplo 2.2.
SQL*Plus
el que pregunte
3) Especicar en la lnea de rdenes el identicativo y contrasea separados por un barra inclinada (/) en la lnea de rdenes del sistema operativo cuando se invoca al producto
Por supuesto, la contrasea no aparecer en pantalla cuando nos conectamos como en los ejemplos 2.1 y 2.2. Para salir del producto
SQL*Plus
exit
quit,
3 En
Oracle
18
SQL*Plus
Ejemplo 2.1
> sqlplus
SQL*Plus: Release 9.2.0.1.0 - Production on Tue Apr 13 16:28:13 2004 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Enter user-name: nombre_usuario@juno Enter password: SQL>
Ejemplo 2.2
SQL*Plus: Release 9.2.0.1.0 - Production on Tue Apr 13 16:35:01 2004 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Enter password: SQL>
Ejemplo 2.3
Connected to: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production JServer Release 9.2.0.1.0 - Production SQL>
Ejemplo 2.4
SQL> exit
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production JServer Release 9.2.0.1.0 - Production >
19
Cuando el
DBA ha decidido que el nombre de usuario sea el mismo del sistema opera-
tivo, no hace falta introducir el indicativo de usuario ni la contrasea, ya que tomar por defecto el indicativo de la cuenta del sistema operativo y por contrasea, la misma que est vigente en ese momento en el sistema. Estos identicativos de los usuarios son de la siguiente forma:
Formato:
ops$identificativo_S.O.
2.3.
el identicativo del usuario y su contrasea. La conexin se puede hacer desde dentro del
SQL*Plus. Si la conexin no se produce debido a cualquier error, Oracle del producto SQL*Plus y si queremos continuar trabajando, debemos
volver a conectarnos.
Formato:
conn[ect] [nombre_usuario[/clave]]
Hay distintas maneras de conectarse:
1) Una forma de conectarnos es introduciendo el identicador y la clave separados por una barra. En este caso, la clave es visible por pantalla (ver ejemplo 2.5).
2) O bien, slo introducir el identicativo de usuario y esperar que el producto nos pida la clave (ver ejemplo 2.6).
SQL*Plus
3) O tambin, solamente dando la orden y esperando que de usuario y clave (ver ejemplo 2.7).
Ejemplo 2.5
20
SQL*Plus
Ejemplo 2.6
Ejemplo 2.7
La clave no aparecer en pantalla en los apartados 2 y 3 anteriores. Para desconectarnos de una cuenta, pero sin salirnos del de nuevo a una cuenta de usuario.
disconnect (ver ejemplo 2.8). Si queremos volver al producto, tendremos que conectarnos
Ejemplo 2.8 Desconexin con usuario
2.4.
Introduccin de rdenes
SQL*Plus SQL
reconoce la primera palabra de una sentencia
El producto
SQL y pregunta
por lneas adicionales de instrucciones numerando las lneas. Las rdenes se situan en el
buer
SQL.
editadas y reejecutadas sin tener que introducir nuevamente toda la sentencia El formato de las rdenes permitir una fcil lectura.
SQL.
pudindose incluso partir palabras en lneas consecutivas. Esto permite la identacin para
21
Las rdenes
Un punto y coma (;) al nal de la sentencia Una barra (/) en la lnea de rdenes.
en la lnea de rdenes
SQL.
buer
SQL*Plus
nada ms con lneas adicionales, en su lugar se establecer el parmetro especicado. Las rdenes de formateado del
2.5.
SQL se introduce en el entorno SQL*Plus, se sita en un buer. Mediante unas rdenes, el SQL*Plus permitir su modicacin y posterior ejecucin. Las rdenes de edicin del producto SQL*Plus se pueden ver en la tabla 2.1.
Cuando una sentencia Tenemos que tener en cuenta que en el ejecutada.
a[ppend] texto c[hange] /viejo/nuevo c[hange] /texto cl[ear] buff[er] cl[ear] scr[een] del i[nput] i[nput] texto l[ist] [l[ist]] n n l[ist] * l[ist] n * r[un]
/
Orden
Uso
Aade texto al nal de la lnea actual. Cambia viejo por nuevo en la lnea actual. Borra texto de la lnea actual. Borra todas las lneas del Borra la pantalla. Borra la lnea actual. Aade lneas al
buer.
Aade una lnea con el texto despus de la lnea actual. Lista todas las lneas del Lista la lnea
del
ser la lnea actual del editor. Lista la lnea actual. Lista desde la lnea Ejecuta el hasta la actual. Lista y ejecuta la orden del
buer.
buer.
Tabla 2.1: rdenes de edicin Las rdenes de edicin afectan: a la lnea actual o a la lnea siguiente a la actual. Junto a los nmeros de lnea aparece un asterisco (*) que indica cul es la lnea actual, o
22
SQL*Plus
tambin para indicar, en caso de error, el lugar donde el intrprete ha encontrado el error sintctico, ver ejemplo 2.12. Veamos algunos ejemplos de cmo manejar estas las rdenes:
Aadimos una lnea al nal de la lnea actual y pasa a ser la nueva lnea actual , ver ejemplo 2.10.
Ejemplo 2.9
Ejemplo 2.10
Ejemplo 2.11
23
Ejemplo 2.12
SQL> select art_num 2 from proveedores; select art_num * ERROR en linea 1: ORA-00904: "ART_NUM": identificador no valido SQL>
2.6.
El
SQL*Plus tambin tiene rdenes para manejar cheros. Podemos guardar el contenido del buer en un chero del directorio actual, teniendo por defecto la extensin sql. Asimismo, podemos recuperar un chero del subdirectorio al buer. Ver la tabla 2.2.
!orden host edit
Orden
shell chero [chero[.ext]]
Uso
Permite, sin salirse del shell. Permite, sin salirse del
buer.
buer
buer.
sql.
sql.
Almacena el resultado de una consulta en un chero del sistema operativo con extensin
lst.
Manda el chero anterior a la impresora por defecto, o no; en ambos casos se cierra el chero. Ejecuta el contenido del chero de rdenes especicado. Por defecto la extensin es
sql.
Tabla 2.2: rdenes de cheros Veamos el ejemplo 2.13 donde combinaremos una serie de rdenes de cheros: 1) Listaremos el contenido del
buer.
2) Dicho contenido se salvar en un chero del sistema operativo, ch-con, y cuya extensin por defecto ser sql.
24
SQL*Plus
3) Se ejecutar y se guardar el resultado de dicha consulta en un chero del sistema operativo en el subdirectorio por defecto, denominado resul.lst.
Ejemplo 2.13
SQL> l 1 select * 2* from proveedores SQL> save fich-con Creado archivo fich-con.sql SQL> spool resul SQL> @fich-con PRV_NUM ---------1 2 3 4 5 PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp
2.7.
para ello usaremos un editor del sistema operativo . Tambin podemos denirnos nuestro
define.
Formato:
DEF[INE]_EDITOR = nombre_editor
donde
El ejemplo 2.14 nos muestra como denirnos el editor que sea el que se invoque cuando tecleamos la orden
operativo.
4 Podemos
usar cualquier editor, o bien, el que sea en ese momento el editor por defecto del sistema
2.8 Ayudas
25
Ejemplo 2.14
Denicin de editor
sql,
afiedt.buf.
edit
cualquier chero cuya extensin por defecto sea Si no especicamos nada se editar, guardar en un chero denominado
Formato:
ED[IT] [nombre_fichero|afiedt]
En los ejemplos 2.15 y 2.16 observamos como se editar el chero contenido del
buer afiedt.buf.
consulta.sql
y el
Ejemplo 2.15
Edicin de chero
Ejemplo 2.16
o bien, simplemente:
SQL*Plus
y sentencias
SQL,
mendable introducir comentarios que nos permitan aclarar lo que hace la orden de cada
Orden
Uso
Se coloca al comienzo de la lnea y slo es vlido para esa lnea. Se coloca al comienzo del comentario y se cierra al nal del texto.
2.8.
Ayudas
describe
y
Existen dos rdenes que nos ayudan de distinta manera a la hora de manejar una base de datos. Son las rdenes
help.
26
SQL*Plus
describe:
las vistas, o de los sinnimos , indicndonos nmero de columnas, nombre de las columnas y restricciones que deben cumplir las columnas (ver ejemplo 2.17).
Formato:
DESC[RIBE] nombre_objeto
donde
nombre_objeto
Ejemplo 2.17
Descripcin de un objeto
Nombre Signicado
Nombre Nulo? Tipo Muestra los nombres de las columnas en el mismo orden que se dieron en el momento de la creacin de la tabla. Nos dice si las correspondientes columnas pueden contener valores nulos o no. Muestra el tipo de dato asignado a las columnas en el momento de su creacin.
describe
help: Esta orden nos muestra informacin acerca de las rdenes de SQL y/o SQL*Plus 7 especicadas en nombre_orden.
Formato:
HELP [nombre_orden]
tablas, las vistas y los sinnimos son objetos de la BD que se crean con el lenguaje DDL. manejando un SGBD relacional, por tanto toda la informacin que nos devuelve el sistema viene en forma de tabla. 7 La respuesta de Oracle viene dada en ingls.
6 Estamos 5 Las
27
Ejemplo 2.18
Saves the contents of the SQL buffer in a host operating system script. In iSQL*Plus, click the Save Script button to save the Input area contents to a script. SAV[E] file_name[.ext] [CRE[ATE] | REP[LACE] | APP[END]] Not available in iSQL*Plus
Esta orden permite a los usuarios obtener una documentacin de referencia del
Oracle
SQL*Plus.
Si se introduce nicamente
una porcin de la orden se mostrarn los formatos de todas las opciones de esa orden (ver ejemplo 2.18).
2.9.
consulta
Formateado de consultas
SQL y producir informes simples.
Las rdenes de formateo se utilizan para formatear los resultados procedentes de una
btitle: Esta orden coloca un ttulo, que puede estar compuesto de varias lneas, en
la parte inferior de cada pgina del informe.
Formato:
BTI[TLE] [espc. [var | text] ...] | [OFF|ON] ttitle: Esta orden coloca un ttulo en la parte superior de cada pgina, numera las
pginas y coloca la fecha actual.
28
SQL*Plus
Formato:
TTI[TLE] [espc. [var | text] ...] | [off|on]
Esta opcin representa una o ms de las clusulas usadas para colocar y formatear el texto, ver la tabla 2.5. Es el texto que queremos que aparezca en la cabecera o a pie de pgina y ha de colocarse entre comillas simples.
Esta opcin representa una variable del usuario o del sistema y debe especicarse en mayscula, ver la tabla 2.6.
o|on
off.
Espc.
Uso
Salta al comienzo de una nueva lnea Alinea el texto por la izquierda. Centra el texto. Alinea el texto por la derecha.
veces.
btitle
ttitle
Var.
Uso
Nmero de la lnea actual. Nmero de la pgina actual. Nmero de versin actual de Cdigo de error actual. Identicativo del usuario.
Oracle.
btitle
ttitle
En el ejemplo 2.19 hemos realizado una consulta y el resultado aparecera formateado de la siguiente manera: una cabecera centrada que nos indicar que corresponde con el informe del da y a pie de pgina el nombre de la cuenta de ejecutando dicha consulta.
Oracle
29
Ejemplo 2.19
ttitle center 'Informe del dia' btitle skip SQL.USER skip 'UCA' select * from proveedores; Informe del dia PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp
5 filas seleccionadas.
Formato:
COL[UMN] [{nom_columna|expresin} [opcin ...]]
Donde expresin corresponde a columnas virtuales obtenidas por clculo, funcin o expresin matemtica . En la tabla 2.7 se muestran algunas de las principales opciones de esta orden. La opcin
format, column
a su vez, tiene una sintaxis propia para poder especicar los for-
matos, ver la tabla 2.8. La orden no cambia la denicin de una columna en la tabla, sino que la
modica para obtener un informe con un formato dado. Se modica la salida por pantalla o impresora de dicha columna. En el ejemplo 2.20 se puede observar cmo formatear columnas.
column.
art_nom
8 Ver
30
SQL*Plus
art_nom art_pv
ali[as]
Opcin
Uso
nombre Asigna un alias a una columna que se podr utilizar en las rdenes de columna. Elimina los valores de los atributos asignados a una columna. Especica los formatos de pantalla de las columnas. Dene las cabeceras de las columnas. Alinea las cabeceras de las columnas a la izquierda, al centro o a la derecha. Si no se usa esta orden, las columnas denidas como
number
columna a la izquierda.
column
An
A6
format
2.10.
Las variables del sistema son como opciones de programas ms que variables. Cada variable del sistema controla algunos aspectos de las operaciones del bles del sistema se establecen con la orden
show. set:
SQL*Plus
set
Formato:
SET variable_sistema valor
31
Esta orden tiene muchas opciones, algunas de ellas las podemos ver en la tabla 2.9 . Y en el ejemplo 2.21 observamos la manera de establecer un valor para estas opciones.
a) Establecer un mximo de 20 registros por pgina. b) Muestra por pantalla las rdenes cuando las ejecutamos desde un chero. c) Desactiva la pausa.
Ejemplo 2.20
Formateo de columnas
column art_nom alias nombre column nombre format a6 column art_pv format 99999 select * from articulos where art_num < 4;
ART_NUM ART_NO ART_PESO ART_COL ART_PC ART_PV ART_PRV ---------- ------ ---------- ------- ---------- ------ ---------1 impres 150 rojo 400 580 4 ora 2 calcul adora 3 calend ario 3 filas seleccionadas. 150 negro 100 blanco 4000 420 4700 600 1 4
Ejemplo 2.21
SQL> set pages 20 SQL> set echo on SQL> set pause off SQL>
Establecer variables
show:
nos muestra el valor de una variable del sistema. Visualiza el valor de una
show,
9 La
32
SQL*Plus
Formato:
SHO[W] variable_sistema [,variable_sistema]
Esta orden tambin nos muestra los valores de otras variables como podemos ver en la tabla 2.10. En el ejemplo 2.22 vemos la utilidad de esta orden. Primero nos muestra el nmero de registros que est establecido por pginas y despus el nombre del esquema desde donde estamos trabajando.
Ejemplo 2.22
SQL> show pages pagesize 20 SQL> show user USER es "GADESCHI" SQL>
Valores de variables
2.11.
Todo lenguaje de programacin tiene un apartado dedicado a la entrada de datos tanto por teclado como por pantalla y lo mismo ocurre con la salida de los datos obtenidos como resultado de la ejecucin de programas. El producto
define
predenir un editor de texto. Esta orden permite a los usuarios especicar variables y asignarles un valor de tipo carcter. O bien, listar el valor y el tipo de variable de una o de varias variables.
auto[commit]
Variable
Valor
Uso
Controla cundo
define
imm[ediate]
SQL.
on.
Conjunto de caracteres usados para prejar la sustitucin de variables a Ver el ejemplo 2.28.
c. on
off
controla
33
Variable
echo
Valor
off|on
Uso
on nos mostrara por pantalla las rdenes cuando ejecutamos ordenes del chero de arranque.
SQL*Plus
desde un
off|on
Establece el nmero total de caracteres por lEstablece la anchura mxima en caracteres para mostrar y copiar valores Estable el n
long.
de pie de pgina.
return
salida.
lizacin de pginas. texto es el mensaje que se visualizar en la parte inferior de la pantalla mientras se espera la pulsacin de la tecla
show[mode]
off|on
return.
on
hace que
SQL*Plus
visualice la disposicin
1|n
SQL>|texto
off|on off|on
Nmero de espacios entre columnas. Sustituye el indicativo por defecto por texto.
Controla que aparezca o no el valor anterior y posterior de la variable cuando hacemos una sustitucin de variables con el operador &.
La sintaxis es la siguiente:
Formato:
DEF[INE] [nom_variable]|[nom_variable = 'texto']
nom_variable
34
SQL*Plus
Variable
Uso
Muestra el conjunto de todas las opciones. Muestra el ttulo actual de pie de pgina. Nos indica el n
de la lnea actual.
Muestra el valor actual de un o ms parmetros de inicializacin. Se puede poner una cadena de caracteres despus de la orden para que nos muestre un subconjunto de parmetros cuyos nombres incluya esa cadena.
Muestra el n
de la pgina actual.
Oracle.
spool.
Muestra el ttulo de cabecera de pgina actual. Nos muestra el nombre del usuario bajo el cual estamos trabajando en ese momento.
texto
En los ejemplos 2.23 y 2.24 vemos como asignarle el valor 20 de tipo caracter a la variable var1 y como visualizar el contenido de dicha variable.
Ejemplo 2.23
Ejemplo 2.24
= "20" (CHAR)
undefine
como sigue:
Formato:
UNDEF[INE] nom_variable
En el ejemplo 2.25 vemos cmo borrar la denicin de la variable var1 denida anteriormente y comprobar que no tiene valor.
35
Ejemplo 2.25
SQL> undefine var1 SQL> define var1 SP2-0135: el simbolo var1 es UNDEFINED (INDEFINIDO) SQL>
ampersand
ampersand
(&)
(&&).
Ambos operadores (& y &&) actuan de la misma manera sobre una variable aunque la semntica exacta es diferente dependiendo de si la variable tratada est denida previamente o no.
Formato:
&[&]nombre_variable
Variable no denida previamente:
SQL
SQL
SQL
verify10
est activada,
Para solicitar la sustitucin de la variable por el valor dado por el usuario se emplea el operador
ampersand
SQL.
En el ejemplo 2.26 podemos observar cmo se utiliza dicho operador y cmo le damos un valor a la variable. Dicho operador (&) est denido por defecto, pero podemos denirlo con cualquier otro caracter usando la orden de en el ejemplo 2.28.
&&var1: El sistema pide al usuario un valor para la variable var1 que es colocado en el lugar de la instruccin donde aparece, quedando as denida la variable con ese valor a partir de ese momento. El ejemplo 2.31 nos muestra como se realiza esto. En principio, suponemos que la variable del sistema la orden
run
ampersand
10 Ver
tabla 2.9.
36
SQL*Plus
queda jado para toda la sesin a menos que utilicemos la orden para redenir el valor de la variable.
undefine
persand ya que la ltima orden del ejemplo 2.31 nos borrar todos los registros
antes.
am-
de la tabla mostrados anteriormente y no nos preguntar el nombre de la tabla ya que tomar como valor de la variable var1 el que ya le habiamos dado
Variable denida previamente: Los dos operadores tienen el mismo funcionamiento en este caso. No se solicita al usuario ningn valor, usando el que tenga la variable actualmente.
Las variables pueden ser usadas en interactivo, o sea, en una consulta realizada desde el indicativo del
SQL> select * 2 from &var1; Introduzca un valor para var1: proveedores antiguo 2: from &var1 nuevo 2: from proveedores PRV_NUM ---------1 2 3 4 5 PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp
Ejemplo 2.26
5 filas seleccionadas.
utilizamos algunas de las rdenes de cheros. Cuando usamos las rdenes posible pasarles distintos argumentos al chero que queremos ejecutar.
Tenemos dos formatos distintos para realizar la misma orden, como podemos ver a continuacin:
37
Formato:
START nombre_fichero arg_1 arg_2 @nombre_fichero arg_1 arg_2
Tambin podemos utilizar este operador con rdenes de observar en el ejemplo 2.27. En el ejemplo 2.29, &1 se va a sustituir por el valor de arg_1, mientras que &2 se va a sustituir por el valor de arg_2. En este caso los nombres de las variables a continuacin del operador
SQL*Plus
como podemos
ampersand
Ejemplo 2.27
SQL> describe &tab Introduzca un valor para tab: proveedores Nombre ?Nulo? Tipo --------------------- -------- ---------------------------PRV_NUM NOT NULL NUMBER(38) PRV_NOM NOT NULL VARCHAR2(25)
Ejemplo 2.28
Redenicin de operador
SQL> set define # SQL> select * 2 from #var1; Introduzca un valor para var1: proveedores antiguo 2: from #var1 nuevo 2: from proveedores PRV_NUM ---------1 2 3 4 5 PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp
5 filas seleccionadas.
Ejemplo 2.29
38
SQL*Plus
En el ejemplo 2.30 vemos cmo podemos utilizar el operador con rdenes de En este ejemplo nos decribir la denicin de la tabla que le indiquemos.
SQL*Plus.
Ejemplo 2.30
SQL> describe &var Introduzca un valor para var: Nombre ?Nulo? ------------------- -------PRV_NUM NOT NULL PRV_NOM NOT NULL
2.12.
producto
Ficheros de rdenes
SQL*Plus.
Los cheros de rdenes son cheros del sistema operativo que contienen rdenes del
SQL*Plus, Oracle
login.sql.
ejecuta, realizando las rdenes que tenga en su interior. Estas se ejecutan secuencialmente y en el mismo orden en que aparecen en dicho chero.
SQL*Plus as SQL; todas ellas se ejecutarn antes que el producto SQL*Plus proporcione el indicativo SQL>. sta puede ser una forma conveniente de crearse un entorno individual dentro del producto SQL*Plus.
Se pueden colocar en este chero cualquier orden propia del producto como sentencias El ejemplo 2.32 nos muestra un chero de rdenes.
39
Ejemplo 2.31
SQL> select * 2 from &&var1; Introduzca un valor para var1: proveedores antiguo 2: from &&var1 nuevo 2: from proveedores PRV_NUM ---------1 2 3 4 5 PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp
5 filas seleccionadas. SQL> run 1 select * 2* from &&var1 antiguo 2: from &&var1 nuevo 2: from proveedores PRV_NUM ---------1 2 3 4 5 PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp
40
SQL*Plus
Ejemplo 2.32
REM establecemos a 16 el nmero mximo de registros por pgina SET pages 16 REM nos mostrar la versin del Oracle SHOW release REM establecemos el editor por defecto DEFINE_EDITOR = jed /* activamos la pausa y hacemos que nos muestre el mensaje 'pulsa return ' despus de cada pgina */ SET PAUSE ON SET PAUSE 'pulsa return ' REM nos mostrar la fecha de hoy con formato por defecto SELECT sysdate FROM dual;
41
2.13.
Ejemplo 2.33
SQL> help index Enter Help [topic] for help. @ @@ / ACCEPT APPEND ARCHIVE LOG ATTRIBUTE BREAK BTITLE CHANGE CLEAR COLUMN COMPUTE CONNECT COPY DEFINE DEL DESCRIBE DISCONNECT EDIT EXECUTE EXIT GET HELP HOST INPUT LIST PASSWORD PAUSE PRINT PROMPT QUIT RECOVER REMARK REPFOOTER REPHEADER RESERVED RESERVED RUN SAVE SET SHOW SHUTDOWN SPOOL SQLPLUS START STARTUP STORE TIMING TTITLE UNDEFINE VARIABLE WHENEVER WHENEVER
OSERROR SQLERROR
Parte 2
Cap tulo 3
Manipulacion de datos
Este captulo estudia las cuatro rdenes para manipular la informacin de la Base de Datos. Podemos modicar la tabla resultante de una consulta para obtener un mejor resultado como puede ser eliminacin de tuplas repetidas, clasicacin de las tuplas o identicar a las columnas por un nuevo nombre.
3.1.
Introduccin
DML)
se utiliza para realizar las operaciones
de mantenimiento y consulta de una base de datos. Est formado por cuatro rdenes y su
Orden Operacin
select insert update delete
Muestra el contenido de una tabla. Introduce registros en una tabla. Actualiza un atributo o campo de una tabla. Elimina uno o varios registros de una tabla.
46
Manipulacion de datos
3.2.
La orden select
select
se utiliza, principalmente, para realizar cualquier consulta a una o
a varias tablas o vistas de nuestro o de otros esquemas siempre que tengamos privilegio
Esta orden no slo es la que ms se emplea en el a mltiples tablas, usar funciones, etc.
SQL,
Puede tomar un aspecto realmente complejo, incorporar varias consultas anidadas, afectar
Cualquier consulta a una o a varias tablas de la base de datos, deber constar, como mnimo, de una sentencia formada por la orden
select
y la clusula
from.
La sintaxis de esta orden es bastante compleja. Nosotros iremos estudiando cada una de las clusulas paso a paso. La estructura general de esta orden es la siguiente:
Formato:
SELECT nombre de las columnas FROM nombre de las tablas [WHERE condiciones de seleccin de tuplas] [GROUP BY nombre de columnas] [HAVING condiciones de seleccin de grupos] [ORDER BY nmeros o nombre de columnas];
que consiste en
seleccionar una o varias columnas o atributos de una o varias tablas, indicando el orden
select
separadas por comas y en el orden en que queremos que aparezcan en el resultado. Mientras
from
seleccionar, separadas tambin por comas (ver ejemplo 3.1). Un caso especial es cuando queremos proyectar todas las columnas de una tabla dada. Para ello utilizamos un asterisco (*) en vez de los nombres de las columnas, como podemos observar en el ejemplo 3.2.
1 Corresponde
con la operacin de proyeccin del lgebra relacional representada por la letra griega .
47
Ejemplo 3.1
SQL> select prv_num, prv_nom 2 from proveedores; PRV_NUM ---------1 2 3 4 5 PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp
5 filas seleccionadas.
Ejemplo 3.2
SQL> select * 2 from proveedores; PRV_NUM ---------1 2 3 4 5 PRV_NOM ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp
5 filas seleccionadas.
En esta consulta, el orden de aparicin de las columnas, de izquierda a derecha, es el mismo orden en que fueron creadas las columnas, cuando se cre la tabla con la orden
create table
2 Esta
48
Manipulacion de datos
where.
from.
Formato:
SELECT colum1, colum3, colum4 FROM nom_tabla WHERE criterio de seleccin de filas;
El criterio en una clusula
por una serie de condiciones, cada una de las cuales toma el valor verdadero o falso, combinado con los operadores lgicos formar parte del resultado. Las condiciones pueden utilizar los siguientes operadores:
and (Y
lgico) y
or (O
lgico). Si
una la cumple la condicin, har que el valor de la expresin lgica sea verdadero, y
).
Comparacin con un intervalo de valores (between). Comparacin con una lista de valores (in). Comparacin con un patrn (like). Test sobre la indeterminacin de un valor (is Test todos o al menos uno (all, Test de existencia (exists).
null).
any).
3.2.2.1.
Operador and:
Para que una la sea seleccionada debe cumplirse a la vez las dos
Operador or: La la se selecciona si se cumple, por lo menos, una de las condiciones
unidas por este operador.
operadores de comparacin <>y != realizan las mismas funciones, por lo tanto podemos utiliza uno y otro indistintamente.
3 Los
49
tante, el resultado depende del orden en que se efecten las operaciones elementales.
SQL efecta primero las comparaciones, despus las negaciones con not, despus los Y logicos con and y, nalmente, los O logicos con or. Conviene, para mayor seguridad, emplear parntesis
Este orden se dene por la prioridad de los operadores. El que agrupen a las expresiones.
Operador not:
resultado.
este operador utilizado junto con otro operador invierte el valor del
3.2.2.2.
Siempre que utilicemos cadenas de caracteres en una consulta entre comillas simples. La sintaxis es la siguiente:
Formato:
WHERE nom_columna operador_de_comparacion constante
cluir operadores aritmticos (+, -, *, /), nombres de columnas y constantes. El * y el / tienen el nivel mximo de prioridad. El valor de una expresin aritmtica es indeterminado si contiene una columna cuyo valor es indeterminado; la comparacin con esta expresin no se ejecuta nunca.
En el ejemplo 3.3 podemos comprobar cmo se utilizan los operadores lgicos para unir dos expresiones de comparacin.
50
Manipulacion de datos
Ejemplo 3.3
SQL> select art_num, art_nom 2 from articulos 3 where art_peso > 100 and art_prv = 5; ART_NUM ---------4 5 6 7 ART_NOM -------------------lampara lampara lampara lampara
4 filas seleccionadas.
3.2.2.3.
El operador
un valor que se encuentre dentro de un intervalo determinado, incluyendo a los propios valores que determinan el intervalo.
Formato:
WHERE nom_columna BETWEEN valor1 AND valor2
En realidad, el operador lgico. Para seleccionar las las cuya columna contiene un valor externo a un intervalo determinado, se emplear el operador
between
not between.
Los proveedores cuyo nmero est entre 2 y 5
Ejemplo 3.4
SQL> select * 2 from proveedores 3 where prv_num between 2 and 5; PRV_NUM ---------2 3 4 5 PRV_NOM ------------------------estilograficas reunidas mecanica de precision sanjita electrolamp
4 filas seleccionadas.
51
Podemos comprobar que en el ejemplo 3.4 aparecen los proveedores que cumplen la condicin de seleccin. Observamos que tambin aparecen los datos de los proveedores cuyos nmeros son el lmite inferior y el superior del intervalo.
3.2.2.4.
El operador
Formato:
WHERE nom_columna IN (valor1, valor2, ...)
El empleo de este operador equivale a combinar comparaciones con un
lgico.
Para seleccionar las las cuya columna contiene un valor distinto del existente en una lista, es preciso emplear el operador
not in
Ejemplo 3.5
SQL> select * 2 from tiendas 3 where tda_pob not in 4 ('paris', 'barcelona', 'palencia', 'lyon'); TDA_NUM ---------1 2 3 5 6 7 8 10 TDA_POB -------------------madrid-batan madrid-centro pamplona trujillo jaen valencia requena gerona
TDA_GER ------------------------contesfosques, jordi martinez, juan dominguez, julian mendez, pedro marin, raquel petit, joan marcos, pilar gomez, gabriel
8 filas seleccionadas.
3.2.2.5.
Las consultas de correspondencia con un patrn recuperan las para las que el contenido de una columna de texto se corresponde con un texto dado, es decir, comprueban si el valor de un columna se ajusta a un patrn especicado
52
Manipulacion de datos
El operador
like
(de tipo alfanumrico) un valor coincidente con el patrn dado. Con los operadores
in,
la constante que sigue. Si se produce un error de codicacin, o se ha olvidado el valor exacto, no es posible encontrar la la buscada por este medio. Por lo tanto tendremos que recurrir a la bsqueda con un patrn. Para denir el patrn disponemos de dos caracteres especiales que, en el momento de la comparacin con el valor de la columna correspondiente, representan: % cualquier secuencia de ninguno o de varios caracteres. _ (subrayado) un carcter cualquiera, slo uno.
Formato:
WHERE nom_columna LIKE 'patrn'
Para seleccionar las las cuya columna contiene un valor que no debe coincidir con el patrn, bastar emplear el operador
Ejemplo 3.6
SQL> select tda_num, tda_ger 2 from tiendas 3 where tda_pob like 'madrid%'; TDA_NUM ---------1 2 TDA_GER ------------------------contesfosques, jordi martinez, juan
2 filas seleccionadas.
3.2.2.6.
valor
Si el valor de una columna no ha sido inicializado en una determinada la, o sea, tiene
null,
bien, es posible comprobar si el valor no ha sido inicializado gracias al operador o al operador opuesto
is not null.
is null,
Formato:
WHERE nom_columna IS NULL
53
ste es el nico test de comprobacin que permite seleccionar una la cuando el valor de una columna es indeterminado.
Ejemplo 3.7
SQL> select art_num, art_nom 2 from articulos 3 where art_col is null; ART_NUM ---------8 9 ART_NOM -------------------pesacartas 1-500 pesacartas 1-1000
2 filas seleccionadas.
3.2.2.7.
Resumen
select:
son obligatorias en cada consulta
select
from
SQL.
from
select.
No es necesario seleccionar o proyectar todas las columnas de una tabla. Las columnas se muestran de izquierda a derecha en el orden especicado en la clusula
select.
Si queremos proyectar todas las columnas de una tabla usaremos el asterisco (*) y stas aparecern en el mismo orden en que fueron creadas. Las las se muestran en el orden en que estn almacenadas. Los usuarios pueden obtener informacin de sus propias tablas, o bien de aquellas a las que se les haya dado permiso de acceso. Las clusulas
select
from
where: where
debern ser parte de la tabla espe-
from.
select.
54
Manipulacion de datos
where
requieren que s-
where
3.3.
El
de las ocurrencias devueltas. Se puede obtener el resultado de una consulta sin dichas repeticiones introduciendo la clusula
select.
El ejemplo 3.8 nos muestra los distintos colores que tienen los artculos. Hemos eliminado las tuplas que no tienen denido el color. Tambin podemos observar que la tabla resultante nos muestra los colores ordenados alfabticamente.
3.4.
select
Renombrar columnas
de una consulta pueden cambiarse temporalmente, incluyendo el nuevo nombre
Los nombres de las columnas, expresiones y funciones que aparecen en la clusula en la clusula
select
El nuevo nombre o alias ir entre comillas dobles si se compone de dos o ms palabras, o si queremos que aparezca tal cual lo hemos escrito en maysculas o en minsculas, como se muestra en el ejemplo 3.9. El cambio de nombres nicamente mantiene su efecto durante el tiempo de la consulta; los nombres de las columnas de las tablas permanecen y no les afecta el cambio.
Ejemplo 3.8
SQL> select distinct art_col 2 from articulos 3 where art_col is not null; ART_COL ------azul blanco negro rojo verde 5 filas seleccionadas.
55
Ejemplo 3.9
SQL> select distinct art_col "Colores" 2 from articulos 3 where art_col is not null; Colores ------azul blanco negro rojo verde 5 filas seleccionadas.
3.5.
Clasicacin de las
4
Cuando no se determina el orden en que se desean obtener las las, puede suceder que se obtengan resultados distintos en dos ejecuciones consecutivas de una misma consulta , a causa de esta misma indeterminacin. Se puede solicitar la clasicacin de las las seleccionadas segn el valor de una o varias columnas. Una clasicacin no necesita la existencia de un ndice; el consulta. Para ello, es preciso aadir la clusula o
SQL
order by,
sobre las cuales se desea elaborar la clasicacin separadas por comas. Si se aade
desc
asc
misma. Por defecto se hace en orden ascendente. Los valores indeterminados (null) se visualizan agrupados, al principio de la tabla si el orden es descendente y al nal si es ascendente.
Formato:
ORDER BY {nom_columna | entero} [asc|desc], ...
sta es la nica instruccin en la que el
As, nosotros podemos especicar el nombre de la columna por la que queremos ordenar o bien la posicin que ocupa dicha columna en la lista de la orden
La columna sobre la que se realiza la clasicacin debe, obligatoriamente, formar parte de la lista de columnas incluidas en la clusula tablas incluidas en la clusula
from.
select,
Si utilizamos la clusula
distinct
forzozamente la
SQL no tiene predenido un orden de aparicin de las tuplas, en cambio, el mismo orden en que fueron creadas.
4 El
56
Manipulacion de datos
columna de ordenacin tiene que estar en la lista de columnas a proyectar por la orden
select, SQL> 2 3 4
Ejemplo 3.10
select art_num Numero, art_nom Nombre from articulos where art_num < 10 order by art_pc; NOMBRE -------------------impresora calendario lampara lampara lampara lampara pesacartas 1-500 pesacartas 1-1000 calculadora
NUMERO ---------1 3 5 4 7 6 8 9 2
9 filas seleccionadas. SQL> select distinct art_nom Nombre 2 from articulos 3 where art_num < 10 4 order by art_pc; order by art_pc * ERROR en linea 4: ORA-01791: no es una expresion obtenida bajo SELECT
3.5.1. Resumen
La clusula
Esta clusula es el nico sistema existente para ordenar los datos segn el criterio que se desee, ya que las tablas almacenan las las conforme stas han sido introducidas. La clusula
order by
Por omisin, la secuencia ser ascendente. Para ordenaciones descendentes se deber especicar explcitamente.
57
order by.
Puede clasicarse por columnas que no formen parte de la consulta, siempre que formen parte de alguna de las tablas especicadas en la clusula La secuencia de las columnas especicadas en la clusula
from.
determina la
order by
secuencia de las claves de clasicacin, esto es, los valores de una columna sern clasicados con valores iguales de las columnas precedentes, y as sucesivamente. Las columnas con valores nulos (null) se evaluarn al nal de todas si el orden es
asc
y al principio si son
desc.
3.6.
La orden insert
Esta orden se emplea para aadir nuevas las a una tablaya existente. Su formulacin ms sencilla sirve para aadir una la cada vez. Para ello, se citar el nombre de la tabla, el nombre de las columnas que hay que inicializar y el valor que se les desea dar. Si no se indica el nombre, se supone que las columnas que deben recibir los valores son todas las de la tabla, en el orden de izquierda a derecha tal como fueron creadas dichas columnas. El formato general para esta orden es:
Formato:
INSERT INTO nom_tabla [(nom_column1, nom_column2, ...)] VALUES (valor1, valor2, ...);
insert.
Formato:
INSERT INTO nom_tabla VALUES (valor1, valor2, ...);
El orden de los valores situados entre parntesis deber corresponder exactamente con el orden que se les dio a las columnas cuando fueron denidas las tablas en su creacin. Si se desea dejar una columna sin valor, debe indicarse explcitamente mediante el operador nulo.
null,
situado en la posicin que tiene la columna que queremos dejar con valor
58
Manipulacion de datos
no null,
recibir los valores especicados. Para este tipo de insercin, los nombres de las columnas
insert que van situados entre parntesis no necesitan estar situados en un values.
orden determinado, pero debern corresponderse directamente con los correspondientes valores situados tambin entre parntesis en la clusula
Formato:
INSERT INTO nom_tabla (nom_column3, nom_column2, ...) VALUES (val3, val2, ...);
En el ejemplo 3.11 hemos insertado una tupla en la relacin
Tiendas
de varias formas.
insert
una consulta
select
anidada obtendra los datos deseados de una tabla y la otra tabla. Si dos tablas tuvieran columnas con idntica
denicin, la siguiente proposicin podra insertar todos los datos desde la tabla
x.
a la
Ejemplo 3.11
SQL> insert into tiendas 2 values (16, 'Pto. Real', 'Martin, Luis'); 1 fila creada. ... SQL> insert into tiendas (tda_num, tda_ger, tda_pob) 2 values (16,' Martin, Luis', 'Pto. Real'); 1 fila creada. ... SQL> insert into tiendas 2 values (16, 'Pto. Real', null); 1 fila creada.
59
Formato:
INSERT INTO x SELECT * FROM y;
O bien, se puede especicar qu columnas de la tabla columnas que se deseen de la tabla
y.
Formato:
INSERT INTO x [(nom_column1, nom_column3, ...)] SELECT {nom_columna | expresin} FROM y [WHERE criterio de seleccin];
La tabla emisora,
y,
select
anidada en la
insert
insert.
order by
no puede intervenir
de las dos tablas tengan el mismo nombre. El orden de columnas en la clusula deber corresponder con el orden de columnas especicado en la clusula expresiones y funciones pueden ser usadas en la clusula datos procedentes de clculos matemticos.
select
Es posible crear una tabla e insertar las en ella con una sola operacin con la orden
create
3.6.4. Resumen
Una tabla deber estar creada antes de poder insertar datos en ella. La lista de nombres de columnas se utiliza cuando:
Se insertan unas cuantas columnas que existen en la denicin de la tabla. Se introducen columnas en una secuencia diferente en la que fueron creadas.
null.
En la clusula valor
values
null,
not null.
60
Manipulacion de datos
Los valores debern colocarse en el mismo orden en el que aparecen sus correspondientes columnas en la clusula
insert.
Si se omite la lista de columnas, deber especicarse un valor para cada una de las columnas de la tabla. Si se omiten las columnas, los valores a insertar debern seguir la misma secuencia seguida por las correspondientes columnas cuando se cre la tabla. Los valores insertados debern corresponder con el tipo de dato de la columna correspondiente. Los valores tipo carcter debern ir entre comillas simples. La especicacin de las las a copiar tiene la misma sintaxis que la de las consultas
SQL. Podr ser tan compleja como se desee con excepcin de la clusula order by
que no puede ser utilizada. Las columnas que aparezcan en la clusula mientras que las que aparecen en la
select
insert
La secuencia y tipo de datos de las columnas que aparecen en la clusula por la subconsulta.
insert
3.7.
La orden update
Esta orden cambia o actualiza los datos existentes de una tabla, especicando sus nuevos valores en las columnas seleccionadas. Pueden cambiarse todos los valores de una columna para todos los registros, o bien nicamente algunos valores para registros especcos. La clusula
where
La modicacin a realizar es una expresin que admite constantes, nombres de columnas e incluso consultas anidadas. La formacin general de la orden es, pues, multila. Para modicar una sola la, basta escribir un criterio de tal modo que se seleccione slo esa la. Para modicar todas las las de una tabla, no es necesario incluir una clusula
where.
Formato:
UPDATE nom_tabla SET nom_columna = nuevovalor [,nom_columna = nuevovalor] [WHERE criterio de seleccin de los registros];
61
where.
set
de una sentencia
update,
al
Formato:
UPDATE nom_tabla SET nom_columna = (SELECT nom_columna FROM ...), ... [WHERE condicin];
Si la consulta anidada asociada a la clusula
admite nulos, dejar dicha columna vaca para todas las tuplas de la tabla. La clusula anidada. Hay que tener en cuenta que si la clusula
where
de una orden
update
set
comas igualadas a una consulta anidada, estas columnas van entre parntesis.
Formato:
SET (nom_columna1, nom_columna2) = (consulta anidada)
Ejemplo 3.12 Actualizacin del peso de un artculo
SQL> update articulos 2 set art_peso = (select art_peso 3 from articulos 4 where art_num = 27) 5 where art_num = 24; 1 fila actualizada.
En el ejemplo 3.12, el peso del artculo n mismo peso que tiene el artculo n
27.
3.7.2. Resumen
update
opera en todas las las que cumplen la condicin
where.
Si la clusula
where
null
62
Manipulacion de datos
Puede establecerse una columna igual a una expresin aritmtica compuesta de columnas y constantes (+, -, *, /).
set. set
Oracle
Si el valor de la clusula
tamente las mismas columnas que las especicadas en la subconsulta y, adems, si son ms de una columna debern ir entre parntesis.
Cada subconsulta deber ser subconsulta a una nica la para cada registro a actualizar.
3.8.
La orden delete
delete. Podemos borrar todos
Los registros de una tabla pueden borrarse con la orden los registros o bien algunos segn un criterio de seleccin.
Formato:
DELETE [FROM] tabla [WHERE criterio de seleccin de un registro];
Si una orden
delete
where,
borradas. Sin embargo, la tabla contina existiendo en la base de datos, y podrn insertarse nuevas columnas en ella usando la orden parcialmente, ya que la orden
delete
insert.
La formulacin general de la orden es multila. Para suprimir una sla la basta escribir un criterio que permita seleccionar slo esa. Para suprimir todos los registros de una tabla no hace falta incluir una clusula
where.
El criterio de seleccin de tuplas puede obtenerse a partir del resultado de una consulta anidada en la clusula
where.
Eliminacin de algunas tuplas de la tabla art_2
Ejemplo 3.13
SQL> delete from art_2 2 where art_num > 20; 6 filas suprimidas.
63
3.9.
truncate6
consiste en lo siguiente:
La orden
delete,
de la tabla del Diccionario de Datos y, adems, puede liberar el espacio ocupado por
Oracle
5 Orden 6 Orden
Cap tulo 4
Funciones y expresiones
Este captulo nos muestra las distintas funciones de las que disponemos as como la manera de utilizarlas. Se introduce el concepto de grupo de tuplas analizando las ventajas y los problemas que presenta su uso.
4.1.
Introduccin
Una base de datos, normalmente, est formada por toda una serie de estructuras de datos que contienen tipos de datos diferentes. A estos datos se les pueden aplicar los operadores aritmticos y las funciones, tanto numricas como de carcter. Dichas funciones se pueden utilizar tanto con registros como con grupos de registros que cumplan una determinada condicin.
4.2.
Expresiones
Las expresiones aritmticas nos permiten realizar clculos numricos con los datos de la base de datos. De hecho, es posible combinar el valor de diferentes columnas entre s o bien con constantes numricas, utilizando los cuatro operadores aritmticos (+, -, *, /). Si se trata de una operacin de visualizacin, basta con escribir la expresin aritmtica en la clusula u
order by.
select como si fuera una columna. Lo mismo sucede en una clusula where
66
Funciones y expresiones
Ejemplo 4.1
SQL> select art_num Numero, art_nom Nombre, 2 (art_pv - art_pc) Beneficio 3 from articulos; NUMERO ---------3 2 1 4 5 6 7 8 9 10 11 12 13 14 15 NOMBRE BENEFICIO -------------------- ---------calendario 180 calculadora 700 impresora 180 lampara 880 lampara 900 lampara 880 lampara 880 pesacartas 1-500 1600 pesacartas 1-1000 2000 boligrafo 20 boligrafo 20 boligrafo lujo 40 boligrafo lujo 40 boligrafo lujo 40 boligrafo lujo 40
15 filas seleccionadas.
4.3.
La tabla dual
dual
es una tabla pequea pero til. Proporcionada por
La tabla
Oracle,
se emplea
para probar funciones o realizar clculos rpidos. Se crea en el momento de la instalacin y creacin de la base de datos y slo tiene una columna y una la. En el ejemplo 4.2 podemos ver la descripcin de esta pequea tabla.
Ejemplo 4.2
SQL> describe dual Nombre ?Nulo? Tipo ------------------------------------- -------- ------------------------DUMMY VARCHAR2(1)
4.4 Funciones
67
4.4.
Funciones
Una funcin manipula conjuntos de datos y devuelve un resultado. Las funciones pueden operar con cero, uno, dos, o ms argumentos. El formato es el siguiente:
Formato:
nom_funcin(arg1, arg2, ...)
Las funciones se dividen en dos tipos:
Funciones numricas. Funciones de caracteres: devuelven un valor de tipo carcter o bien devuelven un valor de tipo numrico. Funciones de fechas. Funciones de conversin. Otras funciones.
Estas funciones dieren en el nmero de registros sobre los cuales actan. Una funcin de registro nico devuelve un nico registro como resultado por cada registro de la tabla o vista consultado, mientras que las funciones de grupos devuelven un nico registro como resultado por cada grupo de registros consultados. Las funciones de registros aparecen en la lista de la orden consulta no lleve la clusula
group by)
y en la clusula
select where.
(suponiendo que la
having,
group by.
select
y en la clusula
select de una sentencia SQL, where, o bien en la clusula order by. Las distintas funciones que podemos
aplicar a los datos de tipo numrico se pueden ver en la tabla 4.1. Los ejemplos 4.3 y 4.4 nos muestran cmo usar estas funciones para realizar clculos nmericos.
68
Funciones y expresiones
Ejemplo 4.3
Raz cuadrada de 27
SQL> select sqrt(27) "raiz de 27" 2 from dual; raiz de 27 ----------5,19615242 1 fila seleccionada.
Ejemplo 4.4
3 elevado al cubo
SQL> select power(3,3) "3 elevado al cubo" 2 from dual; 3 elevado al cubo ----------------27 1 fila seleccionada.
Formato:
nom_funcin(tipo_dato1,tipo_dato2)
4.4 Funciones
69
Ejemplo 4.5
SQL> select initcap(clt_nom) "Nombre" 2 from clientes; Nombre -------------------Margarita Miguel Jean Michel Antoni Marcel Pablo Gerad Consuelo Pau Jorge Pablo Diego Joaquin Jacinto Pedro 16 filas seleccionadas.
La tabla 4.4 muestra algunas de las funciones ms usadas de conversin de datos. Estas funciones normalmente se utilizan cuando queremos dar formato a columnas de tipo fecha .
dual
para saber
1 Ver
captulo 7.
70
Funciones y expresiones
Ejemplo 4.6
SQL> select prv_num numero, length(prv_nom) nombre 2 from proveedores; NUMERO NOMBRE ---------- ---------1 16 2 23 3 21 4 7 5 11 5 filas seleccionadas.
Ejemplo 4.7
Quin soy?
group by,
by,
group
el grupo est formado por todo el conjunto de las seleccionadas. Las funciones de grupo se muestran en la tabla 4.6; algunas de ellas aceptan las opciones
distinct
El argumento de la funcin contiene el nombre de la columna sobre el cual debe ejercerse el clculo. Si el argumento viene precedido de la opcin antes las repeticiones de valores. Los valores indeterminados o nunca. Si la funcin se incluye en la clusula
select,
una expresin. De hecho, el resultado de una bsqueda que se realiza sobre una funcin es una tabla que contiene una sola columna, el valor de la funcin, y una sola la que resume los valores de la columna de todas las las.
71
select,
4.5.
group by para formar los grupos con los elementos que tenga los mismos valores en la columnas indicadas y having
La nocin de grupo introduce dos nuevos tipos de clusulas: para seleccionar solamente los grupos que cumplan las condiciones impuestas.
group by
select
en un
nmero mnimo de grupos tales que, en el interior de cada uno, la columna especicada tenga el mismo valor para cada la. Este tratamiento no afecta a la organizacin fsica de la tabla. Cuando se emplea una clusula
group by,
cada grupo. Esta clusula permite, generalmente, la visualizacin del valor de la columna comn, seguida de aquellos valores de las funciones aplicadas a cada grupo. La clusula consulta con la
Formato:
GROUP BY nom_columna [,nom_columna,...]
Tambin puede aadirse a la consulta una clusula en la seleccin de las las, o bien, la clusula la consulta resultante. En el ejemplo 4.8 primero hemos eliminado los artculos que no tienen denido el color, despus hemos formado grupos por colores y dentro de cada grupo hemos hallado el precio de compra ms caro. En el ejemplo 4.9 hemos formado directamente los grupos dandole un nombre al grupo de los artculos que no tienen denido el color, y posteriormente hemos hallado el precio mximo de compra. Se puede observar que la clusula
where,
group by
ordena
las tuplas ascendentemente por el atributo por el cual formamos los grupos.
4.5.2. Resumen
Un grupo se dene como las las que tienen un valor comn en una o ms columnas. Estas columnas se muestran en la clusula
group by.
72
Funciones y expresiones
Se devuelve una la por cada grupo formado. Por ejemplo, si se agrupa por colores, se obtendr una la resumen de informacin por cada uno de los colores diferentes que hubiera. Todos los tems de la lista especicada en la clusula nivel de agrupacin. Las columnas que no aparezcan en la clusula clusula
select,
group by
Ejemplo 4.8
SQL> 2 3 4
select art_col Color, max(art_pc) "maximo precio compra" from articulos1 where art_col is not null group by art_col;
COLOR maximo precio compra ------- -------------------azul 2100 blanco 2000 negro 4000 rojo 2100 verde 2100 5 filas seleccionadas.
Ejemplo 4.9
SQL> select nvl(art_col,'indefinido') Color, 2 max(art_pc) "maximo precio compra" 3 from articulos1 4 group by art_col; COLOR maximo precio compra ---------- -------------------azul 2100 blanco 2000 negro 4000 rojo 2100 verde 2100 indefinido 3000 6 filas seleccionadas.
Las consultas
select
73
having no se incluyen
Formato:
HAVING nom_funcin o expresin
Ejemplo 4.10
SQL> 2 3 4 5
select nvl(art_col,'indefinido') Color, count(*) "Numero de elementos" from articulos1 group by art_col having count(*) > 2;
En el ejemplo 4.10 primero hemos formado grupos por colores pero solamente hemos mostrado aquellos grupos que tienen ms de dos elementos.
4.6.
El valor
null
Algunas veces se podra desear sustituir temporalmente el valor nulo por otro valor sobre todo cuando se realizan clculos aritmticos. Para sustituir temporalmente el valor nulo por cualquier otro se deber usar la funcin
nvl
74
Funciones y expresiones
Vamos a ver dos ejemplos del uso de esta funcin, una con valores de tipo caracter y otra con valores de tipo numrico. Comprese el ejemplo 4.11 con el 3.9. En los dos hemos mostrado los colores distintos que tienen los artculos. En el ejemplo 3.9 hemos eliminado las tuplas que no tienen color, con lo cual la consulta devuelve solamente 5 las, mientras que en el ejemplo 4.11 a los artculos que no tienen color le hemos asignado la cadena de caracteres indenido y la consulta nos dice que devuelve 6 las en vez de 5.
Ejemplo 4.11
SQL> select distinct nvl(art_col,'indefinido') "Colores" 2 from articulos1; Colores ---------azul blanco indefinido negro rojo verde 6 filas seleccionadas.
Los ejemplos 4.12 y 4.13 muestra el uso de esta funcin con columnas de tipo numricas. En el ejemplo 4.12 hemos usado la funcin usado la funcin
nvl
nvl con lo cual las tuplas que no tienen denido el peso no se eligen para
calcular la media aritmetica. Vemos que en este segundo ejemplo, la media de pesos es mayor que en el primer caso, ya que se divide por un nmero menor de elementos.
Ejemplo 4.12
SQL> select avg(nvl(art_peso,0)) "Peso medio" 2 from articulos1; Peso medio ---------181,333333 1 fila seleccionada.
75
Ejemplo 4.13
SQL> select avg(art_peso) "Peso medio" 2 from articulos1; Peso medio ---------209,230769 1 fila seleccionada.
Funcin
Uso
Retorna el valor absoluto del nmero Retorna el coseno de Retorna el coseno radianes. Retorna
n.
en
elevado a la
Retorna el mayor entero menor que o igual a Retorna el logaritmo natural de que 0. Retorna el logaritmo, base Retorna el resto de si
n,
si
n.
es mayor
m Retorna n
Retorna
dividido por
m, de n. n. Devuelve m,
es 0.
elevado a la redondeado
m
sign(n) sin(n) sinh(n) sqrt(n) tan(n) tanh(n) trunc(n[,m])
n =0, la funcin n >0, la funcin retorna 1. Retorna el seno de n, expresado en radianes. Retorna el seno hiperblico de n, expresado en raSi la funcin retorna -1; si retorna 0; si dianes. Retorna la raz cuadrada de Retorna la tangente de radianes. Retorna
decimal.
n <0,
n.
El valor de
no
truncado a
es omitido, a 0 lugares.
76
Funciones y expresiones
Funcin
chr(n)
Uso
Retorna el caracter que tiene equivalente binario a
en el conjunto de con
Retorna
se-
serie.
Pone
serie1, rellenada a la izquierda con una longitud n con la secuencia de caracteres de serie2.
Retorna Elimina caracteres desde la izquierda de
nsculas.
conjunto. serie1.
ta a la derecha de derecha de la
serie1.
pero a partir de la
serie.
y de
serie
res en maysculas.
Funcin
ascii(serie)
Uso
Retorna la representacin decimal en el conjunto de caracteres de la base de datos del primer de
length(serie)
serie.
byte
serie.
77
Funcin
to_char(d[,fmt[,'ndl']])
Uso
Convierte
varchar2
varchar2
ndl
to_char(n[,fmt])
devolvern los nombres del da, del mes y sus abreviaturas. Convierte
to_date(ch[,fmt[,'ndl']])
fmt.
Convierte
varchar2
funcin
ch
de
tipo
char
ndl
o
to_number(ch[,fmt])
to_char.
Convierte
varchar2
ch,
de
tipo
a tipo
number
char
(entero).
Funcin
es nulo devuelve
nulo devuelve
exp1.
exp2 ; si exp1
convierte
no es
ser de cualquier tipo de dato. Si los tipos de datos son diferentes tipo de datos de
uid user
exp1.
Oracle
exp2
al
Retorna un entero como identicador nico del usuario actual. Retorna el nombre del usuario actual de
cle.
Ora-
78
Funciones y expresiones
Funcin
Uso
Calcula la media aritmtica de la consulta. Si se especica
n.
expr. expr. n.
x, un nmero.
x, un n-
Cap tulo 5
Consultas anidadas
En este captulo podremos comprobar cmo relizar una consulta cuando los criterios de seleccin los obtenemos del resultado de una consulta, llamada anidada. Tambin se estudiar los diferentes operadores de que disponemos.
5.1.
Introduccin
where
o
Hemos visto que la informacin que devuelve una consulta un criterio denido en una clusula
having.
que los criterios de seleccin de tuplas sean el resultado, a su vez, de una consulta
Para hacer esto, debemos anidar las consultas, donde el resultado de una constituye el punto de partida para la ejecucin de la del nivel inmediatamente superior. Con esto conseguimos que el criterio de seleccin de tuplas sea el resultado de una consulta a la base de datos. Tericamente, no hay lmite para el nmero de niveles de anidacin. Debemos tener en cuenta que las consultas de nivel inferior deben ir entre parntesis. A veces se puede expresar el mismo tipo de consulta mediante una unin de tablas . El lenguaje
consulta, pero el tiempo invertido en la obtencin del resultado vara segn la expresin y tambin segn la lgica seguida por el optimizador para organizar la consulta. Por tanto, no es posible decir a priori cul es la formulacin ms ecaz.
1 Esta
80
Consultas anidadas
En
SQL,
las consultas cuyo criterio de seleccin depende del resultado devuelto por
otra consulta, se denomina consultas anidadas. La subconsulta se evala en primer lugar y el resultado se sustituye dinmicamente en la consulta de nivel superior. Las consultas anidadas tambin se pueden usar en la clusula mismo efecto que en la clusula La columna de la clusula
where.
having,
produciendo el
where
tipo que los valores devueltos por la subconsulta. Las expresiones y las funciones pueden incluirse como columnas de las consultas anidadas. Hemos de sealar que una consulta anidada no puede contener la clusula ya que sta se utiliza para ordenar el resultado de una consulta principal.
order by,
Formato:
SELECT nom_columna, expresiones, etc. FROM nom_tabla WHERE nom_columna operador_de_comparacin (SELECT nom_columna(s), expresiones, etc. FROM nom_tabla [WHERE criterio de seleccin de las filas] [GROUP BY nom_columna, ...] [HAVING nom_columna, expresiones, etc.]...);
5.2.
Una subconsulta puede devolver un nico valor que sirve como valor de comparacin de la consulta de la clusula
Una primera consulta determinara el valor del criterio de seleccin, y la segunda ltrara la tabla en base a este valor. La consulta interior puede obtener valores desde otra tabla diferente a la referenciada en la clusula
select
exterior.
El ejemplo 5.1 nos muestra cmo utilizamos el resultado de una consulta, llamada consulta anidada, como criterio de seleccin de una consulta principal.
5.3.
Podemos combinar dos consultas anidadas mediante los operadores lgicos utilizadas en la clusula
and.
Las columnas devueltas por una consulta interior debern corresponderse con las columnas
where
81
tipo de datos.
Ejemplo 5.1
SQL> select clt_num numero, clt_nom nombre, clt_apell apellido 2 from clientes 3 where clt_pais = 4 (select clt_pais 5 from clientes 6 where clt_num = 3); NUMERO ---------3 4 6 8 NOMBRE -------------------jean michel marcel gerad APELLIDO ------------------------dupont dupret souris courbon
4 filas seleccionadas.
Formato:
WHERE nom_columna operador comparativo (consulta anidada) operador_lgico nom_columna operador comparativo (consulta anidada)
Los ejemplos 5.2 y 5.3 tienen dos criterios de seleccin en la clusula empleado diferentes operadores de comparacin.
where
y cada
uno de ellos se obtiene a partir del resultado de una consulta anidada. Vemos que hemos
Ejemplo 5.2
SQL> 2 3 4 5 6 7 8 9 10
select art_num numero, art_nom nombre from articulos where art_col = (select art_col from articulos where art_num = 15) or art_peso = (select art_peso from articulos where art_num = 3); NOMBRE -------------------calculadora calendario boligrafo lujo
NUMERO ---------2 3 15
3 filas seleccionadas.
82
Consultas anidadas
Ejemplo 5.3
SQL> 2 3 4 5 6 7 8 9 10
select art_num numero, art_nom nombre from articulos where art_col = (select art_col from articulos where art_num = 15) or art_peso > (select art_peso from articulos where art_num = 3); NOMBRE -------------------impresora calculadora lampara lampara lampara lampara boligrafo lujo
NUMERO ---------1 2 4 5 6 7 15
7 filas seleccionadas.
5.4.
La consulta anidada debe incluirse en una clusula lista (in) o uno de los operadores
any
where
Ciertas subconsultas pueden retornar una lista de valores, en tales consultas deber usarse el operador
in o not in para unir la consulta del primer nivel con la lista de valores
obtenidos por la subconsulta. El operador de comparacin = es ms eciente cuando se conoce que la subconsulta devolver una nica la. Esto ocurre siempre que utilicemos este operador con la clave primaria de una tabla. Si observamos los ejemplos 5.2 y 5.3, veremos que hemos utilizado el operador de igualdad cuando tenamos la certeza de que la consulta anidada solamente poda devolvernos un nico valor y hemos utilizado el operador mayor que cuando haba posibilidad de que la consulta anidada devolviera ms de una tupla.
83
5.5.
Puede darse tambin el caso de que las subconsultas devuelvan ms de una columna. En tales subconsultas, el orden de las columnas expresadas en la clusula consulta de nivel inferior. Las columnas de la clusula estar situadas entre parntesis. El ejemplo 5.4 vemos que la consulta anidad devuelve una ncia tupla que contiene dos columnas. Dichas columnas se corresponden plenamente con las expresadas en la clusula consulta de primer nivel, deber corresponder al orden de columnas seleccionadas por la
where
where
de la consulta principal.
Formato:
WHERE (nom_columna1, nom_columna2) operador (consulta anidada)
Ejemplo 5.4 Articulos que tengan el mismo color y el mismo peso que el no 10
SQL> select art_num numero, art_nom nombre 2 from articulos 3 where (art_col,art_peso) = 4 (select art_col, art_peso 5 from articulos 6 where art_num = 10); NUMERO ---------10 12 NOMBRE -------------------boligrafo boligrafo lujo
2 filas seleccionadas.
5.6.
Subconsultas correlacionadas
select
Cuando se realiza una consulta anidada, sta se evala totalmente y su resultado, una tabla temporal, se utiliza como criterio de seleccin en la consulta inmediata superior. El nombre de las columnas en la clusula tabla denida en la clusula de la consulta anidada se relaciona con la
from
de dicha consulta.
Esto no siempre es tan sencillo, ya que a veces la consulta superior y la anidada correspondiente pueden estar correlacionadas. Es decir, la consulta anidada no se evala totalmente devolviendo una tabla temporal, sino que para cada valor de la consulta
84
Consultas anidadas
superior realiza una evaluacin de la consulta anidada. Esto signica que un valor obtenido mediante una subconsulta depende de una variable que recibe un valor desde la consulta de nivel superior. Las consultas anidadas correlacionadas nos pueden obligar a usar alias para las tablas denidas en las clusulas
from
correspondientes.
Formato:
SELECT alias1.nom_columna1, alias1.nom_columna4 FROM nom_tabla1 alias1 WHERE criterio_de_seleccin (SELECT alias2.nom_columna1 FROM nom_tabla1 alias2 WHERE alias1.nom_columna3=alias2.nom_columna5);
Donde
nom_tabla1
ferentes alias para identicar qu columnas pertenecen a la tabla de la consulta anidada y qu columnas corresponden a la tabla de la consulta principal. Esta consulta se realiza tomando cada tupla de la consulta externa y entrando en la interna para evaluar su contenido y devolver o no el valor a la clusula La clusula
where
de la consulta superior.
where
consulta externa sea igual al valor en la consulta interna, y as evaluarla y devolver el, o los valores a la clusula
where
externa.
El ejemplo 5.5 nos muestra una consulta correlacionada donde la tabla de la consulta anidada y de la consulta principal es la misma. Esto hace que tengamos que utilizar alias para las tablas y as poder identicar a los atributos implicados en dicha consulta.
5.7.
Operadores
Hasta este momento hemos visto los operadores de comparacin, los operadores lgicos, los patrones, el operador de intervalo y nos queda por ver los operadores todo, al menos uno y el operador de existencia.
all
any.
all
any
where com<>, !=, <, >, <=, >=) seguido por uno de los
5.7 Operadores
85
Ejemplo 5.5
Datos de los artculos que tienen el mismo color de los que pesan ms de 10g
SQL> select art_num numero, art_nom nombre 2 from articulos t1 3 where art_num in 4 (select art_num 5 from articulos t2 6 where t1.art_col = t2.art_col and t2.art_peso > 10); NUMERO ---------1 2 3 4 5 6 7 10 11 12 13 14 15 NOMBRE -------------------impresora calculadora calendario lampara lampara lampara lampara boligrafo boligrafo boligrafo lujo boligrafo lujo boligrafo lujo boligrafo lujo
13 filas seleccionadas.
Formato:
SELECT nom_columna, expresiones, etc. FROM tabla WHERE columna operador_de_comparacin ANY ALL (Subconsulta que retorna mltiples valores);
El operador
any
principal cumpla la condicin de la consulta anidada para que sea verdadero el criterio de seleccin de la clusula El operador
all
todas las tuplas de la consulta anidada y as el criterio de la clusula El ejemplo 5.6 nos muestra el uso del operador blanco.
any.
artculos cuyos pesos sean mayores que el peso de cualquiera de los artculos de color
86
Consultas anidadas
5.7.2. Resumen
Con el operador
any
y/o
all
errores. Es preferible emplear en su lugar consultas que hagan uso de funciones sobre los grupos o sobre las consultas de existencia. El operador El operador
in
es equivalente a =
any. all
o <>all.
not in
es equivalente a !=
Ejemplo 5.6
SQL> select art_num numero, art_nom nombre 2 from articulos 3 where art_peso > any 4 (select art_peso 5 from articulos 6 where art_col = 'blanco'); NUMERO NOMBRE ---------- -------------------3 calendario 2 calculadora 1 impresora 4 lampara 5 lampara 6 lampara 7 lampara 10 boligrafo 11 boligrafo 12 boligrafo lujo 13 boligrafo lujo 14 boligrafo lujo 15 boligrafo lujo 13 filas seleccionadas.
exists
sultas en que necesitemos utilizar el cuanticador universal para todo o la operacin de divisin del lgebra relacional.
87
La subconsultas de existencia debe colocarse dentro de una clusula de la palabra clave de una la por lo menos.
Formato:
SELECT columnas FROM tabla WHERE EXISTS (Subconsulta que retorna uno o mltiples valores);
La existencia de las de la consulta interna se puede utilizar para cualicar las en una consulta exterior. La consulta anidada ser cierta si encuentra una o ms las. En caso contrario, la clusula La clusula
where
select
cado los nombres de las columnas, ya que lo nico que se chequea es si existe al menos una la que cumpla la condicin, luego debemos utilizar el asterisco (*). En el ejemplo 5.7 observamos que se nos mostrar la tabla
Sanjita.
Proveedores
5.8.
Una clusula
grupos. Este criterio puede, a su vez, depender del resultado de una consulta anidada.
Formato:
HAVING {columna | funcin} {operador_de_comparacin | lista} {(subconsulta anidada) | constante | columna | funcin}
El ejemplo 5.8 nos muestra cmo hacemos una seleccin de entre todos los grupos obtenidos. La seleccin se hace en base al criterio expresado en la clusula
having.
88
Consultas anidadas
Ejemplo 5.7
SQL> select prv_num numero, prv_nom nombre 2 from proveedores 3 where exists 4 (select * 5 from proveedores 6 where prv_nom = 'sanjita'); NUMERO ---------1 2 3 4 5 NOMBRE ------------------------catio electronic estilograficas reunidas mecanica de precision sanjita electrolamp
5 filas seleccionadas.
Ejemplo 5.8
SQL> 2 3 4 5 6
select art_col color from articulos group by art_col having avg(art_peso) >= (select avg(art_peso) from articulos);
Colores de los artculos cuya media de pesos es superior a la media de todos los artculos
Cap tulo 6
6.1.
Bsquedas multitablas
6.1.1. Introduccin
Las consultas que realizamos normalmente requieren informacin que estn repartida o contenida en ms de una tabla. Para poder hacer esto, necesitamos que una columna contenga la misma informacin en diferentes tablas y sea este campo el que nos sirva de unin entre las diversas tablas. Estas columnas que nos sirven para recabar informacin entre tablas se denominan claves forneas y la operacin que nos permite hacer esto corresponde a la operacin de producto natural o
join1 .
1 En
90
Formato:
SELECT tab1.nom_colum, tab2.nom_colum,... FROM tab1, tab2, ...;
from
comienza realizando el producto cartesiano de las mismas. Dicho producto es, a su vez, una tabla derivada de la concatenacin de las las de una tabla original con las las de otra (o de otras) tambin original; es decir, cada la de una tabla es emparejada sucesivamente con todas las las de la otra. Si la primera tabla contiene
las, y la segunda
producto cartesiano de estas dos tablas estar formado por una tabla con Posteriormente, se proyectarn las columnas seleccionadas en la clusula informacin que no es cierta.
select
MxN
N,
el
las.
y stas
La consulta del ejemplo 6.1 nos da una tabla donde aparecen los datos principales de los artculos cuyos nmeros sean menores que 4 y de sus proveedores. Podemos comprobar, observando este ejemplo, que los proveedores estn asignados a todos los artculos, cuando sabemos que realmente un artculo slo lo suministra un proveedor. Si obsevamos ms detenidamente dicho ejemplo, vemos que en primer lugar hemos hecho un producto cartesiano entre las tablas denominan
Proveedores
o
Articulos
producto theta 2
2 En
91
Ejemplo 6.1
SQL> select art_num numero, art_nom nombre, proveedores.* 2 from articulos, proveedores 3 where art_num < 4; NUMERO ---------1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 NOMBRE PRV_NUM PRV_NOM -------------------- ---------- ------------------------impresora 1 catio electronic calculadora 1 catio electronic calendario 1 catio electronic impresora 2 estilograficas reunidas calculadora 2 estilograficas reunidas calendario 2 estilograficas reunidas impresora 3 mecanica de precision calculadora 3 mecanica de precision calendario 3 mecanica de precision impresora 4 sanjita calculadora 4 sanjita calendario 4 sanjita impresora 5 electrolamp calculadora 5 electrolamp calendario 5 electrolamp
15 filas seleccionadas.
Para realizar un producto natural basta con especicar en la clusula columnas buscadas y escribir una condicin de igualdad en la clusula columnas que permiten la unin de las tablas. La clusula de todas las tablas.
from
las las
Formato:
SELECT tab1.nom_colum, tab2.nom_colum, ... FROM tab1, tab2, ... WHERE tab1.colum = tab2.colum AND ... ;
Vemos que la clusula
producto cartesiano. Posteriormente, se descartarn todas las las resultantes del producto que no cumplan el criterio de unin contenido en la clusula ser posteriormente ordenada segn las columnas indicadas en la clusula
order by.
La
select.
Esta descripcin del proceso se corresponde con una concepcin tpica del razonamiento humano. En la realidad, el optimizador desempea un importante papel, efectuando, de forma inmediata, las selecciones y proyecciones sobre las tablas iniciales, de modo que la tabla resultante del producto cartesiano jams se genera en el sistema.
92
Por ejemplo, si realmente lo que queremos es saber quien suministra realmente cada artculos, la consulta sera la mostrada en el ejemplo 6.2. Slo se van a seleccionar las tuplas en las que el cdigo del proveedor sea el mismo en las dos tablas.
Ejemplo 6.2
SQL> select art_num numero, art_nom nombre, proveedores.* 2 from articulos, proveedores 3 where art_prv = prv_num; NUMERO ---------2 10 11 12 15 14 13 8 9 1 3 4 5 6 7 NOMBRE PRV_NUM PRV_NOM -------------------- ---------- ------------------------calculadora 1 catio electronic boligrafo 2 estilograficas reunidas boligrafo 2 estilograficas reunidas boligrafo lujo 2 estilograficas reunidas boligrafo lujo 2 estilograficas reunidas boligrafo lujo 2 estilograficas reunidas boligrafo lujo 2 estilograficas reunidas pesacartas 1-500 3 mecanica de precision pesacartas 1-1000 3 mecanica de precision impresora 4 sanjita calendario 4 sanjita lampara 5 electrolamp lampara 5 electrolamp lampara 5 electrolamp lampara 5 electrolamp
15 filas seleccionadas.
La clusula
where
operadores ya vistos, junto con los criterios de unin entre tablas (producto natural) siempre que estn combinados con operadores lgicos. Por ejemplo, en el ejemplo 6.1 aparecen artculos con proveedores que no son realmente quienes los suministra. Esto lo podemos subsanar realizando un producto natural ms el mismo criterio de seleccin que hemos aplicado en dicho ejemplo (ver ejemplo 6.3).
6.1.4. Resumen
A modo de resumen, podemos resaltar los siguientes puntos:
Las tablas que van a formar parte de un producto natural se especican en la clusula
from.
La clusula
where especica los criterios para unir las tablas, as como el de seleccin select.
de los registros. Las columnas que se quieren proyectar de una u otra tabla irn en la clusula
93
nom_tabla.*
tabla en los productos cartesiano y natural. Las columnas con igual nombre en ambas tablas debern llevar un prejo con el nombre de la tabla a la que pertenece, o bien un alias, separado por un punto. Si los nombres de las columnas son nicos en todas las tablas del producto, no ser necesario usar como prejo el nombre de su tabla. Pueden realizarse tantos productos sobre tablas como se desee. El criterio de correspondencia para las tablas se denomina predicado de unin o criterio de unin. Pueden utilizarse ms de un par de columnas para especicar la condicin de unin entre dos tablas cualquiera. Cuando se quiere realizar el producto natural entre menos
n-1
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
NOMBRE PRV_NUM PRV_NOM -------------------- ---------- ------------------------calculadora 1 catio electronic impresora 4 sanjita calendario 4 sanjita
3 filas seleccionadas.
se desea obtener una lista de las en funcin de un criterio que es funcin de la unin con otra tabla, si la condicin de unin no se cumple, la la normalmente no aparece en el resultado. Pues bien, para visualizar todas las las, incluidas las que no cumplen este criterio, es preciso realizar una unin externa. En
Oracle
en la clusula determinados.
where,
94
La unin externa devuelve todas las las recuperadas por medio de un producto natural y, adems, aade las tuplas de una tabla que no estn emparejadas con las tuplas de la otra tabla. Una unin externa hace que el
SQL
para las las que no cumplen la condicin de unin. Por ejemplo, queremos saber los datos de los articulos y la fecha en que se han vendido cuyos nmeros sean mayores que 4. Si un artculo an no se han vendio tambin queremos que aparezcan sus datos. Esto lo podemos ver resuelto en el ejemplo 6.4. Obsrvese que le hemos dado formato al atributo fecha para que no aparezca tal como se han introducido los valores. Ver captulo 7.
Ejemplo 6.4
SQL> select art_num numero, art_nom nombre, 2 to_date(vnt_fch,'yymmdd') fecha 3 from articulos,ventas 4 where art_num = vnt_art(+) and art_num > 3; NUMERO ---------4 4 5 6 7 8 9 10 10 11 12 13 13 14 15 15 NOMBRE -------------------lampara lampara lampara lampara lampara pesacartas 1-500 pesacartas 1-1000 boligrafo boligrafo boligrafo boligrafo lujo boligrafo lujo boligrafo lujo boligrafo lujo boligrafo lujo boligrafo lujo FECHA -------06/01/91 09/01/91 11/01/91 11/01/91 06/01/91 11/01/91 06/01/91 10/01/91 10/01/91 22/02/92 06/01/91 09/01/91 09/05/01
16 filas seleccionadas.
6.1.6. Autouniones
A veces queremos realizar una unin entre dos tablas que no son distintas, es decir, las dos tablas que queremos unir son, en realidad, la misma tabla. Esto se produce cuando el criterio de unin afecta al valor de una columna en relacin al valor de esta misma columna en otra la de la misma tabla. Una tabla puede estar unida dentro de s misma en columnas que contengan el mismo tipo de informacin. Una autounin une las de una tabla con ella misma o con otras las en la misma tabla.
95
Formato:
SELECT alias1.columna, alias2.columna, ... FROM tabla1 alias1, tabla1 alias2 WHERE alias1.columna = alias2.columna;
Cuando realizamos este tipo de unin es necesario utilizar alias pues tenemos que diferenciar cuando estamos haciendo referencia a una tabla y cuando hacemos referencia a la otra tabla, sabiendo que las dos tablas son la misma.
Ejemplo 6.5
Autouniones
SQL> 2 3 4
select t1.clt_num numero, t1.clt_nom nombre, t1.clt_apell from clientes t1, clientes t2 where t1.clt_pais = t2.clt_pais and t2.clt_nom like 'm%' and t2.clt_num > 10; NOMBRE -------------------margarita miguel antoni pablo consuelo pau jorge pablo diego joaquin jacinto CLT_APELL ------------------------borras perez llopis goqi roman roca mancha curro cortes fernandez duran
NUMERO ---------1 2 5 7 9 10 11 12 13 14 15
11 filas seleccionadas.
El ejemplo 6.5 nos muestra los datos de los clientes que viven en el mismo pas de los que su nmero es mayor que 10 y su nombre comienza por
m.
6.1.7. Resumen
Una tabla puede unirse consigo misma como si fueran dos tablas separadas. La autounin es til para unir una la de una tabla con otra de la misma tabla. Al igual que en cualquier otra unin, la unin se realiza entre columnas que contienen el mismo tipo de informacin. A la tabla se deber asignar un alias para sincronizar qu columnas van a ser obtenidas de la tabla.
96
Ejemplo 6.6
Clasicar los artculos cuyos no estn comprendidos entre 2 y 10, segn su peso
SQL> select art_num numero, art_nom nombre, peso_nom tipo 2 from articulos, pesos 3 where art_peso between peso_min and peso_max 4 and art_num between 2 and 10; NUMERO ---------3 10 2 4 5 6 7 NOMBRE -------------------calendario boligrafo calculadora lampara lampara lampara lampara TIPO --------leve leve ligero medio medio medio medio
7 filas seleccionadas.
El ejemplo 6.6 nos muestra cmo podemos hacer estos tipos de uniones. Segn el peso de cada artculo los hemos clasicados utilizando la clasicacin expresada en la tabla
Pesos.
6.2.
Operadores conjuntistas
SGBD.
Las operaciones conjuntistas son cuatro: unin, interseccin, diferencia y producto cartesiano (ya visto anteriormente) de conjuntos. Slo la unin y el producto cartesiano es comn a todos los Las otras dos operaciones son muy potentes pero slo se dan de forma excepcional en los criterio de unin entre tablas. Hay ocasiones en las que se necesita combinar informaciones de tipo similar. Un ejemplo clsico de esto puede ser dos o ms listas de direcciones que se unen antes de empezar una campaa de publicidad por correos. Dependiendo del propsito particular de la campaa se puede enviar cartas de una de las siguientes maneras:
97
A todo el mundo de ambas listas (mientras se evite enviar dos cartas a alguien que se encuentra en las dos listas) Slamente a aquellas personas que estn en ambas listas. Slamente a aquellas personas que estn en una lista y no en la otra.
intersect
operadores
minus.
Oracle
union,
union, intersect y minus no pueden llevar las by. Si la clusula order by se usa en una consulta, sta deber especicarse por posicin3 .
que, partiendo de dos tablas temporales, se puede crear una tercera que contenga el conjunto de las de las dos tablas iniciales, eliminando o no las las repetidas. Si al operador idnticas. En las dos tablas el tipo de columnas debe ser compatible. Si las tablas unidas pertenecen a subconjuntos de la misma tabla, el uso de este operador es completamente equivalente al de un operador lgico
union
all,
or
Formato:
SELECT nom_columna, ... FROM nom_tabla, ... [WHERE condiciones] {UNION | UNION ALL} SELECT nom_columna, ... FROM nom_tabla, ... [WHERE condiciones] [ORDER BY entero];
La clusula
order by
En el ejemplo 6.7 se ha obtenido una lista con todos los nmeros de los artculos independientemente de s se han vendido o no.
3 Ver
captulo 3.
98
Ejemplo 6.7
SQL> 2 3 4 5
select art_num numero from articulos union select vnt_art from ventas;
Formato:
SELECT nom_columna, ... FROM nom_tabla, ... [WHERE condiciones] INTERSECT SELECT nom_columna, ... FROM nom_tabla, ... [WHERE condiciones] [ORDER BY entero];
En el ejemplo 6.8 solamente aparecen los nmeros de los artculos que se han vendido.
99
Ejemplo 6.8
SQL> 2 3 4 5
select art_num numero from articulos intersect select vnt_art from ventas;
minus
no por la siguiente.
Formato:
SELECT nom_columna, ... FROM nom_tabla, ... [WHERE condiciones] MINUS SELECT nom_columna, ... FROM nom_tabla, ... [WHERE condiciones] [ORDER BY entero];
El ejemplo 6.9 nos muestra solamente los artculos que an no se han vendido y podemos hacer una comparacin con los ejemplos 6.7 y 6.8 ya mostrados.
100
6.3.
posible.
Vamos a resumir los requisitos necesarios para realizar una consulta de la mejor manera
from.
Decidir qu columnas se desean visualizar o proyectar y su orden de aparicin para incluirlas en la clusula Si la clusula
select. select,
salvo las
group by
select
funciones en cuestin. Determinar las condiciones de seleccin que limitan la consulta. Las condiciones con proyeccin sobre grupos deben gurar en una clusula valores individuales, aparecern en una clusula
having; where.
Cuando se tenga que emplear una funcin sobre grupos en una clusula realizar una consulta anidada. Para fusionar los resultados procedentes de dos clusulas el operador
where,
cuando haya necesidad de un valor de una columna de otra tabla distinta, hay que
Hay que precisar el orden de aparicin de las las del resultado de una consulta con una clusula
Los posibles alias que demos a las columnas, debern estar en la primera consulta cuando usamos los operadores conjuntistas.
Ejemplo 6.9
SQL> 2 3 4 5
select art_num numero from articulos minus select vnt_art from ventas;
101
6.4.
6.4.1. Introduccin
Con el lenguaje
SQL
aunque no siempre es fcil decidir la mejor forma de expresar una consulta compleja. Es mejor usar una unin de tablas o una consulta anidada? Interesa el empleo del operador
exists?
A todas estas preguntas vamos a intentar dar respuesta en este apartado. Las
reglas que siguen facilitarn a buen seguro la tarea del programador novel. Para ilustrar nuestro punto de vista examinemos una consulta sencilla que afecta a dos tablas: visualizar los datos de los clientes que han comprado el artculo n
3.
Existen, al menos, cuatro formulaciones diferentes para esta consulta: una unin entre tablas, una consulta anidada, una consulta correlacionada y una consulta basada en el operador
exists4 .
1)
Unin entre tablas : establecer un producto cartesiano entre las tablas Clientes y Ventas
mediante una igualdad en el nmero del cliente en ambas tablas, teniendo en cuenta que slo necesitamos los datos de aquellos clientes que han comprado el artculo n Ver ejemplo 6.10.
3.
2)
Consulta anidada : listar a todos los clientes cuyo nmero se incluye en el conjunto de
los que han comprado el artculo n 3. Ver ejemplo 6.11.
3)
Consulta correlacionada :
Consulta de existencia : listar a los clientes 3 en la tabla Ventas. Ver ejemplo 6.13.
6.4.2. Ecacia
Autorizar varias formulaciones para una misma consulta puede considerarse una ventaja del lenguaje, si cada usuario es libre de elegir su propia manera de plantear el problema. Por desgracia, en la situacin actual de las versiones del
arrojan tiempos de ejecucin con frecuencia muy distintos y a veces hasta inesperados. Ello obliga al usuario a comprobar el comportamiento de su versin de para cada tipo de consulta y para cada formulacin, si pretenden optimizar sus aplicaciones. La razn de ello estriba en que las tcnicas utilizadas por el optimizador para organizar la consulta depende de la formulacin de la consulta y del
SGBDR 5 .
4 Ver
5 Sistema
102
La unin es indispensable para transcribir una consulta que pretende recuperar informacin derivada de distintas tablas.
En efecto, una consulta mediante subconsulta permite slo la visualizacin de informaciones situadas en la tabla exterior. Por el contrario, las uniones resultan inoperantes en determinadas consultas multitablas.
Cuando la consulta consiste en recuperar informacin de una sola tabla, pero siendo necesaria otra para condicionar la seleccin de las las de la primera, siempre es mejor el uso de una consulta anidada.
As, se puede comprobar fcilmente que no es posible ninguna condicin de unin para solucionar una consulta que efecta una operacin conjuntista de diferencia. Esto es lgico, dado que la consulta niega el enlace entre las tablas. Por el contrario, la solucin es inmediata con el operador en el ejemplo anterior (not delante de
in o con exists, dado que basta con invertir las condiciones in o exists).
from
not,
tabla interior que satisface las condiciones exigidas. Examinando las consultas que se pueden hacer a una base de datos, se llega fcilmente a la conclusin de que toda subconsulta precedida por el operador sada con el operador
exists.
in
expresarse sino con la ayuda del operador Como conclusin, el operador El operador
exists.
si se excepta el hecho de que permite ex-
in
SQL,
presar una consulta de manera conjuntista, algo que algunos usuarios preeren en lugar
103
exists.
El operador
in
mizadores no son perfectos y el tiempo de ejecucin de la consulta con mucho mayor en algunos casos. Por otra parte,
exists
puede ser
exists
muy conocido en lgica, pero que no est representado directamente en la expresin para todo puede formularse con la ayuda de uno o dos
not exists.
Clientes Ventas, y se seleccionan las tuplas de los clientes que han comprado el artculo 3.
Producto natural
Ejemplo 6.10
SQL> select clt_num numero, clt_nom nombre, clt_apell apellido 2 from clientes, ventas 3 where clt_num = vnt_clt and vnt_art = 3; NUMERO ---------6 13 NOMBRE -------------------marcel diego APELLIDO ------------------------souris cortes
2 filas seleccionadas.
104
2) Consulta anidada: se realiza una consulta anidada por obtener los n han comprado el artculo n
de clientes que
Ejemplo 6.11
SQL> select clt_num numero, clt_nom nombre, clt_apell apellido 2 from clientes 3 where clt_num in 4 (select vnt_clt 5 from ventas 6 where vnt_art = 3); NUMERO ---------6 13 NOMBRE -------------------marcel diego APELLIDO ------------------------souris cortes
Consulta anidada
2 filas seleccionadas.
Clientes
o
3.
se comprueba mediante
Ejemplo 6.12
SQL> select clt_num numero, clt_nom nombre, clt_apell apellido 2 from clientes 3 where 3 in 4 (select vnt_art 5 from ventas 6 where vnt_clt = clt_num); NUMERO ---------6 13 NOMBRE -------------------marcel diego APELLIDO ------------------------souris cortes
Consulta correlacionada
2 filas seleccionadas.
105
Clientes
se comprueba mediante
3.
Ejemplo 6.13
Consulta de existencia
SQL> select clt_num numero, clt_nom nombre, clt_apell apellido 2 from clientes 3 where exists 4 (select * 5 from ventas 6 where vnt_clt = clt_num and vnt_art = 3); NUMERO ---------6 13 NOMBRE -------------------marcel diego APELLIDO ------------------------souris cortes
2 filas seleccionadas.
Cap tulo 7
Tratamiento de fechas
Oracle proporciona un buen mtodo para el tratamiento de las fechas. Este captulo nos muestra las diferentes maneras que tenemos de expresarlas.
7.1.
Aritmtica de fechas
posee la capacidad de almacenar y calcular fechas, as como el nmero de
Oracle
segundos, minutos, horas, das, meses y aos entre fechas dadas. Tambin tiene la facilidad de formatear las fechas de cualquier manera que se pueda concebir, desde un simple 15MAR-97 a Decimoquinto da del mes de marzo en el ao 764 del reinado de Luis IX. Para almacenar y operar con fechas,
unas propiedades nicas y especiales y que se almacena en un formato interno especial que incluye, no slo el mes, da y ao, sino tambin horas, minutos y segundos. Los benecios que proporcionan todos estos detalles deberan ser obvios. As podemos siempre almacenar automticamente la fecha, la fecha y hora, la fecha, hora y minuto, o la fecha, hora, minuto y el segundo de cualquier suceso. Los productos el
date
SQL*Plus
aritmtica de fechas. Tenemos que tener en cuenta que si sumamos un 1 a una fecha se obtiene otra fecha: el siguiente da. Mientras que si restamos una fecha de otra se obtiene un nmero: la cantidad de das entre las dos fechas.
108
Tratamiento de fechas
Oracle
realizar una aritmtica de fechas puede provocar un poco de confusin, por ejemplo obtenga este nmero fraccional de das entre hoy y maana es que no es un da exacto.
Oracle
puede decir que la diferencia entre hoy y maana es de .5339 das. La razn de que se
las horas, los minutos y los segundos junto a las fechas por lo que la diferencia entre fechas
El formato por defecto de la fecha se incluye en el chero de arranque del sistema como un parmetro ms. Cualquier usuario puede cambiar el formato para una sesin de trabajo, o bien de forma permante incluyendo las rdenes en su chero de arraque (login.sql). En la tabla 7.1 vemos la expresin, la denicin y el tipo de dato que resulta de hacer algunas operaciones con las fechas. Suponemos que x representa a un nmero entero.
Expresin
fecha + x fecha + x/24 fecha - x fecha - x/24 fecha - fecha
Denicin
Aadira un nmero de das. Aadira un nmero de horas. Restara un nmero de das. Restara un nmero de horas. Determina el nmero de das entre ambas fechas.
La tabla
dual 1
proporcionada por
Oracle,
7.2.
La funcin sysdate
2
Oracle
operativo la fecha y la hora actual . No necesita argumentos. Por ejemplo para saber la fecha de hoy, debemos usar esta funcin junto con la tabla
dual,
1 Ver
2 Esta
captulo 4. funcin se puede usar igual que cualquier otra funcin, ver captulo 4.
109
Ejemplo 7.1
Fecha actual
El ejemplo 7.1 nos muestra el resultado de la utilizacin de dicha funcin. El formato en que nos aparece es el formato por defecto que est denido en el chero de arranque de
Oracle.
7.3.
Funciones de fecha
date y devuelven valores months_between que devuelve un dato
Las funciones de fecha operan con valores de tipo de datos de este mismo tipo de datos, excepto la funcin de tipo numrico.
Funcin
Uso
Aade
meses a la fecha
d.
Devuelve la fecha del ltimo da del mes que contiene la fecha chas
d.
d1
d2.
char
es el nombre
de los das de la semana. Devuelve la fecha (en formato por defecto) ms cercana (anterior o posterior) segn la precisin que le indiquemos con quiere argumentos. Devuelve la fecha (en formato por defecto) anterior que primero cumple con la precisin indicada con
formato.
formato.
110
Tratamiento de fechas
La funcin
7.4.
Anteriormente hemos dicho que las fechas se pueden expresar en distintos formatos. Tambin podemos convertir cadenas de caracteres en fechas y viceversa . Las funciones
to_char
to_date
dades para formatear, a parte de realizar una conversin de datos. El formato es el siguiente:
Formato:
TO_CHAR(fecha[,'formato']) TO_DATE(cadena[,'formato'])
fecha
date
puede ser una cadena ni en el caso de que se encuentre en el formato La nica manera de usar una cadena donde aparece encerrndola en el interior de una funcin
to_date.
fecha
en la
cadena
que contiene cadenas o nmeros. En todos los casos, menos en uno, el formato se corresponder con el descrito con
formato. Slo en
formato
mente, de un nmero innito de formas. En la tabla 7.3 se muestran las distintas opciones con sus respectivos efectos. Los formatos de fechas vistos se usan tanto con la funcin funcin
to_date.
to_char
como con la
El ejemplo 7.2 nos muestra los datos de los clientes que han relizado alguna compra y la fecha en que la realizaron. La fecha aparece con formato por defecto. El ejemplo 7.3 nos muestra la fecha y la hora actual segn el formato especicado. Para ello, la funcin
sysdate
char.
3 Creacin 4 Ver
111
Ejemplo 7.2
SQL> select vnt_clt numero, clt_nom nombre, clt_apell apellido, 2 to_date(vnt_fch,'yymmdd') fecha 3 from clientes, ventas 4 where clt_num=vnt_clt and clt_pais = 'e'; NUMERO ---------1 1 1 5 7 7 7 13 13 NOMBRE -------------------margarita margarita margarita antoni pablo pablo pablo diego diego APELLIDO ------------------------borras borras borras llopis goqi goqi goqi cortes cortes FECHA -------10/01/91 10/01/91 10/01/91 06/01/91 06/01/91 06/01/91 06/01/91 10/01/91 09/01/91
9 filas seleccionadas.
Ejemplo 7.3
Fecha y hora
SQL> select to_char(sysdate,'dd-mm-yy hh:mi:ss') "Fecha y hora" 2 from dual; Fecha y hora ----------------15-12-04 02:33:07 1 fila seleccionada.
Elemento Uso
MM MON Mon mon MONTH Month month DDD DD Nmero del mes. Abreviatura de tres letras del mes. Como MON pero slo con la primera letra en mayscula. Como MON pero en minscula. El nombre del mes. Como MONTH pero con la primera letra en mayscula. El nombre del mes en minscula. Nmero del da del ao. Nmero del da del mes.
112
Tratamiento de fechas
Elemento
D DY Dy dy DAY Day day YYYY SYYYY YYY YY Y YEAR Year year Q WW W J HH HH12 HH24 MI SS SSSSS
Uso
Nmero del da de la semana. Abreviatura de tres letras del da. Como DY, pero teniendo la primera letra en mayscula. Como DY, pero todo en minsculas. El nombre del da de la semana. El da de la semana con la primera en mayscula. El da de la semana en minscula. El ao con los cuatro dgitos. Ao con signo, 1000 a.C. = -1000. Los tres ltimos dgitos del ao. Los dos ltimos dgitos del ao. El ltimo dgito del ao. El ao escrito con letras. Como YEAR con las iniciales en maysculas. Como YEAR con todas las letras en minsculas. Nmero de trimestre. Nmero de semana en el ao. Nmero de semana en el mes. Das Julianos desde el 31 de diciembre de 4713 a.C.. Hora del da, siempre de 1-12. Lo mismo que HH. Hora del da de 1-24. Minuto de la hora. Segundo del minuto. Segundos desde la medianoche, siempre desde 0-86399. Puntuacin para ser incorporada. Muestra A.M. o P.M., dependiendo del momento del da. Lo mismo pero en minscula. El mismo efecto que A.M. El mismo efecto que a.m. Lo mismo que A.M. pero sin puntos. Lo mismo que a.m. pero sin puntos. Lo mismo que P.M. pero sin puntos. Lo mismo que p.m. pero sin puntos. Muestra B.C. o A.D. dependiendo de la fecha. Lo mismo que B.C. Lo mismo que B.C. pero en minsculas. Lo mismo que b.c. Lo mismo que B.C. pero sin los puntos.
113
Elemento Uso
bc o ad
Lo mismo que b.c. pero sin los puntos. Tabla 7.3: Formatos de fechas
APENDICES
Apndice A e
tda_num ),
el rea geogrca en
Clientes: un nmero de identicacin nico no vaco (clt_num ), el apellido del cliente (clt_apell ), su nombre (clt_nom ), nacionalidad (clt_pais ) y su ciudad (clt_pob ). Artculos:
su peso (
art_num ), el nombre del artculo (art_nom ), art_peso ), su color (art_col ), el precio de compra (art_pc ), el precio de venta (art_pv ) y el nmero del proveedor (art_prv ).
un nmero de identicacin nico (
Proveedores: un nmero de identicacin nico (prv_num ), y el nombre del proveedor (prv_nom ). Ventas:
vnt_clt ), el nmero de la tienda de adquisicin (vnt_tda ), vnt_art ), la cantidad vendida (vnt_cant ), el precio de venta total (vnt_precio ) y la fecha de la venta (vnt_fch ). Se supone que un cliente
el nmero del cliente ( el nmero del artculo adquirido ( no va a comprar dos veces el mismo artculo en un mismo da y en la misma tienda.
Suministros: el nmero del artculo (smt_art ) y el nmero del proveedor que los suministra (smt_prv ). Pesos:
el nombre de la clasicacin del peso ( mximo (
Apndice B e
Tablas
ART_NUM ------1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ART_NOM ART_PESO ART_COL ART_PC ART_PV ART_PRV -------------------- -------- ------- ------ ------ ------impresora 150 rojo 400 580 4 calculadora 150 negro 4000 4700 1 calendario 100 blanco 420 600 4 lampara 550 rojo 2100 2980 5 lampara 550 blanco 2000 2900 5 lampara 550 azul 2100 2980 5 lampara 550 verde 2100 2980 5 pesacartas 1-500 2400 4000 3 pesacartas 1-1000 3000 5000 3 boligrafo 20 rojo 20 40 2 boligrafo 20 azul 20 40 2 boligrafo lujo 20 rojo 60 100 2 boligrafo lujo 20 verde 60 100 2 boligrafo lujo 20 azul 60 100 2 boligrafo lujo 20 negro 60 100 2
Artculos
120
Tablas
TDA_NUM ------1 2 3 4 5 6 7 8 9 10 11 12
TDA_POB -------------------madrid-batan madrid-centro pamplona barcelona trujillo jaen valencia requena palencia gerona lyon paris
TDA_GER ------------------------contesfosques, jordi martinez, juan dominguez, julian peqa, jose maria mendez, pedro marin, raquel petit, joan marcos, pilar castroviejo, lorenzo gomez, gabriel madoux, jean fouet, paul
Tiendas
CLT_NUM ------1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CLT_APELL --------------------borras perez dupont dupret llopis souris goqi courbon roman roca mancha curro cortes fernandez duran minguin CLT_NOM CLT_PAIS CLT_POB -------------- -------- ----------margarita e madrid miguel e madrid jean f paris michel f lyon antoni e barcelona marcel f paris pablo e pamplona gerad f lyon consuelo e jaen pau e gerona jorge e valencia pablo e barcelona diego e madrid joaquin e madrid jacinto e pamplona pedro e pamplona
Clientes
121
PRV_NUM ------1 2 3 4 5
Proveedores
VNT_CLT VNT_TDA VNT_ART VNT_CANT VNT_PRECIO VNT_FC ------- ---------- ---------- ---------- ---------- -----5 4 4 1 2980 910106 7 3 10 1 40 910106 7 3 11 2 80 910106 7 3 14 3 300 910106 8 11 2 1 4700 910109 6 12 3 2 1200 910109 6 12 15 2 200 910109 13 1 4 1 2980 910109 13 1 3 1 600 910110 1 2 2 1 4700 910110 1 2 12 1 100 910110 1 2 13 10 1000 910110 4 11 1 8 4640 910111 4 11 10 7 280 910111 3 7 6 1 2980 910111 3 7 9 2 10000 910111
Ventas
PESO_NOM PESO_MIN PESO_MAX --------- ---------- ---------leve 0 100 ligero 101 500 medio 501 2500 pesado 2501 9999
Pesos
Apndice C e
Articulos
Nombre ?Nulo? Tipo -------------------------------------- -------- -------------------------CLT_NUM NOT NULL NUMBER(38) CLT_APELL NOT NULL VARCHAR2(25) CLT_NOM VARCHAR2(20) CLT_PAIS VARCHAR2(8) CLT_POB VARCHAR2(20)
Clientes
124
Nombre ?Nulo? Tipo -------------------------------------- -------- -------------------------TDA_NUM NOT NULL NUMBER(38) TDA_POB NOT NULL VARCHAR2(20) TDA_GER VARCHAR2(25)
Tiendas
Nombre ?Nulo? Tipo -------------------------------------- -------- -------------------------PRV_NUM NOT NULL NUMBER(38) PRV_NOM NOT NULL VARCHAR2(25)
Proveedores
Nombre -------------------------------------VNT_CLT VNT_TDA VNT_ART VNT_CANT VNT_PRECIO VNT_FCH ?Nulo? Tipo -------- -------------------------NOT NULL NUMBER(38) NOT NULL NUMBER(38) NOT NULL NUMBER(38) NUMBER(38) NUMBER(38) NOT NULL VARCHAR2(6)
Ventas
Nombre -------------------------------------PESO_NOM PESO_MIN PESO_MAX ?Nulo? Tipo -------- -------------------------NOT NULL VARCHAR2(9) NOT NULL NUMBER(38) NOT NULL NUMBER(38)
Pesos
Bibliografa
[Abbe02]
edicin, 2005.
edicin, 2007.
126
Bibliografa
[Lone06]
Manuales de Oracle
Oracle Corporation, 1992. Prez, C.
[Pere02]
edicin, 2006.
Referencias electronicas
http://www.oracle.com http://juno.uca.es/index.htm http://ora.u440.com