1. Trang chủ
  2. » Công Nghệ Thông Tin

oracle 9i advanced sql

252 201 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Oracle 9i Advanced SQL
Tác giả Priya Nathan
Trường học Oracle Corporation
Chuyên ngành Database Management
Thể loại Student Guide
Năm xuất bản 2001
Thành phố Redwood Shores
Định dạng
Số trang 252
Dung lượng 1,38 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

I IntroductionCourse Objectives I-2 Course Overview I-3 1 Using SET Operators Objectives 1-2 The SET Operators 1-3 Tables Used in This Lesson 1-4 The UNION Operator 1-7 Using the UNION O

Trang 2

Copyright © Oracle Corporation, 2000, 2001 All rights reserved.

This documentation contains proprietary information of Oracle Corporation It is provided under a license agreement containing restrictions on use and disclosure and

is also protected by copyright law Reverse engineering of the software is prohibited.

If this documentation is delivered to a U.S Government Agency of the Department of Defense, then it is delivered with Restricted Rights and the following legend is applicable:

Restricted Rights Legend

Use, duplication or disclosure by the Government is subject to restrictions for commercial computer software and shall be deemed to be Restricted Rights software under Federal law, as set forth in subparagraph (c)(1)(ii) of DFARS 252.227-7013, Rights in Technical Data and Computer Software (October 1988).

This material or any portion of it may not be copied in any form or by any means without the express prior written permission of Oracle Corporation Any other copying

is a violation of copyright law and may result in civil and/or criminal penalties.

If this documentation is delivered to a U.S Government Agency not within the Department of Defense, then it is delivered with “Restricted Rights,” as defined in FAR 52.227-14, Rights in Data-General, including Alternate III (June 1987).

The information in this document is subject to change without notice If you find any problems in the documentation, please report them in writing to Education Products, Oracle Corporation, 500 Oracle Parkway, Box SB-6, Redwood Shores, CA 94065 Oracle Corporation does not warrant that this document is error-free.

Oracle and all references to Oracle products are trademarks or registered trademarks

Trang 3

I Introduction

Course Objectives I-2

Course Overview I-3

1 Using SET Operators

Objectives 1-2

The SET Operators 1-3

Tables Used in This Lesson 1-4

The UNION Operator 1-7

Using the UNION Operator 1-8

The UNION ALL Operator 1-10

Using the UNION ALL Operator 1-11

The INTERSECT Operator 1-12

Using the INTERSECT Operator 1-13

The MINUS Operator 1-14

SET Operator Guidelines 1-16

The Oracle Server and SET Operators 1-17

Matching the SELECT Statements 1-18

Controlling the Order of Rows 1-20

TIMESTAMP Conversion Using FROM_TZ 2-13

STRING To TIMESTAMP Conversion Using TO_TIMESTAMP andTO_TIMESTAMP_TZ 2-14

Time Interval Conversion with TO_YMINTERVAL 2-15

Summary 2-16

Practice 2 Overview 2-17

Contents

Trang 4

3 Enhancements to the GROUP BY Clause

Objectives 3-2

Review of Group Functions 3-3

Review of the GROUP BY Clause 3-4

Review of the HAVING Clause 3-5

GROUP BY with ROLLUP and CUBE Operators 3-6ROLLUP Operator 3-7

ROLLUP Operator Example 3-8

Pairwise Comparison Subquery 4-8

Nonpairwise Comparison Subquery 4-9

Using a Subquery in the FROM Clause 4-10

Scalar Subquery Expressions 4-11

Scalar Subqueries: Examples 4-12

Correlated Subqueries 4-14

Using Correlated Subqueries 4-16

Trang 5

5 Hierarchical Retrieval

Objectives 5-2

Sample Data from the EMPLOYEES Table 5-3

Natural Tree Structure 5-4

Hierarchical Queries 5-5

Walking the Tree 5-6

Walking the Tree: From the Bottom Up 5-8

Walking the Tree: From the Top Down 5-9

Ranking Rows with the LEVEL Pseudocolumn 5-10

Formatting Hierarchical Reports Using LEVEL and LPAD 5-11Pruning Branches 5-13

Summary 5-14

Practice 5 Overview 5-15

6 Oracle9i Extensions to DML and DDL Statements

Objectives 6-2

Review of the INSERT Statement 6-3

Review of the UPDATE Statement 6-4

Overview of Multitable INSERT Statements 6-5

