Oracle Database SQL Certified Associate
1 Introduction to SQL
1-1 Overview of SQL
1-2 History of SQL
1-3 SQL Standards
2 SQL Data Types
2-1 Numeric Data Types
2-2 Character Data Types
2-3 Date and Time Data Types
2-4 Large Object (LOB) Data Types
2-5 Miscellaneous Data Types
3 Creating and Managing Tables
3-1 Creating Tables
3-2 Modifying Tables
3-3 Dropping Tables
3-4 Table Constraints
3-5 Temporary Tables
4 Data Manipulation Language (DML)
4-1 Inserting Data
4-2 Updating Data
4-3 Deleting Data
4-4 Selecting Data
4-5 Using Subqueries
5 Data Control Language (DCL)
5-1 Granting Privileges
5-2 Revoking Privileges
6 Data Definition Language (DDL)
6-1 Creating Tables
6-2 Altering Tables
6-3 Dropping Tables
6-4 Creating Indexes
6-5 Dropping Indexes
6-6 Creating Views
6-7 Dropping Views
7 SQL Functions
7-1 Single-Row Functions
7-2 Aggregate Functions
7-3 Group Functions
7-4 Analytical Functions
8 Joins and Subqueries
8-1 Inner Joins
8-2 Outer Joins
8-3 Self-Joins
8-4 Cross Joins
8-5 Subqueries
9 Set Operators
9-1 UNION
9-2 UNION ALL
9-3 INTERSECT
9-4 MINUS
10 Grouping and Aggregation
10-1 GROUP BY Clause
10-2 HAVING Clause
10-3 ROLLUP and CUBE
10-4 GROUPING SETS
11 Transactions and Concurrency
11-1 Transaction Control Statements
11-2 Locking and Concurrency
11-3 Isolation Levels
12 Oracle SQL Developer
12-1 Overview of Oracle SQL Developer
12-2 Using SQL Worksheet
12-3 Managing Connections
12-4 Running Scripts
13 Advanced SQL Topics
13-1 Recursive Queries
13-2 Model Clause
13-3 PIVOT and UNPIVOT
13-4 Flashback Query
14 Performance Tuning
14-1 Query Optimization
14-2 Indexing Strategies
14-3 Analyzing Query Performance
15 Security and Auditing
15-1 User Management
15-2 Role Management
15-3 Auditing SQL Statements
16 Backup and Recovery
16-1 Backup Strategies
16-2 Recovery Strategies
16-3 Using RMAN
17 Oracle Database Architecture
17-1 Overview of Oracle Database Architecture
17-2 Memory Structures
17-3 Process Structures
17-4 Storage Structures
18 PLSQL Basics
18-1 Introduction to PLSQL
18-2 PLSQL Block Structure
18-3 Variables and Data Types
18-4 Control Structures
18-5 Exception Handling
19 Oracle SQL Certification Exam Preparation
19-1 Exam Objectives
19-2 Sample Questions
19-3 Practice Tests
19-4 Exam Tips
HAVING Clause in Oracle SQL

HAVING Clause in Oracle SQL

Key Concepts

The HAVING clause in Oracle SQL is used to filter groups of rows that have been aggregated by the GROUP BY clause. Understanding the following key concepts is essential for effectively using the HAVING clause:

1. HAVING Clause

The HAVING clause is used to specify conditions that filter which groups are displayed in the results. It is often used with aggregate functions like SUM, COUNT, AVG, MIN, and MAX.

2. GROUP BY Clause

The GROUP BY clause is used to group rows that have the same values into summary rows. The HAVING clause is applied after the GROUP BY clause to filter these groups.

3. Aggregate Functions

Aggregate functions perform a calculation on a set of values and return a single value. Common aggregate functions include SUM, COUNT, AVG, MIN, and MAX. These functions are often used in conjunction with the HAVING clause.

4. Filtering Groups

The HAVING clause filters groups based on the result of aggregate functions. This is different from the WHERE clause, which filters individual rows before aggregation.

5. Performance Considerations

Using the HAVING clause can impact query performance, especially with large datasets. It is important to optimize queries and consider indexing strategies to ensure efficient execution.

Detailed Explanation

1. HAVING Clause

The HAVING clause is used to filter groups of rows that have been aggregated by the GROUP BY clause. For example, to find departments with more than 10 employees:

SELECT DepartmentID, COUNT(EmployeeID) AS EmployeeCount FROM Employees GROUP BY DepartmentID HAVING COUNT(EmployeeID) > 10;

2. GROUP BY Clause

The GROUP BY clause is used to group rows that have the same values into summary rows. For example, to group employees by department:

SELECT DepartmentID, COUNT(EmployeeID) AS EmployeeCount FROM Employees GROUP BY DepartmentID;

3. Aggregate Functions

Aggregate functions perform a calculation on a set of values and return a single value. For example, to find the average salary of employees in each department:

SELECT DepartmentID, AVG(Salary) AS AvgSalary FROM Employees GROUP BY DepartmentID;

4. Filtering Groups

The HAVING clause filters groups based on the result of aggregate functions. For example, to find departments with an average salary greater than $50,000:

SELECT DepartmentID, AVG(Salary) AS AvgSalary FROM Employees GROUP BY DepartmentID HAVING AVG(Salary) > 50000;

5. Performance Considerations

Using the HAVING clause can impact query performance, especially with large datasets. For example, to optimize a query using the HAVING clause:

SELECT DepartmentID, COUNT(EmployeeID) AS EmployeeCount FROM Employees GROUP BY DepartmentID HAVING COUNT(EmployeeID) > 10;

Examples and Analogies

Example 1: Finding Departments with High Employee Count

Imagine you have a list of employees grouped by department, and you want to find departments with more than 10 employees. You would use the HAVING clause to filter these groups:

SELECT DepartmentID, COUNT(EmployeeID) AS EmployeeCount FROM Employees GROUP BY DepartmentID HAVING COUNT(EmployeeID) > 10;

Example 2: Filtering Departments by Average Salary

If you want to find departments where the average salary is greater than $50,000, you would use the HAVING clause with the AVG aggregate function:

SELECT DepartmentID, AVG(Salary) AS AvgSalary FROM Employees GROUP BY DepartmentID HAVING AVG(Salary) > 50000;

Example 3: Finding Departments with Low Employee Turnover

To find departments with fewer than 5 employees who have left the company, you would use the HAVING clause with the COUNT aggregate function:

SELECT DepartmentID, COUNT(EmployeeID) AS EmployeeCount FROM Employees WHERE Status = 'Left' GROUP BY DepartmentID HAVING COUNT(EmployeeID) < 5;