Разница между предложением where и предложением в SQL

SQL

Предисловие: 1.where нельзя размещать после GROUP BY 2. HAVING используется вместе с GROUP BY и ставится после GROUP BY. Функция в настоящее время эквивалентна WHERE 3. В условиях WHERE не может быть агрегатных функций, таких как SUM(), AVG() и т. д., в то время как HAVING может Где и Имея — это своего рода фильтрация результатов запроса, а написанная точка — оператор, задающий условия. Его использование, сходства и различия описаны ниже. Примечание. Поле, используемое в этой статье, представляет собой таблицу emp под пользователем по умолчанию scott в базе данных oracle, sal представляет зарплату сотрудника, а deptno представляет номер отдела.

1. Агрегатная функция

Прежде чем объяснять, давайте сначала разберемся с агрегатными функциями: агрегатные функции иногда называют статистическими функциями, и их функция обычно состоит в том, чтобы выполнять статистику по набору данных, например находить максимальное значение, минимальное значение, общее число и среднее значение. ( MAX, MIN, COUNT, AVG) и т. д. Фундаментальное отличие этих функций от других функций заключается в том, что они обычно работают с несколькими записями. Простой пример: SELECT SUM(sal) FROM emp, где SUM используется для подсчета суммы поля sal (salary) в таблице emp.В результате запрос возвращает только один результат — сумму заработной платы. Используя предложение GROUP BY, функции SUM и COUNT можно заставить работать с данными, принадлежащими группе.

2. где пункт

where используется только для значения, возвращаемого из предложения from, и каждая строка данных, возвращаемых предложением from, будет оценена и отфильтрована по условиям в предложении where. В предложении where разрешены операторы сравнения (>, =, , !=| и т. д.) и логические операторы (и, или, не). Поскольку все знакомы с оператором where, я не буду вдаваться в подробности.

Три, имеющих оговорку

Предложение have обычно используется с предложением order by. Потому что роль have заключается в дополнительной фильтрации результатов группировки статистики с помощью group by. Например: Теперь нужно найти номер отдела, сумма зарплаты которого больше 10000? первый шаг:

select deptno,sum(sal) from emp group by deptno;

Результаты фильтрации следующие:

DEPTNO SUM(SAL)

—— ——-

30 9400

20 10875

10 8750

Мы видим желаемый результат. Но что, если мы хотим, чтобы сумма заработной платы отдела превышала 10 000? Затем я подумал о том, чтобы отфильтровать результаты групповой статистики, чтобы помочь нам завершить ее. Шаг 2:

select deptno,sum(sal) from emp group by deptno having sum(sal)>10000;

Результаты фильтрации следующие:

DEPTNO SUM(SAL)

—— ——-

20 10875

Конечно, этот результат именно то, что мы хотим.

В-четвертых, давайте лучше разберемся в них, сравнив предложение where и предложение have.

В процессе запроса оператор агрегации (сумма, минимум, максимум, среднее, количество) выполняется до предложения наличия.Просто понятно, что я могу выполнять фильтрацию только после статистических результатов. Предложение where выполняется с приоритетом над оператором агрегирования (sum, min, max, avg, count) во время процесса запроса, поскольку оно фильтруется предложение за предложением. Предложение HAVING позволяет нам фильтровать группы данных после фильтрации. , а предложение WHERE фильтрует записи перед объединением. Например: Теперь нам нужны номера отделов, где номер отдела не равен 10, а сумма зарплаты больше 8000? Мы анализируем таким образом: отфильтровываем отделы, номер отдела которых не равен 10, через предложение where, затем подсчитываем заработную плату отдела, а затем используем предложение have для фильтрации статистических результатов.

select deptno,sum(sal) from emp 
where deptno!='10' group by deptno
having sum(sal)>8000; 

Результаты фильтрации следующие:

DEPTNO SUM(SAL)

—— ——-

30 9400

20 10875

Пять сходств и различий

Их сходство заключается в определении условий поиска, разница в том, что предложение where предназначено для одного фильтра, а предложение has относится к группам, а не к отдельным строкам. И, наконец, лучший способ понять условия наличия и предложения where — это порядок обработки этих предложений в базовом операторе select: предложение where может получать данные, выводимые только предложением from, в то время как предложение have может получать данные из группы с помощью , Вход в предложение where или from.