Logo Studenta

clase 8

¡Este material tiene más páginas!

Vista previa del material en texto

Pág  1
BASES DE DATOS
LICENCIATURA EN ANALISIS DE SISTEMAS
BASES DE DATOS I
SQL - SUBCONSULTAS
Pág  2
BASES DE DATOS
SQL – CONSULTAS EN MAS DE UNA TABLA
Recuperar
Información de más 
de una tabla
SubConsultas
Por cada fila de una tabla, 
se realiza la búsqueda de la/s
fila/s relacionada/s en otra 
tablas.
Reunión
Se genera una únca tabla, en 
memoria, con las filas que 
resulten del argumento de la 
operación reunión (AR)
Pág  3
BASES DE DATOS
SQL – Subconsultas con escalar
Personas Localidades
IdPersona Nombre CodLocalidad CodLocalidad Nombre
1 Juan 4400 4400 Salta
2 Pedro 4530 4530 Orán
3 Diego 4427 4427 Cafayate
4 María 4400
5 Rosa 4400
Todos los atributos de las personas que viven en Salta
SELECT * FROM Personas 
WHERE CodLocalidad = (SELECT CodLocalidad FROM Localidades WHERE 
Nombre=‘Salta’)
IdPersona Nombre CodLocalidad
1 Juan 4400
4 María 4400
5 Rosa 4400
La Subconsulta se realiza antes
Podemos utilizar el operador igual, 
porque el resultado de la subconsulta 
se transforma a escalar
Pág  4
BASES DE DATOS
SQL – Subconsultas con escalar
Personas Localidades
IdPersona Nombre CodLocalidad CodLocalidad Nombre
1 Juan 4400 4400 Salta
2 Pedro 4530 4530 Orán
3 Diego 4427 4427 Cafayate
4 María 4400
5 Rosa 4400
Todos los atributos de las personas que NO viven en Salta
SELECT * FROM Personas 
WHERE CodLocalidad <> (SELECT CodLocalidad FROM Localidades WHERE 
Nombre = ‘Salta’)
IdPersona Nombre CodLocalidad
2 Pedro 4530
3 Diego 4427
Pág  5
BASES DE DATOS
Todos los atributos de las Personas de las localidades Salta y Cafayate
SELECT * FROM Personas WHERE CodLocalidad IN (4400, 4427)
Personas Localidades
IdPersona Nombre CodLocalidad CodLocalidad Nombre
1 Juan 4400 4400 Salta
2 Pedro 4530 4530 Orán
3 Diego 4427 4427 Cafayate
4 María 4400 5000 Córdoba
5 Rosa 4400
SQL – Subconsultas con inclusión (IN)
IdPersona Nombre CodLocalidad
1 Juan 4400
3 Diego 4427
4 María 4400
5 Rosa 4400
Pág  6
BASES DE DATOS
Todos los atributos de las Personas de las localidades Salta y Cafayate, utilizando el 
nombre de la ciudad
SELECT * FROM Personas WHERE CodLocalidad IN 
(SELECT CodLocalidad FROM Localidades WHERE NOMBRE IN (‘Salta’, ‘Cafayate’))
Personas Localidades
IdPersona Nombre CodLocalidad CodLocalidad Nombre
1 Juan 4400 4400 Salta
2 Pedro 4530 4530 Orán
3 Diego 4427 4427 Cafayate
4 María 4400 5000 Córdoba
5 Rosa 4400
SQL – Subconsultas con inclusión (IN)
IdPersona Nombre CodLocalidad
1 Juan 4400
3 Diego 4427
4 María 4400
5 Rosa 4400
Pág  7
BASES DE DATOS
Todos los atributos de las Personas de la Provincia de Salta
SELECT * FROM Personas WHERE CodLocalidad IN 
(SELECT CodLocalidad FROM Localidades WHERE CodProvincia = 
(SELECT CodProvincia FROM PROVINCAS WHERE Nombre = ‘Salta’))
Personas Localidades
IdPersona Nombre CodLocalidad CodLocalidad Nombre CodProvincia
1 Juan 4400 4400 Salta 1
2 Pedro 4530 4530 Orán 1
3 Diego 4427 4427 Cafayate 1
4 María 4400 5000 Córdoba 2
5 Rosa 4400 Provincias
CodProvincia Nombre
1 Salta
2 Córdoba
SQL – Subconsultas con inclusión (IN) y escalar
Pág  8
BASES DE DATOS
Listado alfabético de los clientes a los que se le realizaron ventas en octubre’07 
SELECT * FROM Clientes 
WHERE IdCliente IN (SELECT DISTINCT IdCliente FROM Ventas 
WHERE Fecha>='20071001‘ AND Fecha<'20071101')
ORDER BY Nombre
Ventas Clientes
IdVenta IdCliente Fecha Importe IdCliente Nombre
1 1 01/10/07 1000 1 Claudio
2 1 03/10/07 1500 2 Ana
3 2 03/10/07 1250 3 Pedro
4 1 10/10/07 2500
5 2 16/10/07 1720
IdCliente Nombre
2 Ana
1 Claudio
SQL – Subconsultas con inclusión (IN)
Pág  9
BASES DE DATOS
Cliente al que se le realizó la última venta en octubre’07
SELECT * FROM Clientes 
WHERE IdCliente = (SELECT IdCliente FROM Ventas 
WHERE IdVenta= (SELECT Max(IdVenta) FROM Ventas 
WHERE Fecha>='20071001‘ AND Fecha<'20071101')
)
IdCliente Nombre
2 Ana
SQL – Subconsultas con escalar
Ventas Clientes
IdVenta IdCliente Fecha Importe IdCliente Nombre
1 1 01/10/07 1000 1 Claudio
2 1 03/10/07 1500 2 Ana
3 2 03/10/07 1250 3 Pedro
4 1 10/10/07 2500
5 2 16/10/07 1720
Pág  10
BASES DE DATOS
Totales vendidos por cliente del mes de octubre’07
SELECT IdCliente, Nombre, 
(SELECT SUM(Importe) FROM Ventas WHERE IdCliente = Clientes.IdCliente
AND Fecha>='20071001' AND Fecha<'20071101') As Acumulado 
FROM Clientes
IdCliente Nombre Acumulado
1 Claudio 5000
2 Ana 2970
3 Pedro null
SQL – SUBCONSULTAS – Columnas calculadas
Ventas Clientes
IdVenta IdCliente Fecha Importe IdCliente Nombre
1 1 01/10/07 1000 1 Claudio
2 1 03/10/07 1500 2 Ana
3 2 03/10/07 1250 3 Pedro
4 1 10/10/07 2500
5 2 16/10/07 1720
Pág  11
BASES DE DATOS
Exists Especifica una subconsulta para probar la existencia de filas y devuelve 
verdadero si la subconsulta contiene alguna fila.
Todo los atributos de los clientes a los que se le realizaron ventas en octubre’07 
SELECT * FROM Clientes 
WHERE EXITS (SELECT * FROM Ventas 
WHERE IdCliente=Clientes.IdCliente
AND Fecha>='2007-10-01‘ AND Fecha<'2007-11-01')
IdCliente Nombre
1 Claudio
2 Ana
SQL – Subconsultas - Cláusula Exists
Ventas Clientes
IdVenta IdCliente Fecha Importe IdCliente Nombre
1 1 01/10/07 1000 1 Claudio
2 1 03/10/07 1500 2 Ana
3 2 03/10/07 1250 3 Pedro
4 1 10/10/07 2500
5 2 16/10/07 1720
Pág  12
BASES DE DATOS
Ventas Clientes
IdVenta IdCliente Fecha Importe IdCliente Nombre
1 1 01/10/07 1000 1 Consumidor final
2 1 03/10/07 1500 2 Alberto
3 2 03/10/07 1250 3 Pedro
4 1 10/10/07 2500
5 2 16/10/07 1720
Todo los atributos de los clientes a los que NO se le realizaron ventas en octubre’07 
SELECT * FROM Clientes WHERE NOT EXISTS 
(SELECT * FROM Ventas WHERE IdCliente=Clientes.IdCliente AND 
Fecha>='2007-10-01' AND Fecha<'2007-11-01')
IdCliente Nombre
3 Pedro
SQL – SUBCONSULTAS CLAUSULA EXISTS (NOT)
Pág  13
BASES DE DATOS
Todo los atributos de los clientes a los que NO se le realizaron ventas en octubre’07 
SELECT * FROM Clientes WHERE idCliente NOT IN 
(SELECT idCliente FROM Ventas WHERE IdCliente=Clientes.IdCliente AND 
Fecha>='2007-10-01' AND Fecha<'2007-11-01')
IdCliente Nombre
3 Pedro
SQL – Subconsultas con no inclusión (NOT IN)
Ventas Clientes
IdVenta IdCliente Fecha Importe IdCliente Nombre
1 1 01/10/07 1000 1 Claudio
2 1 03/10/07 1500 2 Ana
3 2 03/10/07 1250 3 Pedro
4 1 10/10/07 2500
5 2 16/10/07 1720

Otros materiales