manual de referencia sql

538

Click here to load reader

Upload: antonio-alejo-aquino

Post on 24-Jul-2015

1.848 views

Category:

Documents


37 download

DESCRIPTION

manual de como desarrollar una base de datos en sql server

TRANSCRIPT

I

I

Contenido

Agradecimientos Introduccin ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

xxiii xxv

PARTE 1 Visin general de SQL

1.

Jotrod uccin

.

34

'.

El lenguaje SQL __ _ . El papel de SQL _................... Caractersticas y ventajas de SQL , . Independencia del fabricante . Transportabilidad entre sistemas informticos . Estndares SQL _ __ .' __ .. _. _ . Acuerdos y obligaciones de IBM (DB2) __ . . Obligaciones de Microsoft (SQL Server, ODBC y ADO) Fundamentos relacionales . Estructura de alto nivel en ingls , .. Consultas ad hoc interactivas . Acceso mediante programacin a bases de datos. _ _. _ . Vistas mltiples de los datos _. __ _ . Lenguaje completo de base de datos _ __ .. Definicin dinmica de datos _ _ _. _ . Arquitectura cliente/servidor . . . Soporte de aplicaciones empresariales . Extensibilidad y tecnologa de objetos _.... Acceso a bases de datos en Internet . Integracin de Java (IDBC) . _ _ . Infraestructura de la industria .

67 8 8

9 9

910 10

ID11 1I II 1I 1212

12 13 13 14

vii

l'

viii

Contenido

Contenido

ix

2. Una introduccin a SQLUna base de datos simple Recuperacin de datos _ Resumen de datos .. ._ _ Adicin de datos a la base de datos .. " , ." , ,., Eliminacin de datos Actualizacin de la base de datos Proteccin de datos . Creacin de bases de datos .. Resumen -_ _.. _. _ _ ,

. . . . . .

1515

El modelo relacional de datos .,., La base de datos de ejemplo, . "Tablas.... ..

,. ...

5960

1719 20 2021 21

62. ,

Claves primarias _.. _. _. . . . . . . . . . . Relaciones _. _ " . Claves externas _.. . .. , ,., Las 12 reglas de Codd '" , , Resumen .PARTE 11 Recuperacin de datos

.

,

64 66 67

6871

22 2325. , , , _25

3. SQL en perspectivaSQL y la gestin de bases de datos Una breve historia de SQL ,... . . "" Los primeros aos .. , , , , Los primeros productos relacionales Productos de mM Aceptacin comercial _. _oO.,"

5.

Fundamentos de SQL

oO

.

75 75 77

2628 28

._oO, , .. '

Estndares de SQL ..................... , ............... ' Los estndares ANSIJISO ", Otros estndares de SQL ",, ODBC y el grupo de acceso SQL SQL y transportabilidad .. . . SQL y redes .,., .. , .. ,.",. .,.,.,,.,., , , , .... ' , , , . , ..oO .. . oO,

Arquitectura Arquitectura Arquitectura Arquitectura SQL SQL SQL SQL

centralizada , del 'servidor de archivos cliente/servidor mullicapa _

,

, _ . ..

29 30 32 32 34 35 36 38 3839

Instrucciones , Nombres ,., , ,., Nombres de tablas Nombres de columnas Constantes Constantes Constantes Constantes Constantes . , . ".. , . " numricas , .. , de cadena de fecha y hora simblicas,.,.,

" . .

. ..

808J

Tipos de datos ... ,",."., .. ',.,' ............... ,",

81

' , , , ,., ' _ . .oO '

86 868788

Expresiones ,.,.,.,

89 8990 9193

4042 42

Funciones predefinidas ., Datos ausentes (valores NULL) Resumen .6.

,

,

,

.

... _......................

La proliferacin de SQL . , . , . . , . , . , , .. , . , SQL y la estrategia de la base de datos unificada de IBM

en las minicomputadoras . _ en los sistemas basados en UNIX en computadoras personales .. _ y el procesamiento de transacciones

, _, ,._ _ _ .. .

4444 45 45

Consultas simples

.

95 95 98 98 98JOl 102105

.

,

4748 49 51 52

SQL y las bases de datos de trabajo en grupo ".,', SQL y los almacenes de datos ,.,.,

SQL y las aplicaciones distribuidas en Internet Resumen

_. _

_. . .

La instruccin SELECT _............................ La clusula SELECT _......................... , . La clusula FROM ..... Resultados de las consultas , . Consultas simples ., ,."...... ,.,., ' Columnas calculadas _. _. . _ _ _ _ Seleccin de todas las columnas (SELECT *) _Filas duplicadas (DISTINCT) .. ,

4. Bases de datos relacionalesLos primeros modelos de datos . Sistemas gestores de archivos Bases de datos jerrquicas Bases de datos en red .. . _

53 53 5355

. . .

56

Seleccin de filas (clusula WHERE) . . , Condiciones de bsqueda ," ,., ,.,." . El test de comparacin (=. . =) . El test pe rango (BETWEEN) .. _ . . _ . _ .. _ ....... El test de pertenencia a conjuntos (IN) . _ . El test de encaje de patrones (LIKE) "

, oO oO_,., , ..... ' ...........

106

107109110

113115

117

x

Contenido

Contenido

xi188

El lesl de valores nulos (15 NULL) . Condiciones compueslas de bsqueda (ANO. QR Y NOT) . Ordenacin de los resultados de las consultas (clusula ORDER BY) . Reglas para el procesamienLO de consuhas sobre una sola tabla . Combinacin de los resultados de las consultas (UNION)" . . Uniones y filas duplicadas * Uniones y ordenacin" .. . __ . Uniones mltiples" . __ . _................................ Resumen. . . . . . . . . . . . . . . . . . .. _....................... 7.Consultas multitabla (reuniones)

119 121 124 127 128

130 131132

133135