Types of Multitable INSERT Statements 6-7

Multitable INSERT Statements 6-8

Unconditional INSERT ALL 6-10

Conditional INSERT ALL 6-11

Conditional FIRST INSERT 6-13

Pivoting INSERT 6-15

External Tables 6-18

Creating an External Table 6-19

Example of Creating an External Table 6-20

Querying External Tables 6-23

CREATE INDEX with CREATE TABLE Statement 6-24

Summary 6-25

Practice 6 Overview 6-26

A Practice Solutions

B Table Descriptions and Data

C Writing Advanced Scripts

D Oracle Architectural Components

Index

Additional Practices

Additional Practice Solutions

Additional Practices: Table Descriptions and Data

Trang 7

Preface

Trang 9

Before You Begin This Course

Before you begin this course, you should be able to use a graphical user interface (GUI).

Required prerequisites are familiarity with data processing concepts and techniques

How This Course Is Organized

Oracle9i: Advanced SQL is an instructor-led course featuring lectures and hands-on

exercises Online demonstrations and written practice sessions reinforce the concepts andskills introduced

Trang 10

Related Publications

Oracle Publications

Oracle9i Reference, Release 1 (9.0.1) A90190-02

Oracle9i SQL Reference, Release 1 (9.0.1) A90125-01

Oracle9i Concepts, Release 1 (9.0.0) A88856-02

Oracle9i Server Application Developer’s Guide Fundamentals

iSQL*Plus User’s Guide and Reference, Release 9.0.0 A88826-01

SQL*Plus User’s Guide and Reference, Release 9.0.1 A88827-02

Additional Publications

• System release bulletins

• Installation and user’s guides

read.me files

• International Oracle User’s Group (IOUG) articles

Oracle Magazine

Trang 11

Typographic Conventions

What follows are two lists of typographical conventions used specifically within text or withincode

Typographic Conventions Within Text

Convention Object or Term Example

Uppercase Commands, Use the SELECT command to view

functions, information stored in the LAST_NAME column names, column of the EMPLOYEES table.

table names, PL/SQL objects, schemas

Lowercase, Filenames, where: role is the name of the role italic syntax variables, to be created.

usernames, passwords Initial cap Trigger and Assign a When-Validate-Item trigger to

button names the ORD block.

Choose Cancel.

Italic Books, names of For more information on the subject see

courses and Oracle Server SQL Language Reference

manuals, and Manual

emphasized words or phrases Do not save changes to the database.

Quotation marks Lesson module This subject is covered in Lesson 3,

titles referenced “Working with Objects.”

within a course

Trang 12

Typographic Conventions (continued)

Typographic Conventions Within Code

Convention Object or Term Example

Uppercase Commands, SELECT employee_id

functions FROM employees;

Lowercase, Syntax variables CREATE ROLE role;

italic

Initial cap Forms triggers Form module: ORD

Trigger level: S_ITEM.QUANTITY item

Trigger name: When-Validate-Item

Lowercase Column names, .

table names, OG_ACTIVATE_LAYER

filenames, (OG_GET_LAYER ('prod_pie_layer'))

PL/SQL objects .

SELECT last_name FROM employees;

Bold Text that must CREATE USER scott

be entered by a IDENTIFIED BY tiger;

user

Trang 13

Copyright © Oracle Corporation, 2001 All rights reserved.

Introduction

Trang 14

I-2 Copyright © Oracle Corporation, 2001 All rights reserved.

Trang 15

I-3 Copyright © Oracle Corporation, 2001 All rights reserved.

Course Overview

Using advanced SQL data retrieval techniques such as:

SET operators

Oracle9 i DATETIME functions

ROLLUP, CUBE operators and GROUPING SETS

Hierarchical queries

Correlated subqueries

Multitable inserts

External Tables

Trang 17

Copyright © Oracle Corporation, 2001 All rights reserved.

Using SET Operators

Trang 18

Lesson Aim

In this lesson, you learn how to write queries by usingSEToperators

1-2 Copyright © Oracle Corporation, 2001 All rights reserved.

Objectives

After completing this lesson, you should be able

to do the following:

Describe SET operators

Use a SET operator to combine multiple queries into a single query

Control the order of rows returned

Trang 19

The SET Operators

TheSEToperators combine the results of two or more component queries into one result QueriescontainingSEToperators are called compound queries.

