
- •Preface
- •Introduction
- •Lesson Objectives
- •Lesson Agenda
- •Course Objectives
- •Course Agenda
- •Appendixes Used in the Course
- •Lesson Agenda
- •Oracle Database 11g: Focus Areas
- •Oracle Database 11g
- •Oracle Fusion Middleware
- •Oracle Enterprise Manager Grid Control 10g
- •Oracle BI Publisher
- •Lesson Agenda
- •Relational and Object Relational Database Management Systems
- •Data Storage on Different Media
- •Relational Database Concept
- •Definition of a Relational Database
- •Data Models
- •Entity Relationship Model
- •Relating Multiple Tables
- •Relational Database Terminology
- •Lesson Agenda
- •Using SQL to Query Your Database
- •SQL Statements
- •Development Environments for SQL
- •Lesson Agenda
- •The Human Resources (HR) Schema
- •Tables Used in the Course
- •Lesson Agenda
- •Oracle Database 11g Documentation
- •Additional Resources
- •Summary
- •Practice I: Overview
- •Objectives
- •Lesson Agenda
- •Capabilities of SQL SELECT Statements
- •Basic SELECT Statement
- •Selecting All Columns
- •Selecting Specific Columns
- •Writing SQL Statements
- •Column Heading Defaults
- •Lesson Agenda
- •Arithmetic Expressions
- •Using Arithmetic Operators
- •Operator Precedence
- •Defining a Null Value
- •Null Values in Arithmetic Expressions
- •Lesson Agenda
- •Defining a Column Alias
- •Using Column Aliases
- •Lesson Agenda
- •Concatenation Operator
- •Literal Character Strings
- •Using Literal Character Strings
- •Alternative Quote (q) Operator
- •Duplicate Rows
- •Lesson Agenda
- •Displaying the Table Structure
- •Using the DESCRIBE Command
- •Quiz
- •Summary
- •Practice 1: Overview
- •Objectives
- •Lesson Agenda
- •Limiting Rows Using a Selection
- •Limiting the Rows That Are Selected
- •Using the WHERE Clause
- •Character Strings and Dates
- •Comparison Operators
- •Using Comparison Operators
- •Range Conditions Using the BETWEEN Operator
- •Membership Condition Using the IN Operator
- •Pattern Matching Using the LIKE Operator
- •Combining Wildcard Characters
- •Using the NULL Conditions
- •Defining Conditions Using the Logical Operators
- •Using the AND Operator
- •Using the OR Operator
- •Using the NOT Operator
- •Lesson Agenda
- •Rules of Precedence
- •Lesson Agenda
- •Using the ORDER BY Clause
- •Sorting
- •Lesson Agenda
- •Substitution Variables
- •Using the Single-Ampersand Substitution Variable
- •Character and Date Values with Substitution Variables
- •Specifying Column Names, Expressions, and Text
- •Using the Double-Ampersand Substitution Variable
- •Lesson Agenda
- •Using the DEFINE Command
- •Using the VERIFY Command
- •Quiz
- •Summary
- •Practice 2: Overview
- •Objectives
- •Lesson Agenda
- •SQL Functions
- •Two Types of SQL Functions
- •Single-Row Functions
- •Lesson Agenda
- •Character Functions
- •Case-Conversion Functions
- •Using Case-Conversion Functions
- •Character-Manipulation Functions
- •Using the Character-Manipulation Functions
- •Lesson Agenda
- •Number Functions
- •Using the ROUND Function
- •Using the TRUNC Function
- •Using the MOD Function
- •Lesson Agenda
- •Working with Dates
- •RR Date Format
- •Using the SYSDATE Function
- •Arithmetic with Dates
- •Using Arithmetic Operators with Dates
- •Lesson Agenda
- •Date-Manipulation Functions
- •Using Date Functions
- •Using ROUND and TRUNC Functions with Dates
- •Quiz
- •Summary
- •Practice 3: Overview
- •Objectives
- •Lesson Agenda
- •Conversion Functions
- •Implicit Data Type Conversion
- •Explicit Data Type Conversion
- •Lesson Agenda
- •Using the TO_CHAR Function with Dates
- •Elements of the Date Format Model
- •Using the TO_CHAR Function with Dates
- •Using the TO_CHAR Function with Numbers
- •Using the TO_NUMBER and TO_DATE Functions
- •Using the TO_CHAR and TO_DATE Function with RR Date Format
- •Lesson Agenda
- •Nesting Functions
- •Lesson Agenda
- •General Functions
- •NVL Function
- •Using the NVL Function
- •Using the NVL2 Function
- •Using the NULLIF Function
- •Using the COALESCE Function
- •Lesson Agenda
- •Conditional Expressions
- •CASE Expression
- •Using the CASE Expression
- •DECODE Function
- •Using the DECODE Function
- •Quiz
- •Summary
- •Practice 4: Overview
- •Objectives
- •Lesson Agenda
- •What Are Group Functions?
- •Types of Group Functions
- •Group Functions: Syntax
- •Using the AVG and SUM Functions
- •Using the MIN and MAX Functions
- •Using the COUNT Function
- •Using the DISTINCT Keyword
- •Group Functions and Null Values
- •Lesson Agenda
- •Creating Groups of Data
- •Creating Groups of Data: GROUP BY Clause Syntax
- •Using the GROUP BY Clause
- •Grouping by More than One Column
- •Using the GROUP BY Clause on Multiple Columns
- •Illegal Queries Using Group Functions
- •Restricting Group Results
- •Restricting Group Results with the HAVING Clause
- •Using the HAVING Clause
- •Lesson Agenda
- •Nesting Group Functions
- •Quiz
- •Summary
- •Practice 5: Overview
- •Objectives
- •Lesson Agenda
- •Types of Joins
- •Joining Tables Using SQL:1999 Syntax
- •Qualifying Ambiguous Column Names
- •Lesson Agenda
- •Creating Natural Joins
- •Retrieving Records with Natural Joins
- •Creating Joins with the USING Clause
- •Joining Column Names
- •Retrieving Records with the USING Clause
- •Using Table Aliases with the USING Clause
- •Creating Joins with the ON Clause
- •Retrieving Records with the ON Clause
- •Creating Three-Way Joins with the ON Clause
- •Applying Additional Conditions to a Join
- •Lesson Agenda
- •Joining a Table to Itself
- •Self-Joins Using the ON Clause
- •Lesson Agenda
- •Nonequijoins
- •Retrieving Records with Nonequijoins
- •Lesson Agenda
- •INNER Versus OUTER Joins
- •LEFT OUTER JOIN
- •RIGHT OUTER JOIN
- •FULL OUTER JOIN
- •Lesson Agenda
- •Cartesian Products
- •Generating a Cartesian Product
- •Creating Cross Joins
- •Quiz
- •Summary
- •Practice 6: Overview
- •Objectives
- •Lesson Agenda
- •Using a Subquery to Solve a Problem
- •Subquery Syntax
- •Using a Subquery
- •Guidelines for Using Subqueries
- •Types of Subqueries
- •Lesson Agenda
- •Single-Row Subqueries
- •Executing Single-Row Subqueries
- •Using Group Functions in a Subquery
- •The HAVING Clause with Subqueries
- •What Is Wrong with This Statement?
- •No Rows Returned by the Inner Query
- •Lesson Agenda
- •Multiple-Row Subqueries
- •Lesson Agenda
- •Null Values in a Subquery
- •Quiz
- •Summary
- •Practice 7: Overview
- •Objectives
- •Lesson Agenda
- •Set Operators
- •Set Operator Guidelines
- •The Oracle Server and Set Operators
- •Lesson Agenda
- •Tables Used in This Lesson
- •Lesson Agenda
- •UNION Operator
- •Using the UNION Operator
- •UNION ALL Operator
- •Using the UNION ALL Operator
- •Lesson Agenda
- •INTERSECT Operator
- •Using the INTERSECT Operator
- •Lesson Agenda
- •MINUS Operator
- •Using the MINUS Operator
- •Lesson Agenda
- •Matching the SELECT Statements
- •Matching the SELECT Statement: Example
- •Lesson Agenda
- •Using the ORDER BY Clause in Set Operations
- •Quiz
- •Summary
- •Practice 8: Overview

|
Using the GROUP BY Clause |
|
on Multiple Columns |
|
|
SELECT |
department_id, job_id, SUM(salary) |
FROM |
employees |
WHERE |
department_id > 40 |
GROUP BY department_id, job_id
ORDER BY department_id;
Copyright © 2009, Oracle. All rights reserved.
Using the Group By Clause on Multiple Columns |
Academy |
You can return summary results for groups and subgroupsOracleby isting multiple GROUP BY columns.
The GROUP BY clause groups rows but does not guarantee the order of the result set. To order the groupings, use the ORDER BY clause.
In the example in the slide, the SELECT statement that contains a GROUP BY clause is evaluated as |
|
follows: |
Only |
• The SELECT clause specifies the co umn&to be retrieved: |
|
Internal |
|
- Department ID in the EMPLOYEES table |
|
Use |
|
- Job ID in the EMPLOYEES table |
|
- The sum of all salari s in the group that you specified in the GROUP BY clause
• The FROM clause specifi s the tables that the database must access: the EMPLOYEES table.
• The WHERE clause reduces the result set to those rows where department ID is greater than 40.
• The clause specifies how you must group the resulting rows:
OracleGROUP BY
- First, the rows are grouped by the department ID.
- Se ond, the rows are grouped by job ID in the department ID groups.
• The ORDER BY clause sorts the results by department ID.
Notes: The SUM function is applied to the salary column for all job IDs in the result set in each
department ID group. Also, note that the SA_REP row is not returned. The department ID for this row is NULL, and therefore, does not meet the WHERE condition.
Oracle Database 11g: SQL Fundamentals I 5 - 18