Funciones de columna en ht lista de seleccin . Valores NULL y funcione de columna _. Eliminacin de filas duplicadas (DISTINCT) ............... Consultas de agrupacin (CI.INTS KEY_COLUMN_USAGE ASSERTIONS CONSTRAINT_TABLE_USAGE CONSTRP.INT_COLUMN_USAGE TABLE_PRIVILEGES COLUMN_PRIVILEGES USAGE_PRIVILEGES DOMAINS . DOMAIN_CONSTRAINTS DOMJl..IN_cLUMN_USAGE CHARACTER_SETS COLLATIONS TRANSLJI.TIQNS SQL_LANGUAGES

IBM Corporation (www.ibm.com) lnformix Software (vase IBM Corporation)Microsoft Corporation (www.microsofLCOm)

....

. .

. .

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

MySQL AB (www.mysql.com)Objectivity (www.objectivity.com) Onide Corporation (www.oracIe.com) Persistence Software (www.persistence.com) Pervasive Software (wwV:'.pervasive.com) PointBase (www.pointbase.com) ... PostgreSQL (www.pos'tgresql.org) Quadbase Systems (v$ww.quadbase.com). . Red Brick Systems (vase IBM Corporation) Sybase, Inc. (www.sybase.com) TimesTen Performance Software (www.ti.mesten.com) Yersant Corporation (www.versant.com)

. . . . .

Apndice C.

Referencia de la sintaxis de SQL ................. .

lOas1006 1007 1008 1009 1009

Instrucciones de definicin de datos Instrucciones bsicas de manipu"laci6n de datos Instrucciones de procesamiento de transacciones Instrucciones de cursores Expresiones de consultas .... Condiciones de bsqueda Expresiones Elementos de las instrucciones Elementos simples ..

968 969 970 970 970972 972

laja

973 973 97S977 977

Apndice F.

Gua de instalacin del eD-ROM

1013 1014 1014 1015 1015 1016

Apndice D.

La interfaz del nivel de llamadas de SQL

lnstalacin del software SGBD SQL Microsoft SQL Server 2000 .Requisitos de hardware y de software Notas sobre la instalacin Inslalacin de SQL Server 2000

Valores devueltos por eL! . Rutinas generales de gestin de controladores.

xxii

Contenido

. 1017 . 1017 1018 . . . 1018 1018 Notas sobre la instalacin . Instalacin de DB2 Enterprise Edition . 1019 Inicio de DB2 Enterprise Edition . . 1020 1020 Desinstalacin de DB2 Enterprise Edition 1020 MySQL . Requisitos de hardware y de software _ . 1021 Notas sobre la instalacin . 1021 Instalacin de MySQL . 1021 Inicio de MySQL .. 1022 Desinstalacin de MySQL . 1022 Descarga del software del SGBD Oraele .................... 1022 Inicio de SQL Server 2000 Desinstalacin de SQL Server 2000 IBM DB2 Requisitos de hardware y de software ndice... 1025

Agradecimientos

Gracias especiales a Matan Arazi por hacer de nuevo un trabajo excepcional de ensamblaje del CD de este libro, llevando a cabo otro milagro al comprimir tres productos SGBD en un nico CD, y por hacerlo en plazos imposibles. Gracias tambin al equipo de McGraw-Hill/Osborne, incluyendo a Jane

Brownlow. Jennifer Malnick. Martin Przybyla. Greg Gnntle y Chrisa Hotchkiss.

xxiii

Introduccin

Esta edicin I de SQL. Manual de referencia proporciona un tratamiento extenso y profundo del lenguaje SQL para usuarios, tanto tcnicos como no, programadores, profesionales de procesamiento de datos y directivos que deseen comprender el impacto de SQL en la industria informtica actual. Este libro ofrece un marco conceptual para comprender y usar SQL, describe la historia de SQL y los estndares SQL, y explica el papel de SQL en varios segmentos de la industria informtica, desde el procesamiento de datos de la empresa y los almacenes de datos (data warehouses) hasta las arquitecturas de los sitios web. Esta edicin contiene captulos enfocados especialmente en el papel de SQL en las arquitecturas de los servidores de aplicaciones, y la -integracin de SQL con XML y otras tecnologas basadas en objetos. Este libro mostrar paso a paso el uso de las caractersticas de SQL, con muchas ilustraciones y ejemplos reales para aclarar los conceptos de SQL. El libro tambin compara productos SQL de importantes fabricantes de SGBD (sistemas gestores de bases de datos) -describiendo sus ~ventajas y compromisos- para ayudarle a seleccionar el producto adecuado para su aplicacin. El CD-ROM adjunto contiene versiones de prueba-reales de tres importantes fabricantes de SOBD, adems de instrucciones para la descarga de las versiones de prueba de versiones posteriores, de forma que uno pueda probarlas por s mismo y adquirir,experiencia real en el uso de los principales productos SGBD de Gracle, Microsoft e lBM, as como el popular SGBD de cdigo abierto MySQL. En algunos de los captulos, el tema tratado se explora en dos mbitos diferentes -una descripcin fundamental del tema y una discusin avanzada orientada a profesionales informticos que necesitan comprender los aspectos internos de SQL. La informacin avanzada se trata en secciones marcadas con un asterisco (*). No es necesario leer estas secciones para comprender lo que es y hace SQL.

Organizacin del libroEl libro est dividido en seis partes que tratan varios aspectos del lenguaje SQL: La Parte Uno, Visin general de SQL, proporciona una introduccin a SQL y una perspectiva de mercado de su papel como lenguaje de bases de datos. Sus cuatro captulos describen la historia de SQL, la evolucin de los estndares SQL y cmo se corresponde SQL con el modelo de datos relacional y

I

Nota del editor: segunda del ingls. primera en castellano.

xxv

xxvi

,Introduccin

Introduccin

xxvii

con tecnologas anteriores de bases de dalos. La Parte Uno tambin contiene un breve recorrido de SQL que ilustra concisamente sus caractersticas ms importantes y proporciona una visin general de todo el lenguaje. La Parte Dos. Recuperacin de datos, describe las caractersticas de SQL que permiten realizar consultas a la base de datos. El primer captulo de esta parte describe la estructura bsica del lenguaje SQL. Los siguientes cuatro captulos comienzan con las consultas SQL ms simples y progresivamente se construyen cansullas ms complejas, incluyendo consultas sobre varias tablas, consultas de resumen y consultas que usan subconsultas. La Parte Tres, Actualizacin de datos, muestra cmo se puede usar SQL para aadir nuevos datos a la base de datos, borrar los datos de la base de datos y modificar datos existentes en ella. Tambin describe los aspectos de la integridad de las bases de datos que surgen al actualizar los datos, y cmo SQL trata estos aspectos. El ltimo de los tres captulos de esta parte estudia el concepto de transaccin en SQL y su soporte para el procesamiento de transacciones multiusuario. La Parte Cuatro, Estructura de la base de datos, estudia la creacin y administracin de una base de datos basada en SQL. SUS cuatro captulos muestran cmo crear tablas, vistas e ndices que forman la estructura de una base de datos relacional. Tambin describe el esquema de seguridad de SQL, que impide los accesos no autorizados a los datos, y el catlogo del sistema de SQL, que describe la estructura de la base de datos. Esta parte tambin estudia las diferencias significativas entre las estructuras de bases de datos soportadas por varios productos SGBD basados en SQL. La Parte Cinco, Programacin con SQL, describe cmo los programas de aplicacin usan SQL para el acceso a bases de datos. Estudia SQL incorporado, especificado por el estndar ANSI y usado por mM, Oracle, Ingres, Informix y muchos otros productos SGBD basados en SQL. Tambin describe la interfaz de SQL dinmico que se usa para construir tablas de bases de datos de propsito general, tales como los generadores de informes y programas de exploracin de bases de datos. Finalmente, esta parte describe las API (Application Programming Interface, interfaz de programacin de aplicaciones) de SQL, incluyendo ODBC, el estndar ISO CL! (Cal/-Level Interface, interfaz en el nivel de llamada) y IDBC, el estndar de la interfaz en el nivel de llamada para Java, as como interfaces en el nivel de llamada tales como el API OCI de Oracle. La Parte Seis, SQL hoy y maana,. examina el uso de SQL en varias de las reas de aplicacin actuales y destacadas, y el estado vigente de los productos SGBD basados en SQL. Dos captulos describen l uso de los procedimientos almacenados y los disparadores para el procesamiento interactivo de transacciones, y el uso comprobado de SQL para los almacenes de datos. Cuatro captulos adicionales describen las bases de datos distribuidas basadas en SQL, la influencia de las tecnologas de objetos sobre SQL y la integracin de SQL con las tecnologas XML. Finalmente, el ltimo captulo explora el futuro de SQL y algunas de las tendencias ms importantes en la gestin de datos basada en SQL.

Convenciones usadas en este libroEsta edicin de SQL Manual de referencia describe las caractersticas de SQL y las funciones disponibles en los productos SGBD ms conocidos, as como las descritas en los estndares de SQL ANSIfISO. Siempre que ha sido posible, la sintaxis descrita en este libro y usada en los ejemplos se aplica a todos los dialectos de SQL. Cuando difieren los dialectos, se destacan las diferencias en el texto, y los ejemplos siguen las prcticas ms comunes. En estos casos es posible que haya que modificar ligeramente las instrucciones SQL de los ejemplos para acomodarse a la marca particular de SOBD. A lo largo del libro, los trminos tcnicos aparecen en cursiva la primera vez que se usan y definen. Los elementos del lenguaje SQL, incluyendo las palabras clave, nombres de tablas y de columnas e instrucciones de ejemplo, aparecen en MAYSCULAS y CON FUENTE NO PROPORCIONAL. Los nombres de las funciones de la API de SQL aparecen en minsculas y con fuente no proporcional. Los listados de programa aparecen con fuente no proporcional y usan la convencin habitual de caja para el lenguaje de programacin de que se trate (maysculas para COBOL y FORTRAN, minsculas para C y Java). Ntese que estas convenciones se usan s610 para mejorar la legibilidad; la mayora de las implementaciones de SQL aceptarn instrucciones tanto en maysculas como en minsculas. Muchos de los ejemplos de SQL incluyen resultados de consultas, que aparecen inmediatamente despus de la instruccin SQL como si se tratase de una sesin interactiva. En algunos casos, los resultados de consultas largas se truncan despus de unas cuantas filas; esto se indica con elipsis (...) a continuacin de la ltima fila de los resultados de las consultas.

Por qu este libro es para ustedEsta edicin de SQL. Manual de referencia es el libro adecuado para cualquiera que desee comprender y aprender SQL, incluyendo a los usuarios de bases de datos, los profesionales de procesamiento de datos y arquitectos de sistemas, programadores, estudiantes y directivos. Describe -con un lenguaje sencillo y comprensible, ilustrado con figuras y ejemplos- lo que es SQL, por qu es importante y cmo se usa. Este libro no es especfico de ninguna marca o dialecto de SQL. En cambio, describe el estndar, el ncleo del lenguaje SQL y pasa a describir las diferencias entre los productos SQL ms populares, incluyendo Oracle, Microsoft SQL Server, la base de datos universal DB2 e Inforrnix de IBM, Sybase y MySQL. Tambin explica la importancia de los estndares basados en SQL, tales como ODBe y IDBC, y los estndares ANSI/ISO para SQL y las tecnologas relacionadas con SQL. Esta edicin contiene nuevos captulos y secciones que estudian las ltimas innovaciones de SQL en las reas de las tecnologas relacionales orientadas a objetos, XML y las arquitecturas de servidores de aplicaciones. Si se afronta por primera vez SQL, este libro ofrece un tratamiento extenso y paso a paso del lenguaje, progresando desde consultas simples hasta conceptos ms avanzados. Su estructura permitir empezar rpidamente a usar SQL, pero el

xxviii

Introduccin

libro continuar adquiriendo valor al usar las caractersticas ms complejas del lenguaje. Se puede usar el software SQL del CO-RM adjunto para probar los ejemplos y adquirir prctica con SQL. Si se es un profesional de procesamiento de datos, arquitecto de sistemas o directivo, este libro proporcionar una perspectiva del impacto que SQL est teniendo en la industria de las tecnologas de informaci6n --desde los ordenadores personales, los almacenes de datos y sitios web hasta aplicaciones distribuidas basadas en Internet-. Los primeros captulos describen la historia de SQL, su papel en el mercado y su evoluci6n desde las primeras tecnologas de bases de datos. Los ltimos captulos describen el futuro de SQL y el desarrollo de nuevas tecnologas de bases de datos, tales como bases de datos distribuidas, extensiones de SQL orientadas a objetos, bases de datos de informaci6n comercial e integracin de las bases de datos con XML. Si se es un programador, este libro ofrece un tratamiento muy completo de la programacin con SQL. A diferencia de los manuales de referencia de muchos productos SGBD, ofrece un marco conceptual pIA..-PEDIDO

u,

,~

,~~

C1Wi'IDAD

112961 113012112989

11/121198911/01/1990

106 RE! 105 ACI106 FEA

2"441.

," ,

IIlPORTE

J1.500,OOEJ.745.001. 458. DoE

OFICINA CIUDAD 22 o..inie1 11 12 NlIvarra Castelln

REGIOl1 Oeaetl Esee Este Esee Qesee

'"

OBJE'l'IVO 300.000 OOE" 51S.000.00e 800.000.ooe 350.000.00E: 725.000,OOE"

VENTAS 1I16.04200E" 692.637 ooe 735.042 00E: 367.911,00E: 8J5.915.00

2111nOl

41003

03/0111990O/OUU90

U.~"HOO'41002

113051 112968

2118

108 OSA101 ACI

12110/1989 )0/0111990

113016 11304511296]113(1)

210. 21012112

110 ACI 108 REI

0210211"011112119119U/Olll990

no]:111821082l:i!4

as .\el108 BIc109 FEA

2"'HR 41004Hao]

..,"

l.'20,DOE 3.978.00

13 Almeria

21 Len

'"'

'" '" ",

l2.saO.DoE(S.DOO.DOE

",

11305. 112991

.l/OUIno08l0H1990

101 BIClOS ACIloa~

'" HaO)U004

..,..

J.n6. aoE652.DOE

Tabla REPRESENTANTESJ:l)I'.8RE~""""'1>rt_

1.no.OD 652.00 70l,apE:1.IOO.OOE

105 10' 102 106 10' 101 \10 108 10l 101

'"

1un3lU024

nH2I198920/0111990

2101211t

lD06211297g

2HD2I1990 12/1011989 22/0111"0 08/0111990 021011199029/01/1990 04/ll/H89

2124

~"

107 !'EA 102 ACI

,,,

"

Ud. Ji-'-: s.....",. SantOS

SaaJel Cl.~l Bcrn.ordo S;OnctlctDen!el l

o

~

.~

I

I I

/~

SOL Y las aplicaciones distribuidas en InternetA fines de los aos noventa, World Wide Web y la posibilidad de exploracinweb que permiti fueron la. fuerza motriz del crecimiento de Internet. Con su atencin en la entrega de contenido en forma de texto y de grficos. los primeros usos de la web tuvieron poco que ver con la gestin de datos. Sin embargo, hacia mediados de los aos noventa gran parte del contenido ofrecido en los sitios web empresariales tena su orige-Q. en bases de datos empresariales basadas en SQL. Por ejemplo. en e! sitio web comercial de un detallista, las pginas que contienen la informacin sobre los productos disponibles para la venta, sus precios, la disponibilidad de los productos, las ofertas esp~ciales y.dems suelen crearse a peticin del usuario, con base en los datos rec~perados de una base de datos de SQL. La inmensa mayora de las pginas mostradas por los sitios de subastas en lnea o por los sitios de las agencias de viajes en lnea se basan, de manera anloga, en los datos recuperados de bases de datos de SQL, transformados al formato de pginas HTML de la web. En el sentido inverso, los datos introducidos por el usuario en los formularios de las pginas del explorador casi siempre se capturan en bases de datos de SQL que forman parte de la arquitectura del sitio web.

Herramientas de extraccin y formato de datos

.

.E

~

." ."o

8

" '"

l.~g-

rl....

Herramientas de anlisis de datos y elaboracin de informes

Solicitud~r;:=t==;-lSalSGSD +-Oatos

K

Almacn, de datos -'

J

Figura 3.&.

El concepto de almacn de datos.

IJ.

52

SOL Manual de referencia

A comienzos de este siglo, la atencin de la i.ndustria haba pasado a la siguiente fase de internet y al papel que pueden desempear las tecnologas de inter net en la conexin de las aplicaciones de las computadoras entre s. Estas arquitecturas de aplicaciones distribuidas recibieron una amplia cobertura de la prensa especializada bajo la denominacin de servicios web. De acuerdo .con la vieja costumbre de la industria informtica, aparecieron bandos enfrentados que defendan diferentes conjuntos de estndares y de lenguajes para implementarlos: un bando liderado por Microsoft bajo la cobertura .NET y un bando rival centrado eh Java y los servidores de aplicaciones basados en J2EE. Ambas arquitecturas otorgaron un papel clave a XML, un estndar para el intercambio de datos estructurados, como los datos que residen en las bases de datos de SQL. En respuesta a la atencin prestada por la industria a los servicios web se ha anunciado gran cantidad de productos que enlazan los mensajes con formato XML y las bases de datos basadas en SQL. Los nuevos fabricantes de bases de datos y algunos de los vendedores de bases de datos orientadas a objetos han anunciado productos de bases de datos basados en XML, argumentando que ofrecen una contrapartida ideal y nativa para el intercambio de datos con formato XML por Internet. Los fabricantes establecidos de bases de datos relacionales han respondido con sus propias iniciativas XML, aadiendo a sus productos posibilidades de entrada y salida XML y, en algunos casos, soporte de los tipos de datos XML. La interaccin entre XML y SQL es una de las reas ms activas en la gestin de datqs hoy en da, y la actividad en esta rea mantendr a SQL en el centro de atencin de la industria hasta bien entrada la primera dcada del siglo.

