Subqueries – Parte I

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (4)  (1)

Veja nesta primeira parte sobre subqueries, o que ela significa e sua utilização.

O que é uma subquery ?

Subquery é um comando SELECT que foi "embutido" noutro comando SELECT, UPDATE, DELETE ou dentro de outra subquery.

A finalidade da subquery é retornar um conjunto de linhas para a query principal

Utilização

Tipicamente utilizamos subqueries na filtragem de pesquisas (=cláusula WHERE) nas cláusulas IN() e EXISTS(), mas subqueries também podem aparecer também na cláusula FROM ou como substituto de expressões. Exemplos:

  • Utilizando uma subquery em conjunto com a cláusula IN().

select *
from [order details]
where orderid IN (select orderid from orders where CustomerID='VINET')

---------------------------------------------------------------------
OrderID        ProductID         UnitPrice             Quantity Discount
----------- ----------- --------------------- -------- --------------
10248             11                14.0000                  12       0.0
10248             42                9.8000                   10       0.0
10248             72                34.8000                  5        0.0
10274             71                17.2000                  20       0.0
10274             72                27.8000                  7        0.0
10295             56                30.4000                  4        0.0
10737             13                6.0000                   4        0.0
10737             41                9.6500                   12       0.0
10739             36                19.0000                  6        0.0
10739             52                7.0000                   18       0.0

  • Utilizando uma subquery em conjunto com a cláusula EXISTS().

select *
from [order details] od
where EXISTS (select orderid from orders where orderid = od.orderid and CustomerId='VINET')

-------------------------------------------------------------------
OrderID  ProductID         UnitPrice             Quantity Discount
------- ----------- --------------------- -------- ------------------------

10248       11          14.0000                        12       0.0
10248       42          9.8000                         10       0.0
10248       72          34.8000                        5        0.0
10274       71          17.2000                        20       0.0
10274       72          27.8000                        7        0.0
10295       56          30.4000                        4        0.0
10737       13          6.0000                         4        0.0
10737       41          9.6500                         12       0.0
10739       36          19.0000                        6        0.0
10739       52          7.0000                         18       0.0

  • Utilizando uma subquery como "alvo" da cláusula FROM

select top 5 o.orderid,o.customerid,od.total_quantity
from
(
   select orderid,total_quantity=sum(quantity)
   from [order details]
   group by orderid
) od
inner join orders o
on o.orderid=od.orderid

--------------------------------------------------------------------------

orderid     customerid total_quantity
----------- ---------- --------------
10248          VINET         27
10249          TOMSP       49
10348          WANDK       40
10349          SPLIR         24
10350          LAMAI        33

  • Utilizando uma subquery para substituir uma expressão

select top 5
       orderid, productid, unitprice,
       avg_price=(select avg(unitprice) from [order details])
from [order details]
------------------------------------------------------------------
orderid   productid   unitprice             avg_price 
----- ----------- --------------------- ---------------------
10248       11          14.0000                  26.2185
10248       42          9.8000                   26.2185
10248       72          34.8000                  26.2185
10249       14          18.6000                  26.2185
10249       51          42.4000                  26.2185

Conclusão

A utilização de subqueries é uma boa opção para resolver queries complexas, mas essa matéria não termina por aqui: continuaremos com esse assunto explorando Subqueries Correlatas, um tipo especial de subquery bastante utilizado.  Até lá!

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?