Introduction+to+Oracle9i+SQL+Additional+Practices+Volume+3
Introduction+to+Oracle9i+SQL+Additional+Practices+Volume+3
40049GC11
Production 1.1
October 2001
D33995
Authors Copyright © Oracle Corporation, 2000, 2001. All rights reserved.
Publisher
Nita Brozowski
Contents
Preface
Curriculum Map
Introduction
Objectives I-2
Oracle9i I-3
Oracle9i Application Server I-5
Oracle9i Database I-6
Relational and Object Relational Database Management System I-7
Oracle Internet Platform I-8
System Development Life Cycle I-9
Data Storage on Different Media I-11
Relational Database Concept I-12
Definition of a Relational Database I-13
Data Models I-14
Entity Relationship Model I-15
Entity Relationship Modeling Conventions I-16
Relating Multiple Tables I-18
Relational Database Terminology I-19
Relational Database Properties I-20
Communicating with a RDBMS Using SQL I-21
Relational Database Management System I-22
SQL Statements I-23
Tables Used in the Course I-24
1 Writing Basic SQL SELECT Statements
Objectives 1-2
Capabilities of SQL SELECT Statements 1-3
Basic SELECT Statement 1-4
Selecting All Columns 1-5
Selecting Specific Columns 1-6
Writing SQL Statements 1-7
Column Heading Defaults 1-8
Arithmetic Expressions 1-9
Using Arithmetic Operators 1-10
Operator Precedence 1-11
Using Parentheses 1-13
Defining a Null Value 1-14
Null Values in Arithmetic Expressions 1-15
Defining a Column Alias 1-16
Using Column Aliases 1-17
Concatenation Operator 1-18
Using the Concatenation Operator 1-19
Literal Character Strings 1-20
Using Literal Character Strings 1-21
Duplicate Rows 1-22
Eliminating Duplicate Rows 1-23
iii
SQL and iSQL*Plus Interaction 1-24
SQL Statements Versus iSQL*Plus Commands 1-25
Overview of iSQL*Plus 1-26
Logging In to iSQL*Plus 1-27
The iSQL*Plus Environment 1-28
Displaying Table Structure 1-29
Interacting with Script Files 1-31
Summary 1-34
Practice Overview 1-35
2 Restricting and Sorting Data
Objectives 2-2
Limiting Rows Using a Selection 2-3
Limiting the Rows Selected 2-4
Using the WHERE Clause 2-5
Character Strings and Dates 2-6
Comparison Conditions 2-7
Using Comparison Conditions 2-8
Other Comparison Conditions 2-9
Using the BETWEEN Condition 2-10
Using the IN Condition 2-11
Using the LIKE Condition 2-12
Using the NULL Conditions 2-14
Logical Conditions 2-15
Using the AND Operator 2-16
Using the OR Operator 2-17
Using the NOT Operator 2-18
Rules of Precedence 2-19
ORDER BY Clause 2-22
Sorting in Descending Order 2-23
Sorting by Column Alias 2-24
Sorting by Multiple Columns 2-25
Summary 2-26
Practice 2 Overview 2-27
3 Single-Row Functions
Objectives 3-2
SQL Functions 3-3
Two Types of SQL Functions 3-4
Single-Row Functions 3-5
Single-Row Functions 3-6
Character Functions 3-7
Character Functions 3-8
Case Manipulation Functions 3-9
Using Case Manipulation Functions 3-10
iv
Character-Manipulation Functions 3-11
Using the Character-Manipulation Functions 3-12
Number Functions 3-13
Using the ROUND Function 3-14
Using the TRUNC Function 3-15
Using the MOD Function 3-16
Working with Dates 3-17
Arithmetic with Dates 3-19
Using Arithmetic Operators with Dates 3-20
Date Functions 3-21
Using Date Functions 3-22
Practice 3, Part One: Overview 3-24
Conversion Functions 3-25
Implicit Data Type Conversion 3-26
Explicit Data Type Conversion 3-28
Using the TO_CHAR Function with Dates 3-31
Elements of the Date Format Model 3-32
Using the TO_CHAR Function with Dates 3-36
Using the TO_CHAR Function with Numbers 3-37
Using the TO_NUMBER and TO_DATE Functions 3-39
RR Date Format 3-40
Example of RR Date Format 3-41
Nesting Functions 3-42
General Functions 3-44
NVL Function 3-45
Using the NVL Function 3-46
Using the NVL2 Function 3-47
Using the NULLIF Function 3-48
Using the COALESCE Function 3-49
Conditional Expressions 3-51
The CASE Expression 3-52
Using the CASE Expression 3-53
The DECODE Function 3-54
Using the DECODE Function 3-55
Summary 3-57
Practice 3, Part Two: Overview 3-58
4 Displaying Data from Multiple Tables
Objectives 4-2
Obtaining Data from Multiple Tables 4-3
Cartesian Products 4-4
Generating a Cartesian Product 4-5
Types of Joins 4-6
Joining Tables Using Oracle Syntax 4-7
What is an Equijoin? 4-8
v
Retrieving Records with Equijoins 4-9
Additional Search Conditions Using the AND Operator 4-10
Qualifying Ambiguous Column Names 4-11
Using Table Aliases 4-12
Joining More than Two Tables 4-13
Non-Equijoins 4-14
Retrieving Records with Non-Equijoins 4-15
Outer Joins 4-16
Outer Joins Syntax 4-17
Using Outer Joins 4-18
Self Joins 4-19
Joining a Table to Itself 4-20
Practice 4, Part One: Overview 4-21
Joining Tables Using SQL: 1999 Syntax 4-22
Creating Cross Joins 4-23
Creating Natural Joins 4-24
Retrieving Records with Natural Joins 4-25
Creating Joins with the USING Clause 4-26
Retrieving Records with the USING Clause 4-27
Creating Joins with the ON Clause 4-28
Retrieving Records with the ON Clause 4-29
Creating Three-Way Joins with the ON Clause 4-30
INNER Versus OUTER Joins 4-31
LEFT OUTER JOIN 4-32
RIGHT OUTER JOIN 4-33
FULL OUTER JOIN 4-34
Additional Conditions 4-35
Summary 4-36
Practice 4, Part Two: Overview 4-37
5 Aggregating Data Using Group Functions
Objectives 5-2
What Are Group Functions? 5-3
Types of Group Functions 5-4
Group Functions Syntax 5-5
Using the AVG and SUM Functions 5-6
Using the MIN and MAX Functions 5-7
Using the COUNT Function 5-8
Using the DISTINCT Keyword 5-10
Group Functions and Null Values 5-11
Using the NVL Function with Group Functions 5-12
Creating Groups of Data 5-13
Creating Groups of Data: The GROUP BY Clause Syntax 5-14
Using the GROUP BY Clause 5-15
Grouping by More Than One Column 5-17
vi
Using the GROUP BY Clause on Multiple Columns 5-18
Illegal Queries Using Group Functions 5-19
Excluding Group Results 5-21
Excluding Group Results: The HAVING Clause 5-22
Using the HAVING Clause 5-23
Nesting Group Functions 5-25
Summary 5-26
Practice 5 Overview 5-27
6 Subqueries
Objectives 6-2
Using a Subquery to Solve a Problem 6-3
Subquery Syntax 6-4
Using a Subquery 6-5
Guidelines for Using Subqueries 6-6
Types of Subqueries 6-7
Single-Row Subqueries 6-8
Executing Single-Row Subqueries 6-9
Using Group Functions in a Subquery 6-10
The HAVING Clause with Subqueries 6-11
What is Wrong with this Statement? 6-12
Will this Statement Return Rows? 6-13
Multiple-Row Subqueries 6-14
Using the ANY Operator in Multiple-Row Subqueries 6-15
Using the ALL Operator in Multiple-Row Subqueries 6-16
Null Values in a Subquery 6-17
Summary 6-18
Practice 6 Overview 6-19
7 Producing Readable Output with iSQL*Plus
Objectives 7-2
Substitution Variables 7-3
Using the & Substitution Variable 7-5
Character and Date Values with Substitution Variables 7-7
Specifying Column Names, Expressions, and Text 7-8
Defining Substitution Variables 7-10
DEFINE and UNDEFINE Commands 7-11
Using the DEFINE Command with & Substitution Variable 7-12
Using the && Substitution Variable 7-13
Using the VERIFY Command 7-14
Customizing the iSQL*Plus Environment 7-15
SET Command Variables 7-16
iSQL*Plus Format Commands 7-17
The COLUMN Command 7-18
Using the COLUMN Command 7-19
vii
COLUMN Format Models 7-20
Using the BREAK Command 7-21
Using the TTITLE and BTITLE Commands 7-22
Creating a Script File to Run a Report 7-24
Sample Report 7-26
Summary 7-28
Practice 7 Overview 7-29
8 Manipulating Data
Objectives 8-2
Data Manipulation Language 8-3
Adding a New Row to a Table 8-4
The INSERT Statement Syntax 8-5
Inserting New Rows 8-6
Inserting Rows with Null Values 8-7
Inserting Special Values 8-8
Inserting Specific Date Values 8-9
Creating a Script 8-10
Copying Rows from Another Table 8-11
Changing Data in a Table 8-12
The UPDATE Statement Syntax 8-13
Updating Rows in a Table 8-14
Updating Two Columns with a Subquery 8-15
Updating Rows Based on Another Table 8-16
Updating Rows: Integrity Constraint Error 8-17
Removing a Row from a Table 8-18
The DELETE Statement 8-19
Deleting Rows from a Table 8-20
Deleting Rows Based on Another Table 8-21
Deleting Rows: Integrity Constraint Error 8-22
Using a Subquery in an INSERT Statement 8-23
Using the WITH CHECK OPTION Keyword on DML Statements 8-25
Overview of the Explicit Default Feature 8-26
Using Explicit Default Values 8-27
The MERGE Statement 8-28
The MERGE Statement Syntax 8-29
Merging Rows 8-30
Database Transactions 8-32
Advantages of COMMIT and ROLLBACK Statements 8-34
Controlling Transactions 8-35
Rolling Back Changes to a Marker 8-36
Implicit Transaction Processing 8-37
State of the Data Before COMMIT or ROLLBACK 8-38
State of the Data after COMMIT 8-39
Committing Data 8-40
viii
State of the Data After ROLLBACK 8-41
Statement-Level Rollback 8-42
Read Consistency 8-43
Implementation of Read Consistency 8-44
Locking 8-45
Implicit Locking 8-46
Summary 8-47
Practice 8 Overview 8-48
Read Consistency Example 8-53
ix
10 Including Constraints
Objectives 10-2
What are Constraints? 10-3
Constraint Guidelines 10-4
Defining Constraints 10-5
The NOT NULL Constraint 10-7
The UNIQUE Constraint 10-9
The PRIMARY KEY Constraint 10-11
The FOREIGN KEY Constraint 10-13
FOREIGN KEY Constraint Keywords 10-15
The CHECK Constraint 10-16
Adding a Constraint Syntax 10-17
Adding a Constraint 10-18
Dropping a Constraint 10-19
Disabling Constraints 10-20
Enabling Constraints 10-21
Cascading Constraints 10-22
Viewing Constraints 10-24
Viewing the Columns Associated with Constraints 10-25
Summary 10-26
Practice 10 Overview 10-27
11 Creating Views
Objectives 11-2
Database Objects 11-3
What is a View? 11-4
Why use Views? 11-5
Simple Views and Complex Views 11-6
Creating a View 11-7
Retrieving Data from a View 11-10
Querying a View 11-11
Modifying a View 11-12
Creating a Complex View 11-13
Rules for Performing DML Operations on a View 11-14
Using the WITH CHECK OPTION Clause 11-17
Denying DML Operations 11-18
Removing a View 11-20
Inline Views 11-21
Top-N Analysis 11-22
Performing Top-N Analysis 11-23
Example of Top-N Analysis 11-24
Summary 11-25
Practice 11 Overview 11-26
x
12 Other Database Objects
Objectives 12-2
Database Objects 12-3
What is a Sequence? 12-4
The CREATE SEQUENCE Statement Syntax 12-5
Creating a Sequence 12-6
Confirming Sequences 12-7
NEXTVAL and CURRVAL Pseudocolumns 12-8
Using a Sequence 12-10
Modifying a Sequence 12-12
Guidelines for Modifying a Sequence 12-13
Removing a Sequence 12-14
What is an Index? 12-15
How Are Indexes Created? 12-16
Creating an Index 12-17
When to Create an Index 12-18
When Not to Create an Index 12-19
Confirming Indexes 12-20
Function-Based Indexes 12-21
Removing an Index 12-23
Synonyms 12-24
Creating and Removing Synonyms 12-25
Summary 12-26
Practice 12 Overview 12-27
13 Controlling User Access
Objectives 13-2
Controlling User Access 13-3
Privileges 13-4
System Privileges 13-5
Creating Users 13-6
User System Privileges 13-7
Granting System Privileges 13-8
What is a Role? 13-9
Creating and Granting Privileges to a Role 13-10
Changing Your Password 13-11
Object Privileges 13-12
Granting Object Privileges 13-14
Using the WITH GRANT OPTION and PUBLIC Keywords 13-15
Confirming Privileges Granted 13-16
How to Revoke Object Privileges 13-17
Revoking Object Privileges 13-18
Database Links 13-19
Summary 13-21
Practice 13 Overview 13-22
xi
14 SQL Workshop
Workshop Overview 14-2
15 Using SET Operators
Objectives 15-2
The SET Operators 15-3
Tables Used in This Lesson 15-4
The UNION Operator 15-7
Using the UNION Operator 15-8
The UNION ALL Operator 15-10
Using the UNION ALL Operator 15-11
The INTERSECT Operator 15-12
Using the INTERSECT Operator 15-13
The MINUS Operator 15-14
SET Operator Guidelines 15-16
The Oracle Server and SET Operators 15-17
Matching the SELECT Statements 15-18
Controlling the Order of Rows 15-20
Summary 15-21
Practice 15 Overview 15-22
16 Oracle9i Datetime Functions
Objectives 16-2
TIME ZONES 16-3
Oracle9i Datetime Support 16-4
TZ_OFFSET 16-6
CURRENT_DATE 16-8
CURRENT_TIMESTAMP 16-9
LOCALTIMESTAMP 16-10
DBTIMEZONE and SESSIONTIMEZONE 16-11
EXTRACT 16-12
TIMESTAMP Conversion Using FROM_TZ 16-13
STRING To TIMESTAMP Conversion Using TO_TIMESTAMP and
TO_TIMESTAMP_TZ 16-14
Time Interval Conversion with TO_YMINTERVAL 16-15
Summary 16-16
Practice 16 Overview 16-17
17 Enhancements to the GROUP BY Clause
Objectives 17-2
Review of Group Functions 17-3
Review of the GROUP BY Clause 17-4
Review of the HAVING Clause 17-5
GROUP BY with ROLLUP and CUBE Operators 17-6
ROLLUP Operator 17-7
ROLLUP Operator Example 17-8
xii
CUBE Operator 17-9
CUBE Operator: Example 17-10
GROUPING Function 17-11
GROUPING Function: Example 17-12
GROUPING SETS 17-13
GROUPING SETS: Example 17-15
Composite Columns 17-17
Composite Columns: Example 17-19
Concatenated Groupings 17-21
Concatenated Groupings Example 17-22
Summary 17-23
Practice 17 Overview 17-24
18 Advanced Subqueries
Objectives 18-2
What Is a Subquery? 18-3
Subqueries 18-4
Using a Subquery 18-5
Multiple-Column Subqueries 18-6
Column Comparisons 18-7
Pairwise Comparison Subquery 18-8
Nonpairwise Comparison Subquery 18-9
Using a Subquery in the FROM Clause 18-10
Scalar Subquery Expressions 18-11
Scalar Subqueries: Examples 18-12
Correlated Subqueries 18-14
Using Correlated Subqueries 18-16
Using the EXISTS Operator 18-18
Using the NOT EXISTS Operator 18-20
Correlated UPDATE 18-21
Correlated DELETE 18-24
The WITH Clause 18-26
WITH Clause: Example 18-27
Summary 18-29
Practice 18 Overview 18-31
19 Hierarchical Retrieval
Objectives 19-2
Sample Data from the EMPLOYEES Table 19-3
Natural Tree Structure 19-4
Hierarchical Queries 19-5
Walking the Tree 19-6
Walking the Tree: From the Bottom Up 19-8
Walking the Tree: From the Top Down 19-9
Ranking Rows with the LEVEL Pseudocolumn 19-10
xiii
Formatting Hierarchical Reports Using LEVEL and LPAD 19-11
Pruning Branches 19-13
Summary 19-14
Practice 19 Overview 19-15
A Practice solutions
Index
Additional Practices
xiv
Additional
Practices
These exercises can be used for extra practice after you have discussed the following topics: basic SQL
SELECT statement, basic iSQL*Plus commands, and SQL functions.
1. Show all data of the clerks who have been hired after the year 1997.
2. Show the last name, job, salary, and commission of those employees who earn commission.
Sort the data by the salary in descending order.
3. Show the employees that have no commission with a 10% raise in their salary (round off the
salaries).
6. Show all employees, and indicate with “Yes” or “No” whether they receive a commission.
…
(Note: results continued on next page)
These exercises can be used for extra practice after you have discussed the following topics: SQL basic
SELECT statement, basic iSQL*Plus commands, SQL functions, joins, and group functions.
7. Show the department names, locations, names, job titles, and salaries of employees who work
in location 1800.
8. How many employees have a name that ends with an n? Create two possible solutions.
9. Show the names and locations for all departments, and the number of employees working in
each department. Make sure that departments without employees are included as well.
11. Which jobs are found in the Administration and Executive departments, and how many
employees do these jobs? Show the job with the highest frequency first.
These exercises can be used for some extra practice after you have discussed the following
topics: basic SQL SELECT statements, basic iSQL*Plus commands, SQL functions, joins, group
functions, subqueries.
12. Show all employees who were hired in the first half of the month (before the 16th of the month).
13. Show the names, salaries, and the number of dollars (in thousands) that all employees earn.
…
(Note: Results continued on next page)
14. Show all employees who have managers with a salary higher than $15,000. Show the
following data: employee name, manager name, manager salary, and salary grade of the
manager.
17. Show the department numbers, names, and locations of the departments where no sales
representatives work.
18. Show the department number, department name, and the number of employees working in each
department that:
a. Includes fewer than 3 employees:
20. Show all employees who were hired on the day of the week on which the highest number of
employees were hired.
23. Write a compound query to produce a list of employees showing raise percentages, employee
IDs, and old salary and new salary increase. Employees in departments 10, 50, and 110 are
given a 5% raise, employees in department 60 are given a 10% raise, employees in
departments 20 and 80 are given a 15% raise, and employees in department 90 are not given
a raise.
– Chile/Easter Island
b. Alter the session to set the TIME_ZONE parameter value to the time zone offset of
Australia/Sydney.
c. Display the SYSDATE, CURRENT_DATE, CURRENT_TIMESTAMP, and
LOCALTIMESTAMP for this session.
Note: The output might be different based on the date when the command is executed.
d. Alter the session to set the TIME_ZONE parameter value to the time zone offset of
Chile/Easter Island.
Note: The results of the preceding question are based on a different date, and in some cases they
will not match the actual results that the students get. Also, the time zone offset of the various
countries might differ, based on daylight savings time.
26. Write a query to display the last names, month of the date of join, and hire date of those
employees who have joined in the month of January, irrespective of the year of join.
27. Write a query to display the following for those departments whose department ID is greater
than 80:
– The total salary for every job within a department
– The total salary
– The total salary for those cities in which the departments are located
– The total salary for every job, irrespective of the department
– The total salary for every department irrespective of the city
– The total salary of the cities in which the departments are located
– Total salary for the departments, irrespective of job titles and cities
29. Write a query to display the top three earners in the EMPLOYEES table. Display their last
names and salaries.
30. Write a query to display the employee ID and last names of the employees who work in the
state of California.
Hint: Use scalar subqueries.
31. Write a query to delete the oldest JOB_HISTORY row of an employee by looking up the
JOB_HISTORY table for the MIN(START_DATE) for the employee. Delete the records of
only those employees who have changed at least two jobs. If your query executes correctly,
you will get the feedback:
34. Write a SQL statement to display employee number, last name, start date, and salary,
showing:
a. De Haan’s direct reports
35. Write a hierarchical query to display the employee number, manager number, and employee
last name for all employees who are two levels below employee De Haan (employee
number 102). Also display the level of the employee.
Note: The output shown is only a sample. All the rows from the actual output are not included here.
38. Query the SPECIAL_SAL, SAL_HISTORY and the MGR_HISTORY tables to view the
inserted records.
SPECIAL_SAL Table
SAL_HISTORY Table
MGR_HISTORY Table
40. Query the USER_INDEXES table to display the INDEX_NAME for the
LOCATIONS_NAMED_INDEX table.
1. Show all data for clerks hired after the year 1997.
SELECT *
FROM employees
WHERE job_id = ’ST_CLERK’
AND hire_date > ’31-DEC-1997’;
2. Show the last name, job, salary, and commission of those employees who earn commission.
Sort the data by the salary in descending order.
3. Show the employees who have no commission, but have a 10% raise in their salary (round
off the salaries).
4. Show the last names of all employees together with the number of years and the number of
completed months that they have been employed.
SELECT last_name,
TRUNC(MONTHS_BETWEEN(SYSDATE, hire_date) / 12) YEARS,
TRUNC(MOD(MONTHS_BETWEEN(SYSDATE, hire_date), 12))
MONTHS
FROM employees;
SELECT last_name
FROM employees
WHERE SUBSTR(last_name, 1,1) IN (’J’, ’K’, ’L’, ’M’);
These exercises can be used for extra practice after you have discussed the following topics: SQL basic
SELECT statement, basic iSQL*Plus commands, SQL functions, joins, and group functions.
7. Show the department names, locations, names, job titles, and salaries of employees who work
in location 1800.
8. How many employees have a name that ends with an “n”? Create two possible solutions.
SELECT COUNT(*)
FROM employees
WHERE last_name LIKE ’%n’;
SELECT COUNT(*)
FROM employees
WHERE SUBSTR(last_name, -1) = ’n’;
9. Show the names and locations for all departments and the number of employees working in each
department. Make sure that departments without employees are included as well.
11. Which jobs are found in the administrative and executive departments, and how many
employees do these jobs? Show the job with the highest frequency first.
These exercises can be used for some extra practice after you have discussed the following
topics: basic SQL SELECT statements, basic iSQL*Plus commands, SQL functions, joins, group
functions, subqueries.
12. Show all employees who were hired in the first half of the month (before the 16th of the month).
13. Show the names, salaries, and the number of dollars (in thousands) that each employee earns.
14. Show all employees who have managers with a salary higher than $15,000. Show the
following data: employee name, manager name, manager salary, and salary grade of the
manager.
CLEAR BREAKS
16. Show the department number and the lowest salary of the department with the highest average
salary.
18. Show the department number and name, and the number of employees working in each
department that:
a. Has fewer than three employees:
SELECT d.department_id, d.department_name, COUNT(*)
FROM departments d, employees e
WHERE d.department_id = e.department_id
GROUP BY d.department_id, d.department_name
HAVING COUNT(*) < 3;
19. Show the employee number, last name, salary, department number, and the average salary in
their department for all employees.
20. Show all employees who were hired on the day of the week on which the highest number of
employees were hired.
22. Find the job that was filled in the first half of 1990 and the same job that was filled during the
same period in 1991.
SELECT job_id
FROM employees
WHERE hire_date
BETWEEN ’01-JAN-1990’ AND ’30-JUN-1990’
INTERSECT
SELECT job_id
FROM employees
WHERE hire_date BETWEEN ’01-JAN-1991’
AND ’30-JUN-1991’;
23. Write a compound query to produce a list of employees showing raise percentages, employee
IDs, and old salary, and new salary increase. Employees in departments 10, 50, and 110 are given
a 5% raise, employees in department 60 are given a 10% raise, employees in departments 20 and
80 are given a 15% raise, and employees in department 90 are not given a raise.
– Chile/EasterIsland
b. Alter the session to set the TIME_ZONE parameter value to the time zone offset of
Australia/Sydney.
ALTER SESSION SET TIME_ZONE = ’+10:00’;
SELECT SYSDATE,CURRENT_DATE,
CURRENT_TIMESTAMP, LOCALTIMESTAMP
FROM DUAL;
d. Alter the session to set the TIME_ZONE parameter value to the time zone offset of
Chile/EasterIsland.
ALTER SESSION SET TIME_ZONE = ’-06:00’;
26. Write a query to display the last names, month of the date of join, and hire date of those employees
who have joined in the month of January, irrespective of the year of join.
30. Write a query to display the employee ID and last names of the employees who work in the state of
California.
Hint: Use scalar subqueries.
31. Write a query to delete the oldest JOB_HISTORY row of an employee by looking up the
JOB_HISTORY table for the MIN(START_DATE) for the employee. Delete the records of only
those employees who have changed at least two jobs. If your query executes correctly, you will get
the following feedback:
Hint: Use a correlated DELETE command.
WITH
MAX_SAL_CALC AS (
SELECT job_title, MAX(salary) AS job_total
FROM employees, jobs
WHERE employees.job_id = jobs.job_id
GROUP BY job_title)
SELECT job_title, job_total
FROM MAX_SAL_CALC
WHERE job_total > (SELECT MAX(job_total) * 1/2
FROM MAX_SAL_CALC)
ORDER BY job_total DESC;
These exercises can be used for extra practice after you have discussed hierarchical retrieval.
34. Write a SQL statement to display employee number, last name, start date, and salary, showing:
a. De Haan’s direct reports
35. Write a hierarchical query to display the employee number, manager number, and employee last
name for all employees who are two levels below employee De Haan (employee number 102).
Also display the level of the employee.
These exercises can be used for extra practice after you have discussed Oracle 9i extensions to DML and
DDL.
INSERT ALL
WHEN SAL < 5000 THEN
INTO special_sal VALUES (EMPID, SAL)
ELSE
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID, hire_date HIREDATE,
salary SAL, manager_id MGR
FROM employees
WHERE employee_id >=200;
38. Query the SPECIAL_SAL, SAL_HISTORY and the MGR_HISTORY tables to view the inserted
records.
40. Query the USER_INDEXES table to display the INDEX_NAME for the
LOCATIONS_NAMED_INDEX table.
This exercise can be used for extra practice after you have discussed writing advanced scripts.
41. Write a SQL script file to drop all objects (tables, views, indexes, sequences, synonyms, and
so on) that you own. Note: The output shown is only a guideline.
Table Descriptions
and Data
COUNTRIES Table
DESCRIBE countries
DESCRIBE departments
DESCRIBE employees
DESCRIBE jobs
DESCRIBE job_grades
DESCRIBE job_history
DESCRIBE locations
DESCRIBE regions