0 calificaciones0% encontró este documento útil (0 votos) 17 vistas52 páginasLenguaje SQL PDF
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido,
reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
El lenguaje SQL
Carme Martin Escofet
Formacién de PosgradoIntroduccién, 5
Objetives 10
1. Sentencias de definicién, se snes LL
11. Creacién y borrado de una base de datos relaciomal..cenne 12
1.2, Creacién de tablas 13
1.2.1. Tipos de datos 13
1.2.2. Creacién, modificactén y bortado de dominios. “
1.2.3, Definiciones por defecto 16
1.24. jones de columna, v7
1.25. jones de tabla. W
1.2.6, Modificacién y borrado de claves primarias con claves
fordneas que hacen referencia a éstas 18
1.2.7. Aserciones, 19
1.3. Modificacién y borrado de tablas 19
1.4. Creacion y borrado de vistas: 20
1. Definicién de la base de datos relacional BDUOC sn 28
2. Sentencias de manipulacion 26
2.1. Insescién de fllas en una tabla, 26
2.2. Borrado de fllas de una tabla. 27
2.3. Modificacién de filas de una tabla 27
24, Introduccién de filas en la base de datos relacional BDUOC, 28
2.5. Consultas a una base de datos relacional. 29
2.5.1, Funciones de agregracién 31
25.2, Subconsultas 32
25.3. Ottos predicados 32
254, Ordenacidn de los datos obtenidos
cen respuestas a consultas 35
2.8.8. Consultas con agrupacién de filas de una tabla 36
2.8.6. Consultas a mas de una tabla soe 8
28.7. Launién sonnnnnninnnnnnnnnn AB
28.8, La interseccion. sonennninmnnennannnnnenenenen 4
2.8.9. La diferencia . so so AS
3. Sentencias de control a sennnnnenennn A8
3.1, Las transacciones... pene
3.2, Las autorizaciones y desautorizaciones 49EISQL es el lenguaje estandar ANSI/ISO de definicién, manipulacién y control
de bases de datos relacionales. Es un lenguaje declarativo: s6lo hay que indicar
{qué se quiere hacer. En cambio, en los lenguajes procedimentales es necesario
especificar como hay que hacer cualquier accion sobre la base de datos. E1SQL.
es un lenguaje muy parecido al lenguaje natural; concretamente, se parece al
Inglés, y es muy expresivo. Por estas razones, y como lenguaje esténdar, el SQL
es un lenguaje con el que se puede acceder a todos los sistemas relacionales
comerciales
Empezamos con una breve explicacién de la forma en que el SQL ha llegado a
ser el lenguaje estindar de las bases de datos relacionales:
1) Al principio de los afi setenta, los laboratorios de investigaci6n Santa Te-
tesa de IBM empezacon a trabajar en el proyecto System R. El objetivo de este
proyecto era implementar un prototipo de SGBD relacional; por lo tanto, tam-
bign necesitaban investigar en el campo de los lenguajes de bases de datos rela
cionales. A mediados de los aos setenta, el proyecto de IBM dio como resultado
tun primer lenguaje denominade SEQUEL (Structured English Query Language), que
por razones legales se denominé més adelante SQL (Structured Query Language),
A final de la década de los setenta y al principio de la de los ochenta, una vez
finalizado el proyecto System R, IBM y otras empresas empezaron a utilizar el
SQ. en sus SGBD relacionales, con lo que este Lenguaje adquirié una gran po-
pularidad,
2) En 1982, ANSI (American National Standards Institute) encarg6 a uno de sus co-
mités (X3H2) la definicién de un lenguaje de bases de datos relacionales. Este co-
, después de evaluar diferentes lenguajes, y ante la aceptacién comercial del
SQL, eligié un lenguaje estindar que estaba basado en éste pricticamente en su
‘otalidad. El SQL se convirti6 oficialmente en el lenguaje estndar de ANSI en el
1986, y de ISO (Intemational Standards Organization) en 1987, También ha
sido adoptado como Ienguaje estindar por FIPS (Federal Information Processing
‘Standara), Unix X/Open y SAA (Systems Application Architecture) de IBM.
3) En el ato 1989, el esténdar fue objeto de una revisin y una ampliacién
que dieron lugar al lenguaje que se conoce con el nombre de SQLL 0 SQL89.
En el aflo 1992 el estandar volvié a ser revisado y ampllado considerablemente
para cubrir carencias de la versi6n anterior, Esta nueva version del SQL, que se
conoce con el nombre de SQL2 0 SQL92, es la que nosotros presentaremos en.
esta unidad didactica
Como veremos més adelante, aunque aparezca s6lo la sigla SQL, slempre nos
estaremos refiriendo al SQL.92, ya que éste tiene como subconjunto el SQL89;Bane sat
pro tanto, todo lo que era vilido en el caso del SQL89 Io continuaré siendo
end SQL92. @
De hecho, se pueden distinguir tres niveles dentro del SQL92:
1) El nivel introductorio (entry), que incluye el SQL89 y las definiciones de
Clave primaria y clave fordnea al crear una tabla,
2) EI nivel intermedio (intermediate), que, ademas del SQL89, aftade algu-
‘nas ampliaciones del SQL92.
3) El nivel completo (full), que ya tiene todas las ampliaciones del SQL92.
E] modelo relacional tiene como estructura de almacenamiento de los datos
las relaciones. La intension o esquema de una relacion consiste en el nombre
‘que hemos dado a la relacién y un conjunto de ateibutos. La extensién de una
relacién es un conjunto de tuplas. Al trabajar con SQL, esta nomenclatura
‘cambia, como podemos apreciar en la siguiente figura:
‘+ Hablaremos de tablas en lugar de relaciones.
‘+ Hablaremos de columnas en lugar de atributos.
‘+ Hablaremos de filas en lugar de tuplas,
Sin embargo, a pesar de que la nomenclatura utilizada sea diferente, los con-
‘ceptos son los mismos.
‘Con el SQL se puede definir, manipular y controlar una base de datos relacio-
nal. A continuactén veremos, aunque s6lo en un nivel introductorio, cémo se
pueden realizar estas acciones:
operate ane tc ate
anaervoce nereeo 2 Bane sat
1) Seria necesario crear una tabla que contuviese los datos de los productos de
nuestra empresa:
Nombre de la tabla
Nombre de las columnas y tipo
Clave primaria
2) Insertar un producto en la tabla creada anterlormente:
Nombre de la tabla
Valores de la fila
3) Consultar qué productos de nuestra empresa son sillas:
‘Columnas seleccionadas
Tabla
Filas seleccionadas
4) Dejar acceder a uno de nuestros vendedores a la informacién de Ta tabla
productos:
Hacer consultas Usuario
Nombre de la tabla
Y muchas més cosas que iremos viendo punto por punto en los siguientes
apartados.
Hijémonos en la estructura de todo lo que hemos hecho hasta ahora con SQL.
Las operaciones de SQL. reciben el nombre de sentencias y estin formadas porBurgas.
diferentes partes que denominamos cléusulas, tal y como podemos apreciar
cen el siguiente ejemplo:
Sentencia
Esta consulta muestra el digo, el nombre y el tipo de los productos que cues-
tan més de 1.000 euros.
Los tres primeros apartados de este médulo tratan sobre un tipo de SQL deno-
‘minado SQL interactivo, que permite acceder directamente a una base de da-
tos relacional:
4) En el primer apartado definiremos las denominadas sentencias de defini
‘ion, donde crearemos la base de datos, las tablas que la compondran y los do-
rminios, las aserciones y las vistas que queramos.
) En el segundo aprenderemos a manipular la base de datos, ya sea introdu-
ciendo, modificando o borrando valores en las filas de las tablas, o bien ha-
‘lendo consultas
©) En el tercero veremos las sentencias de control, que aseguran un buen uso
de la base de datos,
‘Sin embargo, muchas veces querremos acceder a la base de datos desde una
aplicacin hecha en un lenguaje de programacién cualquiera, que nos ofrece
‘mucha més potencia fuera del entorno de las bases de datos. Para utilizar SQL.
desde un lenguaje de programacién necesitaremos sentenclas especiales que
‘nos permitan distinguir entre las instrucciones del lenguaje de programacién
yylas sentencias de SQL. La Idea es que trabajando bésicamente con un lengua-
je de programacién anfitrion se puede cobijar SQL. como si fuese un huésped,
Por este motivo, este tipo de SQL se conoce con el nombre de SQL hospeda-
do, Para trabajar con SQL hospedado necesitamos un precompilador que se-
pare las sentencias del lenguaje de programacion de las del lenguaje de bases
de datos, Una alternativa a esta forma de trabajar son las rutinas SQL/CLI*
(SQL/Call-Level Interface), que resolviendo también el problema de acceder a
‘SQL desde un lenguaje de programacién, no necesitan precompilador.
Antes de empezar a conocer el lenguaje, es necesario afadir un Giltimo comen-
tario, Aunque SQL es el lenguaje estandar para bases de datos relacionales y ha
sido ampliamente aceptado por los sistemas relacionales comerciales, no ha
sido capaz de reflejar toda la teoria del modelo relacional establecida por P.F.
‘Codd; esta lo iremos viendo a medida que profundicemos en el lenguaje.
‘Cléusula
Céusula
Cléusula
aaaLos sistemas tlactonales comely fos ivesigadoes de bases de dats
sonuna referencia muy important para mantener el extndaracuazad. Ea
csor momento yasedspone de una nea vein de SQ]92 qu denor-
4a SQ1:1999 03013. q1:1999 tenes SQIS2 como ssbemjuno, elacorpam
tera presacones de gran interes inform, en general particular
tes en bse de dato erica ear seeped, ypor eae ay
povtante tne thio de ler pueaiones pera qe nos informe
tor mantengun al coment dea novedadesObjetivos
Una vez finalizado el estudio de los materiales didécticos de esta unidad,
dispondréis de las herramientas indispensables pai
aleanzar los siguientes
objetivos:
1. Conocer el lenguaje estindar ANSI/ISO SQL92.
2. Definir una base de datos relacional, incluyendo dominios, aserciones y
vistas
3. Saber introducir, borrar y modificar datos.
4, Ser capaz de plantear cualquier tipo de consulta ala base de datos.
5. Saber utilizar sentenclas de contol.
6. Conocer los prineipios bisicos de la utilizacién del SQL. desde un lenguaje
de programacién,1, Sentencias de definicion
Para poder trabajar con bases de datos relacionales, lo primero que tenemos
que hacer es definirlas, Veremos las érdenes del estindar SQL92 para crear y
bborrar una base de datos relacional y para insertar, borrar y modificar las dife-
rentes tablas que la componen,
En este apartado también veremos cémo se definen los dominios, las asercio-
nes (esthctone) ys vistas.
La sencilla homogeneldad del $QL92 hacen que
1) Para crear bases de datos, tablas, dominios, aserciones y vistas se utilice la
senten:
2) Para modificar tablas y dominios se utilice la sentencia ALTER
3) Para borrar bases de datos, tablas, dominios, aserciones y vistas se utilice la
sentencia DROP.
La adecuacion de estas sentencias a cada caso nos dara diferencias que iremos
perfilando al hacer la descripei6n individual de cada una,
Para ilustrar la aplicacién de las sentencias de SQL que veremos, utilizaremos
tuna base de datos de ejemplo muy sencilla de una pequefia empresa con sede
en Barcelona, Girona, Lleida y Tarragona, que se encarga de desarrollar pro-
yectos informticos, La informaciGn que nos interesard almacenar de esta em-
presa, que denominaremos BDUOC, seré la siguiente:
1) Sobre los empleados que trabajan en la empresa, querremos saber su cddigo
dde empleado, el nombre y apellido, el sueldo, el nombre y la ciudad de su de-
partamento y el ntimero de proyecto al que estén asignados.
2) Sobre los diferentes departamentos en los que esta estructurada la empresa,
nos interesa conocer su: nombre, la ciudad donde se encuentran y el teléfono,
Serd necesarlo tener en cuenta que un departamento con el mismo nombre
puede estar en ciudades diferentes, y que en una misma ciudad puede haber
departamentos con nombres diferentes.
3) Sobre los proyectos informaticas que se desarrollan, querremos saber su c=
digo, el nombre, el precio, a fecha de inicto, la fecha prevista de finalizacién,
la fecha real de finalizaci6n y el c6digo de cliente para quien se desartolla,
4) Sobre los clientes para qulen trabaja la empresa, quetremos saber el cOdigo
de cliente, el nombre, cl NIF, la dizeccién, la ciudad y el teléfono.
Vistas
‘Una vista ene mode relaco
fal noes sino una abla ial
‘evvada de stabs reales de
rata base de dates, un c=
‘quema externa puede ern
onjunte de vstasBurgas.
11. Creacién y borrado de una base de datos relacional
Fl estindar SQL92 no dispone de ninguna sentencia de creacion de bases de
datos, La Idea es que una base de datos no es mas que un conjunto de tablas,
¥ por lo tanto, las sentenclas que nos ofrece el SQL92 se concentran en la crea-
‘clon, la modificacion y el borrado de estas tablas.
En cambio, disponemos de una sentencia més potente que lade creacién de bases
‘de datos la sentencia de creacién de esquemas denominada CREATE. SCHEMA,
‘Con la creacién de esquemas podemos agrupar un conjunto de elementos de la
base de datos que son propiedad de un usuario, La sintaxis de esta sentencia es la
‘que tenéis a continuacion:
La nomenclatura utlizada en Ia sentencia es la siguiente: @
+ Las palabras en negrita son palabras eservadas del lenguaje: @)
+ La notacion |... quiere decir que Io que hay entre los corchetes se podria
poner 0 no,
+ Lanotacién (al ... [2) quiere decir que tenemos que elegir entre todas las
‘opciones que hay entre las aves, pero debemos poner una obligatorlamente.
La sentencia de ereacion de escpuemas hace que varias tablas (Ista de ele~
mmentos_del_eaquena) se puedan agrupar bajo un mismo nombre (oom
bbre_esquema) y que tengan un propietario (usuario). Aunque todos los paré
metros de la sentencia CREATE SCHEMA son opcionales, como mfnimo se debe
{dar o bien el nombre det esquema,o bien el nombre del usuario propietario dela
‘base de datos. Si s6lo especificamos el usuario, éste serd el nombre del esquema,
La ereacién de esquemas puede hacer mucho més que agrupar tablas, porque
Lista_de_elementos_del_esquema puede, ademds de tablas, ser también
dominios, vistas, privilegios y restricciones, entre otras cosas.
Para borrar una base de datos encontramos el mismo problema que para crear-
la. El estandar SQL92 solo nos ofrece la sentencia de borrado de esquemas
DROP SCHEMA, que presenta la siguiente sintaxis:
Muchos de fos stemas
felacnales comerciales
(como ocure en el caso
de Informix, B82, SQL
Server tes) han incorprado
Sentencias de crecion
‘de bases de datos con a
Siguiente sinc
‘Muchos de los sitemas
Felacnales comerciales
{omo po eiemplo Informix,
D2, SQ server y ottos)
han incorporado Sentencias
de borrado de bases de datos
‘ona siguiente sina:Bane sat
Donde tenemos lo siguiente:
+ La opci6n de borrado de esquemas RESTRICT hace que el esquema slo se
pueda borrar si no contiene ningiin elemento.
+ La opeién cascape borra el esquema aunque no esté completamente vacio.
1.2. Creacién de tablas
‘Como ya hemos visto, la estructura de almacenamiento de los datos de! mo-
elo relacional son las tablas. Para crear una tabla, ¢s necesario utilizar la sen-
tencia CREATE TABLE. Veamos su formato:
Donde definicién_colunaa es:
1 proceso que hay que seglr para crear una tabla el siguiente:
1) Lo primero que tenemos que hacer es decidir qué nombre queremos poner
‘ala tabla (nonbre_tabia).
2) Después, iremos dando el nombre de cada uno de los atributos que forma-
san las columnas de la tabla (nombre_columna).
3) A cada una de las columnas le asignaremos un tipo de datos predefinido o
bien un dominio definido por el usuario, También podremos dar definiciones
por defecto y restricciones de columna.
4) Una ver definidas las columnas,s6lo nos quedara dar la restriceiones de tabla,
1.2.1. Tipes de datos
Para cada columna tenemos que elegit entre algin dominio definido por el usua-
ro 0 alguno de los tipos de datos predefinidos que se describen a continuacion:
CHRRACTER (Longitudi ‘Cadenas de caracteres de longi
(CERRACTER VARYING (longltua) | Cadenas de caraceres de longitu variable
Fallin tona ete cssBurgas.
BIT (longieual ‘Cadenas de bis de longtud
BEE VARYING (Jongitua) “Cadena de bis de longitud variables
‘Namero dedimales con tants igtos
MONBRIC Iprecsaién, eacais) | como indigue la precon ytantas decimals
‘com indi la escala,
NUMERIC y DECIMAL se descr
ben igual, yes posble utlaar
tanto el uno como el tr para
‘etn ndmeros decimals,
‘Namero decimales con tants igtos
DECIMAL (prectaién, eacais) | como indque la precion ytantas decimales
‘com indie la scala,
TNTHGER Nameros enters
‘San ‘Nimes eneros pequeios
| Nimeras con coma flotante con preci
ree redefine
‘Name con com flotante con a preciign
FLOM (precteiée) serene
Nimes con coma flotante con ms preciin
DouELE PRECISION redefnila que Ia del tipo SEAS.
cae Fechas Gin compoestas de YEAR allo, MONT!
ce Horas. tn compuestas de ou ora, ¥INUT
minutos, SECOND segundos.
| Fechasyhoras. stn compuestas de VER ao,
minutos, SECOND segundos.
[Bjemplos de asignaciones de columnas
‘Veamos algunos ejemplos de asignacones de columns en os tipos de datos predeinidos
DATE, TIME y TINESTANE:
‘+ La columna fecha_nacimiento podtia ser del ipo DATE y pod tener como valor
1971228.
+ La columna inicio pastido podia ser dsl tipo TIME y podria tener como valor
i7as;00.000009
+ Lacolumna entzada_teabao poss serde tipo T=NESTINE y podria tener como Valor
1998-7-8 93008.
1.2.2. Creacién, modificacién y borrado de dominios
Ademas de los dominios dads por el tipo de datos predefinidos, el SQL92 nos
‘ofrece la posibilidad de trabajar con dominios definidos por el usuario.
Para crear un dominio es necesario utilizar la sentencia CREATE DOMAIN:
donde restricciones_dominio tiene el siguiente formato:
Hestindar SQL9? define
Ta Siguiente nomencatura
para trabajar con el ere:
san (2001..9999)
wows (1.12)
par 13)
our (00.23)
wasvr (00.58)
200% (0. 59,preciin)
De todos mods, Is sstemas
telaconaes comets,
‘Seponen de aferentes
formton, ene fs cules
feos elegr uando
Tenene gn rgp con
‘hanna tempor
“Aunque el SQL#2 nos oece
laseotencia CREATE DOMAIN,
hay pocos sistemas relaiona
lee comerciales que not
permtan utara,
PeeteBane sat
Ccreactén de un dominio en BDUOC
‘Si qulsérames defini un dominio paralas cudaées donde se encventan los departarnentos
ela empresa BDUOC, haramos:
De exte modo, cuando definimos a columna eLudades dentro de la tabla departamentos
nose tended que det que es de ipo cin (20}, sino de tipo don [Link] nos de
era asegurar, sein 1 modelo relacional, que slo haremes operaciones sobre la columna
‘ctudades con otras columns que tenga este mismo dominio definido por el usta sin
‘embargo, el SQL.2 no nos ores heramientas para asegutar que las comparaiones que hi-
‘cemos scan ente los mismos dominios defini por el usuario,
Por ejemplo tenemos na columna con os nombres de los empleados definka sobre el
tipode datos Guak (20), «SQL nos permite comparaia con ia coktmna ciudadee, aunque
seaménticamente no tenga sentido, En eambio, sein el modelo retacional, esta comparaion
‘nose dcberia haber permitid,
Para borrar un dominio definido por el usuarlo es preciso utilizar la senten-
‘cla DROP DOMAIN, que tiene este formato:
En este caso, tenemos que:
+ La opci6n de borrado de dominios RESTRICT hace que cl dominio sélo se
pueda borrar si no se utiliza en ningiin sitio.
La opcién CASCADE borra el dominio aunque esté referenciado, y pone el
tipo de datos del dominio alli donde se utlizaba,
Borrar un dominio de BDUOC
Si qulsiéramos bona el dominio que hemos ccado antes para las cidade donde se encuer-
‘tan los departamentos dela empresa BDUOC, hariamos
neste caso nos deberiamosasegura de que ninguna columna est definida sobre dos. Lu
{Gace antes de omar el dominio,
Para modificar un dominio seméntico es necesario utilizar la sentencia
ALTER DOMAIN, Veamos su formato:Bane sat
Donde tenemos lo siguiente:
+ accién_modificar_dominio puede ser:
+ accién modif_ri
Modificar un dominio en BDUOC
Si quisiéamos aad una nueva ciudad (Matar) al dominio que hemos creado antes para
Jas udades donde se encuentran los departaments dea empresa BDUOC, hariamos
{comes hemos elimina a restsicin de dominio angus Y ahora tenemos guint
1.2.3. Definiciones por defecto
‘Ya hemos visto en otros médulos la importancia de los valores nulos y su inevi-
table aparicién como valores de las bases de datos.
La opcién def_defecto nos permite especificar qué nomenclatura queremos
dar a nuestros valores por omisi6n,
Por ejemplo, para un empleado que todavia no se ha decidido cuanto ganaré,
‘podemos clegir que, de momento, tenga un sueldo de 0 euros (DE2AULT 0.0),
‘o bien que tenga un sueldo con un valor nulo (DEFAULT NULL),
Sin embargo, hay que tener en cuenta que si elegimos la opcién DarAcLT
‘Wott, la columna para la que daremos la definicion por defecto de valor nulo
deberia admitir valores nulos,
La opcion Deravis tiene el siguiente formato:Burgas.
La postbilidad més utilizada y la opci6n por defecto, sino especificamos nada,
¢ la palabra reservada woz, Sin embargo, también podemos defini nuestro
propio literal, o bien recurtir a una de las funciones que aparecen en la tabla
siguiente:
(usealcueemr_vser) |dentiteador del usuario actual
“sussrox_usae = Identifcador del usuario de esta sesion
“sysrexcsea | Identifcador del usuario del sistema operativo
CcummenrpareSS*[Fechaactual
‘coma TIE Hora actual
‘CORIENT_TIMESTAME Fecha y hora actuals
1.2.4, Restricciones de columna,
En cada una de las columnas de la tabla, una vez. les hemos dado un nombre y
‘hemos definido su dominio, podemos imponer clertas restricciones que siem-
pre se tendrn que cumplir. Las restricetones que se pueden dar son las que apa-
recen en la tabla que tenemos a continuaci6n:
NOP NULL La columa no puede fener valores nuos.
[a columna no puede tener valores repetidos. una clave
wae siterata,
vauwane ee La columna no puede tener valores epetidos ni nus.
Ela clave praia.
tabla ((eotuns)
‘CHECK (condiciones) | Lacolumna debe camplrlas condiciones especicadas
1.2.8. Restricciones de tabla
Una ver hemos dado un nombre, hemos definido una tabla y hemos impuesto
ciertasrestricciones para cada una de las columnas, podemos aplicar restriccio-
nes sobre toda la tabla, que siempre se deberdn cumplir. Las restricciones que
se pueden dar son las siguientes:
conjunto de as clumnasespciicadas no
puede tener valores repetides Es una clave
Stematva
wrgu,
feolusna (, colusa...))ervoce nereeo 1s Bane sat
pRINARY KEY £conjunto de las clurmnasespecicadae
fe puede tener valores los nivepetides.
(eolumna [, colunpa...}) Edna clave pearls pe
| El conjunto de las columnas especificadas es
ronnie xy luna dave fordnea que referencia clave
fcotuana (, columa. 1) rimatafomada por el conjunto de ls
olumnas2 dela tabla dada tla alumna
[RRPESENCES tabla Yas columnas2 se denominan exactamente
(eolusna? {, sotwmns2...1)] gual, enconces na sett necsao poner
cohumngs2
{a tabla debe cumplilas condiciones
(CHECK (condiciones) cipeciiads.
1.2.6. Modificacién y borrado de claves primarias con claves
fordneas que hacen referencia a éstas
Tansee aay
En otra unidad de este curso hemos visto tes politicas aplicables a los casos de
Eveertca ,
bortado y modificacion de filas que tienen una clave primariareferenciada por | Euler niiace:
claves fordneas. Estas politicas eran la restricci6n, la actualizacion en cascada aheaaio
ylaanulacién.
FLSQL nos ofrece la posibilidad de especificar, al definir una clave fordnea, qué
politica queremos seguir, Veamos su formato:
Donde una de las restricciones de tabla era la definicion de claves forineas,
{que tiene el siguiente formato:
Donde No ACTION corresponde a la politica de resticelon; CASCADE, a la actua-
lizacion en cascada, y S27 NULL seria a anulaci6n. Ser DEEAULIT se podria con-
siderar una variante de s#7 Nut, dondeen lugar de valores nulos se puede poner
el valor especificado por defecto.Bane sat
1.2.7. Aserciones
‘Una asercién es una restriceién general que hace referencia a una o més co-
Jumnas de mas de una tabla, Para definir una asercién se utiliza la sentencia
CREATE ASSERTION, y tiene cl siguiente formato:
crear una asercién en BDUOC
‘Creamos una aserciin sobre la base de datos BDUOC que nos asegute que no bay nlngtin
‘empleado con un sueldo super a 80.000 asignado al proyecto SALSA
Para borrar una asercién es necesario utilizar la sentencia DROP ASSERTION,
‘que presenta este formato:
Borrar una asercién en BDUOC
Por ejemplo, para borrr ia asecién [Link], utiariamos la sentencta cao
ASSERT dela forma siguiente:
1.3. Modificacién y borrado de tablas
Para modificar una tabla es preciso utilizar la sentencia ALTER TABLE. Vea-
-mos su formato:Bane sat
En este caso, tenemos que:
+ accién modificar_columna puede ser:
+ accién moaif_ri
triceién_ tabla puede ser
Siqueremos modificar una tabla es que quetemos realizar una de as siguientes
operaciones:
1) Aftadirle una columna (apo colunna).
2) Modificar las definiciones por defecto de la columna (ALTER columna).
3) Borrar la columna (OR0P columna).
4) Aftadir alguna nueva restriccion de tabla (ADD restrict én).
5) Borrar alguna restricci6n de tabla (DROPCONSTRATNT restriccién).
Para borrar una tabla es preciso utilizar la sentencla DROP. TABLE:
En este caso tenemos que:
Si utilizamos la opci6n RESTRICT, la tabla no se borraré si esté referencia-
da, por ejemplo, por alguna vista,
Si usamos la opci6n cascang, todo lo que referencie a la tabla se borrara
con ésta,
1.4. Creacién y borrado de vistas
‘Como hemos observado, la arquitectura ANSY/SPARC distingue tres niveles, que
se describen en el esquema conceptual, el esquema interno y los esquemas ex-
‘temos, Hasta ahora, mientras credbamos las tablas de la base de datos, hamosBane sat
deseribiendo el esquema conceptual, Para describir los diferentes esquemas ex
‘texos utllizamos el concepto de vista del SQL.
Para crear una vista es necesatlo utilizar la sentencla CREATE VIEW, Veamos
su formato:
Lo primero que tenemos que hacer para crear una vista es decidir qué nombre
le queremos poner (nombre_vista). SI queremos cambiar el nombre de las,
‘columnas, o bien poner nombre a alguna que en principio no tenfa, lo pode-
‘mos haceren Lista_colunnas. ¥ ya silo nos queda definir la consulta que
Formati nuestra vista.
Las vistas no existen realmente como un conjunto de valores almacenados
nla base de datos, sino que son tablas flctcas,denominadas deriva (no
‘materlalizdas. Se construyen a parts de tabla reales (materialzadasalma-
enadas en la base de datos, conocidas con el nombve de tabla biscas
tablas de bas) La no-exisencia real de as vistas hace que puedan set actua-
ables ono. Q
CCreactom de una vista en BDUOC
‘Creams una vista sobre a hase de datos BDUOC que nos dé para cada cent el timer de
proyectos que tiene encargados el cents en cuestion
‘i tuviésemos las siguientes extensones:
+ Tabla e1sente
10 ecicsa | 38.567.893¢ | aragén 71 | Baritone | NULL
20 cme | 3823.896 | Valencia 22 | Girona | 972.2357.
30 ‘acme | 36432.127- | Mallorca 33 | Ueida | 973.2348.67
1 cescom | 1,066 | 1.1.98 199
NULL
2 esc 2066 | 1.1096 w3.98
1598Bane sat
filas,
obs | 10298 1-299)
4 Tine | 4066 | 187 1299 ‘NULL 30
YY midsemos la extensin dela vista provectos_por_eitentes, veriamos lo que encor-
‘tama en el marge.
En las vistas, ademas de hacer consultas, podemos insertar, modificar y borrar
10 2
Actualizacién de vistas en BDUOC 20 1
Slalguen inseraseen vista proyectos_por_cl ante, losvalors para un nuevo lente
{60 con tes proyectos encargados,encontiariamos que esos ics proyectos tendran que f+
guru realmente en la bla proyeetoe y, por lo tanto, el SGBD los deberia nsetar con la
Informacion que tenemos, que es prilicamente inexstente. Veamosgrilicamente emo
‘quedacan ls tabla despots de esa hipotticaactualzacion, que no legaremos hacer nur-
a, Ya que ra en conta de la tora del modelo rlaconal
+ Taba clientes
ECIGSA 38,567.93 | Angin II | Bareona
2 eMe 381238988 | Vatenea22 | Gone | 972235721
» ‘ACME 36482.127-A | Malorea 33 | Usida | 9732345.67
ra NUL NUL nun) Nu | NUL
+ Tabla proyectos:
‘GESCOM, 1-198 1199 ‘NULL
2 esc Zor | 11096 31398 1598 10
3 Sasa | os | 10-208 1299 ‘NULL 20
NULL NULL Nou NULL NUL ‘NULL o
‘NULL NULL NOW NULL Nu ‘NULL oo
‘NULL uu NOW NULL Nu ‘NULL o
1 SGBD no puede actulizar la tabla bisca clientes s slo sabe la clave peimarl, y
‘todavia menos la tabla bisica proyectos sn la clave primana; por lo tanto, esta sta no
seria acualirable,
"En cambio, definimos una vista par saber los lentes que tenemos en Barcelona o en GE
ona, haamoservoce nereeo 2 Bane sat
Siqueremosasegurames de quese cumpla a condicin dela cléusula wise, debemos poner
Jopein wT CuzCK O27T0N Sino lo icésemes, podria acum que alguien incluyese
fenlavista¢1 ences Barce! ona_¢!rona aun chente nuewo con el eSdigo 70, de nombre
‘MB, con el NF 26.784 224, la dicen en NULL, la cadad Leia yl telefono NULL,
‘i conslisemos a extensin dela vista el Son
s_Rarcelona_cirona, vemos
10 ecicsa | 38.567.893-¢ | aragén 11 | Barcelona | NULL
20 ‘cme | 38.128.898+ | Valencia 22 | Girona | 972.235721
sta isa sf pda sr actulirabe, Podslamos insertar un nuevo dente on ego 50, de
‘nombre CEA, con el NF 38,26, 777-D, eon a dieccon Pais 4, a dad Barcelona y el te
Jélono 93,422.60.77, Después de esta aetualizacin, en ia tabla bsica ci Lentes encont=
siamos, letivamente:
10 EcicsA | 38.567.893-¢ | Aragon 11 | Barcelona | NULL
20 ‘ee | 38:123.8988 | Valencia 22 | Girona | 972235721
30 ewe | 35437.127-0)| Mallorca 33) Ueda | [Link]
30 CEA | 38.226777-0) Pars, 44 | Barcelona | [Link]
Para borrar una vista es preciso ulilizar la sentencia DROP VIEW, que presenta
1 formato:
Si utilizamos la opeidn RESTRICT, la vista no se borrard si esté referenciada,
por cjemplo, por otra vista, En cambio, si ponemos la opcién cascapE, todo
lo que referencie ala vista se borrara con ésta.
Borrar una vista en BDUOC
Pana borrr la vista ©1entoe_Barcolona_cirona, hrfamos lo sigulente:
1.8. Definicién de la base de datos relacional BDUGC
‘Veamos como se crearia la base de datos BDUOC, utilizando, por ejemplo, un
SGBD relacional que disponga de Ta sentencia CREATE DATABASE:
‘Antes de cearuna tabla con
tina om claves foraneas,
ddeben haber creado ls
{ablas que tenen come clave
primar as eerencadas
por ls fordneaservoce nereeo 2 Bane sat‘Al czear una tabla vemos que muchas restriciones se pueden imponer de dos
formas: como restricciones de columna o como restricciones de tabla. Por ejem=
plo, cuando queremos decir cuales la clave primaria de una tabla, tenemos las
dos posibilidades. Esto se debe a la flexibilidad del SQL:
+ Enel caso de que la restricci6n haga referencia a un solo atributo, podemos
clegir la posibilidad que mas nos guste
+ Enel caso de la tabla departanentos, tenemos que elegit por fuerza la op-
lon de restricciones de tabla, porque la clave primaria esta compuesta por
mis de un atribute.
En general, lo pondremos todo como restricciones de tabla, excepto NOT NULL
yy CHECK cuando haga referencia a una sola columna,Bane sat
2, Sentencias de manipulacién
‘Una ver creada la base de datos con sus tablas, debemos poder insertar, modi-
ficar y borrar los valores de las filas de las tablas. Para poder hacer esto, el
'$QL02 nos ofrece as siguientes sentencias: INSERT para insertar, UPDATE para
‘modificar y DELETE para borrar. Una vez hemos insertado valores en nuestras
tablas, tenemos que poder consultarlos. La sentencia para hacer consulta a
‘una base de datos con el SQL92 es SELECT FROM. Veamos a continuactén estas
sentencias.
2.1. Insercién de filas en una tabla
[Antes de poder consultar los datos de una base de datos, es preciso Introdu-
‘itlos con la sentencla INSER TINTO VALUES, que tiene el formato:
Los valores v2, v2, .., vn se deben corresponder exactamente con las colum-
‘nas que hemos dicho que tendslamos con el CREATE TABLE y deben estar en
el mismo orden, a menos que las volvamos a poner a continuacién del nom-
bre de la tabla, En este tiltimo caso, los valores se deben disponer de forma co
herente con el nuevo orden que hemos impuesto. Podsfa darse el caso de que
4quisiéramos que algunos valores para insertar fuesen Valores por omision, de-
{finidos previamente con la opcién DEFAULT, Entonces pondriamos la palabra
reservada DEFAULT, Si se trata de introducit valores nulos, también podemos
utilizar la palabra reservada NULL,
Insercién de uns fila en BDUOC
1 forma de insetar aun cient en la tabla o1 Senter de la base de datos de BDUOC es:
Par insertar mas de une la
‘con una sla sentencia,
{enemas que obtener os
Valores come resutado de
Una cons eaizada en una
‘omas tabla.ervoce nereeo 2 Bane sat
2.2, Borrado de filas de una tabla
Pata borrar valores de algunas filas de una tabla podemos utilizar la senten-
cla DELETE FROM WHERE. Su formato es el sigulente:
En cambio, si lo que quisiéramos conseguir ¢s borrar todas las filas de una
tabla, entonces s6lo tendriamos que poner la sentencia DELETE FROM, sin
WHERE,
orrar todas las filas de una tabla en BDUOC
Podemos delarla tabla proyectos sin ninguna fla
En nuestra base de datos, bona los proyectos dl cliente 2 se aria de a forma que most
‘mos acontinuaciin:
Notemos que el ent con
‘el cédig 2 poata tener mas
‘deun proyecto cortratado
Y, pot lo tanto, se borara
Ii de una fla con una sola
Seatenci
2.3. Modificacién de filas de una tabla
‘Si quisiéramos modificar los valores de algunas filas de una tabla, tendriamos
‘que utilizar la sentencla UPDATE SET WHERE, A continuacién presentamos su
NNotemos que el proyecto
mero poor tener
imu de un cmpeede
‘sade por tan,
{2 nachna column
Bustao, demds dena le
Comune sla omenervoce nereeo 28 Burgas.
2.4. Intreduccién de filas en la base de dates relacional BDUOC
‘Antes de empevar a hacer consulta a la base de datos BDUOC, habremos intro-
‘ducido unas cuantas filas en sus tablas con la sentencia INSERT INTO, De esta
forma, podremos ver reflejado el resultado de las consultas que iremos hacien-
do, a partir de este momento, sobre cada extensién; esto lo podemos observar
cen las lablas correspondientes a cada extensi6n, que presentamos a continua
ion:
+ Tabla departamentos:
IR Barcelona | [Link]
ik ‘Girona | [Link]
Dis Ueda | 97323.50.40
Dis Barcelona | [Link]
PROG Tavragona_| 977.33.3852
PROG Girona | 972255091
+ Tabla clientes:
10 Feiss | 38.567.893-¢ Angin 11 | Barcelona | NULL
2 EME | 38.123.898 Valencia22 | Girona 972.2857.21
30 ACME | 36492127. Mallrcas2 | Ueda | [Link]
40 Jom | 38,782.345-8 Rosen 44 | Tarragona | 97.33.7143,
+ Tabla enpieados:
7 Maria Puig WOES DR “Girona 1
2 Pedro Mas 9.064 bk Barcelona 4
3 ana os Toe is sida 3
4 Jorge Roca Tota is Barcelona 4
5 ‘lara Blane ‘oa | PROG Tarragona 1
6 laura Tort soca | PROG Tarragona 3
7 Rogelio salt 40e@ [NUL ire 4
8 segio cau soca | PROG Tarragona NULLBane sat
+ Tabla proyectos!
‘atscom 1-198 1-19
2 rise 2aes | 11096 313.98 +598 v0
3 SALSA woes | 10.288 1289 NUL 20
4 tat) aoe | 197 1299 NULL 30
2.8. Consultas a una base de datos relacional
‘Para hacer consultas sobre una tabla con el SQL es preciso utilizar la sentencla
SELECT FROM, que tiene el sigulente formato:
La opei6n as nos permite renombrar las columnas que queremos seleccionar 0
las tablas que queremos consultar que en este caso, es silo una. Dicho de otro
‘modo, nos permite la definici6n de alias. Fijémonos en que la palabra clave AS.
es opcional, y ¢s bastante habitual poner s6lo un espacio en blanco en lugar de
toda la palabra,
Consultas a BDUOC.
-Acontinuacin presentamos un ejemplo de consulta a bas de datos BDUOC para conoeet
{todos ios datos que aparece en la tabla chiens
1a respuesta esta consulta seria:
Eciasa | 3867.893-¢ Aragén 11 | Barcelona
20 cme | 38:125.898:6 Valencia 22 | Girona | 972.235721
a0 ‘acme | 26422.127-A. Mallrea 33 | Ueiga | [Link]
0 Jom] [Link] Rosen 44 | Taragona | [Link],‘Si hubiésemos querido ver sé e igo, el nombre la dreccin y la eludad,habriamas
hnechor
"Yhabrlamos obtenido la respuesta siguiente:
10 ECIGSA | Aragn 17 [Barcelona
20 CME | Valencia 22 | Girona
30 acme | Mallorca 33 | Ucida
40 JOM | Rosellin 44 | Taragona
Con la sentencia seuzct Feo podemos selecclonar columnas de una tabla,
‘pero para seleccionar filas de una tabla es preciso afadirle la cléusula wens. El
Formato es:
La cléusula wiieRE nos permite obtener las filas que cumplen la condici6n es-
pecificada en la consulta,
Consultas a BDUOC seleccionando filas
‘Vearnos un ejemplo en el que pedimos “ls efiigos dels empleas que tan ene ro-
yecto nimero 4"
‘La respuesta a eta consulta seri aque pods ver en el marge.
Para definir las condiciones en ta cldusula vate, podemos utilizar alguno de
los operadores de los que dspone el SQL, que son los siguientes: QD
aa la negacién de condiciones
Paral conjunc de condiciones
aaa diyuncin de condiciones
Si queremos que en una consulta nos aparezcan las filas resultantes sin repeti-
iones, es preciso poner la palabra clave DISTINCT inmediatamente desputs
Bane satBane sat
de Senzc7. También podriamos explicitar que lo queremos todo, incluso con.
repeticiones, poniendo ax, (opci6n por defecto) en lugar de D2STINCT. El for-
‘mato de DrsTiNe? es:
Consulta a RDUOC seleccionande filas sin repeticiones
orejemplo, s quséramos ver qu sueldes se estn pagan en nucstia empresa, podsamos
hacer
La respuesta a eta consulta, sin repetciones, seria a que aparece en el margen.
2.8.1. Funciones de agregracion
£1 SQL nos ofrece las siguientes funciones de agregacién para efectuar varias
‘operaciones sobre los datos de una base de datos:
cour [Not a el namero (otal de lbs selecionadas
“Sim | Sumalos valores de una columna
van [Nos a el valor minimo de una columna
“yx | Nosda el valor maximo de una columna
“GvG | Galeula el valor medio de una columna
En general, las funciones de agregacién se aplican a una columna, excepto la
funcién de agregacién cox, que normalmente se aplica a todas las colummas
de la tabla 6 tablas seleceionadas. Por lo tanto, CouNT (7) contard todas la Milas
dela tabla o las tablas que cumplan las condiciones, Si se utilizase COUNT (ai e~
tinct colunna), s6lo contaria Ios valores que no fuesen nulos ni repetidos, y
si se utilizase cour? (columna) , sélo contaria los valores que no fuesen nulos.
‘Hjemplo de utitizacion de la function comer ()
‘Veamos un clemplo de uso de la funcién cour, que aparece ela eiusula S2L=CT, para
Jnacer la consulta ";Cuintos departamentos estan ubicadosenlacudad de Lida?!
1a respuesta a esta consulta sri la que aparece sefljada en a tabla que encontaris en el
smargen.
3064
4084
7064
ory
108servoce nereeo 3 Bane sat
Veremos ejemplos de las demés funclones de agregacion en Ios sigulentes
parades.
2.8.2. Subconsultas
Subconsulta en BDUOC
Si quiséramos saber los gos y los nombres de los proyectos de precio mis evade,
fen primer lugar tendriamos que encontrar los proyectos que tienen el precio mis ee-
vvado, Lo hariamos dela forms siguiente:
TINELL
Sen lugar de lo cSdigos
{los nombres de proyectos
‘depreca as altohubisemos
‘gutrdo saber fs de precio
Inds baj, habriamosapicado
lafuncln de aregacion oi
ET resltado de a consulta anterior seria lo que puede verse al margen,
2.8.3. Otros predicados
1) Predicado BErwe=N
Para expresar una condicin que quiere encontrar un valor entre unos limites
concretos, podemos utilizar BETWEEN:
Ejemplo de uso del predicade serves
‘Unjemplo en el ques pide"Los cig de los empleados que ganan entre 20,000,y 0.000
euros anual” sel1a respuesta a esa consulta seria la que se ve en el margen.
2) Predicado m1
Para comprobar si un valor coincide con Ios elementos de una lista utiizare-
_mos IN, y para ver sino coincide, Nor 1
[Bjemplo de uso del predicado IN
“Queremes sber el nombre de todos los departamentos que se encuentran en las cudades
de leds o Taragoma"s
1a respuesta seria Ja que aparece en el margen.
3) Predicado L2KE
Para comprobar si una columna de tipo caricter cumple alguna propiedad de-
‘terminada, podemos usar 1x2:
Los patrones del SQL92 para expresar caracteristicas son los siguientes:
4a) Pondremos un caracter _ para cada caricter individual que queramos con-
siderar,
b) Pondremos un cardcter 9% para expresar una secuencia de caracteres, que
puede no estar formada por ninguno.
[jemplo de uso del predicado ixx=
-Acontinuacidn presentamos un ejemplo en el que buscaremos los nombres de los emples-
{os que empieran por), y ott ejemplo en el que obtendremos los proyectos que comienzan
por y tener cinco lta:
8) Nombres de empleados que emplezan por a etc
1a respuesta a eta consulta seria la que se muestra en el margen,
Bane sat
é
7
@
‘Aunque _y %6 son os
‘arnctera slegidos por
‘lestindar, cada sera
Felacional Comercial rece
versa variants.
‘Aunque la consulta pide slo
Toenombres de empleados
afadimos el céaigo para poder
“dferencar dos empleadee
on el mame nombre.ervoce nereeo ot Bane sat
Proyectos que empiezan por Sy tenen cinco letras:
‘Yla respuesta a esta ora consulta sta Ia que parece en el margen.
4) Predicado 18 Nuun
Para comprobar si un valor ¢s nulo utilizaremos 1S NULL, y para averiguar SL
no oes, TS NOT MULL. El formato es:
_Ejemplo de uso del predicado 18 wou,
‘Um efemplo de uso de este predicado sera “Queremos saber el ciigoy el nombre de todos
Jos empleados ue no estén asignads a ningin proyecto"=
sergio
‘Obiendsiamos I espuesta que tenemos margen.
5) Predicados axy/some y ALL
Para ver si una columna cumple que todas sus flas (ALL) o algunas de sus fas
(ow/sos) satisfagan una condiciOn, podemos hacer:
Podemoselegir cualquiera
‘de los das predicados para
pedir que alguna fia sata
tin condicign
_Bjemplo de uso de les predicados ALL y ANY/ SOME
1) Veamos un ejemplo de aplcacn de para encontvat los cos Tos nombres de os
proyectos en los que los sueldos de todos os empleadesasignados son menores que el precio
el proyecto:Bane sat
La respuesta esta consulta es vaci, como se ve en el margen.
6) Predicado exrsts
Para comprobar si una subconsulta produce alguna fila de resultados, pode-
‘mos utilizar Ta sentencia denominada test de existencia: Ex187S, Para compro-
bar si una subconsulta no produce ninguna fila de resultados, podemos
utilizar Wor EXISTS,
[Rjemplo de uso del predicado xxxst3
‘Un efemplo en el que se buscan Ios cigs y los nombres de los empleados que estén ase
rnados a agin proyecto seria:
‘La respuesta a eta consulta seria aque se muestra en el margen.
2.5.4. Ordenacién de los datos obtenidos en respuestas a consultas
Si se desea que, al hacer una consulta, los datos aparezcan en un orden deter
-minado, ¢s preciso utilizar la cldusula ORDER BY en la sentencia SELECT, que
presenta el siguiente formato:
1 ‘GESCOM,
2 [Pesce
3 SALSA
4 NEL
4 forse
5 lara
6 au
7 ogelleBane sat
Consulta « BDUOC con respuesta ordenada
Imaginemos que queremos consulta los nombres dels empleados ondenados sen el sus
{doque ganan, ys ganan el mismo suelo, ondenados alabéticamente por el nombre
sta consulta dala a respuesta siguente
6 laura “ot 0b
3 ‘Sergio cau 3064
5 ea Blane ob
7 Rogelio sat ‘4b
3 a Ror 7.064
4 Jorge foe 7,064
2 Pedro Mas 9,064
7 Mare Puig Tabs
Sino se especifica nada mas, se seguiré un orden ascendente, pero si se desea
seguir un orden descendente es necesatio aftadir Desc detrés de cada factor de
‘ordenacion expresado en la cliusula ORDER BY:
‘También se puede explicitar un orden ascendente poniendo la palabra clave
Asc (opclén por defecto).
2.5.8. Consultas con agrupacion de filas de una tabla
Las clausulas siguientes, afiadidas a la instrucci6n SzLECT FROM, permiten or-
‘ganizar las filas por grupos:
4) La clusula Grove BY nos sirve para agruparfilas segén las columnas que
indique esta clausula,ervoce nereeo 7 Bane sat
b) La clausula HAvzNG especifica condiciones de busqueda para grupos de
filas; leva a cabo la misma funcién que antes cumplia la cléusula WHERE para
las filas de toda Ta tabla, pero ahora las condiciones se aplican a los grupos
obtenidos.
Presenta el siguiente formato:
Notemos que en ls sentencias SQ. se van aftadiendo clusulas a medida que
1a ifcltad ola exigencia de a conslta fo requiere.
Consulta con agrupacion de filas en BDUOC
Imaginemos que queremos saber el sueldo medio que ganan los empleados de cada de-
drapes os factores de agrupaciin
‘dels cous onout by
‘eden er, como minim,
inscolamnas que iguan
fen stacy, eacepando
Its caras acd por
fincone de agregscon
na eomems
(=e | eee [mae
DIR [Girone 0S
bis [ede 7,0
‘Hjemplo de use dela function de agregacién 50%
‘Veamos un ejemplo de wso de una funcin de agregacion su del SQL que aparece ena cite
sul envaNe dou By: "Queremos sabe os egos de los prayectos en ls que a suma
eos sueldos de fos empleades es mayor que 180.000 euros":
neste gjemplono es necesaio
poner OusTINC%, a pesr de
‘ucla cokmma num sroyec
over abuto dent feador
Fjgmonos en que en fa tabla
fenpleados hens puesto
‘Que todosios proyectos tienen
el mismo cédiga juntos en un
mama grupo y noes posble
‘gue aparezcanrepetides
HT resultado de esta consulta sera el que se ve al margeBane sat
2.5.6. Consultas a més de una tabla
“Muchas veces queremos consultar datos de més de una tabla haciendo combl-
rnaciones de columnas de tablas diferentes. En el SQI. es posible listar mas de
‘una tabla que se quiere consultar especificandolo en la clausula FROM.
1) Combinacién,
La combinacién consigue crear una sola tabla a partir de las tablas especifica-
das en Ia cldusula £RoM, haciendo coincidir los valores de las columnas rela
‘cionadas de estas tablas.
[Bjemplo de combinacién en BDUOC
A continuacién mostramos un elemplo con la base de datos BDUOC en el que queremes s-
ber el NIF del cientey el cigo ye precio del proyecto que desarllames para et lente
seer 204
1 resltad sri
1086 38.123.898£
‘Si trabajamos con més de una tabla, puede ocurrir que la tabla resultante tenga
dos columnas con el mismo nombre. Por ello es obligatorlo especificar a qué
tabla corresponden las columnas a las que nos estamos refiriendo, denomi-
nando la tabla a Ja que pertenecen antes de ponerlas (por ejemplo, clien-
‘tes codigo_cl1). Para simplificarlo, se utilizan los alias que, en este caso, se
definen en la clausula eROM,
Ejemplo de allas en BDUOC
‘podria sere alias dela taba et Lentes, De ese modo, pata indicara qué tabla pertenece
‘coigo_cli, slo hacia falta poner c.codtigo_els.
‘Veamos cémo quedaria la consulta anterior expresada mediante alas, aunque en este lem
plo no seian necsares, porque todas ls columas dels dos abla tienen nombres dif
tenes, Pediremos, dems, as columnas ©.caduge el: ¥[Link] cxsente!
-Entoncesobtendramor este resultado:
| taks6 38173 8988 2
eli tone eteervoce nereeo ae Bane sat
‘Notemas queen Wt necestamos expres el vinculo que se establece entre las dos tabla,
neste caso codigo _c1‘ deel tents y codtgo_cl Lente de proyectos. Expres en
‘operaciones dt debra reliciona, esto sgifia que hacemos una combinactin en lugar de
‘un product cartesian,
[Bjémonos en que a gual queen algebra relacional la operain que acabamos de hacer es
‘una equicombinacin (yin; orl tanto, nos aprecen dos columnasilénticas:¢.co-
aigo_ol+ yp.codian_eliente,
La forma de expresar la combinacién que acabamos de ver pertenece al SQL92
introductorio, Una forma alternativa de realizar la equicombinacién anterior,
utilizando el SQL92 intermedio o completo, seria la siguiente:
‘Bjemplo anterior con el SQL92 intermedio o completo
El jemplo que hemos expueso antes utlizando el SQL? intermedio o completo srs
"¥obtendriamos el mismo resultado de antes,
La opci6n on, ademas de expresar condiciones con la igualdad, en el caso de
‘que las columnas que queramos vincular tengan nombres diferentes, nos ofte-
«ce la posibilidad de expresar condiciones con los demas operadores de compa-
raclon que no sean el de igualdad, Seria el equivalente a la operacién que en
‘Algebra relacional hemos denominado O-combinacién (0-join).
‘También podemos utilizar una misma tabla dos veces con alias diferentes,
para distinguirlas,
‘Dos alias para una misma tabla en BDUOC
Si pidiéseros os cgos Ios apelids de los empleados que ganan ms que el empleado
{ue tiene por cigo el admero 5, halamos lo siguente:
ems toma la abla 2 para fir ala del emplead con edo mmero 5, de mode que
;odamos comparare suelo dela tabla o1, que contenea todos losempleados, cone sue
do dela tabla e2, que contiene ssloalempeado 5Bane sat
1arespucstaa esta consulta seria:
1 Puig
2 Mas
3 Ror
4 foc
2) Combinacién natural
La combinacin natural (natural join) de dos tablas consiste bésicamente, al
‘igual que en el dlgebra relacional, en hacer una equicombinaci6n entre colum-
ras del mismo nombre y climinar las columnas repetidas. La combinacion na-
‘tural, utlizando el SQL92 intermedio o completo, se haria de la forma siguiente:
Combinacién natural en BDUOC
‘Veamos a continuacén un ejemplo en el que ls columns para ls que sharia la combina-
‘ln natural se denominan gualen las dos tablas. Ahora queremos saber el cSigo ye nom
bre de los empleades que estan asignacos al departamentocayo telefono os 977 33.38.52:
1a combinacin natural tambn se podeia hacer con a cldusula 0816, solo aplcando a pat
Jabra reservada Jn
1a respuesta que dasa sera
é bra
3) Combinacién interna y externa
(Cualquier combinaci6n puede ser interna o externa:
4) La combinaci6n interna (inner jon) solo se queda con las filas que tienen
valores idénticos en las columnas de la tablas que compara. Esto puede hacer
‘que perdamos alguna fila interesante de alguna de las dos tablas; por ejemplo,ervoce nereeo “ Bane sat
porque se encuentra a NULL en el momento de hacer la combinacién. Su for-
mato es el siguiente:
b) Por ello disponemos de la combinacién externa (outer join), que nos per-
nite obtener todos los valores de la tabla que hemos puesto a la derecha, los
de la tabla que hemos puesto a la izquierda o todos los valores de las dos tablas.
Su formato es:
Combinacién natural interna en BDUOC
Si quislramos vincular con una combinaciin natural interna las ablas enpeadoe y
Gepartamentoe para saber el cédigo y el nombre de todos los empleados y el nombre,
Ja cudae y l telefono de todo los departamentos,hariamos
‘Aungue ene ejemplo estamos
haciendo una combinacon
raturalinterna, noes necesario|
poner la palabra Tai, ya
[gut es pion por defect.
Y obtendriamos el siguiente resultado:
1 Mara bik Girona | [Link]
2 Pedro DR Barcelona | [Link]
3 aoe is sida | [Link]
* Iorge Dis Barcelona | [Link],
5 Gara PROG Tarragona | 977333852
é awe PROG Tarragona | 977333852
8 ‘Sergio PROG Tarragona | 977.33.3852
[rjémonos en que en el resultado no aparece el empleado nimero 7, que no est asignado a
ningin departamento, nl el departamento de programacion de Gita, que no tene ning
empleado asgnado.
Combinacién natural externa 4 BDUOC
“Enos elemplos sguientes veremos cbmo varin los resultados que iremos obtenlendo sein
Jos upos de combinacin externa:ervoce nereeo 2 Bane sat
4) Combinacin extema agulera
1 esltado seri el que poems vera continua:
1 Mara Om Girona [Link],
2 Pero OR Tarslona 93,422,600
3 DB Use 973235040
4 Jorge DB Barca 93.22485.25,
5 cea FROG Taragona 977333852
6 aur FROG Taragona 977333852
‘Combinaclén externa
7 Rogelio Nu Nu Nu Uequlerda
8 Sergio Faoc TTaragona 977383852 | Aqui figura el empleado 7.
>) Combinaciénextema derecha
|
1 Matta oR Gora | [Link]
2 Pedro on Barcelona | 93.472.6070
3 ne Is sida | 973235040
4 forge bis Barcelona | 93.2248523
5 ‘cara PROG Tarragona | 977.333852
6 taua PROG Tarragona | 977.333852
8 Sergio PROG Tarragona | 977-333852
uu NLL PROG Grona | 972235091
“Combinacln externa
‘derecha
“Aqui Fgura ol departamento
de programacion de Girona.
a
‘le
1 Marta oR Girona | [Link]
2 Pedro oR Barcelona | 93.422.6070
3 ana Is sida | 973735040ereoce nemo ° eget
_sesstie.son | nome sont [esemre dp [ scttns op | atnatoe
‘ = sacra | 932048529
Fi Coe voc | Taragna [977383852
5 i roc | Taragna | 977383852
7 — Nu an nr | Eemeinnio terme
7 Tage a ee
cr tL moc | Goma fovaasoon | NSRP,
4) Combinaciones con més de dos tablas
‘Si queremos combinar tres tablas o mas con el SQL92 introductorio, sélo te-
snemos que aftadir todas las tablas en el #RoM y los vinculos necesarios en el
‘WHERE, Si queremos comblnatlas con el SQIL92 intermedio o con el completo,
‘tenemos que ir haciendo combinaciones de tablas por pares, y la tabla resul-
‘ante se convertird en el primer componente del siguiente par.
‘Combinaciones con mis de dos tablas en BDUOC
‘Veamos eemplos dels dos esos, suponiendo que queremes combina ls tablas orp lea
oc, proyectos y clientes:
i
2.8.7. Launién
La cliusula uNzow permite unis consultas de dos o més sentenclas SELECT
PROM, Su formato es:
Si ponemos la opcién ALL, aparecerén todas las filas obtenidas a causa de
Ja unién, No la pondremos si queremos eliminar las fas repetidas. Lo maservoce nereeo “ Bane sat
mportante de la unién es que somos nosotros qulenes tenemos que procu
rar que se efectde entre columnas definidas sobre dominios compatibles; es
‘decir, que tengan la misma interpretacion seméntica. Como ya hemos co
mentado, el SQL92 no nos ofrece herramientas para asegurar la compatibi-
lidad seméntica entre cotumnas. @
‘ulzacién dea walén en BDUOC
Squeremos ert as chudades que hay’ en esta bse de datos, podamos hacer
arcelona
rons
‘isa
Taragona
HT resltado de esta consulta sera el que se muesta al margen.
2.8.8. La interseccién
Para hacer la intersecci6n entre dos o mas sentencias SELECT FROM, podemos
utilizar la cldusula INTERSECT, cuyo formato es:
Si indicamos a opcion ais, aparecern todas ls fas cblenidas partir de la
Intersecin, No la pondremos si gueremoseliminar a fila repetidas. @
Lo més importante de la intersecci6n es que somos nosotros quienes tenemos
‘que vigilar que se haga entre columnas definidas sobre dominios compatibles;
es decir, que tengan la misma interpretacion seméntica.
‘UtiNzaciém de la intersecetén en BDUOC
‘Si queremos saber toda ls cludades donde tenemos departamentos en los que podamos er-
contraralgin lente, posramos hacer:
Barcelona
Grona
Lleida
Tarragona
HT resultado de esta consulta sera el que se muestra al margen.Bane sat
‘Sin embargo, la interseccién es una de las operaciones del SQL que se puede
hacer de mis formas diferentes, También podriamos encontrar la interscci6n
con 2¥ 0 2x1878:
4) Intersecci6n utilizando iN
) Intersecci6n utilizando Exrs7s
_Ejemplo anterior expresado con IN y con EXISTS
= eemplo que hemos propuesto antes se pola expresar con 1
fo tambin con Exrszs:
2.5.9. La diferencia
Para encontrar la diferencia entre dos o més sentencias SELECT FROM podemos
‘utilizar la clausula SxcEPT, que tlene este formato:ervoce nereeo os Bane sat
‘Siponemos la opci6n ALL aparecerin todas las filas que da la diferencia, No la
pondremos si queremos climinar las fas repetidas,
{Lo mis importante dela diferencia es que somos nosotros qulenes tenemos que
gia que s haga entre colurmnasdesindas sobre dominios compatibles.
‘UtiHzaci6n de la diferencia en BDUOC
'j=tQ=tAttwtwtwt
40
HT resultado de esta consulta sera el que seve ene marge,
{a iferencla es, junto con la ntrsecln, nade is operaciones del SQ. que
se puede realizar de mas formas diferentes, También podsfamos encontra la
Aierenciautizando Nor 40 Nor exists: @
a) Diferencia utilizando Nor mx:
) Diferencia utilizando Nor EXzsTS:ervoce nereeo a Bane sat
Ejemplo anterior expresado con NOT IN y com NOT HxISTS|
ejemplo que hemos hecho antes se podia expres con NOT 18
también con Nor ExistsBane sat
3. Sentencias de control
‘Ademas de definir y manipular una base de datos relacional, es importante que
se establezcan mecanismos de control para resolver problemas de concurrencia
‘de usuarios y garantizar la seguridad de los datos. Para la concurtencia de usuarios
utilizaremos el eoneepto de trunsacci, y para la seguridad veremos como se pue-
‘de autorizar y desautoriza a usuarios a acceder a la base de datos.
3.1. Las transacciones
La mayoria de las transacclones se iniclan de forma Implicita al utilizar alguna
sentencla que empleza con CREAT, ALTER, DROP, SET, DECLARE, GRANT 0
REVOKE, aunque existe la sentencia SQl. para iniciar transacciones, que es la
siguiente:
‘Si queremos actualizar la base de datos utilizaremos la opcién READ WRITE, ¥
sino la queremos actualizar, clegiremos la opcin READ ONLY.
Sin embargo, en cambio, una transaccién siempre debe acabar explicitamente
‘con alguna de las sentencias siguientes:
La diferencia entre Commi? y ROLLBACK es que mientras la sentencla com
confirma todos los cambios producidos contra la BD durante la ejecucién de
Ja transacci6n, Ia sentencia ROLLAACK deshace todos los cambios que se hayan_
‘producido en la base de datos la deja como estaba antes del iniclo de nuestra
‘ransacci6n,
La palabra reservada work sélo sirve para aclarar lo que hace la sentencia, y es
totalmente opcional.Bane sat
‘Bjemplo de transaccién
Acontinuacin proponemos un ejemplo de tansaccién en elque se quiere disminul elsue!
{go deos empleados que han rabajado en proyecto 3en 1,000 euros. yaumentarelsueldo
{e los emplendos qu han trabafad en el proyecto 1 también er 1.000 ears.
3.2, Las autorizaciones y desautorizaciones
‘Todos los privilegios sobre la base de datos los tiene su propietario, pero no es
el dnico que accede a ésta, Por este motivo, el SQL nos oftece sentencias para
autorizar y desautorizar a otras usuarios,
1) Autorizaciones
Para autorizar, el SQL dispone de la siguiente sentencia:
Donde tenemos que:
8) privillegios puede ser:
+ ALL PRIVILEGES: todos los priviegios sobre el objeto especificado,
+ USAGE: utlizactn del objeto especificado; en este caso el dominio,
+ seuzet: consultas,
+ INSERT [(columnas)]: inserciones, Se puede concretar de qué colunnas.
+ rpare (col unnas)|:modificaciones Se puede concretar de qué col vena.
+ snare: borrados.
+ REvERENCES [(colunna)]: referencia del objeto en restricciones de integte
dad, Se puede concretar de qué colunna:
B) objeto debe ser:
+ omar: dominioBurgas.
+ TASLE: tabla,
+ vista,
‘©) Usuarios puede ser todo el mundo: Puazz¢, o bien una lista de los identl-
ficadores de los usuarios que queremos autorizar
4) La opcion WITH GRANT OPTION permite que el usuario que autoricemos
pueda, a su vez, autorizar a otros usuarios a acceder al objeto con los mismos
privilegios con los que ha sido autorizado,
2) Desautorizaciones
Para desautorizar, el SQL dispone de la sigulente sentencia:
Donde tenemos que
4) privilegios, objeto y usuarios son los mismos que para la sentencia
GRANT.
b) La opcién GRANT OPTION FOR se-utilizaria en el caso de que quisiéramos
‘liminar el derecho a autotizar (WITH GRANT OPTION),
©) Siun usuario al que hemos autorizado ha autorizado a su ver a otros, que
al mismo tiempo pueden haber hecho mas autorizaciones, la opelén CASCADE
hhace que queden desautorizados todos a la vez
4) La opcion RESTRICT no nos permite desautorizar a un usuario si éste ha
autorizado a otros.Bane sat
1) Creaci6n de esquemas:
2) Borrado de esquemas:
'3) Creacion de ase de datos:
4) Bortado de bases de datos:
5) Creaci6n de tablas
Donde tenemos Io siguiente:
+ definicién_colunna es
+ Una de las restricciones de la tabla era la definici6n de claves foréneasi
Bane sat
z
&
i
:
i
é
z
Donde tenemos lo siguiente:
+ accién_nodificar_colunna puede ser:
+ accién_nodif_restriccion_tabla puede ser:
7) Borrado de tablas:
'8) Creacion de dominios:
Donde tenemos lo siguiente:
+ def_defecto tlene el siguiente formato:
+ reetricciones dominio tiene el siguiente formato:
9) Modificacién de un dominio seméiBane sat
Donde tenemos lo siguiente:
+ accién_nodificar_dominio puede ser:
accién_modif restriccién dominio puede s
10) Borrado de dominios creados por el usuario:
11) Definicién de una asercion:
12) Borrado de una asercion:
13) Creacion de una vista:
5
:
5
:
i
}
:
1) Inserci6n de filas en una tabla:Bane sat
2) Bortado de filas de una tabla
4) Consultas de una base de datos relacional:
Anexo 3
Sentenclas de control
1) Infciacton de transacciones:
E
&
a
:
Q
i
3) Autorizaciones:
4) Desautorizaciones: