Está en la página 1de 103

Introduccin o Sentencias DML SQL y lgebra relacional a

SQL - Lenguaje de acceso a bases de datos relacionales (I)


Yolanda Garc Ruiz (UCM) a

November 30, 2010

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Sentencias DML SQL contempla 4 sentencias de este tipo:


Select para consultas, Insert para aadir las n Delete para borrar las Update para modicar las

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Forma bsica de las consultas SQL: a


SELECT l i s t a d e a t r i b u t o s FROM l i s t a de t a b l a s WHERE c o n d i c i n ; o

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)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 ;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

SELECT dniEmp FROM d i s t r i b u c i n o WHERE h o r a s >=10 AND h o r a s <=20;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

SELECT dniEmp FROM d i s t r i b u c i n o WHERE h o r a s >=10 AND h o r a s <=20;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Para trabajar con conjuntos se utiliza la clusula DISTINCT a Respuesta: dniEmp 4 1

SELECT DISTINCT dniEmp FROM d i s t r i b u c i n o WHERE h o r a s >=10 AND h o r a s <=20;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Para seleccionar todos los atributos se usa un en lugar de lista de atributos


SELECT FROM p r o g r a m a d o r e s WHERE DNI=4;

Los atributos pueden ser expresiones


SELECT DNIEmp , Horas /10 FROM d i s t r i b u c i n ; o

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)

Yolanda Garc Ruiz (UCM) a

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Se pueden renombrar las cabeceras de las columnas de la salida de una consulta


SELECT c o d i g o P r C d i g o P r o y e c t o , o DniEmp DNI Empleado FROM d i s t r i b u c i o n

Respuesta: Codigo Proyecto P1 ... DNI Empleado 4 ...

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Clusula WHERE a Las condiciones pueden ser:


Conjunciones (AND) de coondiciones booleanas simples Disyunciones (OR) de coondiciones booleanas simples

Las condiciones booleanas simples pueden ser:


De comparacin entre valores (=, >, >=, <, <=, <>) o De similitud entre cadenas de caracteres a t r i b u t o LIKE p a t r n o Comprobacin de NULL o a t r i b u t o I S NULL a t r i b u t o I S NOT NULL Pertenencia a conjuntos de valores a t r i b u t o IN ( v1 , v2 , . . . . , vn )

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Seleccionar los datos de los empleados analistas cuyo nombre comienza por Te

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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% ;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Clusula FROM a Ejemplo: Seleccionar los nombres y direcciones de los programadores que trabajan en el proyecto P2

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 ;

La consulta anterior tambin se puede escribir as e :

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 ;

La consulta anterior tambin se puede escribir as e :


SELECT P . nombre , P . d i r e c c i n o FROM p r o g r a m a d o r e s P , d i s t r i b u c i n D o WHERE D . dniEmp = P . DNI AND D . C o d i g o P r = P2 ;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Clusula FROM a Ejemplo: Nombres y direcciones de los empleados que son a la vez programadores y analistas

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 ;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Nombre de los programadores que trabajan en algn u proyecto que esta dirigido por un programador

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 ;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 )

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Consultas anidadas La evaluacin de la siguiente consulta anidada es la siguiente: o


Examinar cada una de las las de proyectos con DNI = 4 para cada una de ellas comprobar si se cumple la condicin del o WHERE:
dniDir = 4 o Evaluar la consulta para distribucin. Esto puede ser raro para o la consulta, pero no lo es para otro tipo de consultas: Las consultas anidadas correlacionadas

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)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 ) ;

Si hubiera dos Jacintos

ERROR

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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.

NOT EXISTS (subconsulta):


Cierto si la consulta no devuelve ningn valor u Falso e.o.c.

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Programadores que trabajan ms de 10 horas en algn a u proyecto


SELECT Nombre FROM p r o g r a m a d o r e s WHERE EXISTS (SELECT C o d i g o P r 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 p r o g r a m a d o r e s . DNI AND D i s t r i b u c i n . h o r a s > 1 0 ) o

Para cada la f de programadores, se evala la subconsulta . Si la u subconsulta devuelve alguna la, entonces f aparece en la respuesta.

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Programadores que no trabajan en ningn proyecto u


SELECT Nombre FROM p r o g r a m a d o r e s WHERE NOT EXISTS (SELECT C o d i g o P r FROM d i s t r i b u c i n o WHERE 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 . DNI )

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

SELECT FROM d i s t r i b u c i n o WHERE h o r a s > 10 ORDER BY h o r a s


Yolanda Garc Ruiz (UCM) a SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

SELECT FROM d i s t r i b u c i n o WHERE h o r a s > 10 ORDER BY h o r a s desc , C o d i g o P r

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

SELECT COUNT( ) FROM p r o g r a m a d o r e s

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Distribucion codigoPr P1 P1 P3 P7 P4 dniEmp 4 5 1 1 4 horas 12 2 10 34 34 Respuesta: count(codProy) 5

SELECT COUNT( C o d i g o P r ) FROM d i s t r i b u c i n ; o

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Distribucion codigoPr P1 P1 P3 P7 P4 dniEmp 4 5 1 1 4 horas 12 2 10 34 34 Respuesta: COUNT(DISTINCT CodigoPr) 4

SELECT COUNT(DISTINCT C o d i g o P r ) FROM d i s t r i b u c i n ; o

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Distribucion codigoPr P1 P1 P3 P7 P4 dniEmp 4 5 1 1 4 horas 2 34 34 Respuesta: count(horas) 3

SELECT COUNT( h o r a s ) FROM d i s t r i b u c i n ; o

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Distribucion codigoPr P1 P1 P3 P7 P4 dniEmp 4 5 1 1 4 horas 12 2 10 34 34 Respuesta: SUM(horas) 92

SELECT SUM( h o r a s ) FROM d i s t r i b u c i n o

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

SELECT CodigoPr , SUM( h o r a s ) FROM d i s t r i b u c i n o GROUP BY C o d i g o P r

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

SELECT dniEmp , SUM( h o r a s ) FROM d i s t r i b u c i n o GROUP BY dniEmp HAVING SUM( h o r a s ) >20

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

La forma general de las consultas SQL con estas extensiones es:


SELECT [ DISTINCT ] l i s t a d e a t r i b u t o s FROM l i s t a de t a b l a s WHERE c o n d i c i n o GROUP BY l i s t a p a r a f r o m a r g r u p o s HAVING c o n d i c i o n s o b r e g r u p o s ; Si se omite GROUP BY se considera a toda la tabla como un grupo Las expresiones de la clusula HAVING deben tener un solo valor a por grupo. La clusula HAVING determina si hay que generar una a la respuesta para un grupo dado. Las columnas que aparecen en condicion sobre grupos deben aparecer como argumentos del operador de agregacin o en la clusula GROUP BY o a La lista de atributos de la clusula SELECT consta de: a Lista de nombres de columnas. Estas deben aparecer tambin e en lista para f ormar grupos Lista de operaciones de agregacin o
Yolanda Garc Ruiz (UCM) a SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Nombres y total de horas de los programadores que trabajan en ms de 2 proyectos diferentes a

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Nombres de los programadores que trabajan ms horas a que la media


... CREATE VIEW MediaHoras ( media ) AS SELECT AVG( h o r a s ) FROM NombreHoras ; SELECT N . Nombre FROM NombreHoras WHERE h o r a s > (SELECT media FROM MediaHoras ) ;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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.

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: DNI del empleado (o empleados si son varios) que trabaja(n) ms horas a

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 ) ;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 ;

Nombre Ana Gustavo Alberto

Trabaja poco poco mucho

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Super Jefe general empleado empleado general


SQL - Lenguaje de acceso a bases de datos relacionales (I)

Yolanda Garc Ruiz (UCM) a

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Queremos un listado con el formato: Analistas 2 Programadores 3

SELECT SUM( I F ( e s A n a l i s t a , 1 , 0 ) ) A n a l i s t a s , SUM( I F ( e s P r o g r a m a d o r , 1 , 0 ) ) P r o g r a m a d o r e s FROM e m p l e a d o s ;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ms ejemplos ... a Cdigo de los proyectos dirigidos por 002 o