CAPTULO

4

Bases de datos relacionales

ResumenEste captulo ha descrito el desarrollo de SQL y su papel como lenguaje estndar para la gestin de bases de datos relacionales: SQL fue desarrollado originalmente por investigadores de lBM, y el fuerte soporte de IBM es una razn fundamental de su xito. Hay estndares oficiales ANSIJISO de SQL y otros varios estndares de SQL, cada uno de ellos ligeramente diferente de los estndares ANSI/ISO. Pese a la existencia de estndares, hay muchas pequeas variaciones entre los dialectos comerciales de SQL; no hay dos variedades de SQL exactamente iguales. .. . SQL se ha convertido en el lenguaje estndar para la gestin de bases de datos en una amplia gama de sistemas informticos y reas de aplicaciones, incluidos los grandes sistemas, las estaciones de trabajo, las computadoras personales, los sistemas OLTP, los sistemas cliente/servidor, los almacenes de datos e Internet.

Los sistemas gestores de bases de datos organizan y estructuran los datos de modo que los usuarios y los programas de aplicacin puedan recuperarlos y manipularlos. Las estructuras de los datos y las tcnicas de acceso proporcionadas por cada SOBn son su modelo de datos. El modelo de datos determina tanto la personalidad del SOBn como las aplicaciones para las que se halla especialmente bien adaptado. SQL es un lenguaje de bases de datos para bases de datos relacionales que utiliza el modelo relacional de datos. Qu es exactamente una base de datos relacional? Cmo se almacenan los datos en las bases de datos relacionales? En qu se diferencian las bases de datos relacionales de tecnologas anteriores, como las bases de datos jerrquicas y las bases de datos de red? Cules son las ventajas e inconvenientes del modelo relacional? Este captulo describe el modelo relacional de datos adoptado por SQL y lo compara con estrategias anteriores para la organizacin de las bases de datos.

Los primeros modelos de datosCuando la gestin de bases de datos se extendi en los aos setenta y ochenta, aparecieron unos cuantos modelos de datos que se popularizaron. Cada uno de estos modelos de datos primigenios tena ventajas e inconvenientes que desempearon papeles fundamentales en el desarrollo del modelo relacional de datos. En muchos aspectos, el modelo relacional de datos represent un intento de racionalizar y simplificar los primeros modelos de datos. Para comprender el papel y la contribucin de SQL y del modelo relacional, resulta til examinar brevemente algunos modelos de datos que precedieron al desarrollo de SQL.

Sistemas gestores de archivosAntes de la introduccin de los sistemas gestores de bases de datos, todos los datos almacenados de manera permanente en los sistemas informticos, como los

53

...

54

SOL. Manual de referencia

Captulo 4: Bases de daros relacionales

55

registros de las nminas y de la contabilidad, se guardaban en archivos individuales. Un sistema gestor de archivos, generalmente proporcionado por el fabricante la computadora como parte de su sistema operativo, realizaba el seguimiento del nombre"y d~ la ubicacin de los archivo~. El sistema gestor de archivos bsicamente careca de modelo de datos; no saba nada del contenido interno de los archivos. Para el sistema gestor de datos, un archivo que contuviera un documento d~ un procesador de textos y uo'archivo que contuviera datos de una nmina parecan iguales. El conocimiento sobre el contenido de los archivos -los datos que contienen .y el modo en que esos datos estn organizados- se incorporaba en los programas de aplicacin que utilizaban el archivo, como se muestra en la Figura 4.1. En esta aplicacin para nminas cada uno de los programas de COBOL que procesaban el archivo maestro del empleado contena una descripcin del archivo (file description, FD) que indicaba la disposicin de los datos en el archivo. Si se modificaba la estructura de los datos -por ejemplo, si haba que almacenar un elemento de datos adicional para cada empleado-, haba que modificar cada programa que tuviera accesq al archivo. Como el nmero de archivos y de programas creca con el tiempo, cada vez se dedicaba ms esfuerzo del departamento de procesamiento de datos a mantener las aplicaciones existentes, en lugar de a desarrollar otras nuevas. Los problemas del mantenimiento de grandes sistemas basados en archivos llev, a fines de los aos sesenta, al desarrollo de sistemas gestores de bases de

de

datos. La idea subyacente a estos sistemas era sencilla: sacar de cada .programa la definicin del contenido y la estructura de los archivos y almacenarla, junto con Jos datos, en una base de datos. Al utilizar la informacin de la base de datos, el SOBD que la controlaba podra adoptar un papel mucho ms activo en la gestin de los datos y de las modificaciones de la estructura de la base de datos.

Bases de datos jerrquicasUna de las aplicaciones ms imponantes de los primeros sistemas gestores de bases de datos era la planificacin de la produccin para las empresas manufactureras. Si un fabricante de automviles decida producir diez mil unidades de un modelo de coche y cinco mil de otro modelo, necesitaba conocer el nmero de piezas que deba encargar a sus proveedores. Para responder a esta pregunta haba que descomponer el producto (coche) en sus partes (motor, carrocera, chasis), que a su vez haba que descomponer en sus componentes (vlvulas, cilindros, bujas), y. as sucesivamente. El manejo de esta lista de componentes, conocida como lista de materiales, era un trabajo hecho a medida para las .computadoras. La lisla de materiales de un producto tiene una estructura jerrquica natural. Para almacenar estos -datos se desarroll el modelo jerrquico de datos; que se muestra en la Figura 4.2. En este modelo cada registro de la base de datos representa un componente concreto. Los registros tienen relaciones padre/hijo, que vinculan cada parte con sus componentes, y as. sucesivamente.

Programa de actualizacin de empleados

FD

I I

I I I

I I I

Programa de informes de empleados

FD

'.

J~

Archivo maestroemplea~os

I I

I I I

I I I

IFigura 4.1.

Programa de emisiones de cheques FD I FD I I

Aplicacin para nminas que emplea un sistema gestor de archivos.

Figura 4.2.

Base de datos jerrquica de una lista de materiales.

56

SOL. Manual de referencia

Captulo 4: Bases de datos relacionales

57

Para tener acceso a los datos de la base de dalas un programa, podra llevar a cabo las tareas siguientes: Hallar un componente determinado por su nmero (como pudiera ser la puerta izquierda). Bajar hasta el primer nodo hijo (la manilla de la puerta). Subir hasta su nodo padre (la carrocera). ~overse de lado hasLa el siguiente nodo hijo (la puerta derecha). La recuperacin de los dalOs en las bases de datos jerrquicas exiga, por tanto, navegar por los registros, subiendo, bajando y desplazndose lateralmente registro a registro. Unos de los sistemas gestores de bases de datos jerrquicas ms populares era el Sistema de gestin de la informacin (Information Management System, IMS) de IBM, que se introdujo por primera vez en 1968. Las ventajas de IMS y de su modelo jerrquico son las siguientes: Estructura sencilla. La organizacin de las bases de datos de IMS era fcil de comprender. La jerarqua de la base de datos era anloga al organigrama de una empresa o a un rbol genealgico. Organizacin padre/hijo. Las bases de datos de IMS eran excelentes para la representacin de las relaciones padre/hijo, como A es parte de B o A

datos de procesamiento de pedidos, por ejemplo, cada pedido puede formar parte de tres relaciones padre/hijo diferentes, que vinculan el pedido al cliente que lo ha formulado. al vendedor que )0 ha tramitado y al producto solicitado, como puede verse en la Figura 4.3. La estructura de este tipo de dalos simplemente no encajaba en la estricta jerarqua de IMS. Para poder trabajar con aplicaciones como las de procesamiento de pedidos, se desarroll un nuevo modelo de datos de red. El modelo de dalOs de red ampli el modelo jerrquico permitiendo que cada registro formara parte de varias relaciones padre/hijo, como puede verse en la Figura 4.4. Estas relaciones se denominaron conjuntos en el modelo de red. En 1971 la Conferencia sobre lenguajes de sistemas de datos (Conference on Data Systems Languages) public un estndar oficial para bases de datos de red, que se conoci como el modelo CODASYL. IBM no desarroll nunca un SGBD de red propio, y prefiri ampliar IMS a lo largo de los aos. Pero, durante los aos setenta, las empresas independientes de software se apresuraron a adoptar el modelo de red, creando

productos como IDMS de Cullinet, Total de Cincom y el SGBD Adabas, que sehizo muy popular. Para los programadores, tener acceso a las bases de datos de red era muy parecido a tener acceso a las bases de datos jerrquicas. Los programas de aplicacin podan hacer lo siguiente: Hallar un registro padre concreto mediante su clave (que puede ser el nmero de cliente). Bajar hasta el primer hijo de un conjunto determinado (el primer pedido rea izado por el cliente).

es propiedad de B. Rendimiento. IMS almacenaba las relaciones padrelhijo en forma de punteros fsicos de un registro de datos a otro, por lo que el movimiento por la base de datos era rpido. Como la estructura era sencilla, IMS poda situar los registros padres e hijos cercanos unos de otros en el disco, lo que minimizaba las operaciones de entrada y salida de disco. IMS sigue siendo un SGBD muy utilizado en los grandes sistemas de IBM. Su rendimiento bruto lo convierte ela base de datos preferida para las aplicaciones de elevado volumen de procesamiento de transacciones, como el procesamiento de las transacciones de los cajeros automticos de los bancos, comprobacin de los nmeros de las tarjetas de crdito y seguimiento de la entrega de paquetera urgente. Aunque el rendimiento de las bases de datos relacionales ha mejorado espectacularmente en la ltima dcada, los requisitos de rendimiento de las aplicaciones de este tipo tambin se han incrementado, por lo que IMS sigue teniendo un papel que desempear. Adems, el gran nmero de datos empresariales almacenado en bases de datos de IMS garantiza que el empleo de IMS se prolongue hasta mucho despus de que las bases de datos relacionales hayan eliminado la barrera del rendimiento.

Clientes

Vendedores

Productos

Bases de datos en redLa sencilla estructura de las bases de datos jerrquicas se volvi un inconveniente cuando los datos pasaron a tener una estructura ms compleja. En una base deFigura 4.3.

Pedidos

Relaciones padre/hijo mltiples.

58

SOL. Manual de referencia

Captulo 4: Bases de datos relacionales

59

Conjunto

Figura 4.4.

Una base de datos de red (CODASYL) para el procesamiento de pedidos.

dones de conjunto y la estructura de los registros con antelacin. La modificacin de la estructura de la base de datos sola exigir la reconstruccin de toda la base de datos. Tanto las bases de datos jerrquicas como las de red eran herramientas para los programadores. Para responder a una pregunta, como el producto ms solicitado por Acme, el programador tena que escribir un programa que se desplazara por la base de datos. La pila de solicitudes atrasadas de informes personalizados sola extenderse a semanas o meses, y para el momento en que el programa estaba escrito, la informacin que aportaba sola carecer de valor. Los inconvenientes de los modelos jerrquico y de red motivaron un intenso inters en el nuevo modelo relacional de datos cuando el Dr. Codd lo describi por primera vez en 1970. Al principio, el modelo relacional no fue mucho ms que una curiosidad acadmica. Las bases de datos de red siguieron siendo importantes durante los aos setenta y principios de los aos ochenta, especialmente en los sistemas de minicomputadoras, cuya popularidad iba en aumento. Sin embargo, a mediados de los aos ochenta, el modelo relacional se fue imponiendo claramente como la nueva ola en gestin de datos. Para principios de los aos noventa, la importancia de las bases de datos de red se hallaba en franco declive, y hoy en da ya no desempean un papel importante en el mercado de las bases de datos.

