Как стать автором
Обновить

Комментарии 3

HAVING еще удобно использовать с под запросом. Например HAVING (SELECT TOP 1 1 FROM table where table.cid=query.cid).
Всему, свое время. Про подзапросы, я скорее всего, буду рассказывать в следующей части, и не в первую очередь, а где и как их применять это уже насколько хватит фантазии. ;) Я специально пока не затрагивал их, т.к. с подзапросами, начинающие, без знания других основных возможностей оператора SELECT, порой такие трехэтажные конструкции могут нагородить…

В вашем примере, вы наверно хотели сказать, что-то типа:

SELECT DepartmentID,SUM(Salary) SalaryAmount
FROM Employees emp
GROUP BY DepartmentID
HAVING EXISTS(SELECT * FROM Departments dep WHERE dep.ID=emp.DepartmentID)


или

SELECT DepartmentID,SUM(Salary) SalaryAmount
FROM Employees emp
GROUP BY DepartmentID
HAVING (SELECT TOP 1 dep.Name FROM Departments dep WHERE dep.ID=emp.DepartmentID ORDER BY dep.Name)=N'ИТ'


?

Примеры в данном случае абсолютно абстрактные и не несут какого-то определенного смысла.

В случае использования EXISTS, нет смысла писать (SELECT TOP 1), достаточно (SELECT *), оптимизаторы современных СУБД (по крайней мере могу судить по MS SQL и Oracle), воспримут это абсолютно одинаково.
Вы правильно меня поняли. Иногда такие конструкции выигрывают по скорости нежели простой JOIN с этой же таблицей, особенно на больших таблицах.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации