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
Subqueries in Oracle SQL

Subqueries in Oracle SQL

Key Concepts

Subqueries in Oracle SQL are queries nested inside another query. They can be used to return data that will be used in the main query as a condition to further restrict the data to be retrieved. Understanding the following key concepts is essential for effectively using subqueries:

1. Simple Subqueries

A simple subquery is a subquery that returns a single value or a list of values. It can be used in the WHERE clause to filter rows based on the result of the subquery.

Example: Retrieving employees who earn more than the average salary:

SELECT EmployeeID, FirstName, Salary FROM Employees WHERE Salary > (SELECT AVG(Salary) FROM Employees);

2. Multiple-Row Subqueries

A multiple-row subquery returns more than one row. It can be used with operators like IN, ANY, or ALL to compare a single value with a set of values returned by the subquery.

Example: Retrieving employees who work in departments with more than 10 employees:

SELECT EmployeeID, FirstName, DepartmentID FROM Employees WHERE DepartmentID IN (SELECT DepartmentID FROM Departments WHERE EmployeeCount > 10);

3. Correlated Subqueries

A correlated subquery is a subquery that depends on the outer query for its values. It is executed once for each row processed by the outer query.

Example: Retrieving departments where the average salary is higher than the average salary of all employees:

SELECT DepartmentID, DepartmentName FROM Departments d WHERE (SELECT AVG(Salary) FROM Employees e WHERE e.DepartmentID = d.DepartmentID) > (SELECT AVG(Salary) FROM Employees);

4. EXISTS and NOT EXISTS

The EXISTS operator checks for the existence of rows in a subquery. It returns true if the subquery returns one or more rows. The NOT EXISTS operator returns true if the subquery returns no rows.

Example: Retrieving employees who have made at least one sale:

SELECT EmployeeID, FirstName FROM Employees e WHERE EXISTS (SELECT 1 FROM Sales s WHERE s.EmployeeID = e.EmployeeID);

5. Scalar Subqueries

A scalar subquery returns a single value. It can be used in places where a single value is expected, such as in the SELECT clause or as part of an expression.

Example: Retrieving employees along with the total sales they have made:

SELECT EmployeeID, FirstName, (SELECT SUM(SalesAmount) FROM Sales s WHERE s.EmployeeID = e.EmployeeID) AS TotalSales FROM Employees e;

6. Nested Subqueries

A nested subquery is a subquery that contains another subquery. This allows for complex queries that can perform multiple levels of filtering and aggregation.

Example: Retrieving departments where the average salary is higher than the average salary of all departments, and the department has more than 10 employees:

SELECT DepartmentID, DepartmentName FROM Departments d WHERE (SELECT AVG(Salary) FROM Employees e WHERE e.DepartmentID = d.DepartmentID) > (SELECT AVG(Salary) FROM Employees) AND (SELECT COUNT(*) FROM Employees e WHERE e.DepartmentID = d.DepartmentID) > 10;

7. Subqueries in the FROM Clause

Subqueries can also be used in the FROM clause to create a derived table. This derived table can then be used in the main query.

Example: Retrieving the top 5 departments with the highest average salary:

SELECT DepartmentID, AvgSalary FROM (SELECT DepartmentID, AVG(Salary) AS AvgSalary FROM Employees GROUP BY DepartmentID) ORDER BY AvgSalary DESC FETCH FIRST 5 ROWS ONLY;

8. Subqueries with Set Operators

Subqueries can be combined using set operators like UNION, INTERSECT, and MINUS to perform complex set operations.

Example: Retrieving employees who are either managers or have made more than $100,000 in sales:

SELECT EmployeeID, FirstName FROM Employees WHERE EmployeeID IN (SELECT ManagerID FROM Departments) UNION SELECT EmployeeID, FirstName FROM Employees WHERE EmployeeID IN (SELECT EmployeeID FROM Sales WHERE SalesAmount > 100000);