Desplazarse lateralmente de un hijo al siguiente del conjunto (el siguiente pedido realizado por el mismo cliente). Subir desde un hijo a su padre en otro conjunto (el vendedor que tramit el pedido). Una vez ms, el programador tena que navegar por la base de datos registro a registro, esta vez especificando la relacin por la que hay que navegar, adems de la direccin. " Las bases de datos de red tenan varias ventajas: Flexibilidad. La existencia de varias relaciones padre/hijo permitan a las bases de datos de red representar los datos que no ten~n una estructura jerrquica sencilla. ; . Estandarizacin. El estndar CODASYL impuls la popularidad del modelo de red. y los fabricantes de minicomputadoras, como-Digital Equipment Corporation y Data General. implementaron bases de datos de red. Rendimiento. Pese a su mayor complejidad. las bases de datos de red presuman de un rendimiento prximo al de las bases de datos jerrquicas. Los conjuntos se representaban como punteros hacia los registros fsicos de los datos y, en algunos sistemas, el administrador de la base de datos poda especificar las agrupaciones de los datos de acuerdo con las relaciones de los conjuntos. Las bases de datos de red tambin tenan sus inconvenientes. Al igual que las bases de datos j-errquicas, resultaban muy rgidas. Haba que especificar las rela-

El modelo relacional de datosEl modelo relacional propuesto por el Dr. Codd era un intento de simplificar la estructura de las bases de datos. Eliminaba de las bases de datos -las estructuras padrelhijo explcitas y, en su lugar, representaba todos los datos de la base de datos como meros valores de filas y columnas en tablas de datos. La Figura 4.5 muestra una versin relacional de la base de datos "de red para el procesamiento de pedidos de la Figura 4.4. Por desgracia, la definicin prctica de lo que es u~ base de d3:~oS relacional se volvi mucho menos rotunda que la definicin matemtica precisa del trabajo de Codd de 1970. Los primeros sistemas gestores relacionales de bases de datos no lograron implementar algunas partes fundamentales del modelo de Codd. A medida que el concepto relacional creca en popularidad, muchas bases de datos que se denominaban relacionales, en realidad, no lo eran. En respuesta a la degradacin del tnnino relacional, el Dr. CocId escribi un artculo en 1985 en el que estableca doce reglas que deba seguir cualquier base de datos que se denominara verdaderamente relacional. Las doce reglas de Codd se han aceptado desde entonces como la definicin de los verdaderos SGBD relacionales. No obstante, resulta ms sencillo comenzar con una definicin menos formal: Una base de datos relacional es una base de datos en la que todos los datos visibles para el usuario estn estrictamente organizados como tablas de valores de datos y en la que todas las operaciones de la base de datos se realizan sobre estas tablas.

60

SOL Manual de referencia

Captulo 4: Bases de datos relacionales

61

Tabla PRODUCTOS

OESCRIPCION Serie 3. cableSerie 4, cable Hilo de cobre

PRECIO107,00 117,00 350,00

STOCK 207139

Tabla PEDIDOS_ _PEVlOO PECHA....PWlDO

CLID:TE2117 2111

u,

112961 113012

17112/1989llfOllU90 0l/01/1990 10/0211991)

14

112989113051

2101 2118

112958

12/10/1989

21022107 2112 2101 21182108

Tabla PEDIDOS NUK PEDIDO 112963 112975 112983 113012 CLIENTE PRODUCTO 41004 2A44G 41004 41003 CANTIDAD

113036 111045 112961 113013 111058 U2997 112983

lO/Olflno 02/02/1990 1111211989 14/01/1990

". '" ". ,U ,,, ". '" U" Haot ", no ". mm m~, ~,

,

.."

'w~

CAllTlDAD

IKI'ORTE7 )1.';00,00

2AUI-

o

4100)

41002

",

" ", ",

3.145.00 1.458,00

1.420,00 1.978.00 22.500,00 o

,O'

AcmeJCP S.A.

AcmeJCP S.A.

28 6 6 35

OO

n/ovugo08/0111990 27112/1989 20/01119'0 24/0211990 12110/1989 22/01/1990 08/01/1990 0210311990 29/01/1990 04/11/19U 12110/1989 15/0211990 10/0211990 0'10111989 27/0211990 25/0111990 10/0211990 31/12/1989 18/02/1990 0210211990

2124 2101 2114 2124 2114 2103 2112 2109 n01 2118 2111 2108 2120 2106 2106

...Tabla CLIENTES EMPRESA REP CLI 105 LIMITE CREOITO

11302.113062 112979 113027 113007 1130H 111014 112992 112915 113055 1130U

'" '" '" O" ". '" ", ,U ",

'"

.~,

2l.UR 41004

10 4S.000,OO 3.216.00 o 652.00 o 1.480,00 o 652,00

~,

41001

,U

(100) 4100.XK41

'"

"",

702.00 7.100.00

AcmeJCP S.A.

".'" '"

'" '" ,O'

4100Z 41002

2.430.00 "615.000.00 4.104.00

,~ ,~

50.000,00 50.000.00

103

'" '" '" OO. ", '" '"~, ~, ,~

773c 77SC 2A4SC 41002 2"44G UOOx 779c 2At'>C

2 925.00 22 31 350.00 632.00 760.00 2.100.00 150,00 3.750.00 1.a96.00 2.130.00

,~

Figura 4.5.

Una base de datos relacional para el procesamiento de pedidos.

112993 113065 113003 11)049 112981 113057 n30U

no.2118 2103 2111 211)

Esta definicin est pensada especficamente para excluir estructuras como los punteros incorporados de las bases de datos jerrquicas y de red. Los SOBD relacionales pueden representar las relaciones padrelhijo, pero stas quedan representadas estrictamente por los valores de los datos comenidos en las tablas de la base de datos.

'" '" " ", m U" ", ." " ."OS' OS'~,

77,C

", , , " ,,

4100Y noox

5.625.00 776.00 E 11 27.S00.00 600.00 "5 22.500.00

~,

2"UR

Tabla PRODUCTOSIDJAB ID_PRODUCTO DESCRIPCION 2AOO.OO 148 OO 5',00E 55,00

.=.

no

R""'-uctora 41672 Plato 779c 90kg bruo 4100)

.."

S~~~~ 3,

." '" '",~ ~,

41004 Serie 4, " ..ble 41003 llO.OOO.OO f: 40.000.00 f: l5.000.00 f: 20.000.00 f: U.OOO.OO f: !>O.OOO.OO f: 15.000.00 f:~0.000.00

f:f:

10.000.00 55.000.00 l5.0OO.00 lO.OOO.OO 50.000.00 '5.000 00 25.000.00 '0.000.00 lO.OOO 00~S.OOO.OO

lEf: f:

,f:

,f: f:

,

45.000.00 f:

l.bl. OFICINASOFICINA

n Po.1.d 11 "'v.rra

CIUDAll

JP:7

OB.1l:TlYO

VUlTAS

" .....,,~"

12 Ca."I14NT

PART1AL POS.1TION PRECISION PREPARE

TRA:Lt':l",G TRANSACT10N TRNSLATE :: TRANSLATION TIM TRUE .. , UN10N UNIQUE UNKNOWN 'UPOATE UPPER USAGE USER USINGVALU~

BIT'BIT_LENGTH

DEseDESCRIBE

1NTEGER :'1NTERSECT 1NTERVAL INTO'Ji . '1S

80TH

DESCRIPTOR

BYCASCADE

OIAGNOSTICSiOISCONNECT

P~E:SERVE

CASCADEtiCASE

", 'I~~I~'TIDOMAIN

PR'rMARY . PRIOR'PR1V1LEGES "' ~PROCEOURE 'PUBLIC RE:AD REAL .REFERENCES RELAT1VE RESTR1CT RE:VOKE

'

1SOLAT10N J1N

CAST

DOVBLE

CATALOGCHAR CHARACTERCH~_LENGTH

DROPELSE END .

'" LANGUAGELAST LEA01NG LEFT. LEVEL L1KE LOCAL LOWER

El;ID_EXECESCAPE

CHARACTER_LENGTH

CHECK

EXCEPT

CLOSECO!'L~~~E

EXCEPTION EXECEXECUTE EXIsTS E:XTERNAL EXTRACT FALSE . FETCH FIRST FLOATROR

0,"

VALUES VARCHAR VJl.RYING

R1GHT ROLLBACK ROWS