SELECT c o d i g o FROM p r o y e c t o s WHERE DNIDir= 002 ;

DNI del empl. que trabajan ms de 5 horas en algn proyecto a u

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ms ejemplos ... a Cdigo de los proyectos dirigidos por 002 o


SELECT c o d i g o FROM p r o y e c t o s WHERE DNIDir= 002 ;

DNI del empl. que trabajan ms de 5 horas en algn proyecto a u


SELECT d i s t i n c t DniEmp FROM d i s t r i b u c i o n WHERE h o r a s >5;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Empleados con nombre a NULL

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Empleados con nombre a NULL MAL:


SELECT FROM e m p l e a d o s WHERE nombre=NULL;

BIEN:
SELECT FROM e m p l e a d o s WHERE nombre I S NULL;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Empleados que viven juntos

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Empleados que viven juntos


SELECT E1 . DNI FROM e m p l e a d o s E1 , e m p l e a d o s E2 WHERE E1 . d i r e c c i o n=E2 . d i r e c c i o n AND E1 . DNI<>E2 . DNI ;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

DNI del programador que trabaja ms horas en total a

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

DNI del programador que trabaja ms horas en total a


SELECT D1 . DNIEmp , SUM(D1 . h o r a s ) FROM d i s t r i b u c i o n D1 GROUP BY D1 . dniEmp HAVING SUM(D1 . h o r a s ) >= ALL (SELECT SUM(D2 . h o r a s ) FROM d i s t r i b u c i o n D2 GROUP BY D2 . dniEmp ) ;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 ;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Reunin interna (INNER JOIN) o


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)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

SELECT FROM Prestamo LEFT OUTER 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 Nava NumPres P17 P23 P26 Importe 600 800 340 Nombre Santos Gmez o null NumPres P17 P23 null

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

SELECT FROM Prestamo RIGHT OUTER 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 null NumPres P17 P23 null Importe 600 800 null Nombre Santos Gmez o Lpez o NumPres P17 P23 P15

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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.

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

SELECT FROM Prestamo FULL OUTER 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 null Nava NumPres P17 P23 null P26 Importe 600 800 null 340 Nombre Santos Gmez o Lpez o null NumPres P17 P23 P15 null

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

SELECT FROM Prestamo NATURAL JOIN C l i e n t e s

Resultado de la consulta: Sucursal Centro Moral NumPres P17 P23 Importe 600 800 Nombre Santos Gmez o

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Insertar un programador en la relacin Programadores o


INSERT INTO P r o g r a m a d o r e s VALUES ( 8 , Pepe P r e z , Pico , 8 , 9 1 8 8 8 8 8 8 8 ) ; e

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 ;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Borrar todos los programadores de la relacin o programadores


DELETE FROM P r o g r a m a d o r e s ;

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).

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 ) ;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Concesin de privilegios o Sintaxis general:


GRANT P r i v i l e g i o ON R e c u r s o TO U s u a r i o s [ WITH GRANT OPTION ]

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Revocacin de privilegios o Sintaxis general:


REVOKE P r i v i l e g i o ON R e c u r s o FROM U s u a r i o s [ RESTRICT |CASCADE]

Privilegio puede ser cualquiera de los listados anteriormente RESTRICT|CASCADE se reeren a la revocacin de los o permisos propagados a otros usuarios

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 ;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

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 ;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

Producto cartesiano T = R1 Rn
INSERT INTO T SELECT FROM R1 , . . . , Rk ;

Proyeccin T = o

a1 ,...,ak

R
, ak

INSERT INTO T SELECT a1 , FROM R ;

...

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

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

INSERT INTO T SELECT FROM R INNER JOIN S ON Cond ;

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introduccin o Sentencias DML SQL y lgebra relacional a

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

Yolanda Garc Ruiz (UCM) a

SQL - Lenguaje de acceso a bases de datos relacionales (I)

También podría gustarte