Está en la página 1de 8

FORMAS DE USO DE SUBCONSULTAS Y FUNCIONES PRINCIPALES EN SQL SERVER

TRABAJO DE INVESTIGACION DE SISTEMAS DE BASES DE DATOS 1

ELABORADO POR:

MERCADO LEON, Johann

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO FACULTAD DE CIENCIAS QUMICAS, FSICAS Y MATEMTICAS INGENIERA INFORMTICA Y DE SISTEMAS CUSCO PER 2013

SUBCONSULTAS Subconsulta o consulta interna o consultas anidadas es una consulta en una consulta. Una subconsulta se suele aadir en la clusula WHERE de la sentencia SQL. La mayora de las veces, una subconsulta se utiliza cuando usted sabe cmo buscar un valor usando una instruccin SELECT, pero no sabe el valor exacto. Las subconsultas son una forma alternativa de devolver datos de varias tablas. Las subconsultas se pueden utilizar con las siguientes instrucciones SQL, junto con los operadores de comparacin como =, <,>,> =, <=, Etc

SELECT INSERT UPDATE DELETE

Ejemplo: 1) Por lo general, una subconsulta debe devolver solo un registro, pero a veces tambin puede devolver varios registros cuando se usa con operadores como IN, NOT IN en la clusula where. La consulta sera como: SELECT FROM WHERE games NOT IN ('Cricket', 'Football'); first_name, last_name, subject student_details

La salida debera ser similar a: first_name ------------Shekar Priya last_name subject ------------- ---------Gowda Chandra Badminton Chess

2) Vamos a considerar la mesa student_details que hemos utilizado antes. Si conoce el nombre de los alumnos que estudian asignaturas de ciencias, puede obtener su identificacin mediante el uso de esta consulta ms adelante, SELECT FROM WHERE first_name IN ('Rahul', 'Stephen'); pero si usted no sabe sus nombres, luego de obtener su id tiene que escribir la consulta de esta manera, SELECT FROM WHERE FROM WHERE subject= 'Science'); Salida: id -------100 102 first_name ------------Rahul Stephen first_name IN (SELECT id, first_name student_details first_name student_details id, first_name student_details

En la anterior sentencia SQL, primero la consulta interna se procesa primero y luego la consulta externa se procesa. 3) Una subconsulta se puede utilizar con la sentencia INSERT para agregar filas de datos de una o ms tablas a otra mesa. Vamos a tratar de agrupar a todos los alumnos que estudian matemticas en 'maths_group' una mesa. INSERT SELECT FROM id, INTO first_name student_details || WHERE maths_group(id, ' ' || subject= name) last_name 'Maths'

4) Una subconsulta se puede utilizar en la instruccin SELECT de la siguiente manera. Vamos a usar el producto y tabla order_items se define en la seccin sql_joins. select p.product_name, p.supplier_name, (select order_id from order_items where product_id = 101) as order_id from product p where p.product_id = 101 product_name -----------------Television supplier_name order_id -----------------Onida ---------5103

Subconsulta correlacionada Una consulta se denomina subconsulta correlacionada cuando tanto la consulta interna y la consulta externa son interdependientes. Para cada fila procesada por la consulta interna, la consulta externa se procesa tambin. La consulta interna depende de la consulta exterior antes de que pueda ser procesada. SELECT WHERE p.product_name p.product_id = (SELECT FROM o.product_id product FROM order_items p o

WHERE o.product_id = p.product_id);

NOTA: 1) Puede anidar tantas consultas que quieras, pero no se recomienda para anidar ms de 16 subconsultas en orculo.

2) Si una subconsulta no es dependiente de la consulta externa se denomina subconsulta no correlacionada.

EJERCICIOS PENDIENTES

-- Ejercicio 19 DROP TABLE #T1 DROP TABLE #T2 DROP TABLE #T3 DROP TABLE #T4 DROP TABLE #T5 Select CodPrestatario,Importe, DatePart ("YEAR" , FechaPrestamo) as Anio into #T1 from Prestamo select Q.CodComunidad, P.Importe, P.Anio into #T2 from #T1 P inner join Prestatario Q on P.CodPrestatario = Q.CodPrestatario -- determinamos el saldo total por anio, comunidad y lo guardamos en T3 Select CodComunidad ,Cast(Anio as integer) as Anio , Sum(Importe) as sumImporte into #T3 from #T2 group by CodComunidad, Anio order by Anio desc --determinamos el ultimo anio y lo almacenamos en una variable ultimoAnio declare @ultimoAnio int = (select top 1 Cast( DatePart ("YEAR" , FechaPrestamo)as integer) as Anio from Prestamo order by Anio) -- sacamos los dos ultimos anios select * into #T4 from #T3 where Anio = anio-1 order by Anio desc select * into #T5 from #T3 where Anio = anio-2 order by Anio desc -- determinamos a las cominidades que en los dos ultimos aos bajo el porcentaje de prestamos select A.Anio,A.Anio,A.sumImporte from #T3 A,#T4 B,#T5 C where A.sumImporte > B.sumImporte and B.sumImporte > C.sumImporte

-- Ejercicio 20 drop table #Tx drop table #Ty drop table #Tz drop table #Tv drop table #Tw select b.CodComunidad,a.Nombre, CodPrestatario into #Tz from Comunidad a inner join Prestatario b on a.CodComunidad=b.CodComunidad select #Tz.CodComunidad,#tz.Nombre, c.CodPrestatario,c.DocPrestamo, c.Importe,c.FechaVencimiento into #Ty from #Tz inner join Prestamo c on #Tz.CodPrestatario=c.CodPrestatario select #Ty.CodComunidad,#Ty.CodPrestatario,#ty.Nombre,#Ty.importe,#Ty.FechaVencimient o, d.FechaCancelacion into #Tw from #Ty inner join Amortizacion d on #Ty.DocPrestamo=d.DocPrestamo and #Ty.FechaVencimiento<FechaCancelacion select #tw.CodComunidad,#tw.Nombre,sum(#Tw.importe) as importe into #Tx from #Tw group by #Tw.CodComunidad,#Tw.Nombre select SUM(importe) as importe into #Tv from #Ty select #Tx.CodComunidad,#tx.Nombre,(#Tx.importe/#Tv.importe) as importe from #Tv,#Tx