Professional Documents
Culture Documents
subconsultas
Introduccin
USE
USE northwind
northwind
SELECT
SELECT T.orderid,
T.orderid, T.customerid
T.customerid
FROM
FROM (( SELECT
SELECT orderid,
orderid, customerid
customerid
FROM
FROM orders
orders )) AS
AS TT
GO
GO
USE
USE pubs
pubs
SELECT
SELECT title,
title, price
price
,(
,( SELECT
SELECT AVG(price)
AVG(price) FROM
FROM titles)
titles) AS
AS average
average
,price-(SELECT
,price-(SELECT AVG(price)
AVG(price) FROM
FROM titles)
titles) AS
AS difference
difference
FROM
FROM titles
titles
WHERE
WHERE type='popular_comp'
type='popular_comp'
GO
GO
La
Laconsulta
consultainterna
internautiliza
utilizalos
los
valores
valoresque
quepasa
pasalalaconsulta
consulta
externa
externa
USE
USE northwind
northwind
SELECT
SELECT orderid,
orderid, customerid
customerid
FROM
FROM orders
orders AS
AS or1
or1
WHERE
WHERE 20
20 << (SELECT
(SELECT quantity
quantity
FROM
FROM [order
[order details]
details] AS
AS od
od
WHERE
WHERE or1.orderid
or1.orderid == od.orderid
od.orderid
AND
AND od.productid
od.productid == 23)
23)
GO
GO
La
Laconsulta
consultainterna
internadevuelve
devuelve
un
unvalor
valoraala
laconsulta
consultaexterna
externa
Ejemplo
Ejemplo 11
Este
Esteproceso
procesose
serepite
repitepara
paralala
fila
filasiguiente
siguientede
delalaconsulta
consulta
externa
externa
Volver
Volveral
alpaso
paso11
USE
USE pubs
pubs
SELECT
SELECT DISTINCT
DISTINCT t1.type
t1.type
FROM
FROM titles
titles AS
AS t1
t1
WHERE
WHERE t1.type
t1.type IN
IN
(SELECT
(SELECT t2.type
t2.type
FROM
FROM titles
titles AS
AS t2
t2
WHERE
WHERE t1.pub_id
t1.pub_id <>
<> t2.pub_id)
t2.pub_id)
GO
GO
Ejemplo
Ejemplo 11
USE
USE pubs
pubs
SELECT
SELECT t1.type,
t1.type,
FROM
FROM titles
titles AS
AS
WHERE
WHERE t1.price
t1.price
GO
GO
Ejemplo
Ejemplo 11
t1.title,
t1.title, t1.price
t1.price
t1
t1
>> (( SELECT
SELECT AVG(t2.price)
AVG(t2.price) FROM
FROM titles
titles AS
AS t2
t2
WHERE
WHERE t1.type
t1.type == t2.type
t2.type ))
USE
USE pubs
pubs
SELECT
SELECT t1.type,
t1.type, t1.title,
t1.title, t1.price
t1.price
FROM
FROM titles
titles AS
AS t1
t1
INNER
INNER JOIN
JOIN titles
titles AS
AS t2
t2 ON
ON t1.type
t1.type == t2.type
t2.type
GROUP
GROUP BY
BY t1.type,
t1.type, t1.title,
t1.title, t1.price
t1.price
HAVING
HAVING t1.price
t1.price >> AVG(t2.price)
AVG(t2.price)
GO
GO
Ejemplo
Ejemplo 22
USE
USE pubs
pubs
SELECT
SELECT t1.type
t1.type
FROM
FROM titles
titles t1
t1
GROUP
GROUP BY
BY t1.type
t1.type
HAVING
HAVING MAX(t1.advance)
MAX(t1.advance) >=
>= ALL
ALL
(SELECT
(SELECT 22 ** AVG(t2.advance)
AVG(t2.advance)
FROM
FROM titles
titles t2
t2
WHERE
WHERE t1.type
t1.type == t2.type)
t2.type)
Ejemplo
Ejemplo 11
USE
USE northwind
northwind
SELECT
SELECT lastname,
lastname, employeeid
employeeid
FROM
FROM employees
employees AS
AS ee
WHERE
WHERE EXISTS
EXISTS (SELECT
(SELECT ** FROM
FROM orders
orders AS
AS oo
WHERE
WHERE e.employeeid
e.employeeid == o.employeeid
o.employeeid
AND
AND o.orderdate
o.orderdate == 5/9/1997')
5/9/1997')
GO
GO
Recomendaciones
Utilice
Utilice subconsultas
subconsultas para
para dividir
dividir una
una consulta
consulta compleja
compleja
Utilice
Utilice alias
alias de
de nombres
nombres de
de tablas
tablas en
en las
las subconsultas
subconsultas
correlacionadas
correlacionadas
Utilice
Utilice la
la instruccin
instruccin INSERTSELECT
INSERTSELECT para
para agregar
agregar filas
filas de
de
otros
otros orgenes
orgenes aa una
una tabla
tabla existente
existente