Está en la página 1de 52
El lenguaje SQL Carme Martin Escofet Formacién de Posgrado Introduccié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 49 EISQL 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 ana ervoce 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 por Burgas. 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 aaa Los 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 novedades Objetivos 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 vstas Burgas. 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 css Burgas. 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, Peete Bane 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 estdades.Fsto 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 cest.icciont, 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, hamos Bane 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 1598 Bane 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, haamos ervoce 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 | 973.25.48.67 30 CEA | 38.226777-0) Pars, 44 | Barcelona | 93.482.60.77 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 fordneas ervoce 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 omen ervoce 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 | 93.422.60.70 ik ‘Girona | 972.23.89.70 Dis Ueda | 97323.50.40 Dis Barcelona | 93.224.85.23 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 | 973.23.45.67 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 NULL Bane 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 | 973.22.45.67 0 Jom] 38.762.345.8 Rosen 44 | Taragona | 977.33.71.43, ‘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 sat Bane 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 108s ervoce 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” sel 1a 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 ogelle Bane 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 marge Bane 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: ¥p.codige cxsente! -Entoncesobtendramor este resultado: | taks6 38173 8988 2 eli tone ete ervoce 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 5 Bane 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 | 972.23.89.70 2 Pedro DR Barcelona | 93.422.60.70 3 aoe is sida | 973.73.50.40 * Iorge Dis Barcelona | 93.224.85.23, 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 972.23.89.70, 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 | 972.23.89.70 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 | 972.23.89.70 2 Pedro oR Barcelona | 93.422.6070 3 ana Is sida | 973735040 ereoce 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 mas ervoce 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 Exists Bane 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: dominio Burgas. + 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éneas i 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éi Bane 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:

También podría gustarte