AllSEToperators have equal precedence If a SQL statement contains multipleSEToperators, theOracle server evaluates them from left (top) to right (bottom) if no parentheses explicitly specifyanother order You should use parentheses to specify the order of evaluation explicitly in queries thatuse theINTERSECToperator with otherSEToperators

Note: In the slide, the light color (gray) in the diagram represents the query result.

1-3 Copyright © Oracle Corporation, 2001 All rights reserved.

The SET Operators

UNION All distinct rows selected by either query

UNION ALL All rows selected by either query, including all duplicates

INTERSECT All distinct rows selected by both queries

MINUS All distinct rows that are selected by the firstSELECT

statement and not selected in the secondSELECTstatement

Trang 20

Tables Used in This Lesson

Two tables are used in this lesson They are theEMPLOYEEStable and theJOB_HISTORYtable.TheEMPLOYEEStable stores the employee details For the human resource records, this table stores aunique identification number and email address for each employee The details of the employee’s jobidentification number, salary, and manager are also stored Some of the employees earn a commission

in addition to their salary; this information is tracked too The company organizes the roles of

employees into jobs Some of the employees have been with the company for a long time and haveswitched to different jobs This is monitored using theJOB_HISTORYtable When an employeeswitches jobs, the details of the start date and end date of the former job, the job identification numberand department are recorded in theJOB_HISTORYtable

The structure and the data from theEMPLOYEESand theJOB_HISTORYtables are shown on the next

1-4 Copyright © Oracle Corporation, 2001 All rights reserved.

Tables Used in This Lesson

The tables used in this lesson are:

EMPLOYEES : Provides details regarding all

current employees

JOB_HISTORY : Records the details of the start date

and end date of the former job, and the job identification number and department when an employee switches jobs

Trang 21

Tables Used in This Lesson (continued)

DESC employees

SELECT employee_id, last_name, job_id, hire_date, department_idFROM employees;

Trang 22

Tables Used in This Lesson (continued)

DESC job_history

SELECT * FROM job_history;

Trang 23

The UNION Operator

TheUNIONoperator returns all rows selected by either query Use theUNIONoperator to return allrows from multiple tables and eliminate any duplicate rows

Guidelines

• The number of columns and the datatypes of the columns being selected must be identical in alltheSELECTstatements used in the query The names of the columns need not be identical

• UNIONoperates over all of the columns being selected

• NULLvalues are not ignored during duplicate checking

• TheINoperator has a higher precedence than theUNIONoperator

• By default, the output is sorted in ascending order of the first column of theSELECTclause

1-7 Copyright © Oracle Corporation, 2001 All rights reserved.

The UNION Operator

The UNION operator returns results from both queries

after eliminating duplications.

Trang 24

Using the UNION SET Operator

TheUNIONoperator eliminates any duplicate records If there are records that occur both in the

EMPLOYEESand theJOB_HISTORYtables and are identical, the records will be displayed only once.Observe in the output shown on the slide that the record for the employee with theEMPLOYEE_ID200appears twice as theJOB_IDis different in each row

Consider the following example:

SELECT employee_id, job_id, department_id

FROM employees

UNION

SELECT employee_id, job_id, department_id

FROM job_history;

1-8 Copyright © Oracle Corporation, 2001 All rights reserved.

Using the UNION Operator

Display the current and previous job details of all

employees Display each employee only once.

SELECT employee_id, job_id

Trang 25

Using the UNION SET Operator (continued)

In the preceding output, employee 200 appears three times Why? Notice theDEPARTMENT_IDvaluesfor employee 200 One row has aDEPARTMENT_IDof 90, another 10, and the third 90 Because ofthese unique combinations of job IDs and department IDs, each row for employee 200 is unique andtherefore not considered a duplicate Observe that the output is sorted in ascending order of the firstcolumn of theSELECTclause,EMPLOYEE_IDin this case

Trang 26

The UNION ALL Operator

Use theUNION ALLoperator to return all rows from multiple queries

Guidelines

• UnlikeUNION, duplicate rows are not eliminated and the output is not sorted by default

• TheDISTINCTkeyword cannot be used

Note: With the exception of the above, the guidelines forUNIONandUNION ALLare the same

1-10 Copyright © Oracle Corporation, 2001 All rights reserved.

The UNION ALL Operator

The UNION ALL operator returns results from both

queries, including all duplications.

Trang 27

The UNION ALL Operator (continued)

In the example, 30 rows are selected The combination of the two tables totals to 30 rows TheUNIONALLoperator does not eliminate duplicate rows The duplicate rows are highlighted in the output shown

in the slide.UNIONreturns all distinct rows selected by either query.UNION ALLreturns all rowsselected by either query, including all duplicates Consider the query on the slide, now written with the

1-11 Copyright © Oracle Corporation, 2001 All rights reserved.

Using the UNION ALL Operator

Display the current and previous departments of

Trang 28

The INTERSECT Operator

Use theINTERSECToperator to return all rows common to multiple queries

Guidelines

• The number of columns and the datatypes of the columns being selected by theSELECT

statements in the queries must be identical in all theSELECTstatements used in the query Thenames of the columns need not be identical

• Reversing the order of the intersected tables does not alter the result

• INTERSECTdoes not ignoreNULLvalues

1-12 Copyright © Oracle Corporation, 2001 All rights reserved.

The INTERSECT Operator

Trang 29

The INTERSECT Operator (continued)

In the example in this slide, the query returns only the records that have the same values in the selectedcolumns in both tables

What will be the results if you add theDEPARTMENT_IDcolumn to theSELECT statement from the

EMPLOYEEStable and add theDEPARTMENT_IDcolumn to theSELECTstatement from the

JOB_HISTORYtable and run this query? The results may be different because of the introduction ofanother column whose values may or may not be duplicates

1-13 Copyright © Oracle Corporation, 2001 All rights reserved.

Using the INTERSECT Operator

Display the employee IDs and job IDs of employees

who currently have a job title that they held before

beginning their tenure with the company.

SELECT employee_id, job_id

INTERSECT

SELECT employee_id, job_id

Trang 30

The MINUS Operator

Use theMINUSoperator to return rows returned by the first query that are not present in the secondquery (the firstSELECTstatementMINUSthe secondSELECTstatement)

Guidelines

• The number of columns and the datatypes of the columns being selected by theSELECT

statements in the queries must be identical in all theSELECTstatements used in the query Thenames of the columns need not be identical

• All of the columns in theWHEREclause must be in theSELECTclause for theMINUSoperator towork

1-14 Copyright © Oracle Corporation, 2001 All rights reserved.

The MINUS Operator

Trang 31

The MINUS Operator (continued)

In the example in the slide, the employee IDs and Job IDs in theJOB_HISTORYtable are subtractedfrom those in theEMPLOYEEStable The results set displays the employees remaining after thesubtraction; they are represented by rows that exist in theEMPLOYEEStable but do not exist in the

JOB_HISTORY table These are the records of the employees who have not changed their jobs evenonce

1-15 Copyright © Oracle Corporation, 2001 All rights reserved.

The MINUS Operator

Display the employee IDs of those employees who have

not changed their jobs even once.

Trang 32

SET Operator Guidelines

• The expressions in the select lists of the queries must match in number and datatype Queries thatuseUNION,UNION ALL,INTERSECT, andMINUS SEToperators in theirWHEREclause musthave the same number and type of columns in theirSELECTlist For example:

SELECT employee_id, department_id

FROM employees

WHERE (employee_id, department_id)

IN (SELECT employee_id, department_idFROM employees

UNIONSELECT employee_id, department_idFROM job_history);

1-16 Copyright © Oracle Corporation, 2001 All rights reserved.

SET Operator Guidelines

The expressions in the SELECT lists must match in

number and data type.

Parentheses can be used to alter the sequence of

execution.

The ORDER BY clause:

Can appear only at the very end of the statement

Will accept the column name, aliases from the first

SELECT statement, or the positional notation

Trang 33

The Oracle Server and SET Operators

When a query uses SET operators, the Oracle Server eliminates duplicate rows automatically except inthe case of theUNION ALLoperator The column names in the output are decided by the column list inthe firstSELECTstatement By default, the output is sorted in ascending order of the first column of the

SELECTclause

The corresponding expressions in the select lists of the component queries of a compound query mustmatch in number and datatype If component queries select character data, the datatype of the returnvalues are determined as follows:

• If both queries select values of datatypeCHAR, the returned values have datatypeCHAR

• If either or both of the queries select values of datatypeVARCHAR2, the returned values

have datatypeVARCHAR2

1-17 Copyright © Oracle Corporation, 2001 All rights reserved.

The Oracle Server and SET Operators

Duplicate rows are automatically eliminated except

in UNION ALL

Column names from the first query appear in the

result.

The output is sorted in ascending order by default

