Descarga la aplicación para disfrutar aún más
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
Compartir