‘Where’ and ‘Having’ clause both are used to filter the rows fetched
from select statement however there is a difference:
WHERE CLAUSE
Using where clause we can restrict or filter the records that we get from
select statement.
Let say from the select statement we are fetching 10 records but we
wanted to display 3 records.
In the below example we are trying to fetch only the employee records
for deptno = 10.
Ex:
SELECT *
FROM emp
WHERE deptno = 10;
EMPNO ENAME JOB
MGR HIREDATE SAL
COMM DEPTNO
------ ----- ------
------ ---------- -----
----- ------
7782 CLARK MANAGER
7839 6/9/1981 2450 10
7839 KING PRESIDENT 11/17/1981 5000 10
7934 MILLER CLERK
7782 1/23/1982 1300 10
HAVING
Before we discuss ‘Having’ clause lets understand ‘Group by’ clause
first.
Using group by, we can create groups of related information.
Columns used in ‘select’ must be used with ‘group by’, otherwise system
does not recognize it as a group by expression.
In the below example we are trying to display sum of salaries at each
dept level.
When SQL statement is run, data fetched from the database is grouped
first based on deptno and then sum() function is applied to get the desired
result.
Ex:
SELECT deptno, SUM(sal)
FROM emp
GROUP BY deptno;
DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400
In this example we are trying to group the records using two columns
deptno and job
SELECT deptno,job,SUM(sal)
FROM emp
GROUP BY deptno,job;
DEPTNO JOB
SUM(SAL)
-------- --------- ----------
10 CLERK
1300
10 MANAGER
2450
10 PRESIDENT
5000
20 ANALYST
6000
20 CLERK
1900
20 MANAGER
2975
30 CLERK
950
30 MANAGER
2850
30 SALESMAN
5600
Having Clause:
Having clause is used to restrict the records that are grouped using
group by clause.
Having clause is just like where clause but it can be used only with
group by as we cannot use where clause in group by.
Having clause works or can be used, only in the combination with group
by clause.
In the below example we are trying to fetch all deptno and job records
whose aggregated salary of its employees is greater than 3000 ( Sum(sal) >
3000 ).
Having clause gets executed after the records are fetched and grouped.
Ex:
SELECT deptno,job,SUM(sal) tsal
FROM emp
GROUP BY deptno,job
HAVING SUM(sal) > 3000;
DEPTNO JOB TSAL
---------- ---------
--------
10 PRESIDENT 5000
20 ANALYST 6000
30 SALESMAN 5600
In this example, after applying the having clause we are trying to order
the records by JOB.
SELECT deptno,job,SUM(sal) tsal
FROM emp
GROUP BY deptno,job
HAVING SUM(sal) > 3000
ORDER BY job;
DEPTNO JOB
TSAL
---------- ---------
-------
20 ANALYST 6000
10 PRESIDENT 5000
30 SALESMAN 5600
ORDER OF EXECUTION
Group the rows together based
on group by clause.
Calculate the group functions
for each group.
Choose and eliminate the
groups based on the having clause.
Order the groups based on the specified
column.
No comments:
Post a Comment