except in UNION ALL

Trang 34

Matching the SELECT Statements

As the expressions in the select lists of the queries must match in number, you can use dummy columnsand the datatype conversion functions to comply with this rule In the slide, the namelocationisgiven as the dummy column heading TheTO_NUMBERfunction is used in the first query to match the

NUMBERdatatype of theLOCATION_IDcolumn retrieved by the second query Similarly, the

TO_DATEfunction in the second query is used to match theDATEdatatype of theHIRE_DATEcolumnretrieved by the first query

1-18 Copyright © Oracle Corporation, 2001 All rights reserved.

Matching the SELECT Statements

Using the UNION operator, display the department ID,

location, and hire date for all employees.

SELECT department_id, TO_NUMBER(null)

Trang 35

Matching the SELECT Statement: Example

TheEMPLOYEESandJOB_HISTORYtables have several columns in common; for example,

EMPLOYEE_ID,JOB_ID andDEPARTMENT_ID But what if you want the query to display the

EMPLOYEE_ID,JOB_ID, andSALARYusing theUNIONoperator, knowing that the salary exists only

in the,EMPLOYEEStable?

The code example in the slide matches theEMPLOYEE_IDand theJOB_IDcolumns in the

EMPLOYEESand in theJOB_HISTORYtables A literal value of 0 is added to theJOB_HISTORYSELECTstatement to match the numericSALARYcolumn in theEMPLOYEES SELECTstatement

In the preceding results, each row in the output that corresponds to a record from theJOB_HISTORY

table contains a 0 in theSALARYcolumn

1-19 Copyright © Oracle Corporation, 2001 All rights reserved.

Matching the SELECT Statement

SELECT employee_id, job_id,salary

UNION

SELECT employee_id, job_id,0

Using the UNION operator, display the employee ID,

job ID, and salary of all employees.

Trang 36

Controlling the Order of Rows

By default, the output is sorted in ascending order on the first column You can use theORDER BY

clause to change this

Using ORDER BY to Order Rows

TheORDER BYclause can be used only once in a compound query If used, theORDER BYclause must

be placed at the end of the query TheORDER BYclause accepts the column name, an alias, or thepositional notation Without theORDER BYclause, the code example in the slide produces the followingoutput in the alphabetical order of the first column:

1-20 Copyright © Oracle Corporation, 2001 All rights reserved.

Controlling the Order of Rows Produce an English sentence using two

UNION operators.

COLUMN a_dummy NOPRINT

SELECT 'sing' AS "My dream", 3 a_dummy

Trang 37

• TheUNION operator returns all rows selected by either query Use theUNIONoperator to returnall rows from multiple tables and eliminate any duplicate rows

• Use theUNION ALLoperator to return all rows from multiple queries Unlike with theUNION

operator, duplicate rows are not eliminated and the output is not sorted by default

• Use theINTERSECToperator to return all rows common to multiple queries

• Use theMINUSoperator to return rows returned by the first query that are not present in thesecond query

• Remember to use theORDER BYclause only at the very end of the compound statement

• Make sure that the corresponding expressions in theSELECTlists match in number and datatype

1-21 Copyright © Oracle Corporation, 2001 All rights reserved.

Summary

In this lesson, you should have learned how to:

Use UNION to return all distinct rows

Use UNION ALL to returns all rows, including

duplicates

Use INTERSECT to return all rows shared by

both queries

Use MINUS to return all distinct rows selected by

the first query but not by the second

Use ORDER BY only at the very end of

the statement

Trang 38

1-22 Copyright © Oracle Corporation, 2001 All rights reserved.

Trang 39

Practice 1

1 List the department IDs for departments that do not contain the job IDST_CLERK, using

SEToperators

2 Display the country ID and the name of the countries that have no departments located

in them, usingSEToperators

3 Produce a list of jobs for departments 10, 50, and 20, in that order Display job ID and department

ID, usingSET operators

4 List the employee IDs and job IDs of those employees who currently hold the job title that they heldbefore beginning their tenure with the company

Trang 40

Practice 1 (continued)

5 Write a compound query that lists the following:

• Last names and department ID of all the employees from theEMPLOYEEStable, regardless ofwhether or not they belong to any department or not

• Department ID and department name of all the departments from theDEPARTMENTStable,regardless of whether or not they have employees working in them

Ngày đăng: 18/04/2014, 10:24

TỪ KHÓA LIÊN QUAN