Illegal Queries
Using Group Functions
Any column or expression in the SELECT list that is not an aggregate function must be in the GROUP BY clause:
|
SELECT department_id, COUNT(last_name) |
|
|
|
||||
|
FROM |
employees; |
|
|
|
|
||
|
|
|
|
|
|
to |
||
|
|
|
|
|
A GROUP BY clause must be added |
|||
|
|
|
|
|
||||
|
|
|
|
|
count the last names for each |
|||
|
|
|
|
|
||||
|
|
|
|
|
department_id. |
|
|
|
|
|
|
|
|
|
|||
|
SELECT department_id, job_id, COUNT(last_name) |
|
|
|||||
|
FROM |
employees |
|
|
|
|
||
|
GROUP BY department_id; |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Either add job_id in the GROUP BY or |
|||
|
|
|
|
|
remove the job_id column from the |
|||
|
|
|
|
|
SELECT list. |
Academy |
||
|
|
|
|
Copyright © 2009, Oracle. All rights reserved. |
||||
Illegal Queries Using Group Functions |
|
Whenever you use a mixture of individual itemsOracle(DEPARTMENT ID) and group functions (COUNT) in the same SELECT statement, you must include a GROUP BY lause that specifies the individual
items (in this case, DEPARTMENT_ID). If the GROUP BY cl use is missing, then the error message
can correct the error in the first example in the slide by adding the GROUP BY clause:
“not a single-group group function” appears and an asterisk (*) points to the offending column. You |
|||
SELECT |
& |
Only |
|
department_id, count(last ame) |
|||
FROM |
Internal |
|
|
|
employees |
|
|
|
|
Use |
|
GROUP BY departme t id; |
|
Any column or expression in the SELECT li t that is not an aggregate function must be in the GROUP BY clause. In the second example in the slide, job id is neither in the GROUP BY clause nor is it
being used by a group fu ction, so there is a “not a GROUP BY expression” error. You can correct the |
|
error in the s cond slide example by adding job_id in the GROUP BY clause. |
|
Oracle |
department_id, job_id, COUNT(last_name) |
SELECT |
|
FROM |
employees |
GROUP BY department_id, job_id;
Oracle Database 11g: SQL Fundamentals I 5 - 19

Illegal Queries
Using Group Functions
•You cannot use the WHERE clause to restrict groups.
•You use the HAVING clause to restrict groups.
•You cannot use group functions in the WHERE clause.
|
SELECT |
department_id, AVG(salary) |
|
|
|
|
FROM |
employees |
|
|
|
|
WHERE |
AVG(salary) > 8000 |
|
|
|
|
GROUP BY department_id; |
|
|
|
|
|
|
|
Cannot use the |
|
|
|
|
|
WHERE clause to |
||
|
|
|
restrict groups |
||
|
|
Copyright © 2009, Oracle. All rights reserved. |
Academy |
||
Illegal Queries Using Group Functions (continued) |
|
The WHERE clause cannot be used to restrict groups. The SELECT statement in the example in the |
|||||
slide results in an error because it uses the |
Oracle |
||||
WHERE clause to restrict the display of the average salaries |
|||||
of those departments that have an average salary greater th n $8,000. |
|||||
However, you can correct the error in the example by using the HAVING clause to restrict groups: |
|||||
SELECT |
|
& |
Only |
||
department_id, AVG(salary) |
|||||
FROM |
|
employees |
|
|
|
|
Internal |
|
|||
GROUP BY department id |
|
|
|||
HAVING |
|
Use |
|||
AVG(salary) > 8000; |
|
||||
Oracle |
|
|
|
|
Oracle Database 11g: SQL Fundamentals I 5 - 20

Restricting Group Results
EMPLOYEES
The maximum salary per department when it is greater than $10,000
… |
|
|
|
|
|
|
|
|
Academy |
|
|
Copyright © 2009, Oracle. All rights reserved. |
||
Restricting Group Results |
|
|
You use the HAVING clause to restrict groups in the same way that you use the WHERE clause to restrict the rows that you select. To find the maximum salary in each of the departments that have a maximum salary greater than $10,000, you need to do the following:
1. |
Find the average salary for each department by grouping by department number. |
|
2. |
|
Only |
Restrict the groups to those departments withOraclea maximum salary greater than $10,000. |
||
|
& |
|
|
Internal |
|
|
Use |
|
Oracle |
|
Oracle Database 11g: SQL Fundamentals I 5 - 21