2009-02-09 9 views

ответ

9

Заявления, которые включают в себя подзапросы обычно принимают один из следующих форматов:

  • WHERE выражение [NOT] IN (подзапрос)
  • WHERE выражение comparison_operator [ANY | ALL] (подзапрос)
  • WHERE [NOT] EXISTS (подзапрос)

Subquery Fundamentals(SQL Server 2008 Books Online, январь 2009)

+0

Обратите внимание, что многие подзапросы лучше представлены как соединение с производной таблицей (хотя оптимизатор становится лучше при их переводе). –

3

Вы можете использовать подзапросы в SELECT, и ИНЕКЕ, как это :

select 
    c.customerid, 
    (
    select sum(i.amount) as totalspent 
    from item i 
    where i.customerid = c.customerid 
) as totalspent 
from customer c 
where exists 
(
    select * 
    from purchase p 
    where p.customerid = c.customerid 
) 
1

вы получили хорошие anwsers, но попытаться увидеть, если вы можете изменить логику таким образом, что подзапрос происходит в ЕКЕ, так что она выполняется только один раз вместо того, чтобы один раз для каждой строки, возвращаемой основным запросом.

Подзапросы действительно высасывают производительность системы.

+0

Согласовано. Подзапросы должны использоваться экономно. – jeremcc

+0

Верно, много вещей, которые вы можете сделать с подзапросами, которые вы также можете делать с объединениями - с помощью команды EXPLAIN вы можете увидеть, что быстрее. – Piskvor

Смежные вопросы