Имея (SQL) - Having (SQL)
Эта статья не цитировать любой источники.Сентябрь 2018 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
А ИМЕЕТ
пункт в SQL указывает, что SQL ВЫБРАТЬ
оператор должен возвращать только те строки, где агрегированные значения соответствуют указанным условия.
ИМЕЕТ
и КУДА
новичков часто путают, но они служат разным целям. КУДА
учитывается на более раннем этапе выполнения запроса, фильтруя строки, прочитанные из таблиц. Если запрос содержит ГРУППА ПО
данные из таблиц группируются и агрегируются. После операции агрегирования ИМЕЕТ
применяется, отфильтровывая строки, не соответствующие указанным условиям. Следовательно, КУДА
применяется к данным, считанным из таблиц, и ИМЕЕТ
должен применяться только к агрегированным данным, которые неизвестны на начальном этапе запроса.
Чтобы просмотреть текущее состояние, сформированное ГРУППА ПО
пункт, ИМЕЕТ
пункт используется.[требуется разъяснение ]
Примеры
Чтобы вернуть список идентификаторов отделов, общий объем продаж которых превысил 1000 долларов США на 1 января 2000 г., а также сумму их продаж на эту дату:
ВЫБРАТЬ DeptID, СУММ(SaleAmount)ИЗ ПродажиКУДА Дата продажи = '01-Янв-2000 'ГРУППА К DeptIDИМЕЕТ СУММ(SaleAmount) > 1000
Ссылаясь на образцы таблиц в Присоединиться пример, следующий запрос вернет список отделов, в которых работает более 1 сотрудника:
ВЫБРАТЬ Название отдела, СЧИТАТЬ(*) ИЗ Наемный рабочийПРИСОЕДИНИТЬСЯ отделение НА Наемный рабочий.DepartmentID = отделение.DepartmentID ГРУППА К Название отделаИМЕЕТ СЧИТАТЬ(*)>1;
ИМЕЕТ
удобно, но не обязательно. Код, эквивалентный приведенному выше примеру, но без использования ИМЕЕТ
, может выглядеть так:
ВЫБРАТЬ * ИЗ ( ВЫБРАТЬ Название отдела В КАЧЕСТВЕ deptNam, СЧИТАТЬ(*) В КАЧЕСТВЕ empCnt ИЗ Наемный рабочий В КАЧЕСТВЕ emp ПРИСОЕДИНИТЬСЯ отделение В КАЧЕСТВЕ отдел НА emp.DepartmentID = отдел.DepartmentID ГРУППА К deptNam) В КАЧЕСТВЕ grpКУДА grp.empCnt > 1;