la base de datos sobre el que la instruccin debera actuar, Lds objetos ;con 'llom.: bre fundamentales en una base de datos -relacional-son los nomores de "tablas (que identifican tablas), nombres_de columnas (qu~jdentifican columnas) y nombres de usuarios (que identifican,usuarios de la ,basede datos); 'en .el ~stndar original SQLl se especificaron 10s convenios de denominacin !deestb.s'l0bjet0s: El estndar SQL2,de ANSUISO expande significativamente lajlista deentid.'des con nombre para incluir esquemas (colecciones de tablas');restricciones'{ligadu:" ras sobre los contenidos de las' tablas y'sus rlaciones);ldominios (conjiHs de valores legales que se pueden asignar a una columna)'y varios otros tipos 'de objetos: Muchas'implementaciones de SQL albergan objetos.con nombre'a-uicidnales, como -los procedimientos almacenados, las relaciones de clave 'primaria'o externa,' formularios de entrada' de datos"y esquemas de rplica de 'dato"s: El estndar original ANSI/ISO ,especific -que los nombres SQL deben Conte ner de 1 a 18 caracteres, deben empezar con una letra y no pueden contener espacios o caracteres de puntuacin especiales. El estndar SQL2 aument el mxiino

COLL,ECOLLATIN COLUMNCOHMIT

'~TCHMAX

,

"

,';

VIEW WHEN WHENEVR WHERE' 'WITH WORK WRITE

SCHEMA 'SCROLL SECONO . SECTION SELECT SESSION SESSION_USER

M"MINUTE' Momn::E' MONTH NAMES NAT10NAL NATURAL NCRAR NULL1F NUMERIC

COWh:CTCQNNECTION

,1----,...-L

DELETE FRDM

rJombrede-tabfa --~...,.------,.,'"

CONSTRAINT

CONSTRAINTSCONTINUECONVERT

Y"RZONE

+

WHERE

condicin-de:bisqeda""C"'-'-"''----'''-+!

FORE1GN FOUNO FROM - [: FULL

s"'SIZE SMALL1NT SOME

CORRESPONOING COUNT CREATE

Figura 5.2.

Un diagramlsintcti'ca~deejempID:::~ '"~': ;':-,;-.~

80

SOL. Manual de referencia

Captulo 5: Fundamentos de SOL

81

a 128 caracteres, En la prctica, los nombres albergados.por los productos SOBD basados en SQL varan significativamente. Es comn ver restricciones ms fuenes sobre los nombres que estn conectados con otro software fuera de la base de datos (tales como nombres de usuarios, que pueden corresponder con los nombres de inicio de sesin usados en un sistema operativo), y restricciones ms dbiles sobre los nombres que son privados a la base de datos. Los diferentes productos tambin difiereI! en los caracteres especiales que admiten en los nombres de las tablas. Por razones de transportabilidad, es mejor tener nombres relativamente cortos y evitar el uso de caracteres especiales.

Nombres de columnasCuando se especifica un nombre de columna en una instruccin SQL, SQL puede determinar normalmente por el contexto la columna que se pretende. Sin embargo, si la instruccin involucra dos columnas con el mismo nombre de dos tablas diferentes, se debe usar un nombre de columna calificado para identificar sin ambigedad la columna que se pretende. Un nombre de columna calificado especifica tanto el nombre de la tabla que contiene la columna como el nombre de la columna, separados por un punto (.). Por ejemplo, la columna denominada VENTAS de la tabla REPRESENTANTES tiene el nombre de columna calificado:REPRESENTANTES. VENTAS

Nombres de tablasCuando se especifica el nombre de una tabla en una instruccin SQL, SQL entiende que se hace referencia a una de las tablas propias (es decir, una de las que haya creado el propio usuario). Usualmente se desea elegir nombres de tablas que sean pequeos pero descriptivos. LOS nombres de las tabJas en la base de datos de ejemplo (PEDIDOS, CLIENTES, OFICINAS, REPRESENTANTES, PRODUCTOS) son una muestra adecuada. En una base de datos personal o departamental, la eleccin de los nombres de las tablas recae en el desarrollador o diseador de la base de datos. En una base de datos ms grande de uso compartido y corporativa, puede haber estndares corporativos para la denominacin de tablas, con el fin de' asegurar que los nombres de las tablas no entren en conflicto. Adems, la mayora de marcas de SGBD permiten que usuarios diferentes creen tablas con el mismo nombre (es decir, tanto Juan como Susana pueden. crear una tabla denominada CUMPLEAOS). El SGBD usa la tabla apropiada dependiendo del usuario que est realizando la consulta. Con los permisos adecuados tambin se puede hacer referencia a tablas de otros usuarios usando un nombre de tabla calificado. Un nombre de tabla calificado especifica tanto el nombre del propietario de la tabla como el nombre de la tabla, separados por un punto (.). Por ejemplo, Juan podra acceder a la tabla CUMPLE~OS de Susana usando el nombre de tabla 'calificado:SUSANA.CUMPLEARos

Si la columna proviene de una tabla propiedad de otro usuario, se usa un nombre de tabla calificado en el nombre de columna calificado. Por ejemplo, la columna FECHA_NAC de la tabla CUMPLEA90s, propiedad del usuario SUSANA, se especifica por el nombre de columna completamente calificado:SUSANA. CUMPLEAOS. FECHA_NAC

Los nombres de columna calificados se pueden usar generalmente en una instruccin SQL en cualquier lugar en que pueda aparecer un nombre simple de columna (sin calificar); en las descripciones de cada instruccin SQL se destacan las excepciones.

Tipos de datosEl estndar SQL2 de ANSIIISO especifica los diferentes tipos de datos que se pueden almacenar en una base de datos basada en SQL y manipulada por el lenguaje SQL. El estndar SQLl original especific slo un conjunto mnimo de tipos de datos" El estndar SQL2 expandi esta lista para incluir cadenas de caracteres de longitud variable, datos de fecha y hora, cadenas de bits y otros tipos. Los productos SGBD actuales pueden procesar una rica variedad de tipos de datos, y hay una considerable diversidad en los tipos de datos particulares incluidos en diferentes marcas de SGBD. Los tipos de datos habituales son, entre otros, los siguientes: Enteros. Las columnas con este tipo de datos contienen normalmente cuentas, cantidades, edades, etc. Las columnas enteras se usan tambin frecuentemente para contener nmero de identificacin (ID), como cliente, empleado y nmeros de pedidos. Nmeros decimales. Las columnas con este tipo de datos almacenan nmeros que tienen partes fraccionarias y deben ser calculados con precisin, como las tasas y los porcentajes. Se usan tambin frecuentemente para almacenar cuentas de dinero.

Un nombre de tabla calificado se puede usar generalmente en una instruccin SQL en cualquier lugar en que pueda aparecer un nombre de tabla. El estndar SQL2 de ANSIIISO generaliza la noci6n de un nombre de tabla calificado an ms. Permite la creacin de una coleccin de tablas con nombre, denominada esquema. Es posible hacer referencia a una tabla en un esquema especfico usando un nombre de tabla -calificado. "Por ejemplo, la referencia a la tabla CUMPLEAOS del esquema INFOEMPLEADOS sera:INFOEMPLEADOS.CUMPLEARos

El Captulq 13 proporciona ms informacin sobre los esquemas, usuarios y otros aspectos de la estructura de una base de datos SQL.

82

SOL. Manual de referencia

Captulo 5: Fundamentos de SQL

83

Nmeros en coma flotante. Las columnas con este tipo de'datos_se,usan para almacenar nmeros cientficos que pueden ser objeto de clculo aproximado, como pesos y distancias. Los nmero en coma flotant~pueden.repre: sentar un rango mayor de va,lores que Jos nmeros decimales, pero producen errores de redondeo en los .clculos. Cadenas de caracteres de longitud fija. Las colu,mnas con este tipo cte.-datos almacenan, normalmente, nombres de personas y empresas, jirecciones, descripciones, etc. '. , Cadenas de caracteres de longit1,ld variable. Este tipo de datQ~ p~frnite que una columna almacene cadenas de caracteres que varan en su longitud de fila en fila, con un tamao mximo. (El estndar SQLI permita slo cadenas de caracteres de longitud fija, que son ms fciles para el SOBD de procesar, pero pueden malgastar un espacio considerable.) Cantidades monetarias. Muchos productos SQL ,albergan un tipo MONEY o CURRENC-Y, 'que se almacena usualmente como un nmero,decimal O en.coma flotante. Al tener,un tipo concreto de datos monetario, .el SGBD puede .dar formato adecuadamente a las 'cantidades monetarias al visualizarlas.' Fechas y horas. El soporte de valores de fecha y hora es tambin comn en los productos SQL, aunque los detalles pueden variar considerablemente de un producto a otro. Generalmente se albergan distintas combinaciones de fechas, horas, marcas temporales (timestamp), intervalof'd&tiempo'y aritmtica de fechas y horas. El estndar'SQL2incluye una'especificacil-elaborada para los tipos de datos DATE, TIME, TIMESTAMP LrNTERVAL, in'c1u''; yendo soporte para zonas horarias y precisin temporal (por ejemplo; dcims o centsimas de segundo). Datos booleanos. Algunos productos SQL, como Informix Dynamic Server, albergan valores lgicos (TRUE y FALSE) como un tipo explcito,' y algUiIos tambin permiten operaciones lgicas (comparaciones, AND y OR, Y'otras) sobre los datos almacenadosconinstrucciones SQL. Texto largo. Varias bases de datos basadas en SQL albergan columnas. que almacenan largas cadenas>deltex~o (normalmente; hasta 3.2.000 o 65.000 caracteres y, en .algunos casos,incluso.ms). Esto permite a la base de datos almacenar documentos completos,' descripciones de productos~~,artculos.tc.:. nicos,:resmenes y .datos,textuales s~milares sin estructura.El SGBD prohibe usualmente el uso de estas columnas 'en ,las consultas interactivas y las .. ":;' 1"J' 1, j,"_ bsquedas.'." Corrientes de bytes sin estructura. Varios SGBD permiten el almacenamiento y recuperacin de secuencias de bytes sin estructura y de longitud variable. Las columnas que contie~en estos datos~se usan'para almacenar imgenes de vdeo,comprimidas, cdigo ejecutable 'y otros tipos de datos sin estructura. El tipo de datos de SQL Ser.ver .IMAGE, por ejemplo; puede almacenar una corriente de hasta dos mil millones de bytes de datos. Caracteres no romanos. Al crecer las bases de datos'para dapsoporte'a aplicaciones globales, los fabricantes de SGBD han ido aadiendo 'soporte para cadenas de longitud fija y ,variable de caracteres de.-16 bits .usadas para representar Kanji u otros caracteres asiticos o rabes. Mientras que las, bases

de datos modernas permiten el almacenamiento y recuperacin de dichos caracteresl (usando a menudo el convenio UNICODE para representarlos), el soporte;de .la bsqueda y ordenacin en los tipos GRAPHIC Y VARGRAPHIC .vara 'ampliamente. La Tabla 5.4 lista los tipos de datos especificados en el estndar ANSUISO de SQL..

~'.

Tabla 5.4....

Tip~s de datos de SOL de ANSI/ISO-u;~.

Descripcin Cadenas de caracteres de longitud fija. rCadenas de caracteres de longitud variable*. .

CRAR (longitud),.CHARAC'I.'.E~

(longit.td)1,',

VARCHAR ::( longitud) CHAR VARYING (longitud) CHARACT,ER .VARYING .(longitud)

NCHAR; '(longitud)NATINA:L,CHJI.R NATIONAI.:

(longitud) CHARACTER (longitud)

Cadenas de caracteres nacionales de ll-; longitud fija*, .(, I

NCHAR VARYING (longitud) NATI'NF.:L Cli1l.."R;VARYING '(longitud)-' N+I;6iL't~ARA.CTERVARYING (longitud)-\(l"

'Cadenas de caract~ies n'acionales de longitud variable *. ('~l.

(~, '!.,

'.j'

"

INTEGER

Nmeros enteros. Nmeros enteros pequeos. Cadenas de bits de longitud fija*. Cadenas de bits de longitud variable*. Nmeros decimales.

INT"

SMf\LHN,T,BIT~,(longitud),

BIT VARYING NUMERIC DECIMAL.DEC

(longitud)

(precisin, escala) (precisin, escala) (precisin, escala)

FLOAT REAL

(pre~is"iAr

Nmeros en coma flotante. Nmeros en coma flotante de baja precisin. Nmeros en coma flotante de-alta. precisin. Fechas del calendario*..1'

DOUBLE PRECISION DATE TIME

(precisin) (precisin)

Horas de

reloj~.

TIMESTAMP INTERVAL

Fechas y horas*. Intervalos de tiempo*.

* Nuevo tipo de datos en SQL2.

'/ 1

84

SOL. Manual de referencia

Captulo 5: Fundamentos de SOL

85

Las diferencias entre los tipos de datos ofrecidos en varias implementaciones SQL son una de las barreras prcticas a la transponabilidad de las aplicaciones basadas en SQL. Estas diferencias han sido resultado de la innovacin en la evolucin de las bases de datos para la inclusin de un rango ms amplio de capacidades. ste ha sido el patrn habitual: Un fabricante de SaBn aade un nuevo tipo de datos que proporciona nuevas capacidades tiles para un cierto grupo de usuarios. Otros fabricantes de SGBD aaden el mismo tipo de datos o similar, e introducen sus propias innovaciones para diferenciar sus productos del resto. Durante varios aos se incrementa la popularidad del tipo de datos y llega a ser parte de la corriente principal de tipos de datos albergados por la mayora de implementaciones de SGBD. Los cuerpos estndares se involucran en el intento de estandarizar el nuevo tipo de datos y eliminar las diferencias arbitrarias entre las implementaciones de los ~abricantes. Cuanto ms se ha asentado el tipo de datos, ms difcil es encontrar el compromiso al que se enfrenta el grupo de estandarizacin. Normalmente esto resulta en una adicin al estndar que no se corresponde exactamente con ninguna de las implementaciones actuales. Los fabricantes de SGBD aaden lentamente soporte para el nuevo tipo de datos estandarizado como una opcin a sus sistemas, pero, dado que tienen una gran base instalada que usa la versin antigua (ahora propietaria) del tipo de datos, deben tambin continuar con su soporte. Durante un periodo de tiempo muy grande (generalmente varias versiones principales del producto SGBD), los usuarios migran al nuevo tipo de datos estandarizado y el fabricante de SGBD puede empezar el proceso de eliminacin de la versin propietaria. Los datos de fecha y hora proporcionan un ejemplo excelente de este fenmeno y las variaciones en los tipos de datos que crean. DB2 ofreci pronto soporte para las fechas y las horas, con tres tipos de datos diferentes: DATE.

SQL Server se introdujo con un nico tipo de datos de fecha y hora, denominadatos TIMESTAMP de DB2. Si Server podra aceptar esta versin de la consulta (sin la aritmtica de fechas):

do

DATETIME, que se asemeja mucho al tipo de FECHA_CONTRATO contiene datos DATETIME, SQL

5ELECT NOMBRE, FECHA_CONTRATO FROM REPRESENTANTES WHERE FECHA_CONTRATO >= '06/14/1989'

Dado que en la consulta no se ha especificado la hora del 14 de junio de 1989, SQL Server asume la medianoche de esa fecha. La consulta SQL Server significa realmente:SELECT NOMBRE, FECHA_CONTRATO FROM REPRESENTANTES WHERE FECHA_CONTRATO >= '06/14/1989 12:00AM'

Si la fecha de contrato de un representante se almacenase en la base de datos como el medioda del 14 de junio de 1989, el representante no se incluira en los resultados de la consulta de SQL Server, pero s en los de DB2 (dado que s6lo se almacen la fecha). SQL Server tambin alberga aritmtica de fechas mediante un conjunto de funciones predefinidas. As, la consulta al estilo DB2 se puede tambin especificar de esta forma:SELECT NOMBRE, FECHA_CONTRATO FROM REPRESENTANTES WHERE FECHA_CONTRATO >= DATEADD(DAY, 15,

'05/30/1989')

"

lo cual es considerablemente diferente a la sintaxis de DR2. Gracle tambin alberga los datos de fecha y hora con un nico tipo de datos, denominado DATE. Al igual que el tipo de datos DATETIME de SQL Server, la parte de la hora de un valor DATE de Gracle entiende medianoche si no se especifica una hora concreta. El formato de fechas predeterminado de Oracle es diferente de los formatos de DB2 y SQL Server, as que la versin de Gracle de la consulta es:SELECT NOMBRE, FECHA_CONTRATO FROM REPRESENTANTES WHERE FECHA_CONTRATO >= '14-JUN-89'

TIME.

Almacena una fecha, como Junio 30, 1991. Almacena un momento del da, como 12:30 P.M. T:IKESTAKP. Un instante especfico en la historia, con una precisin mejor que el nanosegundo. .

Se pueden especificar fechas y horas concretas como constantes de cad~ena y se incluye la aritmtica de .fechas. A continuacin se muestra un ejemplo de una consulta vlida usando las fechas DB2, en el que se asume que la columna FECHA_ CONTRATO contiene un dato DATE.SELECT NOMBRE, FECHA_CONTRATO FROM REPRE~ENTANTES WHERE FECHA_CONTRATO >= '0513011.989'

Oracle tambin alberga una aritmtica limitada de fechas, de forma que la consulta al estilo DB2 tambin se puede especificar, pero sin la palabra clave DAYS:SELECT NOMBRE, FECHA_CONTRATO FROM REPRESENTANTES WHERE FECHA_CONTRATO >= '30-HAY-89'

+

15

+ 15 DAYS

Finalmente, el estndar SQL2 de ANSIIISO aadi soporte para los datos de fecha y hora con un conjunto de tipos de datos basados en los tipos de datos de DB2,

86

SOL. Manual de referencia21 -375 2000.00+4~7500.8778

Captulo 5: Fundamentos de SOL

87

pero no idnticos a stos. Adems de los tipos de datos DATE, TIME YTIME5TAMP, el estndar especifica el tipo de datos INTERVAL, que se puede usar para almacenar un intervalo de"tiempo (por ejemplo, un intervalo medido en"das o una duracin medida en horas, minutos y segundos). El estndar tambin proporciona un mtodo muy elaborado y complejo para manejar la aritmtica de fechas y horas, especificando la precisin de los intervalos, ajustando las diferencias debidas al-uso horario, etc. Como ilustran estos ejemplos, las sutiles diferencias en los 'tipos de datos en varios productos SQL conducen a diferencias significativas en la sintaxis de las instrucciones SQL. Incluso pueden provocar que la misma instruccin SQL produzca resultados ligeramente distintos en diferentes sistemas gestores de bases de datos. La ampliament predicada transportabilidad de SQL es cierta, pero s.lo de manera general. Una aplicacin se puede trasladar de una base de datos a otra y puede ser muy transportable si slo usa las caractersticas fundamentales y bsicas de SQL. Sin embargo, las diferencias sutiles en las implementaciones SQL indican que los tipos de datos y las instrucciones SQL deben ajustarse casi siempre si hay que llevarlos a otras marcas de SGBD. Cuanto ms compleja sea la aplicacin, ms probable es que.lIegue alser dependiente {fe-las caractersticas' y matices especficos, y, por tanto,menos'tran'sportable. J d. T ''l'']!'

No se d.ebe poner una coma entre los dgitos de _~na constante numrica, y no todos los dIalectos .de SQL permiten ~l signo positivo. as que es mej?r evitarlo. Para los datos monetarios, la mayora de implementaciones SQL U$an simplemenM te las_ .const~ntes ~nteras ~ decmales, aunque algunas permiten que se esp~cifique la constante con un smbolo de moneda: . .$0.75 $5000.00 $~567.89

Las constantes en coma flotante (tambin denominadas literales numricos aproximados) se especifican usando la notacin E, usada comnmente en los len M guajes de programacin corno e y FORTRAN. AqU hay algunas constantes vlidas en SQL de coma flotante:

,"1.SE3 -3.14159El 2.5E-7 0.783926E21

'

"

La se lee como por diez elevado a la poten.cia, as.ql,Ie la iprimer~ se lee 1,5 por diez elevado al cubo, o 1.500..

e

c.o~stante"

ConstantesEn algunas instrucciones SQL, un valor de datos numrico, de carcter o de fechas se debe expresar de forma textual. Por ejemplo. en esta instruccin INSERT, que aade un representante a la base de datos: ... . VENTAS).

Constantes de cadenaEl estndar ANSIIISO especifica' gti'e las constantes SQL para ios datos de cuacteres se deben encerrar entre comillas simples (' ....), como en estos ejemplos:'Garcia, Juan J .. ' 'Madrid' 'Oeste'

INSERT INTO REPRESE~TAN~~S VALUES (115,.

(,~~_~MPL~, NOM~~~ ., ~~~T,t:-,. ~f.C~~_CO~~~:o,

, , el valor de cada columna en' la nueva fila insertada se especifica en' ta..clusula VALUES.' Los valores de datos,constantes tambin se usan en expresiones, como en , I ", .. :.'. la instruccin SELECT:' . "SELECT CIUDAD FROM OFICINAS

'"Daniel Izquierdo', 175000'.00, ':21-JU-'90",l:-O;'OO)

Si hay que incluir una comilla simple dentro del texto const~nte, s~ escribe -~n la constante como dos caracteres consecutivos de comilla simple. As, el valor constante:.,'McDon.~ld'

l

's'

WHERE OBJETIVO>

(1.1 * VENTAS) + 10000.00

es la cadena de diez caracteres McDonald's. Algunas implementaciones de SQL, como-SQL Server e Infonnix, aceptan constantes de cadena encerradas entre comillas dobles

-e'..."):

".

El estndar SQL de ANSIIISO especifica el fonnato de las constantes de cadena y numricas,'o literales,'que'representan valores de datos'especficos. 'La mayora de implementaCiones de SQL siguen estos convenios. . 1:

"Garcia. Juan J..

"Madrid"

Oeste"

Constantes numricasLas constantes enteras y decimales (tambin denominadas literales numicos exactos)se e"sc'riben como nmeros:deciinales ordin-aris en las instrucciones SQL; como u'~signo opcional positivo o negativo. .'.'

Desafortunadamente, las comillas dobles pueden plantear problemas de transportabilidad con otros productos SQL. El estndar SQL2 proporciona la capacidad adicional de especificar constantes de cadena de un conjunto concret~ de caracteres nacionales (por ejemplo, francs O alemn) o de un conjunto de caracteres definido por el usuario. Las capacidades del conjunto de caracteres definido por el usuario no se han implementado, generalmente, en los principales productos SQL.

~.

8S

SOL. Manual de referencia

Captulo 5: Fundamentos de SOL

89

Constantes de fecha y horaEn los productos SQL que incluyen los datos de fecha y hora, los valores constantes para fechas, horas e intervalos de tiempo se especifican como constantes de cadena. El formato de estas constantes vara de un SGBD a otro. Hay incluso ms variaciones introducidas por las diferencias en la forma en que se escriben las fechas y las horas en diferentes pases. DB2 alberga varios formatos internacionales diferentes para las constantes de fecha, hora y marca temporal, como se muestra en la Tabla 5.5. La eleccin del formato se hace al instalar el SGBD. DB2 tambin alberga duraciones especificadas como constantes especiales, como en este ejemplo:FECHA_CONTRATO + 30 DAYS

Tambin se puede usar la funcin predefinida de Oracle TO_DATE {} para convertir las constantes escritas en otros formatos. como en este ejemplo:SELECT NOMBRE, EDAD FROM REPRESENTANTES WHERE FECHA_CONTRATO = TO_DATE('JUN 141989',

'MON DD YYYY'}

El estndar SQL2 especifica un formato para las constantes de fecha y hora basado en el formato de la Tabla 5.5, excepto en. que las constantes de hora se escriben con dos puntos, en lugar de puntos, para separar las horas, minutos y segundos.

Constantes simblicasAdems de las constantes proporcionadas por el usuario, el lenguaje SQL incluye constantes simblicas especiales que devuelven valores de datos mantenidos por el propio SGBD. Por ejemplo, en algunas marcas de SGBD, la constante simblica CURRENT_DATE da el valor de la fecha actual y se puede usar en consultas como la siguiente, que lista los representantes cuya fecha de contrato est an en el futuro:SELECT NOMBRE, FECHA_CONTRATO FROM REPRESENTANTES WHERE FECHA_CONTRATO > CURRENT_DATE

Ntese que, sin embargo, no se puede almacenar una duracin en la base de datos, ya que DB2 no tiene un tipo de datos explcito DURATION. SQL Server tambin alberga los datos de fecha y hora, y acepta una variedad de formatos diferentes para las constantes de fecha y hora. El SGBD acepta automticamente todos los formatos alternativos, y se pueden entremezclar si se desea. Aqu hay algunos ejemplos de constantes de fecha legales en SQL Server:March 15, 1990 Mar 1S 1990 3/15/1990 3-15-90 1990 MAR 15

y aqu hay algunas constantes de tiempo legales:15:30:25 3:30:25 PM 3:30:25 pm 3 PM

Las fechas y horas de Gracle tambin se escriben como constantes de cadena, usando este formato:15-MAR-90

Tabla 5.5.

Formatos de fecha y hora en SOL de IBM

Fonnato:

Ejemplode fecha511911960

Fonnatodebora

, ombre, del formatoAmerican (americano) European (europeo) Japanese (japons) ISO Formato TIMESTAMP

de la fechammldd/yyyy

Ejemplo de hora

El estndar SQLl e'specificaba slo una nica constante simblica (la constante USER descrita en el Captulo 15), pero la mayora de productos:SQL proporcionan muchas ms. ,Generalmente, una constante simblica puede ~parecer en una instruccin SQL en cualquier lugar en que pueda aparecer cualquier constante ordinaria del mismo tipo de datos. El estndar SQL2 adopt las constantes simblicas ms tiles de las implementaciones SQL y proporciona CURRENT_DATE, CURRENT_TIME y CURRENT_TIMESTAMP (obsrvense los caracteres de subrayado), as como USER, SESSION_USER y SYSTEM_USER. Algunos productos SQL, incluido SQL Server, proporcionan acceso a los valores del sistema mediante funciones predefinidas, en lugar de constantes'simblicas, La versin de SQL Server para la consulta anterior es:SELECT NOMBRE, FECHA_CONTRATO FROM REPRESENTANTES WHERE FECHA_CONTRATO> GETDATE(}

hh:mm am/pm 2: 18 PM hh.mm.ss hh:mm:ss hh.mm.ss 14.18.08 14:18:08 14.18.08

dd.mm.yyyy yyyy-mm-ddyyyy-rnrn-dd yyyy-rnrn-dd hh.mm.ss.nnn .nnn

19.5.1960 1960-5-19 1960-5-19

Las funciones predefinidas se describen ms tarde en este captulo, en la seccin Funciones predefinidas.

ExpresionesLas expresiones se usan en el lenguaje SQL para calcular-valores que se recuperan de una base de datos y para calcular valores uSdos en las bsquedas. Por

Ejemplo de TIMESTAMP

1960-05-19-14. 18.08.048632

~-----

I

90

SOL. Manual de referencia

Captulo 5: Fundamentos_de SaL

91

ejemplo, esta consulta calcula las ventas de cada oficina como un porcentaje de su objetivo: .SELECT CIUDAD, OBJETIVO. VENTAS, (Vf;NTAS!OBJETIVO)~

de DB2 MONTH () y YEAR (l toman un valor DATE o TIHE$TAMP como -entratla y de: vuelven un enter que es el mes b porcin del ao "Bel valor. Esta consulfillista el nombre y mes de contratacin de cad~ representante en la base de datos de ejemplo:SELECT NOMBRE, MONTH(FECHA_CONTRATO) FROM REPRESENTANTES

100

FRQM OFICINAS

y esta consulta lista las oficinas cuyas ventas superan en sq.OOO al objetivo:y esta listaSELECT CIUDAD FROM OFICINAS1. ,:

todos los -representantes contratados en 1988:

WHERE VENTAS> OBJETIVO + 50000.00

SELECT NOMBRE, MONTH(FECHA_CONTRATO) FROM REPRESENTANTES WHERE YEAR(FECHA_CONTRATO = 1988

El estndar SQL de ANSI/ISO especifica cuatro operaciones aritmticas"que se pueden usar en expresiones: suma (X+Y), resta (X-Y), multiplicacin (X*Y) y divisin (XlY). Se, pueden usar.,parntesisl para formar expresiones ms.complica... ..~j, .) .. 1 das.-como,sta:.' ;. '1:.. ,~'J

(VENTAS

~.

-'o '., " .. '1.05) -

I

1.... :.;

"

_.~,

,(OBJETIVO.~

.9?) ..

Las funciones predefinidas tambin se usan habitualmente para dar formato a los datos. La funcin predefinida de Orade' TO_CHAR ( ) , por ejemplo, toma un tipo de datos DATE y una especificaCin de formato como argumentos, y devuelve una cadena conteniendo la versin 'con formato de la fecha. En los resultados producidos por esta consulta:SELECT NOMBRE, TO_CHAR(FECHA_CONTRATO. 'OAY MONTH 00, yyyy.) FROM REPRESENTANTES

, , De manera estricta. los parntesis no se necesitan en esta consulta porque el estndar ANSI/ISO especifica que la multiplicacin y la divisin tienen una precedencia superior a la suma y la resta. Sin embargo, se deberan usar parntesis siempre para que las expresiones no sean ambiguas. 'dado que diferentes dialectos SQL usan diferentes reglas. Los parntesis tambin incrementan la legibilidad de la instrucCin y hacen que 'las instruccones S.QL sean ms fciles de mantener.' 'El estndar ANSI/ISO tambin 'especifica la conversin automtica de ti'pos de datos de enteros a nmeros 'decimales, y de nmeros decimales a n,meros en coma flotante. Por tao, se pueden mezclar estos tipos 'de datos en una expresin mim.rica.'MuchasiInpleme.ntacines SQL albergan otros operadores y' admiten operaciones sobre datos de carter y de "fecha. DB2, por ejemplo, alberga el operador de concatenaCin'de cadenas', escrit= Bl AND (A < = Cl

NUN_PEDIDO113045

IMPORTE45.000,00

Sin embargo, el test BETWEEN es una forma ms simple de expresar una condicin de bsqueda cuando se piensa en trminos de rangos de valores.

"

.,

La versin negada del test de rango (NOT BETWEEN) comprueba los valores que estn fuera del rango, como en este ejemplo:

Listar los representantes cuyas ventas no se encuentren entre el 80 y el 120 por ciento de su cuota.SELECT NOMBRE, VENTAS, CUOTA FROM REPRESENTANTES WHERE VENTAS NOT BETWEEN (.8 NOMBRE Maria Jimnez VENTAS392.725,00 474.050,00 142.594,00 186.042,00

El test de pertenencia a conjuntos

(IN)

CUOTA) ANO (1.2 * CUOTA) CUOTA300.000,00 350.000,00 200.000,00 300.000,00

Otra condicin comn de bsqueda es el test de pertenencia a conjuntos (IN) mostrado en la Figura 6.9. Comprueba si un valor de datos coincide con uno de una lista de posibles valores. Aqu se muestran varias consultas que usan este test:

Listar los represen'tames que trabajan en Navarra, Almera o Daimiel.SELECT NOMBRE, CUOTA, VENTAS FROM REPRESENTANTES WHERE REP_OFICINA IN (11, 13, NOMBRE Bruno Arteaga Mara Jimnez Samuel Clavel Neus Azcrate CUOTA350.000,00 300.000,00 275.000,00 300.000,00

Susana SantosBernardo Snchez Neus Azcrate

22) VENTAS367.911,00 392.725,00 299.912,00 186.042,00

La expresin de test especificada en el test BETWEEN puede ser cualquier expresin SQL vlida, pero en la prctica es generalmente slo el nombre de una columna, como en los ejemplos anteriores. El estndar ANSIfISO define reglas relativamente complejas para el manejo de los valores NULL en el test BETWEEN: Si la expresin de test produce un valor NULL, o si ambas expresiones que definen el rango producen valores NULL, entonces el test BETWEEN devuelve un resultado NULL. Si la expresin que define el lmite inferior del rango produce un valor NULL, entonces el test BETWEEN devuelve FALSE si el valor es mayor que el lmite superior, y NULL en caso contrario. Si la expresin que define el lmite superior del rango produce un valor NULL, entonces el test BETWEEN devuelve FALSE si el valor es menor que el lmite inferior, y NULL en caso contrario.

-------------- ------------- ------------

-exp'esin-de-'es' - [

NOT

J

Figura 6.9.

Diagrama sintctico del test de pertenencia a conjuntos IIN).

116

SOL. Manual de referencia

Captulo 6: Consultas simples

117

'"Hallar todos los pedidos de un jueves de enero de 1990.SELECT NUM_PEDIDO, FECHA_PEDIDO, IMPORTECIUDAD IN (' Navarra' l

razones de transportabilidad. es generalmente buena idea evitar listas con un nico elemento, como la siguiente:'18-ENE-90.

FROM PEDIDOS WHERE FECHA_PEDIDO IN

(' 04-ENE-90.

'11-ENE-90',

'25-ENE-90') NUM_PEDIDO FECHA_PEDIDO 113012 ll-ENE-90 113003 25-ENE-90I1iPORTE3.745,00

y reemplazarla con un test simple de comparacin:CIUDAD = 'Navarra'

5.625.00

El test de encaje de patrones

(LIKE)

Hallar rodos los pedidos de cuatro representantes en concreto.SELECT NUM_PEDIDO, REP, IMPORTE FROM PEDIDOS WHERE REP IN (107, 109, 101, 103)NUM_PEDIDO REP

Se puede usar un test simple de comparacin para recuperar las filas que coincidan con un texto en concretQ. Por ejemplo, esta consulta devuelve una fila de la tabla CLIENTES segn el nombre:Mostrar eilimite de crdito de Sierras S. A.

IMPORTE3.978,00 1.480,00 652,00 2.430,00

112968

113058112997113062 113069

101 109 107 107

SELECT EMPRESA, LIMITE_~REDITO FRQM CLIENTES WHERE EMPRESA = 'Sierras S.A.'

112975 113055 113003 113057 113042

107 103101

31.350,00 2.100,00150,00

109103

5.625,00600,00

101

22.500,00

Se puede comprobar si los valores de datos no coinciden con los valores usando la fonna NOT IN del test de pertenencia a conjuntos. La expresin de test en un test IN puede ser cualquier expresin SQL, pero es generalmente un nombre de columna, como en los ejemplos anteriores. Si la expresin de test produce un valor NULL, el test IN devuelve NULL. Todos los elementos de la lista de valores deben tener el mismo tipo, y el tipo debe ser comparable al tipo de datos de la expresin de test. Al igual que el test BETWEEN, el test IN no aade nada a la potencia expresiva de SQL, ya que la condicin de bsqueda:X

Sin embargo, sera posible haber olvidado si el nombre de la empresa era Sierras, Segadoras o Sillas)}. Se puede usar el test de encaje de patrones para devolver los datos basados en una coincidencia parcial del nombre del cliente. El test de encaje de patrones (LIKE), mostrado en la Figura 6.10, comprueba si el valor de una columna coincide con un patrn especificado. El patrn es una cadena que puede incluir uno o ms caracteres comodn. Estos caracteres se interpretan de fonna especial.Caracteres comodn

El carcter comodn signo del porcentaje (%) coincide con cualquier secuencia de varios o ningn caracteres. Aqu hay una versin modificada de la consulta anterior que usa el signo del porcentaje:SELECT" EMPRESA, LIMITE_CREDITO FROM CLIENTES WHERE EMPRESA LIKE 'S% S.A.'

IN

{A,

s,

el

es completamente equivalente a:(X

= AlaR

(X

= B)

OR (X

= Cl

-nombre-de-columna~LlKEParrnL

.ESCAPE carader-de-escape

Sin embargo, el test IN ofrece una forma mucho ms eficiente de expresar esta condicin de bsqueda, especialmente si el conjunto contiene ms de unos pocos valores. El estndar de SQL ANSIIISO no especifica un lmite mximo sobre el nmero de elementos que pueden aparecer en la lista de valores, y la mayora de implementaciones comerciales tampoco establecen un lmite superior explcito. Por

J.. .(LIKE).

L

NOT

-.J

Figura 6.10. Diagrama sintctico del test de encaje de patrones

118

SOL. Manual de referencia

Captulo 6: Consultas simples

119

La palabra clave LIKE indica a SQL que compare la columna NAME con el patrn 8% S. A.. Cualquiera de los nombres siguientes podra coincidir con el patrn:sierras S.A. Segadoras S.A. Sillas S.A. Sandalias S.A.

pero stos no:Segadoras SA Sierras Ine.

El carcter comodn de subrayado L) coincide con cualquier carcter nico. Si se est seguro de que el nombre de la compaa es Segadoras o Pegadoras, por ejemplo, se puede usar esta consulta:SELECT EMPRESA, LIMITE_CREDITO FRQM CLIENTES WHERE EMPRESA LIKE '_egadoras S.A.'

En este caso, los siguientes nombres coincidiran con el patrn:Segadoras S.A. Pegadoras S.A. Legadoras S.A.

de porcentaje en una columna de datos textuales, por ejemplo, se puede incluir simplemente el signo de porcenlaje en el patrn porque SQL lo tratar como un comodn. Con algunos productos SQL populares no se pueden comparar los dos caracteres comodn. Esto no plantea generalmente problemas serios porque los caracteres comodn no aparecen frecuentemente en los nombres, nmeros de producto y otros datos textuales del tipo que se almacena habitualmente en una base de datos. . El estndar de SQL ANSI/ISO especifica una forma de comparar estos caracteres mediante el uso de un carcter de escape especial. Cuando el carcter de escape aparece en el patrn, el carcter que lo sigue inmediatamente se trata como un carcter literal, en lugar de cmo un carcter especial (se dice que este ltimo carcter est escapado). El carcter escapado puede ser cualquiera de los caracteres comodn o el propio carcter de escape, que ahora tiene un significado especial en el patrn. El carcter de escape se especifica como una cadena constante de un carcter en la clusula ESCAPE de la condicin de bsqueda, como se muestra en la Figura 6.10. Aqu se muestra un ejemplo que usa el signo del dlar ($) como carcter de escape:

pero estos nombres no:Secadoras S.A. Pagadoras S.A.

Hallar los productos cuyos bolos A %BC.

identificado~s de

producto comienzan con los sm-

Los caracteres comodn pueden aparecen en cualquier lugar de la cadena patrn y en cualquier nmero. Esta consulta permite tanto la cadena Secadoras como Pegadoras, y tambin el final del nombre de la empresa S. A. o S. L.:SELECT EMPRESA, LIMITE_CREDITO FROM CLIENTES WHERE EMPRESA LIKE '_egadoras %'

SELECT NUM_PEDIDO, PRODUCTO FROM PEDIDOS WHERE PRODUCTO LIKE 'A$%BC%' ESCAPE '$'

Se pueden buscar cadenas que no coincidan con un patrn usando la forma del test de encaje de patrones. El test LIKE se debe aplicar a una columna con un tipo de datos de cadena. Si el valor de la columna es NULL, el test LIKE devuelve un resultado NULL. Si usted ha usado computadoras mediante una interfaz de comandos (como el entorno de UNIX), probablemente haya encontrado ya el encaje de patrones. Frecuentemente, el asterisco (*) se usa en lugar del signo del porcentaje (%), Y el signo de interrogacin de cierre (?) en lugar del subrayado de SQL, pero las capacidades de encaje de patrones son similares en la mayoria de situaciones en que una aplicacin infonntica ofrece la capacidad de comparar partes seleccionadas de una palabra o texto.NOT LIKE

El primer signo de porcentaje del patrn, que sigue al carcter de escape, se trata como un signo de porcentaje literalmente, el segundo funciona como comodn. El uso de los caracteres de escape es muy comn en las aplicaciones de encaje de patrones, por In que el estndar ANSUlSO los especific. Sin embargo, nn formaba parte de las primeras implementaciones de SQL, y se ha adoptado lentamente. Para asegurar transportabilidad, se debera evitar la clusula ESCAPE.

El test de valores nulos lIS

NULL)

Caracteres de escape

*

Uno de los problemas del encaje de patrones de cadenas es cmo hacer la comparacin de los propios caracteres comodn. Para comprobar si hay un carcter

Los valores NULL crean una lgica trivalorada para las condiciones de bsqueda de SQL. Para una fila dada, el resultado de una condicin de bsqueda puede ser TRUE o FALSE, o puede ser NULL porque una de las columnas usadas en la evaluacin de la condicin de bsqueda contenga un valor NULL. A veces es til comprobar explcitamente los valores NULL en una condicin de bsqueda y manejarlos directamente. SQL proporciona un test especial sobre valores NULL (IS NULL), mostrado en la Figura 6.11, para manejar esta tarea.

Ii

l'

120

SOL Manual de referencia

I!.' ;;1

'i~'1,

i l'1 11;11

- - nombre-de-columna 15

-------,-----LNOT~

NULL

.

Captulo 6: Consultas simples

121

La palabra clave NULL no se puede usar aqu porque no es realmente un valor, sino una seal de que el valor es desconocido. Incluso si el test de comparacin:OFICINA_REP = NULL

::

l'

Figura 6.11. Diagrama sintctico del test de valores NULL (r5 NULL).

Esta consulta usa el valor NULL para encontrar el representante de la base de datos de ejemplo que no tenga asignada an una oficina:Buscar el representante que no tenga an una oficina asignada.SELECT NOMBRE FRM REPRESENTANTES WHERE OFICINA_REP 15 NULL NOMBRE Toms Saz

fuese legal, las reglas para el manejo de los valores NULL en las comparaciones hara que su comportamiento fuese diferente del que cabra esperar. Cuando SQL encuentre una fila donde OFICINA_REP fuese NULL, la condicin de bsqueda comprobara:NULL = NULL

La forma negativa del test de valores NULL (1S NOT NULL) encuentra las filas que no contienen un valor NULL:Listar los representantes queSELECT NOMBRE

El resultado es TRUE, o FALSE? Dado que los valores en ambos lados de la igualdad son desconocidos, SQL no puede decidirlo, as que las reglas de la 16gica de SQL dicen que la condicin de bsqueda debera dar un resultado NULL. Dado que la condicin de bsqueda no produce un resultado cierto, la fila se excluye de los resultados de la consulta -precisamente lo opuesto de lo que se esperara-o Como resultado de la forma en que SQL maneja los valores NULL en las comparaciones, se debe usar explcitamente el valor NULL para comprobar los valores NULL.

ten~an

oficinas asignadas.

Condiciones compuestas de bsqueda

(AND, OR

Y NOT)

FROM REPRESENTANTES WHERE OFICINA_REP r5 NOT NULL NOMBREBruno Arteaga Maria Jimnez Susana Santos Samuel Clavel Bernardo Snchez Daniel Ruidrobo Len Freire Pablo Cruz Neus Azcrate

Las condiciones simples de bsqueda descritas en las secciones precedentes devuelven un valor TRUE, FALSE o NULL cuando se aplican a una fila de datos. Usando las reglas de la lgica se pueden combinar estas condiciones simples de bsqueda de SQL para formar otras ms complejas, como la que se muestra en la Figura 6.12. Ntese que las condiciones de bsqueda combinadas con AND, OR Y NOT pueden ser a su vez condiciones compuestas de bsqueda.

---WHERE

tL:JLAND

cond;c;n-de-bsqueda

I'tiII ,

I

A diferencia de las condiciones de bsqueda descritas anteriormente, el test de valores NULL no puede devolver un resultado NULL. Siempre es TRUE o FALSE. Puede resultar extrao que no se pueda comprobar un valor NULL usando una simple condicin de bsqeda de comparacin, como:SELECT NOMBRE FROM REPRESENTANTES WHERE OFICINA_REP = NULL

OR

Figura 6.12. Diagrama sintctico de la clusula WHERE.

122

SOL. Manual de referencia

Captulo 6: Consultas simples

123

La palabra reservada OR se usa para combinar dos condiciones de bsqueda cuando cualquiera de ellas (o ambas) debe ser cierta:

Tabla 6.1.AND

La tabla de verdad de ANDTRUE TRUE FALSE NULL FALSE FALSE FAL5E FALSE NULL NULL FALSE NULL

Hallar los representantes que estn por debajo de su cuota o con ventas por debajo de 300.000 .SELECT FROM WHERE DRNOMBRE

TRUE FALSE

NOMBRE, CUOTA, VENTAS REPRESENTANTES VENTAS < CUOTA VENTAS < 300000.00 CUOTAVENTAS 299.912,00 142.594,00

N11LL

Samuel Clavel Bernardo Snchez Toms Saz Pablo Cruz Neus A%crate

275.000,00 200.000,00

Hallar todos los representantes que o bien (a) trabajan en Daimiel, Navarra o CasteIln; o bien (b) no tienen jefe y estn contratados desde junio de 1988; o (e) superan su cuota pero tienen ventas de 600.000 o menos.SELECT FROM WHERE OR OR NOMBRE REPRESENTANTES {OFICINA_REP IN (22, 11, 12)) (JEFE IS NULL AND FECHA_CONTRATO >~ 'Ol-JUN-88') (VENTAS> CUOTA AND NOT VENTAS> 600000.00)

NULL275.000,00

300.000.00

75.985,00 286.775.00 186.042,00

Tambin se puede usar la palabra clave AND para combinar dos condiciones de bsqueda que deben ser simultneamente ciertas:

Hallar los representantes que estn por debajo de su cuota y con ventas por debajo de 300.000 .SELECT NOMBRE, CUOTA, VENTAS FROM REPRESENTANTES WHERE VENTAS < CUOTA AND VENTAS < 300000.00 NOMBREBernardo Snchez Neus Azcrate

CUOTA 200.000,00 300.000,00

VENTAS 142.594,00 186.042,00 NOT

Finalmente. se puede usar la palabra clave condicin de bsqueda sea falsa:

para seleccionar filas donde la

La razn por la que podra desearse ver esta lista particular de n~:)Jnbres no importa. Lo que ilustra este ejemplo es una consulta razonablemente compleja. Como con las condiciones simples de bsqueda, los valores NULL afectan al resultado de las condiciones compuestas de bsqueda, y los resultados son sutiles. En particular, el resultado de (NULL OR TRUE) es TRUE, [JO NULL, como se podra esperar. Las Tablas 6.1, 6.2 Y6.3 especifican tablas de verdad para AND, OR Y NOT, respectivamente, y muestran el impacto de los valores NULL. Cuando se combinan ms de dos condiciones de bsqueda con ANO, OR Y NOT, el estndar ANSI/ISO especifica que NOT tiene la precedencia ms alta, seguido de ANO, y despus OR. Para asegurar la transportabilidad, siempre es buena idea usar parntesis y eliminar cualquier posible ambigedad. El estndar SQL2 aade otra condicin lgica de bsqueda, el test IS, a la lgica proporcionada por ANO, OR Y NOT. La Figura 6.13 muestra la sintaxis del test IS, que comprueba si el valor lgico de una expresin o test de comparacin esTRUE, FALSE

o

UNKNOWN (NULL).

Hallar ,odos los representantes que estn por debajo de su cuota pero que sus ventas no estn por debajo de J50.000 .SELECT NOMBRE, CUOTA, VENTAS FROM REPRESENTANTES WHERE VENTAS < CUOTA AND NQT VENTAS < 150000.00 NOMBRENeus Azcrate

Por ejemplo, el test IS:((VENTAS - CUOTA) > 10000.00) 15 UNKNOWN

Tabla 6.2.VENTAS 186.042,00 OR'rRUE

La tabla de verdad de ORTRUE

CUOTA 300.000,00

FALSE TRUE FALSE

N11LLTRUE NULLNULL

TRUE TRUE TRUE

Al usar las palabras clave AND, OR Y NOT y parntesis para agrupar el criterio de bsqueda, sepueden construir criterios de bsqueda muy complejos, ~mo el siguiente:

P'ALSE

N11LL

NULL

1I

1241:

SOL. Manual de referencia Tabla de verdad deNQT

Captulo 6: Consultas simples

125

Tabla 6.3.NO'!'

iI

I

'rRUE FALSE

FAL5E TRUE

NULL NULL

- - - aRDER BY

I'n~mbre-de-COlumnaj

II

Lnumero-de-columna

f----...lI

Ase --1DESC~I

se puede usar para hallar filas donde la comparacin no se pueda realizar debido a que VENTAS o CUOTA tenga un valor NULL. De forma similar, el test 18:((VENTAS~

CUOTA)

>

10000.00)

I5 FALSE

seleccionar las filas donde VENTAS no estn significativamente sobre CUOTA. Como muestra este ejemplo, el test 18 no aade realmente potencia expresiva a SQL, ya que el test se podra haber escrito de manera simple:NOT ((VENTAS - CUOTA)>

Figura 6.14. Diagrama sintctico de la clusula

QRDER

BY.

Mostrar las ventas de cada oficina, ordenadas alfabticamente por regin y, dentro de cada regin, por ciudad.SELECT CIUDAD, REGlON, VENTAS FROM OFICINAS ORDER BY REGlON, CIUDAD CIUDAD REGlON VENTAS

10000.00)

Para asegurar una transportabilidad mxima, conviene evitar estos tests y escribir las expresiones usando slo AND, OR Y NOT. No siempre es posible evitar la forma 18 UNKNOWN del test.

!11

---------Almera

------Este Este Este Oeste Oeste

------------367.911,00 735.042,00 692.637,00 186.042,00 835.915.00

Ordenacin de los resultados de las consultas (clusula ORDER BY)Al igual que las filas de una tabla de la base de datos, las filas de los resultados de una consulta no se organizan de modo particular. Se puede pedir que SQLordene los resultados incluyendo la clusula ORDER BY en la instruccin SELECT. La clusula aRDER BY, mostrada en la Figura 6.14, consiste en la palabra clave DRDER BY seguida de una lista de especificaciones de orden separadas por comas. Por ejemplo, los resu:Itados de esta consulta se ordenan sobre dos columnas: REGlO