Вы находитесь на странице: 1из 103

Introducci on Sentencias DML SQL y algebra relacional

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


Yolanda Garc a Ruiz (UCM)

November 30, 2010

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Sentencias DML SQL contempla 4 sentencias de este tipo:


Select para consultas, Insert para a nadir las Delete para borrar las Update para modicar las

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Forma b asica de las consultas SQL:


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

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)

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 ;

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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 cl ausula DISTINCT Respuesta: dniEmp 4 1

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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

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)

Yolanda Garc a Ruiz (UCM)

Introducci on Sentencias DML SQL y algebra relacional

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 odigo Proyecto , 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 a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Cl ausula WHERE Las condiciones pueden ser:


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

Las condiciones booleanas simples pueden ser:


De comparaci on entre valores (=, >, >=, <, <=, <>) De similitud entre cadenas de caracteres a t r i b u t o LIKE p a t r on Comprobaci on de NULL 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 a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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 a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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 a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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 a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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 tel efono

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 ;

La consulta anterior tambi en se puede escribir as :

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 ;

La consulta anterior tambi en se puede escribir as :


SELECT P . nombre , P . d i r e c c i on 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 on D WHERE D . dniEmp = P . DNI AND D . C o d i g o P r = P2 ;

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 ;

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 ;

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 )

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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)

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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)

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Consultas anidadas La evaluaci on de la siguiente consulta anidada es la siguiente:


Examinar cada una de las las de proyectos con DNI = 4 para cada una de ellas comprobar si se cumple la condici on del WHERE:
dniDir = 4 o Evaluar la consulta para distribuci on. Esto puede ser raro para 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 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)

Introducci on Sentencias DML SQL y algebra relacional

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 a examinado en cada momento en la consulta exterior

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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 a examinado en cada momento en la consulta exterior Ejemplo: Seleccionar los empleados que dirigen y trabajan en un mismo proyecto

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Si hubiera dos Jacintos

ERROR

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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.

NOT EXISTS (subconsulta):


Cierto si la consulta no devuelve ning un valor Falso e.o.c.

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Programadores que trabajan m as de 10 horas en alg un 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 on 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 AND D i s t r i b u c i o n . horas > 10)

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Programadores que no trabajan en ning un proyecto


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 on 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 a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

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


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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

SELECT FROM d i s t r i b u c i on 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 a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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 on

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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 on 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 cl ausula HAVING deben tener un solo valor por grupo. La cl ausula HAVING determina si hay que generar una la respuesta para un grupo dado. Las columnas que aparecen en condicion sobre grupos deben aparecer como argumentos del operador de agregaci on o en la cl ausula GROUP BY La lista de atributos de la cl ausula SELECT consta de: Lista de nombres de columnas. Estas deben aparecer tambi en en lista para f ormar grupos Lista de operaciones de agregaci on
Yolanda Garc a Ruiz (UCM) SQL - Lenguaje de acceso a bases de datos relacionales (I)

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Nombres y total de horas de los programadores que trabajan en m as de 2 proyectos diferentes

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 )

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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)

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Nombres de los programadores que trabajan m as horas 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 a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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.

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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.

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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 a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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

Super Jefe general empleado empleado general


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

Yolanda Garc a Ruiz (UCM)

Introducci on Sentencias DML SQL y algebra relacional

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 a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

M as ejemplos ... C odigo de los proyectos dirigidos por 002


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 m as de 5 horas en alg un proyecto

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

M as ejemplos ... C odigo de los proyectos dirigidos por 002


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 m as de 5 horas en alg un proyecto


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 a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Empleados con nombre a NULL

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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 a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Empleados que viven juntos

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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 a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

DNI del programador que trabaja m as horas en total

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

DNI del programador que trabaja m as horas en total


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 a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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 ;

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Reuni on interna (INNER JOIN)


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)

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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 G omez null NumPres P17 P23 null

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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 G omez L opez NumPres P17 P23 P15

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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.

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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 G omez L opez null NumPres P17 P23 P15 null

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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)

Introducci on Sentencias DML SQL y algebra relacional

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 G omez

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Insertar un programador en la relaci on Programadores


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

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 ;

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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)

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Ejemplo: Borrar todos los programadores de la relaci on 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 an todos los programadores de la tabla Programadores (al menos, todos aquellos cuya eliminaci on no viole las restricciones de integridad referencial).

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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

Introducci on Sentencias DML SQL y algebra relacional

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 denici on del esquema de una tabla)

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Concesi on de privilegios 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 o n TO U s u a r i o I n v i t a d o .

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

Sentencias SELECT Sentencias INSERT, DELETE y UPDATE Sentencias DAL

Revocaci on de privilegios 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 revocaci on de los permisos propagados a otros usuarios

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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 o n TO NombreRol ; GRANT NombreRol TO L u i s WITH GRANT OPTION ;

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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 a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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

Proyecci on T =

a1 ,...,ak

R
, ak

INSERT INTO T SELECT a1 , FROM R ;

...

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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

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

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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.

Yolanda Garc a Ruiz (UCM)

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

Introducci on Sentencias DML SQL y algebra relacional

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

Yolanda Garc a Ruiz (UCM)

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

Вам также может понравиться