Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema 5I
Tema 5I
A diferencia de los estudiados en el tema de los lenguajes formales (lgebra relacional, clculo de tuplas y clculo de a a a dominios) existen otros lenguajes no formales y que incluyen otras caracter sticas:
ISBL. Casi equivalente al lgebra relacional. a QUEL. Lenguaje del clculo de tuplas. a QBE. Lenguaje del clculo de dominios. a SQL. Lenguaje relacional estndar de facto superconjunto del a lgebra relacional. a DATALOG: Lenguaje de acceso basado en programacin lgica. o o XQUERY: Lenguaje basado en el modelo jerrquico (no a relacional) usado para realizar consultas sobre XML
Este tema se dedica en particular a SQL, un estndar para a bases de datos relacionales En realidad al hablar de SQL se est hablando de un lenguaje a que contiene instrucciones de los 3 grupos de lenguajes de bases de datos de los que hablamos en el tema introductorio:
Denir la base de datos. DDL: Data Denition Language Consultar y modicar datos. DML: Data Manipulation Language Controlar el acceso (seguridad). DAL: Data Access Language
Aqu estudiamos la versin SQL1999 que se utiliza en o multitud de SGBD Versiones de ORACLE (SQL*PLUS), Access y MySql
Todas las consultas deben tener una clusula SELECT que a especica las columnas que deben aparecer en el resultado La clusula FROM especica el producto cartesiano de tablas. a La clusula WHERE especica las condiciones de seleccin a o para las tablas indicadas en la clusula FROM. a La parte WHERE es opcional, pero la parte SELECT y FROM son obligatorias
Yolanda Garc Ruiz (UCM) a SQL - Lenguaje de acceso a bases de datos relacionales (I)
Ejemplo: Seleccionar los cdigos de los empleados con DNI = 4 o Distribucion codigoPr P1 P1 P3 P4 P4 dniEmp 4 5 1 1 4 horas 12 2 10 34 15
SELECT c o d i g o P r FROM d i s t r i b u c i n o WHERE dniEmp = 4 ;
Ejemplo: Seleccionar los cdigos de los empleados con DNI = 4 o Distribucion codigoPr P1 P1 P3 P4 P4 dniEmp 4 5 1 1 4 horas 12 2 10 34 15
SELECT c o d i g o P r FROM d i s t r i b u c i n o WHERE dniEmp = 4 ;
Respuesta: codigoPr P1 P4
Existe una estrecha relacin entre las consultas SQL y el o lgebra relacional a Una consulta SQL se corresponde a una expresin del lgebra o a realcional que implica selecciones, proyecciones y productos cartesianos Esta relacin es la base para la optimizacin de consultas en o o los SGBD relacionales La clusula SELECT se emplea para hacer proyecciones a La clusula FROM se emplea para hacer productos a cartesianos La clusula WHERE se emplea para hacer selecciones a
Ejemplo: DNI trabajadores que trabajan entre 10 y 20 horas en algn proyecto u Distribucion codigoPr P1 P1 P3 P4 P4 dniEmp 4 5 1 1 4 horas 12 2 10 34 13
Ejemplo: DNI trabajadores que trabajan entre 10 y 20 horas en algn proyecto u Distribucion codigoPr P1 P1 P3 P4 P4 dniEmp 4 5 1 1 4 horas 12 2 10 34 13 Respuesta: dniEmp 4 1 4
Observacion Las consultas SQL trabajan con multiconjuntos en lugar de con conjuntos Se permite repetir valores Ventajas:
Eciencia El usuario puede querer los valores repetidos
La respuesta a una consulta SQL es en s misma una relacin, o que es un multiconjunto de las en SQL Una estrategia de evaluacin de una consulta es la siguiente: o
Calcular el producto cartesiano de las tablas que aparecen en el clusuala FROM a Eliminar las las del producto cartesiano que no cumplen la condicin que aparece en la clusula WHERE o a Eliminar todas las columnas que no aparecen en la lista de atributos de la clusula SELECT a Si se especica DISTINCT, se eliminan las las duplicadas
Esta estrategia es ineciente y no es realmente la que utilizan los SGBD, pero sirve para entender el signicado de las consultas
En ORACLE existe una tabla especial vac DUAL que se a, puede usar para evaluar expresiones Respuesta:
SELECT 34 FROM d u a l ;
3*4 12
SQL - Lenguaje de acceso a bases de datos relacionales (I)
Ejemplo: Seleccionar los datos de los empleados analistas cuyo nombre comienza por Te
Ejemplo: Seleccionar los datos de los empleados analistas cuyo nombre comienza por Te
SELECT FROM a n a l i s t a s WHERE nombre LIKE Te% ;
Ejemplo: Seleccionar los datos de los empleados analistas cuyo nombre comienza por Te
SELECT FROM a n a l i s t a s WHERE nombre LIKE Te% ;
Ejemplo: Seleccionar los datos de los empleados analistas que tienen una a en el tercer caracter del nombre
Ejemplo: Seleccionar los datos de los empleados analistas cuyo nombre comienza por Te
SELECT FROM a n a l i s t a s WHERE nombre LIKE Te% ;
Ejemplo: Seleccionar los datos de los empleados analistas que tienen una a en el tercer caracter del nombre
SELECT nombre FROM a n a l i s t a s a% ; WHERE nombre LIKE
Ejemplo: Seleccionar los datos de los empleados analistas cuyo nombre comienza por Te
SELECT FROM a n a l i s t a s WHERE nombre LIKE Te% ;
Ejemplo: Seleccionar los datos de los empleados analistas que tienen una a en el tercer caracter del nombre
SELECT nombre FROM a n a l i s t a s a% ; WHERE nombre LIKE
Ejemplo: Seleccionar los datos de los empleados analistas que no tienen telfono e
Ejemplo: Seleccionar los datos de los empleados analistas cuyo nombre comienza por Te
SELECT FROM a n a l i s t a s WHERE nombre LIKE Te% ;
Ejemplo: Seleccionar los datos de los empleados analistas que tienen una a en el tercer caracter del nombre
SELECT nombre FROM a n a l i s t a s a% ; WHERE nombre LIKE
Ejemplo: Seleccionar los datos de los empleados analistas que no tienen telfono e
SELECT FROM a n a l i s t a s WHERE t e l f o n o I S NULL e
Yolanda Garc Ruiz (UCM) a SQL - Lenguaje de acceso a bases de datos relacionales (I)
Clusula FROM a Ejemplo: Seleccionar los nombres y direcciones de los programadores que trabajan en el proyecto P2
Clusula FROM a Ejemplo: Seleccionar los nombres y direcciones de los programadores que trabajan en el proyecto P2
SELECT nombre , d i r e c c i n o FROM p r o g r a m a d o r e s , d i s t r i b u c i n o WHERE dniEmp = DNI AND C o d i g o P r = P2 ;
Clusula FROM a Ejemplo: Seleccionar los nombres y direcciones de los programadores que trabajan en el proyecto P2
SELECT nombre , d i r e c c i n o FROM p r o g r a m a d o r e s , d i s t r i b u c i n o WHERE dniEmp = DNI AND C o d i g o P r = P2 ;
Clusula FROM a Ejemplo: Nombres y direcciones de los empleados que son a la vez programadores y analistas
Clusula FROM a Ejemplo: Nombres y direcciones de los empleados que son a la vez programadores y analistas
SELECT a n a l i s t a s . nombre , a n a l i s t a s . d i r e c c i n o FROM a n a l i s t a s , p r o g r a m a d o r e s WHERE a n a l i s t a s . DNI = p r o g r a m a d o r e s . DNI ;
Ejemplo: Nombre de los programadores que trabajan en algn u proyecto que esta dirigido por un programador
Ejemplo: Nombre de los programadores que trabajan en algn u proyecto que esta dirigido por un programador
SELECT T r a b a j a d o r . nombre , T r a b a j a d o r . d i r e c c i n o FROM p r o g r a m a d o r e s T r a b a j a d o r , d i s t r i b u c i n , o programadores Director , proyectos WHERE d i s t r i b u c i n . dniEmp = T r a b a j a d o r . DNI o AND proyectos . codigo = d i s t r i b u c i n . codigoPr o AND D i r e c t o r . DNI = p r o y e c t o s . d n i D i r ;
Las consultas se pueden ver como conjuntos Ejemplo: DNI de los empleados que trabajan en algn proyecto u que han trabajado 10, 20 30 horas o
Las consultas se pueden ver como conjuntos Ejemplo: DNI de los empleados que trabajan en algn proyecto u que han trabajado 10, 20 30 horas o
SELECT EmpDNI FROM d i s t r i b u c i n o WHERE h o r a s IN ( 1 0 , 2 0 , 3 0 )
Consultas anidadas Es una de las caracter sticas ms potentes de SQL a Una consulta anidada es aquella que tiene otra consulta incorporada en su interior a la que se llama subconsulta Las subconsultas suelen aparecer en el interior de la clusula a WHERE pero tambin pueden aparecer en el FROM o en el e HAVING (clusula que se ver ms adelante) a a a
Consultas anidadas Es una de las caracter sticas ms potentes de SQL a Una consulta anidada es aquella que tiene otra consulta incorporada en su interior a la que se llama subconsulta Las subconsultas suelen aparecer en el interior de la clusula a WHERE pero tambin pueden aparecer en el FROM o en el e HAVING (clusula que se ver ms adelante) a a a Ejemplo: Proyectos en los que trabaja o dirige el empleado de DNI = 4
Consultas anidadas Es una de las caracter sticas ms potentes de SQL a Una consulta anidada es aquella que tiene otra consulta incorporada en su interior a la que se llama subconsulta Las subconsultas suelen aparecer en el interior de la clusula a WHERE pero tambin pueden aparecer en el FROM o en el e HAVING (clusula que se ver ms adelante) a a a Ejemplo: Proyectos en los que trabaja o dirige el empleado de DNI = 4
SELECT DISTINCT p r o y e c t o s . c o d i g o FROM p r o y e c t o s WHERE p r o y e c t o s . DNIDIr = 4 OR p r o y e c t o s . c o d i g o IN ( SELECT d i s t r i b u c i n . c o d i g o P r o FROM d i s t r i b u c i n o WHERE d i s t r i b u c i n . DNIEmp = 4 ) o
Yolanda Garc Ruiz (UCM) a SQL - Lenguaje de acceso a bases de datos relacionales (I)
Consultas anidadas correlacionadas Son consultas en las que la subconsulta interior depende de la la que se est examinado en cada momento en la consulta a exterior
Consultas anidadas correlacionadas Son consultas en las que la subconsulta interior depende de la la que se est examinado en cada momento en la consulta a exterior Ejemplo: Seleccionar los empleados que dirigen y trabajan en un mismo proyecto
Consultas anidadas correlacionadas Son consultas en las que la subconsulta interior depende de la la que se est examinado en cada momento en la consulta a exterior Ejemplo: Seleccionar los empleados que dirigen y trabajan en un mismo proyecto
SELECT DISTINCT p r o y e c t o s . d n i D i r FROM p r o y e c t o s WHERE p r o y e c t o s . c o d i g o IN ( SELECT d i s t r i b u c i n . c o d i g o P r o FROM d i s t r i b u c i n o WHERE d i s t r i b u c i n . DNIEmp = p r o y e c t o s . d n i D i r ) o
Si la subconsulta devuelve un slo valor se puede tratar como o si fuera un valor simple en lugar de un conjunto Ejemplo: Seleccionar los proyectos de Jacinto
Si la subconsulta devuelve un slo valor se puede tratar como o si fuera un valor simple en lugar de un conjunto Ejemplo: Seleccionar los proyectos de Jacinto
SELECT FROM d i s t r i b u c i n o WHERE d i s t r i b u c i n . DNIEmp = o (SELECT DNI FROM p r o g r a m a d o r e s WHERE Nombre= J a c i n t o ) ;
ERROR
Funciones de Conjunto: UNION, INTERSECT y MINUS Ejemplo: Nombres de todos los empleados: Con lo que hemos visto hasta ahora NO se puede
(SELECT Nombre FROM p r o g r a m a d o r e s ) UNION (SELECT Nombre FROM a n a l i s t a s )
No aparecen repetidos, si se quieren repetidos habr que a poner UNION ALL Se requiere:
Los selects necesitan tener el mismo nmero de columnas u Las columnas tienen que ser del mismo tipo
EXISTS, NOT EXISTS El operador EXISTS es otro operador para la comparacin de o conjuntos, como IN. Permite comprobar si un conjunto no est vac es decir, se a o, trata como una comparacin de igualdad con el conjunto o vac o EXISTS (subconsulta):
Cierto si la subconsulta devuelve alguna la Falso e.o.c.
Para cada la f de programadores, se evala la subconsulta . Si la u subconsulta devuelve alguna la, entonces f aparece en la respuesta.
Clusula ORDER BY a Ejemplo: Cdigo de proyecto, DNI y horas trabajadas de los o trabajadores que trabajan ms de 10 horas en algn proyecto a u (datos ordenados por horas) Distribucion codigoPr P1 P1 P3 P4 P4 dniEmp 4 5 1 1 4 horas 12 2 10 34 13 Respuesta: codigoPr P1 P4 P4 dniEmp 4 4 1 horas 12 13 34
Ejemplo: Cdigo de proyecto, DNI y horas trabajadas de los o trabajadores que trabajan ms de 10 horas en algn proyecto a u (datos ordenados por horas de forma descendente) Distribucion codigoPr P1 P1 P3 P7 P4 dniEmp 4 5 1 1 4 horas 12 2 10 34 34 Respuesta: codigoPr P4 P7 P1 dniEmp 4 1 4 horas 34 34 12
Operadores de agregacin. Clusula GROUP BY o a Adems de recuperar datos, SQL permite llevar a cabo algn a u clculo o resumen. a SQL premite cinco operaciones de agregacin que se pueden o aplicar a cualquier columna:
SUM([DISTINCT] col): suma de todos los valores (nicos) u de la columna col AVG([DISTINCT] col): promedio de los valores (nicos) de u la columna col MAX(col): el valor mximo de la columna col a MIN(col): el valor m nimo de la columna col COUNT([DISTINCT] col): nmero de valores (nicos) de la u u columna col
Ejemplo: Se desea conocer el nmero de programadores u Programadores DNI 1 2 3 4 5 Nombre Alberto Ana Zuleika Juan Benja Direccin o Madrid Zaragoza Madrid Badajoz Madrid Tlf 698... 687... 607... Respuesta: count(*) 5
A veces se desea aplicar operaciones de agrupacin, no a todas las o tuplas de una relacin, sino a determinados grupos de las o Ejemplo: Se desea conocer las horas empleadas en cada proyecto Distribucion codigoPr P1 P1 P3 P1 P4 dniEmp 4 5 1 1 4 horas 12 2 10 34 34 Respuesta: codigoPr P1 P3 P4 sum(horas) 48 10 34
Ejemplo: Trabajadores que trabajan un total de ms de 20 horas a Distribucion codigoPr P1 P1 P3 P1 P4 dniEmp 4 5 1 1 4 horas 19 2 10 34 2 Respuesta: dniEmp 4 1 sum(horas) 21 44
Ejemplo: Trabajadores que trabajan un total de ms de 20 horas a Distribucion codigoPr P1 P1 P3 P1 P4 dniEmp 4 5 1 1 4 horas 19 2 10 34 2 Respuesta: dniEmp 4 1 sum(horas) 21 44
Ejemplo: Nombres y total de horas de los programadores que trabajan en ms de 2 proyectos diferentes a
Ejemplo: Nombres y total de horas de los programadores que trabajan en ms de 2 proyectos diferentes a
SELECT p r o g r a m a d o r e s . Nombre , d i s t r i b u c i n . dniEmp , o SUM( d i s t r i b u c i n . h o r a s ) o FROM d i s t r i b u c i n , p r o g r a m a d o r e s o WHERE p r o g r a m a d o r e s . d n i = d i s t r i b u c i n . dniEmp o GROUP BY d i s t r i b u c i n . dniEmp , p r o g r a m a d o r e s . nombre o HAVING COUNT( d i s t r i b u c i n . dniEmp ) >= 2 o ORDER BY SUM( d i s t r i b u c i n . h o r a s ) o
Vistas Creacin de tablas virtuales. o No existen en la realidad sino que se reeren a consultas en otras tablas Ejemplo: Nombres de los programadores que trabajan ms horas a que la media
CREATE VIEW DNIHoras ( DNI , h o r a s ) AS SELECT DNIEMp , SUM( h o r a s ) FROM d i s t r i b u c i n o GROUP BY DNIEMP ; CREATE VIEW NombreHoras ( nombre , h o r a s ) AS SELECT p r o g r a m a d o r e s . nombre , DNIHoras . h o r a s FROM p r o g r a m a d o r e s , DNIHoras WHERE p r o g r a m a d o r e s . DNI = DNIHoras . DNI ; ...
Yolanda Garc Ruiz (UCM) a SQL - Lenguaje de acceso a bases de datos relacionales (I)
Condiciones con ANY, ALL Ya se han visto los operadores para comparacin de conjuntos o EXISTS e IN junto con sus versiones negadas. SQL tambin soporta: e
Expr op ALL (subconsulta) Expr op ANY (subconsulta)
Se trata de condiciones que se pueden utilizar en las secciones WHERE y/o HAVING El operador op puede ser cualquier operador relacional: >, <, >=, <=, =, <> La condicin se cumple si se verica la relacin entre el valor o o de la expresin Expr y todos (ALL) o algn (ANY) de los o u valores de la subconsulta.
Ejemplo: DNI del empleado (o empleados si son varios) que trabaja(n) ms horas a
Ejemplo: DNI del empleado (o empleados si son varios) que trabaja(n) ms horas a
CREATE VIEW DNIHoras ( DNI , h o r a s ) AS SELECT DNIEMp , SUM( h o r a s ) FROM d i s t r i b u c i n o GROUP BY DNIEMP ; CREATE VIEW R e s u l t a d o ( DNI , h o r a s ) AS SELECT FROM DNIHORAS WHERE h o r a s >= ALL (SELECT h o r a s FROM DNIHoras ) ;
Ejemplo: DNI del empleado (o empleados si son varios) que trabaja(n) ms horas (Otra solucin) a o
CREATE VIEW r e s u l t a d o ( DNI , h o r a s ) AS SELECT FROM DNIHORAS WHERE h o r a s = (SELECT MAX( h o r a s ) FROM DNIHoras ) ;
Observacin: o Las funciones de agrupacin se pueden aplicar a subconsultas o siempre y cuando estas tengan una sola expresin en su parte o select y esta sea de tipo numrico. e
Condiciones con DECODE, IF, CASE DECODE, IF y CASE son distintos nombres para sentencias de tipo condicional Ejemplo: Obtener un listado con el nombre y si trabaja menos de 8 horas la palabra poco y en otro caso la palabra mucho. La segunda columna debe llamarse Trabaja
SELECT nombre , I F ( h o r a s <8, poco , mucho ) T r a b a j a FROM DNIHorasNombre ;
DECODE (value, <if this value>, <return this value>) Ejemplo: Obtener un listado de directores de proyectos con el DNI y el cdigo de proyecto. Si el DNI es 4 poner General en otro o caso poner Empleado. La tercera columna debe llamarse Super Jefe
SELECT dniEmp , codProy , DECODE( dniEmp , 4 , g e n e r a l , empleado ) S u p e r J e f e FROM D i s t r i b u c i n ; o
dniEmp 4 5 1 4
codProy P1 P2 P5 P7
BIEN:
SELECT FROM e m p l e a d o s WHERE nombre I S NULL;
Sentencia JOIN (Reunin de relaciones) o Se trata de reuniones condicionales y reuniones naturales Estas operaciones adicionales se usan a menudo como subconsultas dentro de la clusula FROM. a Interna: en el resultado slo participan tuplas que satisfacen o la condicin o Externa: tambin participan las tuplas que no satisfacen la e condicin o
Reunin interna (INNER JOIN) o El INNER JOIN es otro tipo de composicin de tablas o Permite emparejar las de distintas tablas de forma ms a eciente que con el producto cartesiano En vez de hacer el producto cartesiano completo y luego seleccionar la las que cumplen la condicin de o emparejamiento, para cada la de una de las tablas busca directamente en la otra tabla las las que cumplen la condicin, con lo cual se emparejan slo las las que luego o o aparecen en el resultado
Reunin interna (INNER JOIN) o Prstamo e Sucursal NumPres Importe Centro P17 600 Moral P23 800 Nava P26 340 Clientes Nombre NumPres Santos P17 Gmez o P23 Lpez o P15
SELECT FROM Prestamo INNER JOIN C l i e n t e s ON Prestamo . numPres = C l i e n t e s . numPres ;
Resultado de la consulta: Sucursal Centro Moral NumPres P17 P23 Importe 600 800 Nombre Santos Gmez o NumPres P17 P23
Reunion condicional C de las relaciones Prestamo y Cliente, donde la condicin de reunion es Prestamo.numPres = o Cliente.numPres. Atributos del resultado: Los atributos del lado izquierdo ms a los atributos del lado derecho. El atributo numPres aparece dos veces.
Yolanda Garc Ruiz (UCM) a SQL - Lenguaje de acceso a bases de datos relacionales (I)
Reunin externa por la izquierda (LEFT OUTER JOIN) o El LEFT OUTER JOIN es otro tipo de composicin de o tablas El resultado de esta operacin siempre contiene todos las o tuplas de la tabla de la izquierda, aun cuando no exista una tupla correspondiente en la tabla de la derecha. La sentencia LEFT OUTER JOIN retorna la pareja de todos los valores de la tabla izquierda con los valores de la tabla de la derecha correspondientes, o retorna un valor nulo NULL en caso de que no exista correspondencia
Resultado de la consulta: Sucursal Centro Moral Nava NumPres P17 P23 P26 Importe 600 800 340 Nombre Santos Gmez o null NumPres P17 P23 null
Reunin externa por la derecha (RIGHT OUTER JOIN) o Esta operacin es inversa a la anterior o El resultado de esta operacin siempre contiene todos los o registros de la tabla de la derecha, aun cuando no exista un registro correspondiente en la tabla de la izquierda La sentencia RIGHT OUTER JOIN retorna la pareja de todos los valores de la tabla derecha con los valores de la tabla de la izquierda correspondientes, o retorna un valor nulo NULL en caso de no correspondencia
Resultado de la consulta: Sucursal Centro Moral null NumPres P17 P23 null Importe 600 800 null Nombre Santos Gmez o Lpez o NumPres P17 P23 P15
Reunin externa completa (FULL OUTER JOIN) o Esta operacin presenta los resultados de tabla izquierda y o tabla derecha aunque no tengan correspondencia en la otra tabla La tabla combinada contendr, entonces, todos las las de a ambas tablas y presentar valores nulos NULL para las sin a pareja.
Resultado de la consulta: Sucursal Centro Moral null Nava NumPres P17 P23 null P26 Importe 600 800 null 340 Nombre Santos Gmez o Lpez o null NumPres P17 P23 P15 null
Reunin natural ( NATURAL JOIN) o Es similar a INNER JOIN ... ON ... cuando la condicin del o ON es una conjuncin de igualdades de los atributos comunes o Es equivalente cuando se hace la proyeccin sobre el conjunto o (sin elementos repetidos) de todos los atributos de ambas relaciones. La condicin USING se usa en las reuniones naturales para o especicar los atributos comunes sobre los que se realiza la reunin. o Nota: El uso de esta sentencia NATURAL puede producir resultados ambiguos y generar problemas si la base de datos cambia, porque al aadir, quitar, o renombrar las columnas, puede n perder el sentido la sentencia; por esta razn es preferible usar otro o tipo de reuniones.
Yolanda Garc Ruiz (UCM) a SQL - Lenguaje de acceso a bases de datos relacionales (I)
Resultado de la consulta: Sucursal Centro Moral NumPres P17 P23 Importe 600 800 Nombre Santos Gmez o
Sentencias INSERT, DELETE y UPDATE: permiten la modicacin de datos o Sentencia INSERT Con INSERT se agregan tuplas a las tablas La sintaxis bsica de la sentencia INSERT permite insertar a una tupla de valores en una tabla. La tupla de valores se escribe como una lista de valores (que deben coincidir con el tipo de los campos de la tabla en el orden que estn denidos) separada por comas y encerrada a entre parntesis. e La sintaxis bsica es: a
INSERT INTO NombreTabla VALUES L i s t a d e v a l o r e s
Tambin es posible obtener los datos mediante una consulta e SELECT que acte como proveedor de datos. Por ejemplo: u
INSERT INTO P r o g r a m a d o r e s SELECT FROM P r o g r a m a d o r e s n u e v o s ;
Sentencia DELETE Con DELETE se borran tuplas a las tablas La sintaxis bsica de la sentencia DELETE permite borrar las a tuplas de la tabla NombreTabla que cumplan la condicin o Condicin. o
DELETE FROM NombreTabla WHERE C o n d i c i n ; o
La parte WHERE es opcional y, si no se especica, se borran todas las tuplas de la tabla (lo cual es equivalente a WHERE true). Ejemplo: Borrar el programador con DNI = 8
DELETE FROM P r o g r a m a d o r e s WHERE DNI=8;
Yolanda Garc Ruiz (UCM) a SQL - Lenguaje de acceso a bases de datos relacionales (I)
Nota: Si se emite la siguiente consulta se borrar todos los an programadores de la tabla Programadores (al menos, todos aquellos cuya eliminacin no viole las restricciones de integridad o referencial).
La clusula WHERE admite consultas anidadas a Ejemplo: Borrar todos los programadores de la relacin o programadores segn Direcciones a borrar u
DELETE FROM P r o g r a m a d o r e s WHERE P r o g r a m a d o r e s . D i r e c c i n IN o (SELECT D i r e c c i n o FROM D i r e c c i o n e s a b o r r a r ) ;
Sentencia UPDATE La sentencia UPDATE permite modicar los valores de los atributos de las tuplas que cumplan una determinada condicin o La sintaxis bsica de la sentencia UPDATE es la siguiente: a
UPDATE t a b l a SET c o l 1 = v a l o r 1 , . . . . , c o l n = v a l o r n WHERE c o n d i c i o n ;
La parte WHERE es opcional y, si no se especica, se modican todas las tuplas de la tabla Ejemplo: Direccin del programador cuyo DNI es 8. o
UPDATE P r o g r a m a d o r e s SET D i r e c c i n = P u e r t a d e l S o l o WHERE DNI = 8 ;
Yolanda Garc Ruiz (UCM) a SQL - Lenguaje de acceso a bases de datos relacionales (I)
Sentencia UPDATE Al igual que la sentencia DELETE, en la clusula WHERE se a admiten consultas anidadas Ejemplo: Modicar todos los programadores cuya especialidad se encuentre en la tabla Nombres y direcciones a modicar.
UPDATE P r o g r a m a d o r e s SET S a l a r i o = S a l a r i o 1 . 1 WHERE EXISTS (SELECT FROM [ N o m b r e s y d i r e c c i o n e s a m o d i f i c a r ] AS t WHERE P r o g r a m a d o r e s . Nombre = t . Nombre AND Programadores . D i r e c c i n = t . D i r e c c i n ) ; o o
Sentencias DAL Permiten especicar directivas de control de acceso a los recursos El control de acceso se especica por usuario Los recursos son: Tablas, campos, vistas y dominios Entendemos los privilegios como los derechos de acceso de un usuario a los recursos Los privilegios estn caracterizados por: a
El recurso al que se reere El usuario que concede el privilegio El usuario que lo recibe La accin permitida sobre el recurso o Si el privilegio se puede transmitir por el usuario al que se le ha concedido
Yolanda Garc Ruiz (UCM) a SQL - Lenguaje de acceso a bases de datos relacionales (I)
Privilegios insert update delete select references (Integridad referencial) usage (Aplicado sobre los dominios, permiten usar dominios en la denicin del esquema de una tabla) o
Concede el privilegio Privilegio sobre el recurso Recurso a los usuarios Usuarios, permitiendo a su vez que los usuarios Usuarios puedan propagarlo a otros. En lugar de Privilegio se puede especicar ALL PRIVILEGES. Ejemplo:
GRANT s e l e c t ON D i s t r i b u c i n TO U s u a r i o I n v i t a d o . o
Privilegio puede ser cualquiera de los listados anteriormente RESTRICT|CASCADE se reeren a la revocacin de los o permisos propagados a otros usuarios
ROLES (ORACLE) Un rol es una forma de agrupar permisos (o privilegios) para asignarlos luego a los usuarios.
CREATE ROLE NombreRol ; GRANT SELECT ON D i s t r i b u c i n TO NombreRol ; o GRANT NombreRol TO L u i s WITH GRANT OPTION ;
UNION Union T = R S
INSERT INTO T (SELECT FROM R) UNION (SELECT FROM S ) ;
De otra forma:
INSERT INTO T SELECT FROM R ; INSERT INTO T SELECT FROM S ;
Producto cartesiano T = R1 Rn
INSERT INTO T SELECT FROM R1 , . . . , Rk ;
Proyeccin T = o
a1 ,...,ak
R
, ak
...
Seleccin T = C R o
INSERT INTO T SELECT FROM R WHERE C ;
donde C es una expresion equivalente a C, en la que se sustituye los operadores logicos (AND, ...) por los correspondientes del algebra relacional (, , ...). Reunin condicional T = R o
Cond S
Conclusin: no hay que olvidar que lo que se expresa en SQL son o operaciones del lgebra relacional. Adems en SQL se pueden a a expresar consultas que no resultan expresables en lgebra a relacional: por ejemplo las consultas que utilizan operaciones de agregacin. o
Bibliograf a: A. Silberschatz, H.F. Korth y S. Sudarshan. Fundamentos de Bases de Datos. 3a edicin, McGraw-Hill, 1998. o J.D. Ullman. Principles of Database and Knowledge Base Systems, Vol. I y II. Computer Science Press, 1998. R. Elmasri y S.B. Navathe. Fundamentals of Data Base Systems. Addison-Wesley, 2000