Академический Документы
Профессиональный Документы
Культура Документы
A diferencia de los estudiados en el tema de los lenguajes formales ( algebra relacional, c alculo de tuplas y c alculo de dominios) existen otros lenguajes no formales y que incluyen otras caracter sticas:
ISBL. Casi equivalente al algebra relacional. QUEL. Lenguaje del c alculo de tuplas. QBE. Lenguaje del c alculo de dominios. SQL. Lenguaje relacional est andar de facto superconjunto del algebra relacional. DATALOG: Lenguaje de acceso basado en programaci on l ogica. XQUERY: Lenguaje basado en el modelo jer arquico (no relacional) usado para realizar consultas sobre XML
Este tema se dedica en particular a SQL, un est andar para bases de datos relacionales En realidad al hablar de SQL se est a hablando de un lenguaje 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 versi on SQL1999 que se utiliza en multitud de SGBD Versiones de ORACLE (SQL*PLUS), Access y MySql
Todas las consultas deben tener una cl ausula SELECT que especica las columnas que deben aparecer en el resultado La cl ausula FROM especica el producto cartesiano de tablas. La cl ausula WHERE especica las condiciones de selecci on para las tablas indicadas en la cl ausula FROM. La parte WHERE es opcional, pero la parte SELECT y FROM son obligatorias
Yolanda Garc a Ruiz (UCM) SQL - Lenguaje de acceso a bases de datos relacionales (I)
Ejemplo: Seleccionar los c odigos de los empleados con DNI = 4 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 on WHERE dniEmp = 4 ;
Ejemplo: Seleccionar los c odigos de los empleados con DNI = 4 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 on WHERE dniEmp = 4 ;
Respuesta: codigoPr P1 P4
Existe una estrecha relaci on entre las consultas SQL y el algebra relacional Una consulta SQL se corresponde a una expresi on del algebra realcional que implica selecciones, proyecciones y productos cartesianos Esta relaci on es la base para la optimizaci on de consultas en los SGBD relacionales La cl ausula SELECT se emplea para hacer proyecciones La cl ausula FROM se emplea para hacer productos cartesianos La cl ausula WHERE se emplea para hacer selecciones
Ejemplo: DNI trabajadores que trabajan entre 10 y 20 horas en alg un proyecto 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 alg un proyecto 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 relaci on, que es un multiconjunto de las en SQL Una estrategia de evaluaci on de una consulta es la siguiente:
Calcular el producto cartesiano de las tablas que aparecen en el cl ausuala FROM Eliminar las las del producto cartesiano que no cumplen la condici on que aparece en la cl ausula WHERE Eliminar todas las columnas que no aparecen en la lista de atributos de la cl ausula SELECT 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 a, DUAL que se puede usar para evaluar expresiones Respuesta:
SELECT 3 4 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 tel efono
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 tel efono
SELECT FROM a n a l i s t a s WHERE t e l e f o n o I S NULL
Yolanda Garc a Ruiz (UCM) SQL - Lenguaje de acceso a bases de datos relacionales (I)
Cl ausula FROM Ejemplo: Seleccionar los nombres y direcciones de los programadores que trabajan en el proyecto P2
Cl ausula FROM Ejemplo: Seleccionar los nombres y direcciones de los programadores que trabajan en el proyecto P2
SELECT nombre , d i r e c c i on FROM p r o g r a m a d o r e s , d i s t r i b u c i on WHERE dniEmp = DNI AND C o d i g o P r = P2 ;
Cl ausula FROM Ejemplo: Seleccionar los nombres y direcciones de los programadores que trabajan en el proyecto P2
SELECT nombre , d i r e c c i on FROM p r o g r a m a d o r e s , d i s t r i b u c i on WHERE dniEmp = DNI AND C o d i g o P r = P2 ;
Cl ausula FROM Ejemplo: Nombres y direcciones de los empleados que son a la vez programadores y analistas
Cl ausula FROM 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 on 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 alg un proyecto que esta dirigido por un programador
Ejemplo: Nombre de los programadores que trabajan en alg un 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 on 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 on , programadores Director , proyectos WHERE d i s t r i b u c i o n . dniEmp = T r a b a j a d o r . DNI AND proyectos . codigo = d i s t r i b u c i o n . codigoPr 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 alg un proyecto que han trabajado 10, 20 o 30 horas
Las consultas se pueden ver como conjuntos Ejemplo: DNI de los empleados que trabajan en alg un proyecto que han trabajado 10, 20 o 30 horas
SELECT EmpDNI FROM d i s t r i b u c i on WHERE h o r a s IN ( 1 0 , 2 0 , 3 0 )
Consultas anidadas Es una de las caracter sticas m as potentes de SQL 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 cl ausula WHERE pero tambi en pueden aparecer en el FROM o en el HAVING (cl ausula que se ver a m as adelante)
Consultas anidadas Es una de las caracter sticas m as potentes de SQL 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 cl ausula WHERE pero tambi en pueden aparecer en el FROM o en el HAVING (cl ausula que se ver a m as adelante) Ejemplo: Proyectos en los que trabaja o dirige el empleado de DNI = 4
Consultas anidadas Es una de las caracter sticas m as potentes de SQL 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 cl ausula WHERE pero tambi en pueden aparecer en el FROM o en el HAVING (cl ausula que se ver a m as adelante) 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 o n . codigoPr FROM d i s t r i b u c i on WHERE d i s t r i b u c i o n . DNIEmp = 4 )
Yolanda Garc a Ruiz (UCM) SQL - Lenguaje de acceso a bases de datos relacionales (I)
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 o n . codigoPr FROM d i s t r i b u c i on WHERE d i s t r i b u c i o n . DNIEmp = 4 )
Yolanda Garc a Ruiz (UCM) 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 a examinado en cada momento en la consulta exterior
Consultas anidadas correlacionadas Son consultas en las que la subconsulta interior depende de la la que se est a examinado en cada momento en la consulta 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 a examinado en cada momento en la consulta 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 o n . codigoPr FROM d i s t r i b u c i on WHERE d i s t r i b u c i o n . DNIEmp = p r o y e c t o s . d n i D i r )
Si la subconsulta devuelve un s olo valor se puede tratar como si fuera un valor simple en lugar de un conjunto Ejemplo: Seleccionar los proyectos de Jacinto
Si la subconsulta devuelve un s olo valor se puede tratar como 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 on WHERE d i s t r i b u c i o n . DNIEmp = ( 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 a que poner UNION ALL Se requiere:
Los selects necesitan tener el mismo n umero de columnas Las columnas tienen que ser del mismo tipo
EXISTS, NOT EXISTS El operador EXISTS es otro operador para la comparaci on de conjuntos, como IN. Permite comprobar si un conjunto no est a vac o, es decir, se trata como una comparaci on de igualdad con el conjunto vac o EXISTS (subconsulta):
Cierto si la subconsulta devuelve alguna la Falso e.o.c.
Para cada la f de programadores, se eval ua la subconsulta . Si la subconsulta devuelve alguna la, entonces f aparece en la respuesta.
Cl ausula ORDER BY Ejemplo: C odigo de proyecto, DNI y horas trabajadas de los trabajadores que trabajan m as de 10 horas en alg un proyecto (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: C odigo de proyecto, DNI y horas trabajadas de los trabajadores que trabajan m as de 10 horas en alg un proyecto (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 agregaci on. Cl ausula GROUP BY Adem as de recuperar datos, SQL permite llevar a cabo alg un c alculo o resumen. SQL premite cinco operaciones de agregaci on que se pueden aplicar a cualquier columna:
SUM([DISTINCT] col): suma de todos los valores ( unicos) de la columna col AVG([DISTINCT] col): promedio de los valores ( unicos) de la columna col MAX(col): el valor m aximo de la columna col MIN(col): el valor m nimo de la columna col COUNT([DISTINCT] col): n umero de valores ( unicos) de la columna col
Ejemplo: Se desea conocer el n umero de programadores Programadores DNI 1 2 3 4 5 Nombre Alberto Ana Zuleika Juan Benja Direcci on Madrid Zaragoza Madrid Badajoz Madrid Tlf 698... 687... 607... Respuesta: count(*) 5
A veces se desea aplicar operaciones de agrupaci on, no a todas las tuplas de una relaci on, sino a determinados grupos de las 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 m as de 20 horas 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 m as de 20 horas 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 m as de 2 proyectos diferentes
Ejemplo: Nombres y total de horas de los programadores que trabajan en m as de 2 proyectos diferentes
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 o n . dniEmp , SUM( d i s t r i b u c i o n . horas ) FROM d i s t r i b u c i o n , programadores 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 o n . dniEmp GROUP BY d i s t r i b u c i o n . dniEmp , p r o g r a m a d o r e s . nombre HAVING COUNT( d i s t r i b u c i o n . dniEmp ) >= 2 ORDER BY SUM( d i s t r i b u c i o n . horas )
Vistas Creaci on de tablas virtuales. No existen en la realidad sino que se reeren a consultas en otras tablas Ejemplo: Nombres de los programadores que trabajan m as horas 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 on 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 a Ruiz (UCM) SQL - Lenguaje de acceso a bases de datos relacionales (I)
Condiciones con ANY, ALL Ya se han visto los operadores para comparaci on de conjuntos EXISTS e IN junto con sus versiones negadas. SQL tambi en soporta:
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 condici on se cumple si se verica la relaci on entre el valor de la expresi on Expr y todos (ALL) o alg un (ANY) de los valores de la subconsulta.
Ejemplo: DNI del empleado (o empleados si son varios) que trabaja(n) m as horas
Ejemplo: DNI del empleado (o empleados si son varios) que trabaja(n) m as horas
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 on 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) m as horas (Otra soluci on)
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 ) ;
Observaci on: Las funciones de agrupaci on se pueden aplicar a subconsultas siempre y cuando estas tengan una sola expresi on en su parte select y esta sea de tipo num erico.
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 c odigo de proyecto. Si el DNI es 4 poner General en otro 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 on ;
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 (Reuni on de relaciones) Se trata de reuniones condicionales y reuniones naturales Estas operaciones adicionales se usan a menudo como subconsultas dentro de la cl ausula FROM. Interna: en el resultado s olo participan tuplas que satisfacen la condici on Externa: tambi en participan las tuplas que no satisfacen la condici on
Reuni on interna (INNER JOIN) El INNER JOIN es otro tipo de composici on de tablas Permite emparejar las de distintas tablas de forma m as eciente que con el producto cartesiano En vez de hacer el producto cartesiano completo y luego seleccionar la las que cumplen la condici on de emparejamiento, para cada la de una de las tablas busca directamente en la otra tabla las las que cumplen la condici on, con lo cual se emparejan s olo las las que luego aparecen en el resultado
Reuni on interna (INNER JOIN) Pr estamo Sucursal NumPres Importe Centro P17 600 Moral P23 800 Nava P26 340 Clientes Nombre NumPres Santos P17 G omez P23 L opez 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 G omez NumPres P17 P23
Reunion condicional C de las relaciones Prestamo y Cliente, donde la condici on de reunion es Prestamo.numPres = Cliente.numPres. Atributos del resultado: Los atributos del lado izquierdo m as los atributos del lado derecho. El atributo numPres aparece dos veces.
Yolanda Garc a Ruiz (UCM) SQL - Lenguaje de acceso a bases de datos relacionales (I)
Reuni on externa por la izquierda (LEFT OUTER JOIN) El LEFT OUTER JOIN es otro tipo de composici on de tablas El resultado de esta operaci on siempre contiene todos las 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 G omez null NumPres P17 P23 null
Reuni on externa por la derecha (RIGHT OUTER JOIN) Esta operaci on es inversa a la anterior El resultado de esta operaci on siempre contiene todos los 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 G omez L opez NumPres P17 P23 P15
Reuni on externa completa (FULL OUTER JOIN) Esta operaci on presenta los resultados de tabla izquierda y tabla derecha aunque no tengan correspondencia en la otra tabla La tabla combinada contendr a, entonces, todos las las de ambas tablas y presentar a valores nulos NULL para las sin pareja.
Resultado de la consulta: Sucursal Centro Moral null Nava NumPres P17 P23 null P26 Importe 600 800 null 340 Nombre Santos G omez L opez null NumPres P17 P23 P15 null
Reuni on natural ( NATURAL JOIN) Es similar a INNER JOIN ... ON ... cuando la condici on del ON es una conjunci on de igualdades de los atributos comunes Es equivalente cuando se hace la proyecci on sobre el conjunto (sin elementos repetidos) de todos los atributos de ambas relaciones. La condici on USING se usa en las reuniones naturales para especicar los atributos comunes sobre los que se realiza la reuni on. Nota: El uso de esta sentencia NATURAL puede producir resultados ambiguos y generar problemas si la base de datos cambia, porque al a nadir, quitar, o renombrar las columnas, puede perder el sentido la sentencia; por esta raz on es preferible usar otro tipo de reuniones.
Yolanda Garc a Ruiz (UCM) 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 G omez
Sentencias INSERT, DELETE y UPDATE: permiten la modicaci on de datos Sentencia INSERT Con INSERT se agregan tuplas a las tablas La sintaxis b asica de la sentencia INSERT permite insertar 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 est an denidos) separada por comas y encerrada entre par entesis. La sintaxis b asica es:
INSERT INTO NombreTabla VALUES L i s t a d e v a l o r e s
Tambi en es posible obtener los datos mediante una consulta SELECT que act ue como proveedor de datos. Por ejemplo:
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 b asica de la sentencia DELETE permite borrar las tuplas de la tabla NombreTabla que cumplan la condici on Condici on.
DELETE FROM NombreTabla WHERE C o n d i c i on ;
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 a Ruiz (UCM) SQL - Lenguaje de acceso a bases de datos relacionales (I)
Nota: Si se emite la siguiente consulta se borrar an todos los programadores de la tabla Programadores (al menos, todos aquellos cuya eliminaci on no viole las restricciones de integridad referencial).
La cl ausula WHERE admite consultas anidadas Ejemplo: Borrar todos los programadores de la relaci on programadores seg un Direcciones a borrar
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 o n IN ( SELECT D i r e c c i on 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 condici on La sintaxis b asica de la sentencia UPDATE es la siguiente:
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: Direcci on del programador cuyo DNI es 8.
UPDATE P r o g r a m a d o r e s SET D i r e c c i o n = Puerta del Sol WHERE DNI = 8 ;
Yolanda Garc a Ruiz (UCM) SQL - Lenguaje de acceso a bases de datos relacionales (I)
Sentencia UPDATE Al igual que la sentencia DELETE, en la cl ausula WHERE se 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 on = t . Direcci on ) ;
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 est an caracterizados por:
El recurso al que se reere El usuario que concede el privilegio El usuario que lo recibe La acci on permitida sobre el recurso Si el privilegio se puede transmitir por el usuario al que se le ha concedido
Yolanda Garc a Ruiz (UCM) 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 denici on del esquema de una tabla)
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 o n TO U s u a r i o I n v i t a d o .
Privilegio puede ser cualquiera de los listados anteriormente RESTRICT|CASCADE se reeren a la revocaci on de los 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 o n TO NombreRol ; 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 ;
Proyecci on T =
a1 ,...,ak
R
, ak
...
Selecci on T = C R
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 (, , ...). Reuni on condicional T = R
Cond S
Conclusi on: no hay que olvidar que lo que se expresa en SQL son operaciones del algebra relacional. Adem as en SQL se pueden expresar consultas que no resultan expresables en algebra relacional: por ejemplo las consultas que utilizan operaciones de agregaci on.
Bibliograf a: A. Silberschatz, H.F. Korth y S. Sudarshan. Fundamentos de Bases de Datos. 3a edici on, McGraw-Hill, 1998. 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