Você está na página 1de 146

Australian School of Business

School of Information Systems, Technology and Management










ORACLE LAB MANUAL





















ii

UNSW
SISTM

Lab Manual

Document Update:

Author Date SQL Developer Version Version
Vincent Pang Feb, 2011 2.1.1.64 v1.00
Vincent Pang Dec, 2011 3.0.04 v1.11


References:

The following referencing materials were used to create this Oracle Lab Manual:

(1) Casteel, Joan, Oracle 11g: SQL, 2010, Cengage Learning
(2) Oracle Database: SQL Fundamentals I, Oracle Education
(3) Oracle Database: SQL Fundamentals II, Oracle Education
(4) Oracle SQL Developer 2.1 Users Guide, Oracle
(5) Http://www.oracle.com
(6) Date, C. J., 1995, An Introduction to Database Systems, 6
th
Edition,
Addison-Wesley Publishing, USA.


File Name:
UNSW SISTM Oracle Lab Manual v1.11


Copyright:

This Oracle Lab Manual is created for the Information Systems courses, offered by
the School of Information Systems, Technology and Management, the University
of New South Wales, Sydney, Australia.






iii
UNSW
SISTM

Lab Manual

Table of Contents
Table of Contents ...................................................................................................................................... iii
Table of Figures ....................................................................................................................................... viii
Table of Tables ......................................................................................................................................... xii
Introduction to Oracle and Relational Database ................................................................................... 13
History of Oracle ................................................................................................................................... 13
History of SQL ...................................................................................................................................... 13
SQL Standards ....................................................................................................................................... 13
Oracle 11g ............................................................................................................................................. 14
Information Systems Courses ................................................................................................................ 15
Data Modelling ...................................................................................................................................... 15
Relational Database ............................................................................................................................... 16
A Table .................................................................................................................................................. 16
Oracle SQL Statements.......................................................................................................................... 17
Lab/Tutorial Arrangement ..................................................................................................................... 18
Introduction to Oracle SQL Developer .................................................................................................. 19
SQL Developer Layout and Functionality ............................................................................................. 20
Connecting to a Database ...................................................................................................................... 21
Instructions to Connect to a Database ............................................................................................... 21
Reference .......................................................................................................................................... 22
Open a Database ............................................................................................................................... 22
Executing SQL Statements in Oracle SQL Developer .......................................................................... 23
Summary ................................................................................................................................................ 24
Lab Week 2 Basic SQL SELECT statements ....................................................................................... 25
2.1 Objectives ........................................................................................................................................ 25
2.1.1 Reference ................................................................................................................................. 25
2.1.2 Database .................................................................................................................................. 25
2.2 SELECT Statement .......................................................................................................................... 25
2.2.1 Selecting All Data from a Table .............................................................................................. 25
2.2.1.1 Example: Selecting All Data from a Table ....................................................................... 25
2.3 Selecting a Column or Columns from a Table ................................................................................. 26
2.3.1.1 Example: Selecting One Column Only ............................................................................. 26
2.3.1.2 Example: Selecting More Than One Column ................................................................... 26
2.3.2 Viewing Table Structure .......................................................................................................... 27
2.3.2.1 Example: Find the Column Names of a Table .................................................................. 27
2.3.3 Null Values .............................................................................................................................. 27
Difference between CHAR(n) and VARCHAR2(n) ........................................................................... 28
2.4 SELECT <Column Alias> Statement .............................................................................................. 29
2.4.1.1 Example: -- Demonstrate Four Common Alias Methods.................................................. 29
2.5 SELECT DISTINCT Statement....................................................................................................... 30
2.5.1.1 Example: Using Distinct ................................................................................................... 30
2.5.2 Use DISTINCT for Two or More Columns ............................................................................. 31
2.6 SELECT <Concatenation> and <Literal Strings> Statement .......................................................... 32
2.6.1.1 Example: Using Concatenation and Literal Strings .......................................................... 32
2.6.1.2 Example: Single Quotation Mark ..................................................................................... 33
2.7 Arithmetic Operations ..................................................................................................................... 34
2.7.1.1 Example: Arithmetic Operation ........................................................................................ 34
Lab Week 3 Restricting Rows and Sorting Data .................................................................................. 35
3.1 Objectives ........................................................................................................................................ 35
3.1.1 Reference ................................................................................................................................. 35
3.1.2 Database .................................................................................................................................. 35
3.2 SELECT <WHERE clause> Statement ........................................................................................... 35
3.2.1 Numeric, Character Strings and Dates ..................................................................................... 35
3.2.1.1 Example: Numeric Values ................................................................................................ 35
3.2.1.2 Example: Character Strings .............................................................................................. 36
3.2.1.3 Example: Date Values ...................................................................................................... 36
3.3 Logical Operators ............................................................................................................................ 37


iv

UNSW
SISTM

Lab Manual

3.4 Comparison Operators ..................................................................................................................... 38
3.4.1.1 Example: Condition based on Numeric Value .................................................................. 39
3.4.1.2 Example: Condition based on Character Strings .............................................................. 41
3.4.1.3 Example: Condition based on a Date Values .................................................................... 44
3.4.1.4 Example: The use of Not Equal or NOT Operator ........................................................... 44
3.4.1.5 Example: The use of LIKE Operator ................................................................................ 46
3.4.2 Rules of Precedence ................................................................................................................. 48
3.5 SELECT <ORDER BY clause> Statement ..................................................................................... 48
3.5.1.1 Example: Sort by Numeric and Date Values .................................................................... 49
3.5.2 Sort NULL Values ................................................................................................................... 50
Lab Week 4 Selected Single-Row Functions ......................................................................................... 51
4.1 Objectives ........................................................................................................................................ 51
4.1.1 Reference ................................................................................................................................. 51
4.1.2 Database .................................................................................................................................. 51
4.2 Overview of Functions .................................................................................................................... 51
4.2.1 Case Conversion Functions ..................................................................................................... 51
4.2.1.1 Example: Case Conversion Function ................................................................................ 52
4.3 Character Manipulation Functions ................................................................................................... 52
4.3.1.1 Example: Character Manipulation Functions ................................................................... 53
4.4 Number Functions ........................................................................................................................... 53
4.4.1.1 Example: Examples of using Number Functions .............................................................. 54
4.4.2 The Dual Table ........................................................................................................................ 54
4.5 Date Functions ................................................................................................................................. 55
4.5.1.1 Example: Date Function ................................................................................................... 55
4.6 Regular Expressions ........................................................................................................................ 55
4.7 Other Functions ............................................................................................................................... 56
4.7.1.1 Example: Using NVL Functions ....................................................................................... 57
4.8 CASE Expression ............................................................................................................................ 59
Lab Week 5 Joining Data from Multiple Tables .................................................................................. 61
5.1 Objectives ........................................................................................................................................ 61
5.1.1 Reference ................................................................................................................................. 61
5.1.2 Database .................................................................................................................................. 61
5.2 Relational Algebra ........................................................................................................................... 61
5.3 Purpose of Joins ............................................................................................................................... 65
5.3.1 Cartesian Joins ......................................................................................................................... 65
5.4 Using Alias for Tables ..................................................................................................................... 66
5.5 Traditional Join Method versus ANSI JOIN Method ...................................................................... 67
5.6 Equality Joins .................................................................................................................................. 68
5.6.1 NATURAL JOIN Clause ......................................................................................................... 68
5.6.1.1 Example: Using NATURAL JOIN ................................................................................... 68
5.6.2 JOIN USING Clause ........................................................................................................... 70
5.6.2.1 Example: JOIN USING Clause with Alias .................................................................. 71
5.6.3 JOIN ON Clause ................................................................................................................. 71
5.6.3.1 Example: JOIN ON Clause .......................................................................................... 71
5.7 Non-equality Joins ........................................................................................................................... 73
5.8 Self-Joins ......................................................................................................................................... 74
5.8.1.1 Example: Self-Joins .......................................................................................................... 74
5.8.2 INNER JOINS ......................................................................................................................... 74
5.9 OUTER JOINS ................................................................................................................................ 74
5.9.1 Difference between INNER and OUTER Joins ....................................................................... 74
5.9.2 LEFT OUTER JOIN ................................................................................................................ 75
5.9.2.1 Example: Using LEFT OUTER JOINS ............................................................................ 75
5.9.3 RIGHT OUTER JOIN ............................................................................................................. 76
5.9.3.1 Example: RIGHT OUTER JOIN ...................................................................................... 76
5.9.4 FULL JOIN.............................................................................................................................. 76
5.10 SET OPERATORS ........................................................................................................................ 77
5.10.1 UNION .................................................................................................................................. 77
5.10.1.1 Example: UNION ........................................................................................................... 77
5.10.2 UNION ALL.......................................................................................................................... 78




v
UNSW
SISTM

Lab Manual

5.10.3 INTERSECT .......................................................................................................................... 78
5.10.4 MINUS .................................................................................................................................. 80
Lab Week 6 Group Functions ................................................................................................................ 81
6.1 Objectives ........................................................................................................................................ 81
6.1.1 Reference ................................................................................................................................. 81
6.1.2 Database .................................................................................................................................. 81
6.2 Understand Grouping ....................................................................................................................... 81
6.3 SELECT <Group By> Statement .................................................................................................... 84
6.3.1 Group Functions ...................................................................................................................... 84
6.3.1.1 Example: Group Functions ............................................................................................... 84
6.3.2 Other Data Types ..................................................................................................................... 85
6.3.2.1 Example: Date Values ...................................................................................................... 85
6.3.3 COUNT ................................................................................................................................... 85
6.3.3.1 Example: Using COUNT .................................................................................................. 85
6.3.3.2 Example: Handling NULL Values .................................................................................... 86
6.3.4 Grouping Data ......................................................................................................................... 87
6.3.4.1 Example: GROUP BY ...................................................................................................... 87
6.3.4.2 Example: GROUP BY, ORDER BY, WHERE and HAVING ......................................... 88
6.3.4.3 Example: Complex Queries .............................................................................................. 89
Lab Week 7 Table Creation, Constraints and Management ............................................................... 91
7.1 Objectives ........................................................................................................................................ 91
7.1.1 Reference ................................................................................................................................. 91
7.2 CREATE TABLE Statement ........................................................................................................... 91
7.2.1.1 Example: CREATE a TABLE ......................................................................................... 92
7.2.2 User Tables .............................................................................................................................. 93
7.3 CREATE TABLE AS Statement ........................................................................................... 93
7.3.1.1 Example: CREATE TABLE AS ............................................................................. 93
7.4 Modifying An Existing Table .......................................................................................................... 94
7.4.1.1 Example: ALTER TABLE Add, Modify and Drop ....................................................... 94
7.5 ALTER TABLESET UNUSED (and DROP) Statement ............................................................. 95
7.5.1.1 Example: ALTER TABLE SET UNUNSED and DROP ............................................ 96
7.6 Renaming a Table ............................................................................................................................ 96
7.7 Truncating a Table ........................................................................................................................... 97
7.8 Deleting a Table ............................................................................................................................... 97
7.9 Constraints ....................................................................................................................................... 98
7.9.1 Create Constraints .................................................................................................................... 99
7.9.2 Create a Table with Constraints ............................................................................................. 100
7.9.2.1 Example: Primary and Foreign Keys in the Statement ................................................... 100
7.9.3 Composite Primary Key ........................................................................................................ 101
7.9.4 Using the UNIQUE Constraint .............................................................................................. 101
7.9.4.1 Example: Unique Key Violation ..................................................................................... 102
7.10 Using the NOT NULL Constraint ............................................................................................... 102
7.11 CHECK Constraint ...................................................................................................................... 103
7.12 Drop Constraints .......................................................................................................................... 103
7.12.1.1 Example: Dropping a Primary Key and Constraints ..................................................... 104
7.13 Enable and Disable Constraints ................................................................................................... 104
Lab Week 8 Data Manipulation Language (DML) and Transaction Control ................................. 105
8.1 Objectives ...................................................................................................................................... 105
8.1.1 Reference ............................................................................................................................... 105
8.1.2 Database ................................................................................................................................ 105
8.2 Data Manipulation Language (DML) Commands ......................................................................... 105
8.2.1 INSERT Command ................................................................................................................ 105
8.2.1.1 Example: Insert a New Row ........................................................................................... 106
8.2.1.2 Example: Primary Key Constraint Violation .................................................................. 107
8.2.1.3 Example: Foreign Key Constraint Violation .................................................................. 109
8.2.1.4 Example: Initialised with Default Values ....................................................................... 109
8.2.2 INSERTING Data from an Existing Table ............................................................................ 110
8.2.2.1 Example: Inserting Data from an Existing Table ............................................................ 110
8.2.3 UPDATE Command .............................................................................................................. 111


vi

UNSW
SISTM

Lab Manual

8.2.4 Substitution Variables ............................................................................................................ 112
8.2.4.1 Example: Using Substitution Variables .......................................................................... 112
8.2.5 DELETE Command............................................................................................................... 114
8.3 Transaction Control Commands .................................................................................................... 115
8.3.1 COMMIT Command ............................................................................................................. 115
8.3.2 ROLLBACK Command ........................................................................................................ 115
8.4 SAVEPOINT and ROLLBACK TO Commands ........................................................................... 115
8.4.1.1 Example: Savepoint and Rollback .................................................................................. 116
8.5 Next Sequence Number ................................................................................................................. 117
8.6 Table Locks ................................................................................................................................... 118
8.6.1 LOCK TABLE Command Shared Lock ................................................................................ 118
8.6.2 LOCK TABLE Command Exclusive Lock ........................................................................... 118
8.7 SELECTFOR UPDATE Command ........................................................................................... 118
Lab Week 9 Subqueries and Merge Statements ................................................................................. 119
9.1 Objectives ...................................................................................................................................... 119
9.1.1 Reference ............................................................................................................................... 119
9.1.2 Database ................................................................................................................................ 119
9.2 Subqueries and Their Uses ............................................................................................................ 119
9.2.1 Single-Row Subquery ............................................................................................................ 120
9.2.1.1 Example: Single-Row Subquery in a WHERE Clause ................................................... 120
9.2.1.2 Example: Single-Row Subquery in a HAVING Clause.................................................. 121
9.2.1.3 Example: Single-Row Subquery in a SELECT Clause ................................................... 121
9.3 Multiple-Row Subqueries .............................................................................................................. 122
9.3.1.1 Example: Using the IN Operator .................................................................................... 122
9.3.1.2 Example: Using the ALL Operator ................................................................................. 123
9.3.1.3 Example: Using the ANY Operator ................................................................................ 124
9.4 Multiple-Column Subqueries ......................................................................................................... 125
9.4.1 Multiple-Column Subquery in a FROM clause ..................................................................... 125
9.4.2 Multiple-Column Subquery in a WHERE clause .................................................................. 126
9.5 Nested Subqueries ......................................................................................................................... 127
9.6 Correlated Subqueries .................................................................................................................... 127
9.6.1.1 Example: Correlated Subqueries ..................................................................................... 127
9.7 MERGE Statement ........................................................................................................................ 129
9.7.1.1 Example: MERGE .......................................................................................................... 129
Lab Week 10 Views ............................................................................................................................... 131
10.1 Objectives .................................................................................................................................... 131
10.1.1 Reference ............................................................................................................................. 131
10.1.2 Database .............................................................................................................................. 131
10.2 Background of Views .................................................................................................................. 131
10.3 Simple View ................................................................................................................................ 132
10.3.1.1 Example: Simple View ................................................................................................. 132
10.4 Complex View ............................................................................................................................. 133
10.4.1.1 Example: Complex View .............................................................................................. 133
10.5 Dropping a View.......................................................................................................................... 134
10.5.1.1 Example: Dropping a View .......................................................................................... 134
Appendix A Sample Database Structures ............................................................................................ 135
A.1 Sample Databases ......................................................................................................................... 135
A.2 HR (Human Resources) Database................................................................................................. 135
A.3 The HR Entity Relationship Diagram ........................................................................................... 136
A.4 The Human Resources (HR) Table Descriptions .......................................................................... 136
A.4.1 countries Table ........................................................................................................................... 136
A.4.2 departments Table ...................................................................................................................... 136
A.4.3 employees Table ........................................................................................................................ 137
A.4.4 job Table .................................................................................................................................... 137
A.4.5 job_history Table ....................................................................................................................... 137
A.4.6 locations Table ........................................................................................................................... 138
A.4.7 regions Table ............................................................................................................................. 138
A.5 JustLeeBooks Database ................................................................................................................ 138
Appendix B Instructions to connect to a server database in Oracle SQL Developer ....................... 139




vii
UNSW
SISTM

Lab Manual

Appendix C Instructions to connect to Oracle SQL Developer Data Modeler ................................. 142




viii

UNSW
SISTM

Lab Manual

Table of Figures

Figure I-1 Data Modelling .............................................................................................. 15
Figure I-2 Example of Tables in Oracle .......................................................................... 16
Figure I-3 Example of a Table ........................................................................................ 16
Figure I-4 Basic SQL Developer screen layout .............................................................. 19
Figure I-5 Menus for Oracle SQL Developer ................................................................. 20
Figure I-6 Icons on the SQL Worksheet Menu Bar ........................................................ 21
Figure I-7 Connect to HR Database ................................................................................ 22
Figure I-8 Drill Down after Connecting to HR Database ............................................... 22
Figure I-9 SQL Worksheet and Output ........................................................................... 23
Figure I-10 Enter SQL Statements into SQL Worksheet ................................................ 23
Figure I-11 Differences Between the Execute Statement and Run Script Output .......... 24
Figure I-12 File Saving Icons .......................................................................................... 24

Figure 2-1 SELECT ALL statement ............................................................................... 25
Figure 2-2 Select One Column Only ............................................................................... 26
Figure 2-3 Selecting More Than One Column ................................................................ 26
Figure 2-4 List the Column Names of employees table .................................................. 27
Figure 2-5 Demonstrate Four Common alias Methods ................................................... 29
Figure 2-6 Not using Distinct in the SELECT Statement ............................................... 30
Figure 2-7 Using DISTINCT in the SELECT Statement................................................ 30
Figure 2-8 An Example of Using Concatenation and Literal Strings ............................. 32
Figure 2-9 Single Quotation Mark .................................................................................. 33
Figure 2-10 Arithmetic Operation ................................................................................... 34
Figure 3-1 SELECT - Numeric Column ......................................................................... 35
Figure 3-2 SELECT - Character Strings ......................................................................... 36
Figure 3-3 SELECT - Date Values ................................................................................. 36
Figure 3-4 Condition based on Numeric Value .............................................................. 39
Figure 3-5 Condition is based on Non-inclusive Values ................................................ 39
Figure 3-6 Condition is based on Inclusive Values ........................................................ 40
Figure 3-7 Using BETWEEN ... AND ... operator ......................................................... 40
Figure 3-8 Selecting based on Character Strings ............................................................ 41
Figure 3-9 Compare with Alphanumeric Values ............................................................ 41
Figure 3-10 Demonstrate how the Values are selected based on the ASCII Code ......... 42
Figure 3-11 Select a range of Character String Values ................................................... 42
Figure 3-12 Select a range of Character String Values using BETWEEN ... AND
........................................................................................................................... 43
Figure 3-13 Using BETWEEN ... AND ... operator But the Lower Limit is not
First ................................................................................................................... 43
Figure 3-14 Demonstrate Case Sensitieve of Value Entered .......................................... 43
Figure 3-15 Month Component is not Case Sensitive .................................................... 44
Figure 3-16 The use of <> (Not Equal) Operator ........................................................ 44
Figure 3-17 The use of NOT Operator ......................................................................... 45
Figure 3-18 Testing a NULL value ................................................................................. 45
Figure 3-19 Using LIKE operator ................................................................................... 46
Figure 3-20 Using Wildcard Characters in LIKE operator ............................................. 47
Figure 3-21 Pattern Matching on Numbers and Date Values ......................................... 47




ix
UNSW
SISTM

Lab Manual

Figure 3-22 Sort by Numeric and Date Values ............................................................... 49
Figure 3-23 Sort the Column in Descending Order ........................................................ 50
Figure 3-24 NULL Values appear End of the List .......................................................... 50
Figure 3-25 Using NULLS FIRST .................................................................................. 50
Figure 4-1 Examples of using Case Conversion Function .............................................. 52
Figure 4-2 An example of using Character Manipulation Functions .............................. 53
Figure 4-3 Examples of using ROUND and TRUNC Functions .................................... 54
Figure 4-4 Examples of using ABS and POWER Functions .......................................... 54
Figure 4-5 Example of using DATE function ................................................................. 55
Figure 4-6 Using NVL Function ..................................................................................... 57
Figure 4-7 Example of NVL2 Function .......................................................................... 57
Figure 4-8 Example of using NULLIF and NULLS FIRST ........................................... 58
Figure 4-9 Examples of using TO_CHAR ...................................................................... 58
Figure 4-10 Example of using SOUNDEX ..................................................................... 59
Figure 4-11 An example of using CASE statement ........................................................ 60
Figure 5-1 Cartesian Joins ............................................................................................... 65
Figure 5-2 Using NATUAL JOIN .................................................................................. 68
Figure 5-3 NATURAL JOIN using manager_id ............................................................. 69
Figure 5-4 An Example using JOIN ... USING clause ................................................... 70
Figure 5-5 JOIN USING clause with alias ................................................................. 71
Figure 5-6 JOIN ON Clause ....................................................................................... 71
Figure 5-7 Using JOIN ... ON ... for Three tables ........................................................... 72
Figure 5-8 Using JOIN ... USING ... for Three tables .................................................... 72
Figure 5-9 An Example of Non-equality Join ................................................................. 73
Figure 5-10 An Example of self-joins ............................................................................. 74
Figure 5-11 Using LEFT OUTER JOINS ....................................................................... 75
Figure 5-12 An Example of using RIGHT OUTER JOIN .............................................. 76
Figure 5-13 An Example using UNION operator ........................................................... 77
Figure 5-14 Using UNION operator with two columns removed................................... 78
Figure 5-15 An Example of using INTERSECT Operator ............................................. 79
Figure 5-16 Another Example of using INTERSECT Operator ..................................... 79
Figure 5-17 An Example using MINUS Operator .......................................................... 80
Figure 6-1 An Example of using Group Functions ......................................................... 84
Figure 6-2 Find Minimum and Maximum Date Values.................................................. 85
Figure 6-3 Count non-NULL values ............................................................................... 85
Figure 6-4 Count NULL values ...................................................................................... 86
Figure 6-5 An Example of Handling NULL values ........................................................ 86
Figure 6-6 An Example of using GROUP BY ................................................................ 87
Figure 6-7 Total of All Records ...................................................................................... 87
Figure 6-8 An Example of using GROUP BY and WHERE Clauses ............................ 88
Figure 6-9 An Example of using GROUP BY and HAVING Clauses ........................... 88
Figure 6-10 An Example of Complex Queries ............................................................... 89
Figure 6-11 An Example of Complex Group By ............................................................ 89
Figure 6-12 An Example of Complex GROUP BY/HAVING ....................................... 90
Figure 7-1 CREATE a new table .................................................................................... 92
Figure 7-2 Oracle SQL Developer Layout ...................................................................... 92
Figure 7-3 CREATE TABLE AS ......................................................................... 93
Figure 7-4 ALTER TABLE Add, Modify and Drop ................................................... 94
Figure 7-5 ALTER TABLE SET UNUNSED and DROP ........................................ 96


x

UNSW
SISTM

Lab Manual

Figure 7-6 Create a New Table with Constraints .......................................................... 100
Figure 7-7 Unique Key Violation ................................................................................. 102
Figure 7-8 An Example of adding a CHECK Constraint .............................................. 103
Figure 7-9 Dropping Constraints .................................................................................. 104
Figure 8-1 Before Inserting New Records into countries table .................................... 106
Figure 8-2 Including and Not including columns in the INSERT statement ................ 106
Figure 8-3 Cannot INSERT the Same Record Again ................................................... 107
Figure 8-4 COMMIT options ........................................................................................ 107
Figure 8-5 Inserting Upper and Lower Text for the Primary Key column ................... 108
Figure 8-6 ROLLBACK Options .................................................................................. 108
Figure 8-7 Foreign Key Violation ................................................................................. 109
Figure 8-8 Assign default or NULL value to a column ................................................ 109
Figure 8-9 Insert a new row from an existing table ...................................................... 110
Figure 8-10 Update Data ............................................................................................... 111
Figure 8-11 Update Without WHERE clause ............................................................... 112
Figure 8-12 Using Substitution Variables ..................................................................... 113
Figure 8-13 Variables Substituted with Entered Values ............................................... 113
Figure 8-14 Invalid country id ...................................................................................... 114
Figure 8-15 Delete a Record ......................................................................................... 114
Figure 8-16 Exit without Update a Popup Box prompts for Action .......................... 115
Figure 9-1 Single-Row Subquery in a WHERE Clause ............................................... 120
Figure 9-2 Single-Row Subquery in a HAVING Clause .............................................. 121
Figure 9-3 Single-Row Subquery in a SELECT Clause ............................................... 121
Figure 9-4 Using the IN Operator ................................................................................. 122
Figure 9-5 Using the ALL Operator.............................................................................. 123
Figure 9-6 Using the ANY Operator ............................................................................. 124
Figure 9-7 Departments Average Salary ..................................................................... 125
Figure 9-8 Subquery using JOIN in the From clause .................................................... 126
Figure 9-9 Subquery in the WHERE clause ................................................................. 126
Figure 9-10 Order of Execution in Nested Subqueries ................................................. 127
Figure 9-11 Correlated Subqueries ............................................................................... 128
Figure 9-12 Correlated Subqueries using EXISTS clause ............................................ 128
Figure 9-13 MERGE Statement - Create temporary tables .......................................... 129
Figure 9-14 MERGE Statement - List Records in the temporary tables....................... 130
Figure 9-15 MERGE Statement - List Changes in temporary tables ............................ 130
Figure 10-1 An Example of a Simple View .................................................................. 132
Figure 10-2 An Example of a Complex View .............................................................. 133
Figure 10-3 Using WHERE Clause in a VIEW ............................................................ 134
Figure 10-4 Dropping a View ....................................................................................... 134

Figure A-1 ER Diagram for HR Database .................................................................... 136
Figure A-2 JustLeeBooks ER Diagram ........................................................................ 138

Figure B-1 Select Configure File Type Associations ................................................... 139
Figure B-2 Server Database Connection Form ............................................................. 139
Figure B-3 Database Connection Details ...................................................................... 140
Figure B-4 Sample Tables ............................................................................................. 141
Figure B-5 Set Date Format .......................................................................................... 141





xi
UNSW
SISTM

Lab Manual

Figure C-1 Select Option to import a Data Dictionary ................................................. 142
Figure C-2 Connect to an existing database .................................................................. 143
Figure C-3 Select a Database ........................................................................................ 143
Figure C-4 Select a Schema .......................................................................................... 144
Figure C-5 Select Six Tables......................................................................................... 144
Figure C-6 Summary of Number of Imported Tables ................................................... 145
Figure C-7 A Successful Log ........................................................................................ 145
Figure C-8 ERD for the Selected Tables....................................................................... 146




xii

UNSW
SISTM

Lab Manual

Table of Tables
Table 2-1 Data Types ...................................................................................................... 28
Table 2-2 Arithmetic Operations .................................................................................... 34
Table 3-1 Logical Operators ........................................................................................... 37
Table 3-2 Mathematical Comparison Operators ............................................................. 38
Table 3-3 Other Comparison Operators .......................................................................... 38
Table 3-4 Evaluation Order ............................................................................................. 48
Table 4-1 Type of Function............................................................................................. 51
Table 4-2 Case Conversion Functions ............................................................................ 51
Table 4-3 Character Manipulation Functions ................................................................. 52
Table 4-4 Table of Common Number Functions ............................................................ 53
Table 4-5 Table of Common Other Functions ................................................................ 56
Table 5-1 Definition of Algebra Operators ..................................................................... 62
Table 5-2 Desription of the Set Operators ...................................................................... 77
Table 6-1 Group 13 and 14 ............................................................................................. 81
Table 6-2 Average Mark for all students ........................................................................ 82
Table 6-3 Average at Group Level.................................................................................. 82
Table 6-4 Finding the average mark with WHERE clause and HAVING clause .......... 83
Table 6-5 Using WHERE Clause and HAVING Clause ................................................ 83
Table 7-1 Table of Types of Constraint .......................................................................... 99
Table 9-1 Five common types of Subquery .................................................................. 120
Table 9-2 ALL and ANY Operator Combinations ....................................................... 122
Table 10-1 Four Types of Views .................................................................................. 131






























13
UNSW
SISTM

Lab Manual

Introduction to Oracle and Relational Database
History of Oracle
More than three decades ago, Larry Ellison and co-founders of Oracle Corporation, Bob
Miner and Ed Oates, committed to building a relational database for business. Now
more than ever before, Oracle technology can be found in nearly every industry, and in
the data centres of the Fortune Global 100 companies. Oracle is the first software
company to develop and deploy 100% internet-enabled enterprise software across its
entire product line: database, business applications, application development, and
decision support tools. After the acquisition of Sun, Oracle now also manages the
download servers for the popular community database MySQL.
History of SQL
Dr. E. F. Codd published the paper, A Relational Model of Data for Large Shared Data
Banks," in June 1970 in the Association of Computer Machinery (ACM) journal,
Communications of the ACM. Codds model is now accepted as the definitive model for
relational database management systems (RDBMS). The language, Structured English
Query Language (SEQUEL) was developed by IBM Corporation, Inc., to use Codds
model. SEQUEL later became SQL (still pronounced sequel). In 1979, Relational
Software, Inc. (now Oracle) introduced the first commercially available implementation
of SQL. Today, SQL is accepted as the standard RDBMS language.
SQL Standards
Oracle strives to comply with industry-accepted standards and participates actively in
SQL standards committees. Industry-accepted committees are the American National
Standards Institute (ANSI) and the International Organization for Standardization (ISO),
which is affiliated with the International Electrotechnical Commission (IEC). Both
ANSI and the ISO/IEC have accepted SQL as the standard language for relational
databases. When a new SQL standard is simultaneously published by these
organisations, the names of the standards conform to conventions used by the
organisation, but the standards are technically identical.
The latest SQL standard was adopted in July 2003 and is often called SQL:2003 (revised
in 2006). Oracle 11g is conformed to the Core SQL:2003 standards (see
http://docs.oracle.com/cd/B28359_01/server.111/b28286/ap_standard_sql003.htm#i771
9). The latest standard is SQL:2008.



14

UNSW
SISTM

Lab Manual

Oracle 11g
Today, organisations need to support multiple terabytes of information for users who
demand fast and secure access to business applications round the clock. Oracle database
is widely used in many large corporations in Australia. The database systems must be
reliable and must be able to recover quickly in the event of any kind of failure.
Oracle Database 11g is designed along the following feature areas to help organisations
manage infrastructure grids easily and deliver high-quality service:
Manageability: By using some of the change assurance, management automation,
and fault diagnostics features, the database administrators (DBAs) can increase their
productivity, reduce costs, minimise errors, and maximise quality of service. Some
of the useful features that promote better management are Database Replay facility,
the SQL Performance Analyzer, and the Automatic SQL Tuning facility.
High availability: By using the high availability features, you can reduce the risk of
down time and data loss. These features improve online operations and enable faster
database upgrades.
Performance: By using capabilities such as SecureFiles, compression for online
transaction processing (OLTP), Real Application Clusters (RAC) optimisations,
Result Caches, and so on, you can greatly improve the performance of your
database. Oracle Database 11g enables organisations to manage large, scalable,
transactional, and data warehousing systems that deliver fast data access using low-
cost modular storage.
Security: Oracle Database 11g helps organisations protect their information with
unique secure configurations, data encryption and masking, and sophisticated
auditing capabilities. It delivers a secure and scalable platform for reliable and fast
access to all types of information by using the industry-standard interfaces.
Information integration: Oracle Database 11g has many features to better integrate
data throughout the enterprise. It also supports advanced information life-cycle
management capabilities. This helps you manage the changing data in your database.





15
UNSW
SISTM

Lab Manual

Information Systems Courses
Oracle is chosen as the database to be used for all the Information Systems courses.
Thus, the Oracle skills you developed will not go to waste. In addition, most Relational
DataBase Management Systems (RDBMSs) follow a similar structure and adhere to the
same standards. This means that the skills you obtain in this course will also allow you
to use other RDBMSs.
Data Modelling
The following steps are taken to develop from a conceptual model to implementation of
a database:

Figure I-1 Data Modelling
You will use Entity Relationship (ER) modelling technique to model the data based on a
conceptual model. Tables will be normalised and created in a database using the ER
diagrams created from the ER modelling.
Oracle SQL Developer Data Modeler is a data modeling and database design tool, which
allows you first to create an ER model, and then use this model to create tables in a
database. One of the premium features of SQL Data Modeler is allowing reverse-
engineering of an ER model, i.e. an ER model can be built from a list of selected tables.
This allows a database developer to check the linkages and constraints of tables in an
existing data model.



16

UNSW
SISTM

Lab Manual

Relational Database
Oracle is a relational database as defined by Codd. A relational database uses relations
or two-dimensional tables to store data as shown in the following diagram:

Figure I-2 Example of Tables in Oracle
A Table
A relational database contains one or many tables. A table is the basic storage structure
of an RDBMS (Relational Database Management System). A table is made up of rows
and columns. The below diagram shows the contents of an employee table:


Figure I-3 Example of a Table






17
UNSW
SISTM

Lab Manual

The numbers in the diagram indicate the following:
1. A single row, record, or tuple representing all the data required to store for an
employee.

2. A column or attribute containing the employee number. The employee number
(employee_id) uniquely identifies an employee in the EMPLOYEE table. In this
example, the employee number column is designated as the primary key. A primary
key must contain a value and that value must be unique.

3. A column represents one kind of data in a table; in this example, the data is the
salaries of employees.

4. A column containing the department number, which is also a foreign key. A foreign
key is a column that defines how tables relate to each other. A foreign key refers to a
primary key or a unique key in the same table or in another table. In this example,
department_id uniquely identifies a department in the departments table.

5. A field or data value can be found at the intersection of a row and a column. Each
individual field can only have one value.

6. A field may have no value in it - this is called a null value. In the employees table,
only those employees who have the role of sales representative have a value in the
commission_pct (commission) field. The others have a null value.
Oracle SQL Statements
The table below shows the data languages and examples of SQL statements for each
language. In this course, we will cover DML, TCL and DDL but not DCL.

Description Example of
SQL
Statements
To Be Covered
in Lab Week
Data Manipulation Language (DML):
SELECT
INSERT
UPDATE
DELETE
2, 3, 4, 5, 6, 8
and 9
Commands that modify data such as retrieving
data from the databases, entering data, changing
data and deleting data.
Transaction Control Language (TCL):
COMMIT
ROLLBACK
SAVEPOINT
8
Commands that control transactional processing
in a database.

Data Definition Language (DDL): CREATE
ALTER
DROP
RENAME
7, 9 and 10
Commands that define structures in a database,
such as create, alter and delete tables.
Data Control Language (DCL):
GRANT
REVOKE
-
Commands that control access to rights the data
and tables in a database.



18

UNSW
SISTM

Lab Manual

Lab/Tutorial Arrangement
(1) The tutor will start by demonstrating and discussing the lab materials.
(2) The SQL script created for the demonstration can be downloaded from
Blackboard. You are encouraged to run the script yourself to ensure you
understand the concept. You are also encouraged to experiment and make
changes to the script yourself - this will help you to understand the SQL
statements. If you have any questions, you can ask your tutor.
(3) The lab exercises will help you to develop your SQL knowledge and skills.
You are not expected to finish all the questions in the lab but you are expected
to finish the lab exercises as part of your 10-hour workload for the course.







19
UNSW
SISTM

Lab Manual

Introduction to Oracle SQL Developer
In this course, we will use Oracle SQL Developer as a graphical tool to connect to our
Oracle database. By default, it uses the Java Database Connectivity (JDBC) thin driver.
You can also freely download the Oracle SQL Developer application from the Oracle
website - see:
http://www.oracle.com/technetwork/developer-tools/sql-developer
The lab materials were originally written using SQL Developer 2.1.1.64, and version
3.0.04 was used in the latest revision. It is strongly recommended that you do not install
either the Alpha, Beta, or Early Adopter version. You can use the latest available version
of Oracle SQL Developer but the screen shots in this manual might look different from
your screen, but the fundamental ideas and functionality will be the same.
The basic Oracle SQL Developer screen layout is shown in Figure I-4.

Figure I-4 Basic SQL Developer screen layout
The most important regions of the SQL Developer window are highlighted:
1. The list of available database connections. Please note 1a. indicates which database
the SQL commands you have entered will be executed in.
2. The SQL worksheet where SQL commands are entered.
3. The execute button, which allows you to run the SQL commands you have entered.
4. The results panels which show you the results of your SQL commands in different
formats.



20

UNSW
SISTM

Lab Manual

SQL commands need to be run within the context of a specific database. The following
section describes the layout and functionality of the SQL Developer application in more
detail, the process for connecting to a database and the process for executing SQL
commands.
SQL Developer Layout and Functionality
We will now work through some of the commonly used icons and functions of SQL
Developer. We will not able to cover all the icons, buttons and function in this course
but you are encouraged to explore the tools yourself you can get more information
from Oracle SQL Developer User Guide, which you can download from the link as
mentioned in the previous section.


Figure I-5 Menus for Oracle SQL Developer
Apart from the standard options of File, Edit and Help, the other options on the Menus
as shown in above are summarised as:
(a) View: Contains options that affect what is displayed in the Oracle SQL
Developer interface
(b) Navigate: Contains options for navigating to various panes and for executing
subprograms
(c) Run: Contains the Run File and Execution Profile options that are relevant when
a function or procedure is being executed, debugged or profiled
(d) Versioning: Provides integrated support for the following versioning and source
control systems such as: Concurrent Versions System (CVS) and Subversion
(e) Tools: Invokes SQL Developer tools such as SQL*Plus, Preferences, and SQL
Worksheet

Some of the common options on the Menu bar can also be executed using short-cut key
(for example, Ctrl-C to copy) or by clicking an icon on the menu.





21
UNSW
SISTM

Lab Manual

The icons on the SQL Worksheet menu bar in Figure I-6 are used to execute and
manipulate the SQL statement(s) that you have entered into the SQL worksheet.


Figure I-6 Icons on the SQL Worksheet Menu Bar
Note the number associated with each icon. The functionality of each button, using the
number as the key, is described:
1. Execute Statement (Ctrl-Enter): Execute the statement where the cursor is
located in the Enter SQL Statement box
2. Run Script (F5): Execute all statements in the Enter SQL Statement box by
using the Script Runner
3. Autotrace (F6): Generate trace information for the statement
4. Execute Explain Plan (F10): Generate the execution plan, which you can see
by clicking the Explain tab.
5. Commit (F11): Write any changes to the database and ends the transaction
6. Rollback (F12): Discard any changes to the database, without writing them to
the database, and ends the transaction.
7. Unshared SQL Worksheet
8. Change Case: Change word to Uppercase, Lowercase or InitCap
9. Clear (Ctrl-D): Erase the statement or statements in the Enter SQL Statement
box
10. SQL History (F8): Display a dialog box with information about SQL
statements that you have executed
Connecting to a Database
There are two sample databases which you will use in the lab:
(i) Human Resources (HR) database (provided by Oracle) and
(ii) JustLeeBooks database (provided by Casteel
1
).
The lab materials are written based on the HR database, and the lab and homework
exercises are based on the JustLeeBooks database. You can find the data structures of
these two databases in Appendix A.
Instructions to Connect to a Database
The instructions to connect to a database in Oracle SQL Developer can be found in
Appendix B. Your password will be given to you.


1
Casteel, Joan, Oracle 11g: SQL, 2010, Cengage Learning.



22

UNSW
SISTM

Lab Manual

Reference
Apart from the instructions given in this manual, you can also find an overview of
Oracle SQL Developer in Casteel Appendix B, and full users guide in Oracle SQL
Developer Users Guide (which you can download from Blackboard or Oracle website).
Open a Database
For the purposes of this example we will be connecting to the HR database, but the same
procedure is used to connect to other databases. Click on HR database icon highlighted
in Figure I-7 and SQL Developer will try to connect you to the HR database. It will ask
you for a password, which will be provided to you. The other database you will use for
the lab exercises is JustLeeBooks database. The tables for JustLeeBooks are also listed
in HR database and all the tables begin with ZJLB_.

Figure I-7 Connect to HR Database
Once you have connected to the database, you can get more details about the database
by clicking the + button. Figure I-8 shows we have drilled down to the region table.

Figure I-8 Drill Down after Connecting to HR Database




23
UNSW
SISTM

Lab Manual

Executing SQL Statements in Oracle SQL Developer
After connecting to the desired database, you can enter SQL statements in the SQL
Worksheet. Figure I-9 shows the SQL Worksheet in the upper box and the SQL
statements output in the lower box.

Figure I-9 SQL Worksheet and Output
After you have connected to the HR database, for example, you can enter the SQL
statements in the SQL Worksheet as shown in Figure I-10.


Figure I-10 Enter SQL Statements into SQL Worksheet
Once you are satisfied with the SQL statements. In Step 3, you can execute the
statements by either clicking the Execute Statement icon (or Ctrl-Enter) or Run Script
icon (or F5). The differences between the two outputs are shown in Figure I-11. On the
left hand side, clicking Execute Statement icon will generate a Spreadsheet like output
a query result - whereas on the right hand side, Run Script icon will generate a plain text
output a script output and, moreover, you can save the script output.



24

UNSW
SISTM

Lab Manual




Figure I-11 Differences Between the Execute Statement and Run Script Output
You can save your SQL statements to a new or an existing file by clicking one of the
two icons on the menu bar as shown in Figure I-12. The file type you select must be
.sql.

Figure I-12 File Saving Icons
Summary
In summary, there are four basic steps to run SQL statements in Oracle SQL Developer
as shown in Figure I-4:
Step 1: Connect to the desired database, in the diagram the HR database is selected.
Please note 1a will show the current database you are connected to.
Step 2: Enter your SQL statement.
Step 3: Click on the Run Script icon to execute your SQL statement.
Step 4: The results of your executed SQL statement.





25
UNSW
SISTM

Lab Manual

Lab Week 2 Basic SQL SELECT statements
2.1 Objectives
For the next few labs, you will learn some of the basic commands of Data Manipulation
Language (DML) using Oracle database. You will be introduced to Oracle SQL
Developer as a graphical tool to connect to the Oracle database. At the end of this lab,
you should know how to retrieve data from a database using Oracle SQL Developer.
2.1.1 Reference
Casteel Chapter 2
2.1.2 Database
The database used in this lab is HR database.

2.2 SELECT Statement
A SELECT statement is used to retrieve data from the database. It is sometimes also
called a query because you ask the database a question. In this course, we will cover
most of the syntaxes in the SELECT statement. You can find the data structure of the
HR database in Appendix A.
2.2.1 Selecting All Data from a Table
You can use an asterisk (*) to indicate you want to select all columns from a table:
SELECT * FROM table_name;
2.2.1.1 Example: Selecting All Data from a Table
You can enter SELECT * FROM employees; in the SQL Worksheet (1) and click on
the Run Script icon (2) as shown in below figure (Figure 2-1):

Figure 2-1 SELECT ALL statement


26

UNSW
SISTM

Lab Manual

2.3 Selecting a Column or Columns from a Table
Instead of retrieving all the columns from a table, you may only want to retrieve a few
by specifying the columns you want separated by commas:
SELECT column_name, column_name, column_name
FROM table_name;
2.3.1.1 Example: Selecting One Column Only
Instead of selecting all columns, you can select, say, one column from the table as
shown below (Figure 2-2):

Figure 2-2 Select One Column Only
2.3.1.2 Example: Selecting More Than One Column
Instead of selecting just one column, you can select two or more columns by separating
the columns with comma as shown below (Figure 2-3):

Figure 2-3 Selecting More Than One Column




27
UNSW
SISTM

Lab Manual

2.3.2 Viewing Table Structure
To list the column names of a table, you can use the command:
DESC[RIBE] table_name [;]
2.3.2.1 Example: Find the Column Names of a Table
For example, you want to find the column names of the employees table (Figure 2-4):

Figure 2-4 List the Column Names of employees table
2.3.3 Null Values
Looking at the data structure of employees table as listed above (Figure 2-4), we can see
there are three columns:
(a) The Name column contains the column names of the employees table.
(b) Null column indicates whether the column is allowable to have a NULL value.
(c) Type describes the data type of a column.

(a) Name
Column names of a table.
(b) NULL values
Null is a special value that is used to represent value unknown or value
inappropriate. Null is not same as a space () or a zero (0).
The question is why do we need a NULL value?
For example, last summer, one student turned up to his examination but did not
write anything. In this case, the student was awarded a mark of zero (0). On the
other hand, a student did not turn up to his examination. No mark was awarded
for his examination, i.e. the examination mark column will have a Null value.


28

UNSW
SISTM

Lab Manual

Depending on which output option is selected in the Oracle SQL Developer, Null value
is presented differently. In the Query Output (see diagram below), you will see the literal
(null) value for employee King. On the other hand, a blank appears when Script
Output option is selected.



Using Query Output Option Using Script Output Option

(c) Data Types
Every column needs to be defined with a data type. The common data types are listed in
the following table (Table 2-1):
Table 2-1 Data Types
Date Type Description Example
Number Number without decimal Number (5) = 99999
Number(n,m) Number with decimal Number(8,2) = 999999.99
CHAR(n) Fixed length character string of length n
characters
Char(2) = AB
VARCHAR2(n) Variable length character string of
maximum length of n characters
VARCHAR(5) = abc
Date Date Date = 01-JAN-2011
Difference between CHAR(n) and VARCHAR2(n)
The difference between CHAR(n) and VARCHAR2(n) is how a character is physically
stored. For CHAR(n), it will allocate n physical storage spaces whereas for
VARCHAR2(n), the physical space varies depending on the number of characters it
needs to store. For example, VARCHAR2(5) = abc requires three storage spaces.
Normally, you use data type CHAR(n) when you have an alpha-numeric field that you
would like to use as a primary or a foreign key. This is because the extra processing that
the database needs to do in order to handle a variable-length field can be especially
detrimental to performance when that field is being used as a primary or foreign key.




29
UNSW
SISTM

Lab Manual

2.4 SELECT <Column Alias> Statement
You can change the display column heading using a column alias. There are three
common alias methods:
SELECT column_name_1 AS New_Column_Heading_1,
column_name_2 New_Column_Heading_2,
column_name_3 New Column Heading 3
column_name_4 AS New Column Heading 4
FROM employees;

The first two column alias methods give the columns a new column heading. The use of
AS keyword is optional. However, you cannot have a space between the words of the
alias in the first two methods.
By default, the headings appear in uppercase. If the alias contains a space, a special
character (e.g. $) or you want the heading appears as upper and lowercase (e.g. First
Name), then you need to enclose with double quotes () as shown in the third column
alias method. The last common alias is using the AS keyword and double quotes.
2.4.1.1 Example: -- Demonstrate Four Common Alias Methods
If you run the following query:
SELECT employee_id AS Employee,
employee_id AS "Employee Id",
last_name Surname,
first_name "First Name"
FROM employees;

The new column headings are displayed in Figure 2-5:


Figure 2-5 Demonstrate Four Common alias Methods


30

UNSW
SISTM

Lab Manual

2.5 SELECT DISTINCT Statement
By default, the SELECT statement will retrieve all the records. If you only want to find
unique and eliminate duplicate records, you will have to use DISTINCT in the SELECT
statement.
SELECT DISTINCT column_name, column_name
FROM table_name;
Note: The keyword UNIQUE is same as DISTINCT will return the same results.
2.5.1.1 Example: Using Distinct
Instead of retrieving all 107 rows from employees table for all job ids as shown in
Figure 2-6 AD_VP and FI_ACCOUNT are examples of repeated job ids. When
DISTINCT is used in the SELECT statement, only 19 distinct job ids are retrieved as
shown in Figure 2-7.


Figure 2-6 Not using Distinct in the SELECT
Statement

Figure 2-7 Using DISTINCT in the SELECT
Statement






31
UNSW
SISTM

Lab Manual

2.5.2 Use DISTINCT for Two or More Columns
When you use DISTINCT for two or more columns, all distinct combination of the
columns (not just the first column) will be retrieved.
For example,
-- (a) Select only the department_id - returns 12 records
SELECT DISTINCT department_id FROM employees;

DEPARTMENT_ID
-------------
100
30

10
12 rows selected


-- (b) Select only the manager_id returns 19 records
SELECT DISTINCT manager_id FROM employees;

MANAGER_ID
----------
100
123

146
103
122
19 rows selected


-- (c) Select combination of department_id and manager_id returns 28 records
SELECT DISTINCT department_id, manager_id FROM employees;

DEPARTMENT_ID MANAGER_ID
---------------------- ----------------------
60 103
80 146

20 201
110 101
28 rows selected



32

UNSW
SISTM

Lab Manual

2.6 SELECT <Concatenation> and <Literal Strings> Statement
A concentration operator, represented by two vertical bars (||), combines the contents of
two columns together.
A literal can be a character, a number or a date but it is not a column name or a column
alias. The literal is treated like a column, and it will appear for every row that is
retrieved. The date and character literals must be enclosed between single quotation
marks () but not for numeric literals.
SELECT column_name ||Literal Strings || column_name
FROM table_name;
2.6.1.1 Example: Using Concatenation and Literal Strings

Figure 2-8 An Example of Using Concatenation and Literal Strings





33
UNSW
SISTM

Lab Manual

2.6.1.2 Example: Single Quotation Mark
If you want to include a single quotation mark as part of the literal, you must use the
quote (q) operator and select your own quotation mark delimiter such as [ ], { }, ( ), or <
>.
For example, q<s job id is > is for s job id is as shown below (Figure 2-9):


Figure 2-9 Single Quotation Mark


34

UNSW
SISTM

Lab Manual

2.7 Arithmetic Operations
You can perform calculations using four basic arithmetic operators, which are shown in
Table 2-2. These arithmetic expressions can be used to modify the value of fields used
in or returned by your select statements. Arithmetic operations are executed using
normal operator precedence, i.e. according to their order of execution priority (listed in
the table below) moving from left to right in the equation. Parentheses ( ) can be
used to change the order of execution. You are encouraged to use parentheses to make
the equation more readable and avoid confusion when two or more operators are used.
For instance, if you have an equation salary + 12 * 100: do you mean (salary + 12) * 100
or salary + (12 * 100)? You will find using parentheses help to resolve any ambiguity
that might arise.
Table 2-2 Arithmetic Operations
Operator Order of
Execution
Multiplication * 1
Division / 2
Addition + 3
Subtraction - 4
SELECT column_name <experession> FROM table_name;
2.7.1.1 Example: Arithmetic Operation
Figure 2-10 shows all employees are given 10% pay rise and an extra $100 per month:

Figure 2-10 Arithmetic Operation




35
UNSW
SISTM

Lab Manual

Lab Week 3 Restricting Rows and Sorting Data
3.1 Objectives
Today, we continue to look at the SELECT statement:
To limit the rows retrieved by a query -
o using the WHERE clause,
o using comparison and
o Logical operators.
To sort the rows retrieved by a query
3.1.1 Reference
Casteel Chapter 8
3.1.2 Database
The database used in this lab is HR database.

3.2 SELECT <WHERE clause> Statement
In the WHERE clause, you can define a condition to retrieve rows from a table.
SELECT column_name, column_name
FROM table_name
WHERE (condition);
3.2.1 Numeric, Character Strings and Dates
The most common types of column are numeric, character strings and dates. There are
other, less commonly used types, for storing other types of data which we do not cover
in this course. For instance, the blob type can be used to store pictures.
3.2.1.1 Example: Numeric Values
You can retrieve rows by specifying a specific numeric value:

Figure 3-1 SELECT - Numeric Column


36

UNSW
SISTM

Lab Manual

3.2.1.2 Example: Character Strings
When using character strings in the WHERE clause, you have to enclose the string with
single quotation marks () and it is case sensitive.

Figure 3-2 SELECT - Character Strings
3.2.1.3 Example: Date Values
The date values in the WHERE clause are enclosed with single quotation marks (),
format-sensitive and the default date display format is DD-MON-RR (e.g. 16-JAN-11).

Figure 3-3 SELECT - Date Values





37
UNSW
SISTM

Lab Manual

3.3 Logical Operators
The three logical operators used to test in the condition are (examples based on Table
3-1):
AND both conditions must be true
o If A=B is true AND C=D is true, then the condition is true.
OR at least one condition must be true
o Either A=B is true OR C=D is true, then the condition is true.
NOT reverses of the initial result
o If A=B is true, then NOT(A=B) becomes false
Table 3-1 Logical Operators



Operators Result
A=B C=D
TRUE TRUE TRUE
TRUE FALSE FALSE
FALSE TRUE FALSE
FALSE FALSE FALSE
TRUE TRUE TRUE
TRUE FALSE TRUE
FALSE TRUE TRUE
FALSE FALSE FALSE
Operator Condition Result
A=B
TRUE FALSE
FALSE TRUE
NOT
Condition
AND
OR


38

UNSW
SISTM

Lab Manual

3.4 Comparison Operators
Comparison operators are used in the condition to compare columns, values and/or
expressions. The two tables (Table 3-2 and Table 3-3) show the operators that can be
used for comparisons:
Table 3-2 Mathematical Comparison Operators


Table 3-3 Other Comparison Operators


Now, we demonstrate examples using some of the operators in Table 3-1, Table 3-2 and
Table 3-3.







39
UNSW
SISTM

Lab Manual

3.4.1.1 Example: Condition based on Numeric Value
A simple example of selecting numeric value (Figure 3-4):

Figure 3-4 Condition based on Numeric Value
When to use the operator greater than (>) or greater than or equal to (>=) depends on
how you want to evaluate the values. Figure 3-5 and Figure 3-6 show different values
are retrieved based on different operators. 10,000 and 11,000 were retrieved in Figure
3-6 but not in Figure 3-5. Alternatively, you can use BETWEEN ... AND ... operator.
Values that are specified using the BETWEEN ... AND ... operator are considered as
inclusive thus, the results in Figure 3-6 and Figure 3-7 should be same.


Figure 3-5 Condition is based on Non-inclusive Values


40

UNSW
SISTM

Lab Manual


Figure 3-6 Condition is based on Inclusive Values


Figure 3-7 Using BETWEEN ... AND ... operator




41
UNSW
SISTM

Lab Manual

3.4.1.2 Example: Condition based on Character Strings


Figure 3-8 Selecting based on Character Strings

Figure 3-9 Compare with Alphanumeric Values


42

UNSW
SISTM

Lab Manual

When comparison is done between two values, the values are compared using ASCII
codes (see http://www.asciitable.com). ASCII stands for American Standard Code for
Information Interchange. ASCII code represents a number which the computer or
software could translate.
In Figure 3-10, postal_code M5V 2L7, YSW 9T2, and OX9 9ZB are among the
selected records. This is because the ASCII decimal value for the number nine is 57,
and, as an example, the ASCII decimal value for the letter Y is 89 - since 89 is greater
than 57, the records are selected as shown in Figure 3-10.


Figure 3-10 Demonstrate how the Values are selected based on the ASCII Code
You can select a range of character strings as shown in Figure 3-11. Alternatively, you
can use the BETWEEN ... AND ... operator (see Figure 3-12) but you must specify the
lower limit first. Otherwise, no record is retrieved as shown in Figure 3-13.

Figure 3-11 Select a range of Character String Values




43
UNSW
SISTM

Lab Manual


Figure 3-12 Select a range of Character String Values using BETWEEN ... AND ...

Figure 3-13 Using BETWEEN ... AND ... operator But the Lower Limit is not First
Figure 3-14 demonstrates the values for the character strings are case sensitive King
is different from KING:

Figure 3-14 Demonstrate Case Sensitieve of Value Entered


44

UNSW
SISTM

Lab Manual

3.4.1.3 Example: Condition based on a Date Values
Selecting using data values must be in the format of DD-MON-RR. You can have
MAR or Mar for the month component.


Figure 3-15 Month Component is not Case Sensitive

3.4.1.4 Example: The use of Not Equal or NOT Operator
You can also use not equal (<>) or NOT operator in the condition:


Figure 3-16 The use of <> (Not Equal) Operator




45
UNSW
SISTM

Lab Manual


Figure 3-17 The use of NOT Operator
There are 107 employees but the two SELECT statements in Figure 3-17 only retrieved
106 employees - so one employee is missing? You can find the missing employee by
testing a NULL condition because Jennie does not have a department_id (see Figure
3-18):

Figure 3-18 Testing a NULL value


46

UNSW
SISTM

Lab Manual

3.4.1.5 Example: The use of LI KE Operator
You can use the LIKE operator to search for patterns: numbers, character strings and
dates. The two wildcard characters used in the LIKE operator are:
Percent sign (%): match any number of characters
Underscore sign (_): match exactly one character


Figure 3-19 Using LIKE operator
Figure 3-20 shows how the position of wildcard characters can change the results.





47
UNSW
SISTM

Lab Manual


Figure 3-20 Using Wildcard Characters in LIKE operator
Figure 3-21 shows an example of pattern matching on numbers and date values.


Figure 3-21 Pattern Matching on Numbers and Date Values



48

UNSW
SISTM

Lab Manual

3.4.2 Rules of Precedence
The rules of precedence govern the order in which expressions in the SELECT statement
are executed. The evaluation order:
Table 3-4 Evaluation Order


However, the order of evaluation can be changed using parentheses. It is recommended
that parentheses are used when an expression contains two or more operators. This way
the intention of the developer is clear and ambiguity is avoided.
3.5 SELECT <ORDER BY clause> Statement
When you want to sort an output, you have to use ORDER BY clause:

SELECT <column_name>
FROM <table_name>
ORDER BY <column_name> | [1, 2,];

The rules related to the ORDER BY clause include:
ORDER BY is the last clause in the SELECT statement
You can sort the list by ascending (ASC default) or descending (DESC) order
You can sort by order number of the column in the SELECT list
You can sort a column that is not in the SELECT list
You can use NULLS FIRST OR NULLS LAST (default) for NULL values
The following queries will give you the same results either sort by using the column or
the order number of the column in the SELECT list:
-- Sorted by column
SELECT employee_id, last_name, first_name
FROM employees
ORDER BY last_name;
/or/
1 Arithmetic (*, /, +, -) operators
2 Concatenation (||) operator
3 Comparison (<, >, =) conditions
4 IS [NOT] NULL, LIKE, [NOT] IN
5 [NOT] BETWEEN
6 Not equal to
7 NOT logical condition
8 AND logical condition
9 OR logical condition
Evaluation Order




49
UNSW
SISTM

Lab Manual

-- Sorted by column number in the SELECT list
SELECT employee_id, last_name, first_name
FROM employees
ORDER BY 2;

You are not recommended to use a column number when sorting because it might create
a different result when you add or delete a column in the future without changing the
column number. However, you will find automatic code generator such as in Oracle
APEX uses column number in the ORDER BY clause.
You can even sort a column that is not on the SELECT list. In the example below, the
manager_id column is not listed in the SELECT clause:

SELECT employee_id, last_name, hire_date
FROM employees
ORDER BY manager_id, hire_date;

3.5.1.1 Example: Sort by Numeric and Date Values


Figure 3-22 Sort by Numeric and Date Values


50

UNSW
SISTM

Lab Manual


Figure 3-23 Sort the Column in Descending Order
3.5.2 Sort NULL Values
By default, the NULL values will appear
at the end of the list (Figure 3-24):

Figure 3-24 NULL Values appear End of the
List
If you want to have the NULL values to appear
at the beginning of the list, you have to use
NULLS FIRST in the ORDER BY clause
(Figure 3-25):

Figure 3-25 Using NULLS FIRST




51
UNSW
SISTM

Lab Manual

Lab Week 4 Selected Single-Row Functions
4.1 Objectives
This week, you will learn some single-row SQL functions. There are many types of
function in Oracle Database. A function accepts one or more arguments and then returns
a single value.
4.1.1 Reference
Casteel Chapter 10
4.1.2 Database
The database used in this lab is HR database.
4.2 Overview of Functions
Functions can be divided into the following types:
Table 4-1 Type of Function

4.2.1 Case Conversion Functions
The three case conversion functions in Oracle are:

Table 4-2 Case Conversion Functions
Function Purpose Example
LOWER Returns a string with all characters converted to
lowercase
LOWER(Oracle SQL)
becomes oracle sql
UPPER Returns the string with all characters converted
to uppercase
UPPER(Oracle SQL)
becomes ORACLE SQL
INITCAP Converts the first letter of every word to
uppercase, and each subsequent letter to
lowercase
INITCAP(Oracle SQL)
becomes Oracle Sql


52

UNSW
SISTM

Lab Manual

4.2.1.1 Example: Case Conversion Function
The case conversion function can be used to modify the way fields are displayed (Figure
4-1):

Figure 4-1 Examples of using Case Conversion Function
4.3 Character Manipulation Functions
Character Manipulation Functions are used to find the length of a string, extract part of a
string, or replace a character of a string. Some of the common functions are listed in the
below table (Table 4-3), and more functions can be found in the Casteel.
Table 4-3 Character Manipulation Functions
Function Purpose Example
SUBSTR Extract portion of a string
SUBSTR(c, p, l):
Where c is the character string
p is the starting position of the character string
l is the length of the string to be extracted
SUBSTR(Hello World, 1, 5)
returns Hello
SUBSTR(Hello World, -5, 5)
returns World (minus in -5 means
count from the end of the string)
INSTR Search a specified set of characters or a substring in a
character string and returns the numeric position.
Note: If no substring is found, then it will return a value
of 0 (zero).
INSTR(Hello World, W)
returns 7

LENGTH The width of a character string. LENGTH(Hello World) returns 11
LPAD This function is used to pad or fill in the unoccupied
blank area to the left of a character string with a specific
character.
LPAD(c, l, s): Where c is the character string
l is total length to be displayed
s is character used for padding
LPAD(Hello World, 15, *)
returns ****Hello World

RPAD This function is used to pad or fill in the unoccupied
blank area to the right of a character string with a
specific character.
RPAD(Hello World, 15, *)
returns
Hello World****
LTRIM This function removes all occurances of a given string
from the of a given string
LTRIM(c, s):
where c is the character string
s is substring to be removed (if omitted this
parameter defaults to the space character)
LTRIM( Hello World)
returns Hello World)
LTRIM(Hello World, Hello)
returns World
(note: the space before the word
World was not removed)
RTRIM As for LTRIM but this function removes a substring
from the right side of a character string.
RTRIM(Hello World, World)
returns Hello
REPLACE Substitutes a string with another specified string

REPLACE(Hello World,
Hell, G) returns Go World




53
UNSW
SISTM

Lab Manual

4.3.1.1 Example: Character Manipulation Functions
Figure 4-2 shows an example of using Character Manipulation Functions.

Figure 4-2 An example of using Character Manipulation Functions
Note: in Oracle SQL, the position of a string starts from one (1) and not zero (0).
4.4 Number Functions
We will first examine some of the common number functions (Table 4-4) follow by
some examples.
Table 4-4 Table of Common Number Functions
Function Purpose
ROUND The Round function is used to round numeric fields to the stated precision.
TRUNC The TRUNC function is used to round numeric fields to the stated precision.
MOD The MOD (modulus) function returns the remainder of a division operation.
ABS The ABS (absolute) function returns a positive numeric value.
POWER The POWER function is used to calculate a statistical power.


54

UNSW
SISTM

Lab Manual

4.4.1.1 Example: Examples of using Number Functions

Figure 4-3 Examples of using ROUND and TRUNC Functions

Figure 4-4 Examples of using ABS and POWER Functions
4.4.2 The Dual Table
The dual table is a public dummy table available in the Oracle database. It has one
column called dummy with a value X. We do not use the value but use the table as a
dummy to do calculation like in Figure 4-4, or find todays date:

SELECT sysdate FROM dual;
SYSDATE
---------
11-FEB-11




55
UNSW
SISTM

Lab Manual

4.5 Date Functions
Handling dates is not an easy task. Some global organisations have systems that are used
across different countries and timezones where the date format may differ in each
country. For instance, in Australia, the default format for dates is dd-mm-yyyy (e.g. 18-
01-2011) whereas in the United States, the format is mm-dd-yyyy (e.g. 01-18-2011).
Oracle databases can handle the different date formats used in different countries.
The default format of date in Oracle database is DD-MON-RR. The textbook mentions
DD-MON-YY format. The difference between RR and YY is the way dates around the
turn of the millennium are dealt with (19 for YY and 20 for RR). In this course, we only
use DD-MON-RR.
The textbook Casteel has a very good introduction to the date functions, so you are
encouraged to read this section. In the lab, we only cover a few of these functions. For
todays date, you are recommended to use SYSDATE and not CURRENT_DATE.

4.5.1.1 Example: Date Function
An example of using DATE function is to calculate how many years (approx.) the
employees have been working in the company.


Figure 4-5 Example of using DATE function

4.6 Regular Expressions
We will not cover this topic in the lab but it is covered in Casteel (pp. 357-359).



56

UNSW
SISTM

Lab Manual

4.7 Other Functions
There are other functions which are commonly used are listed in Table 4-5.
Table 4-5 Table of Common Other Functions
Function Purpose Example
NVL You may want to substitute a value for any NULLs encountered.
For instance, a number multiplied by a NULL value is NULL and
this may not be what you want. This function is used to address a
column when it has a NULL value. For instance, you might want
to substitute a NULL value with zero.
Figure 4-6
NVL2 This function takes three parameters: x, y and z. The function will
return y if x is not NULL. If x is NULL z will be returned instead.
Figure 4-7
NULLIF This function is used to compare two values for equality if the
two values are equal, then it will return a NULL value.
Figure 4-8
TO_CHAR You will use this function frequently to format values. For
instance, this function can be used to convert dates and numbers to
a formatted character string.
Figure 4-9
TO_NUMBER This function is used to convert a character string to a number. -
SOUNDEX SOUNDEX function is to search for value based on the
pronunciation of words rather than search for value based on an
exact character string.
Figure 4-10






57
UNSW
SISTM

Lab Manual

4.7.1.1 Example: Using NVL Functions

Figure 4-6 Using NVL Function

Figure 4-7 Example of NVL2 Function


58

UNSW
SISTM

Lab Manual


Figure 4-8 Example of using NULLIF and NULLS FIRST
NOTE: We have not covered the JOIN statements yet, so do not
worry if you do not understand some of the examples in
Casteel.

Figure 4-9 Examples of using TO_CHAR




59
UNSW
SISTM

Lab Manual


Figure 4-10 Example of using SOUNDEX

4.8 CASE Expression
The CASE expression allows you to specify different actions depending on the value.
You can test a number of conditions at the same time and if none of the conditions are
true, then it will assign a default value in the ELSE clause. The syntax of CASE
expression is:

SELECT column_name,
CASE
WHEN (condition 1) THEN <value 1>
WHEN (condition 2) THEN <value 2>
ELSE <default value>
END column_alias
FROM table_name
[WHERE ]

Note: The DECODE statement is a proprietor function of Oracle.
This function provides similar functionality to CASE
statement. The recommendation from Oracle is to use CASE
statement, and change the DECODE statement to CASE
statement where possible.





60

UNSW
SISTM

Lab Manual

An example of setting the salary level based on salary (Figure 4-11):


Figure 4-11 An example of using CASE statement






















61
UNSW
SISTM

Lab Manual

Lab Week 5 Joining Data from Multiple Tables

5.1 Objectives
This week, you will learn how to join two or more tables. You will be able to identify a
Cartesian join; create equality and non-equality joins; create a self-join; and distinguish
an inner join from an outer join. In addition, the theoretical principles behind the
development of SQL statements using the relational algebra from Codds original paper
will be discussed.
5.1.1 Reference
Casteel Chapter 9
5.1.2 Database
The database used in this lab is HR database.

5.2 Relational Algebra
So far, you have learned how to use SQL statements to retrieve data. Before we continue
discussing more SQL statements, we will first have a look at the theoretical principles
behind the development of these SQL statements. The SQL statements were first
developed based on relational algebra from Codds original paper.
Relational algebra is a high-level procedural language, which consists of a collection of
operators. Of course, since Codds original definition
2
of eight operators, more
operators, and combination of operators have been added. The eight operators are
defined and explained in Table 5-1:



2
Date, C. J., 1995, An Introduction to Database Systems, 6th Edition, Addison-Wesley Publishing, USA, p. 141


62

UNSW
SISTM

Lab Manual

Table 5-1 Definition of Algebra Operators
Operator Definition Example
Union Union returns a relation consisting of all tuples appearing in
either or both of the relations, i.e., select all rows from both
tables (A B).


Intersect Intersect returns a relation consisting of all tuples appearing in
both of the relations, i.e. select only the common rows from
both tables.



Difference Difference returns a relation consisting of all tuples appearing
in the first and not the second of two specified relations, i.e.
select rows that are in the first table but not in the second table.
Note: A B is different from B A.



A
B
A
s1 A B
s2 s1
s2
B s3
s3 s4
s4
B
A
A
s1
s2 A B
s2
B
s3
s2
(A-B) A
B
(B-A)
B
A
A
s1 A - B
s2 s1
B B - A
s3 s3
s2



63
UNSW
SISTM

Lab Manual

Operator Definition Example

Restrict Restrict returns a relation consisting of all tuples from a
specified relation that satisfy a specified condition, i.e. rows
are selected based on a condition(s) using a WHERE clause.



Project It returns a relation consisting of all tuples that remain as
(sub)tuples in a specified relation after specified attributes have
been eliminated, i.e. select a column(s) from a table.



Cartesian
Product
It returns a relation consisting of all possible tuples that are a
combination of two tuples, one from each of two specified
relations, i.e. rows in the first table TIMES rows in the second
table.


A
s1 WHERE A = 's2'
s2 s2
col A col B SELECT col A
a1 b1 a1
a2 b2 a2
A
s1 A TIMES B
s2 s1 b1
s1 b2
B s2 b1
b1 s2 b2
b2


64

UNSW
SISTM

Lab Manual

Operator Definition Example
Natural
Join
Natural join returns a relation consisting of all possible tuples
that are a combination of two tuples, one specified from each
of two specified relations, such that the two tuples contributing
to any given combination have a common value for the
common attributes(s) of the two relations.


Divide Takes two relations, one binary and one unary, and returns a
relation consisting of all values of one attribute of the binary
relation that match (in the other attribute) all values in the
unary relation.






c1 c2
a1 b1
a2 b2
c1 c2 c3
a1 b1 c1
a2 b2 c2
c1 c3
a1 c1
a2 c2
A
B
A JOIN B
B
c1 c2 c2
a1 b1 b1
a1 b2 b3
a1 b3
a1 b4 A Divided by B
a2 b1 c1
a3 b1 a1
a3 b2 a3
a3 b3
A



65

UNSW
SISTM

Lab Manual

Now, you should have a better understanding of the theoretical background behind the
development of SQL statements of what you have already learned, and what you will
learn in the next few chapters.
5.3 Purpose of Joins
Joins are used to link tables and reconstruct data in a relational database. Joins can be
created using:
o Conditions in a WHERE clause (Traditional Join Method) or
o JOIN in the FROM clause (ANSI JOIN Method)
5.3.1 Cartesian Joins
Cartesian Joins are created by omitting joining condition in the WHERE clause or
through CROSS JOIN keywords in the FROM clause. This creates a result of every
possible row combination (m*n) as shown in Figure 5-1.

Figure 5-1 Cartesian Joins
Normally, when people see a join such as the one shown in Figure 5-1, they will
assume it is incorrect. If you want to use a Cartesian join, it is recommended that you
use the CROSS JOIN clause to indicate to other people your intention:

SELECT * FROM regions CROSS JOIN countries;





66

UNSW
SISTM

Lab Manual

5.4 Using Alias for Tables
If a column occurs in both tables, you must specify which table the column is referred
to. Otherwise, an error or similar message will appear:
-- SQL Error: ORA-00918: column ambiguously defined
-- 00918. 00000 - column ambiguously defined

If, for example, the department_id column is in both employees and departments tables,
you can refer department_id in the employees table as employees.department_id and
department_id in the departments table as departments.department_id. Your SELECT
statement will look like this:

SELECT employees.last_name,
employees.department_id,
departments.department_name
FROM employees,
departments
WHERE employees.department_id = departments.department_id;

Alternatively, instead of using the full table name, you can define aliases for your
tables. It is a good practice to identify all the tables using aliases. In this way, you can
associate the columns with the tables. It will also help to improve the performance
when running the query - the table alias give a table a shorter name - it keeps the SQL
code smaller, more readable and uses less memory. Using alias for the above example,
your new SELECT statement will look like this:

SELECT e.last_name, e.department_id, d.department_name
FROM employees e,
departments d
WHERE e.department_id = d.department_id;

When using an alias, it is good practice to have a meaningful identification so it is easy
for other people to indentify the tables. The first letter of the tables name is frequently
used as an alias. Using random letters like a, b, c to indentify your tables might be
confusing and is not recommended:

SELECT a.last_name, a.department_id, b.department_name
FROM employees a,
departments b
WHERE a.department_id = b.department_id;



67

UNSW
SISTM

Lab Manual

5.5 Traditional Join Method versus ANSI JOIN Method
The SELECT statement in previous section is known as traditional join method because
two tables are linked through specifying their columns in the WHERE clause.
Traditional joins are still embedded in most of the older queries and computer
programs.
Most of the older generation of IT personnel do not like, or resist, to change to the
ANSI JOIN method because they have been using for years (like teaching an old dog
new trick). The ANSI JOIN method was introduced for the purpose of resolving some
of ambiguities and reducing errors by forcing you to specify the columns in the JOIN
statement. It is usually difficult to find the error when there are a few tables linked in
the WHERE clause.
If, for example, you accidentally forget to enter the condition to test for location_id, the
query will still run and 2,438 rows, instead of 106 rows, will be retrieved.

SELECT e.last_name, e.department_id, d.department_name, l.city
FROM employees e,
departments d,
locations l
WHERE e.department_id = d.department_id
-- Missing: AND d.location_id = l.location_id
;

On the other hand, you will get an error if the condition statement is not entered in the
JOIN statement. Thus, this will force you to enter a condition:

SELECT e.last_name, e.department_id, d.department_name, l.city
FROM employees e
JOIN departments d
ON e.department_id = d.department_id
JOIN locations l
-- Missing: ON d.location_id = l.location_id
;

Next, we will introduce and discuss the JOIN statements.






68

UNSW
SISTM

Lab Manual

5.6 Equality Joins
You can link rows through equivalent data that exists in both tables. This is created
through creating equivalency condition in the WHERE clause and using NATURAL
JOIN, JOINUSING, or JOINON keywords in the FROM clause.
5.6.1 NATURAL JOIN Clause
The NATURAL JOIN clause is used to link two tables based on the same column
name.
5.6.1.1 Example: Using NATURAL J OI N

Figure 5-2 Using NATUAL JOIN

Using NATURAL JOIN in Figure 5-2 is fine because there is only one common
column, namely location_id, between the two tables. However, when there are two or
more columns with the same name in both tables, Oracle will select and link the tables
using one of the common columns. This automatic linking may not produce the join
you after, Oracle may not choose the common column you intended to link the two
tables.







69

UNSW
SISTM

Lab Manual

For example, if you want to link employees and departments table using NATURAL
JOIN, Oracle will use manager_id instead of department_id to link the two tables even
when department_id is a foreign key in the employees table and primary key in the
departments table (see Figure 5-3):


Figure 5-3 NATURAL JOIN using manager_id
























70

UNSW
SISTM

Lab Manual

5.6.2 JOIN USING Clause
As shown in Figure 5-3, NATURAL JOIN can be problematic if there are two or more
columns common to both tables. To resolve this ambiguity, you can specify the column
you want to link. In Figure 5-4, we specify joining the two tables using department_id
column. Please note that there are 106 records in Figure 5-4 but only 32 records in
Figure 5-3.


Figure 5-4 An Example using JOIN ... USING clause
You should not use any prefix alias in the USING clause because department_id is
common to both tables otherwise an error message will appear. For example, in Figure
5-5, department_id does not have the alias d links to the column.














71

UNSW
SISTM

Lab Manual

5.6.2.1 Example: JOIN USI NG Clause with Alias


Figure 5-5 JOIN USING clause with alias
5.6.3 JOIN ON Clause
Alternatively, you can use JOIN ON clause to specify columns to join. The
previous example (Figure 5-5) can be modified to use the JOIN ON clause
(Figure 5-6), and it will still produce the same result. The way the links are defined in
the JOIN ON clause is very similar to the Traditional Join Method.
5.6.3.1 Example: J OI N ON Clause

Figure 5-6 JOIN ON Clause


72

UNSW
SISTM

Lab Manual

You can join three or more tables using JOIN ON clause as shown in Figure 5-7.
You can still get the same result using JOIN USING clause as shown in Figure 5-8.


Figure 5-7 Using JOIN ... ON ... for Three tables


Figure 5-8 Using JOIN ... USING ... for Three tables









73

UNSW
SISTM

Lab Manual

5.7 Non-equality Joins
A non-equality join is when you use any other comparison operators other than the
equal sign in the WHERE clause. Another instance is when you use JOINON clause
in the FROM clause for a non-equivalent condition as shown in Figure 5-9.


Figure 5-9 An Example of Non-equality Join




74

UNSW
SISTM

Lab Manual

5.8 Self-Joins
Self-join is to link a table to itself - for example, link employees table to employees
table. Thus, it requires the use of table aliases and use of a column qualifier.
5.8.1.1 Example: Self-J oins
A manager of an employee is also an employee of the company. If you want to find the
managers name of an employee, you have to link the employees table back to the
employees table to get the name of an employees manager.

Figure 5-10 An Example of self-joins
5.8.2 INNER JOINS
Although we only use the word JOIN, with the equality, non-equality, and self-joins
discussed so far, they are actually all classified as INNER JOINS. An inner join
(sometimes called a simple join) is a join of two or more tables that returns only those
rows that satisfy the join condition.
5.9 OUTER JOINS
On the other hand, you use outer joins to include rows that do not have a match in the
other table. You can think of the outer join as an optional link with another table. There
are three types of OUTER JOINS: FULL, LEFT, or RIGHT.
5.9.1 Difference between INNER and OUTER Joins
In summary, joining of two tables returns only the matching rows is called an INNER
join. On the other hand, a join between two tables returning all the matching rows of an
INNER join as well as any unmatched rows from the left table, or from right table, or
both tables is called a LEFT, or a RIGHT, or an OUTER join respectively. This is the
way to retrieve the NULL records.



75

UNSW
SISTM

Lab Manual

5.9.2 LEFT OUTER JOIN
With a LEFT OUTER JOIN, if the table listed on the left side of the join has an
unmatched record, it will theoretically match with a NULL record.
5.9.2.1 Example: Using LEFT OUTER J OI NS
Figure 5-11 shows the employee King has not got a manager because King is the
president of the company. All other employees have a manager. If you do not use a
LEFT OUTER Join, the record of employee King will not be retrieved.

Figure 5-11 Using LEFT OUTER JOINS




76

UNSW
SISTM

Lab Manual

5.9.3 RIGHT OUTER JOIN
The same can be applied to RIGHT OUTER JOIN. All the NULL records of the table
on the right hand side of the JOIN can be retrieved.
5.9.3.1 Example: RI GHT OUTER J OI N
Figure 5-12 shows employee 101 has worked as AC_ACCOUNT and AC_MGR, and
he is now an AD_VP of the company. Other employees such as 103, 104 and 105 have
not changed their job as IT_PROG since joining the company these records are
retrieved using RIGHT OUTER JOIN.


Figure 5-12 An Example of using RIGHT OUTER JOIN
5.9.4 FULL JOIN
FULL JOIN will return records from both tables even the ones that do not have a
matching record in the other table.







77

UNSW
SISTM

Lab Manual

5.10 SET OPERATORS
Set operators are used to combine the results of two (or more) SELECT statements.
Valid set operators are UNION, UNION ALL, INTERSECT and MINUS.
Table 5-2 Desription of the Set Operators


5.10.1 UNION
The UNION operator returns all the rows from multiple tables and eliminates any
duplicate rows to both queries.
5.10.1.1 Example: UNI ON
You can see the records retrieved from job_history table have as the last_name
whereas records retrieved from employees display the last_name of the employee.


Figure 5-13 An Example using UNION operator



78

UNSW
SISTM

Lab Manual

The number of columns in the SELCT statement determines the number of rows to be
retrieved. For instance, if we get rid job_id and department_id columns, then the result
is different for employee_id 101 (see Figure 5-14).


Figure 5-14 Using UNION operator with two columns removed

5.10.2 UNION ALL
The UNION ALL operator returns all rows from both queries in a single result set.
5.10.3 INTERSECT
The INTERSECT operator returns only those records with the same values in the
selected columns in both tables. For instance, you want to find employees who went
back to one of their previous jobs (Figure 5-15). However, in Figure 5-16, it shows that
employee 200 (Jennifer Whalen) went back to her old job but works in a different
department.




79

UNSW
SISTM

Lab Manual


Figure 5-15 An Example of using INTERSECT Operator

Figure 5-16 Another Example of using INTERSECT Operator











80

UNSW
SISTM

Lab Manual

5.10.4 MINUS
The MINUS operator returns all the rows selected by the first query but not in the
second query. For example, Figure 5-17 shows employees have not changed their job
since joining the company.


Figure 5-17 An Example using MINUS Operator










81

UNSW
SISTM

Lab Manual

Lab Week 6 Group Functions

6.1 Objectives
This week, you will learn group functions, also known as multiple-row functions.
These functions will return one result per group. The multiple-row functions covered
include SUM, AVG, MIN and MAX. You will learn to use the COUNT function to
return records containing non-NULL values, or records containing NULL values. We
will also cover the GROUP BY and HAVING clauses.
In this course, we will not cover the topic on multidimensional analysis GROUPING
SETS, CUBE, and ROLLUP functions.
6.1.1 Reference
Casteel Chapter 11
6.1.2 Database
The database used in this lab is HR database.

6.2 Understand Grouping
We will first discuss briefly how the grouping and group functions work in this section,
and in the next section, we will demonstrate using SQL statements.
So far, individual records are retrieved and displayed using SQL statements. However,
you might want to find the average mark of the students of a particular course. In this
case, you need to use the group functions.
Grouping is to group a number of rows based on a predefined or defined category. In
our demonstration, we have two group of students Group 13 and 14 each group has
4 students and their marks are shown in Table 6-1.
Table 6-1 Group 13 and 14


Name Group Marks
G13A 13 2.00
G13B 13 4.00
G13C 13 6.00
G13D 13 8.00
G14A 14 1.00
G14B 14 3.00
G14C 14 5.00
G14D 14 7.00


82

UNSW
SISTM

Lab Manual

If you want to find an average mark for all students, you just have to average all the
marks (average mark is 4.50) as shown in Table 6-2.
Table 6-2 Average Mark for all students


If you want find out the average mark for each of the groups, namely Group 13 and 14,
you have to use the GROUP BY clause. The GROUP BY clause will report the group
average at the level as specified. In this case, the group average for Group 13 and 14
are shown in Table 6-3.
Table 6-3 Average at Group Level


If you want to select the data, you can use the WHERE clause. However, if you want to
select the data at the group level, you have to use the HAVING clause. We now go
through the WHERE clause, HAVING clause, and using both the WHERE and
HAVING clauses.
If you only want to find an average mark for students individual mark >= 5, the rows
for marks >= 5 will be selected first, and then the marks for these selected rows will be
Name Marks
G13A 2.00
G13B 4.00
G13C 6.00
G13D 8.00
G14A 1.00
G14B 3.00
G14C 5.00
G14D 7.00
Average: 4.50
Name Group Marks Average
G13A 13 2.00
G13B 13 4.00
G13C 13 6.00
G13D 13 8.00
Group 13 5.00
G14A 14 1.00
G14B 14 3.00
G14C 14 5.00
G14D 14 7.00
Group 14 4.00
Group By



83

UNSW
SISTM

Lab Manual

averaged. In Table 6-4, he marks for G13A, G13B, G14A and G14B are not selected
because they are less than 5. On the other hand, if you are using the HAVING clause
(you must use GROUP BY when using HAVING clause), the marks will be averaged
at the group level, and groups with an average mark greater than 5 are then selected, In
this case, only Group 13 is selected as shown in Table 6-4.
Table 6-4 Finding the average mark with WHERE clause and HAVING clause

When using both the WHERE and HAVING clauses, the order of selection is as
follows. First, using Table 6-5 as an example, WHERE clause is applied, so only rows
with marks >= 5 are selected. The average mark for Group 13 and 14 is 7.00 and 6.00
respectively. Second, HAVING clause is applied for average mark greater than 7.00,
and in this case, only Group 13 is selected.
Table 6-5 Using WHERE Clause and HAVING Clause

Name Group Marks
WHERE
Marks
>= 5 Marks Average
GROUP
BY Marks Average
HAVING
Average(Marks)
>= 5
G13A 13 2.00 No 2.00
G13B 13 4.00 No 4.00
G13C 13 6.00 Yes 6.00 6.00
G13D 13 8.00 Yes 8.00 8.00
Group 13 5.00 Yes
G14A 14 1.00 No 1.00
G14B 14 3.00 No 3.00
G14C 14 5.00 Yes 5.00 5.00
G14D 14 7.00 Yes 7.00 7.00
Group 14 4.00 No
Average 6.50
WHERE clause HAVING clause
Name Group
GROUP
BY Marks
WHERE
Marks >= 5 Marks Average
HAVING
Average(Marks)
>= 7
G13A 13 2.00 No
G13B 13 4.00 No
G13C 13 6.00 Yes 6.00
G13D 13 8.00 Yes 8.00
Group 13 Group 13 7.00 Yes
G14A 14 1.00 No
G14B 14 3.00 No
G14C 14 5.00 Yes 5.00
G14D 14 7.00 Yes 7.00
Group 14 Group 14 6.00 No
WHERE Clause and HAVING Clause


84

UNSW
SISTM

Lab Manual

6.3 SELECT <Group By> Statement
The <Group By> function is used to group data. The SELECT <Group By> statement
is defined as follows:

SELECT column_name, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_function(column) condition]
[ORDER BY column_name];

The rules of the <Group By> statement:
the data will be summarised and reported at the group level
it cannot reference column aliases
6.3.1 Group Functions
The group functions include SUM, AVG, MIN and MAX:

SUM function is used to calculate the total amount of a column for a group of
rows
AVG function is used to calculate the average values of a column
MIN function returns the smallest value
MAX function returns the largest value
6.3.1.1 Example: Group Functions

Figure 6-1 An Example of using Group Functions



85

UNSW
SISTM

Lab Manual

6.3.2 Other Data Types
Other than numeric value, you can use group functions for date values and character
strings.
6.3.2.1 Example: Date Values
Figure 6-2 shows you can use MIN and MAX functions to manipulate date values.


Figure 6-2 Find Minimum and Maximum Date Values
Note: there are other group functions such as STDDEV and VARIANCE which you
can find in the Casteel.
6.3.3 COUNT
COUNT function serves two purposes:
Count non-NULL values and
Count total records, including those with NULL values
6.3.3.1 Example: Using COUNT
If we need to count values excluding NULL values, we need to use DISTINCT with the
COUNT function. Otherwise, you can use COUNT(*) to count the all values including
NULL values.

Figure 6-3 Count non-NULL values



86

UNSW
SISTM

Lab Manual


Figure 6-4 Count NULL values
6.3.3.2 Example: Handling NULL Values
You can use operator such as NVL to handle the NULL values in the column
calculation. Figure 6-5 demonstrates how NULL values can be handled. The average
commission paid for 45 employees is $1,614. However, in the second query, it shows
34 employees received an average of $2,316 in commissions, and 11 employees did not
receive any commissions.


Figure 6-5 An Example of Handling NULL values





87

UNSW
SISTM

Lab Manual

6.3.4 Grouping Data
When you need a sub-total at the group level, you need to use a GROUP BY clause.

6.3.4.1 Example: GROUP BY
In Figure 6-6, the calculations are done at the group level, in this case the column of
department_id. If you want a total for all the groups, you need to write another
SELECT statement as shown in Figure 6-7.

Figure 6-6 An Example of using GROUP BY

Figure 6-7 Total of All Records



88

UNSW
SISTM

Lab Manual

6.3.4.2 Example: GROUP BY, ORDER BY, WHERE and HAVI NG
You can use WHERE clause to select data values when using a GROUP BY clause as
shown in Figure 6-8. If you want to select the output at the group level, you have to use
the HAVING clause as shown in Figure 6-9. The average salary for departments 80 and
100 is less than $10,000. Therefore, they are not selected.


Figure 6-8 An Example of using GROUP BY and WHERE Clauses

Figure 6-9 An Example of using GROUP BY and HAVING Clauses
You will get an error if you do not include group functions such as AVG() in the
HAVING clause. HAVING clause is associated with GROUP BY clause, and you must
have a GROUP BY clause if you want to use HAVING. Thus, HAVING clause is to
test the condition at the group level.
When sorting a column or columns, you must use ORDER BY. GROUP BY does not
guarantee the result set to be sorted as you might want.





89

UNSW
SISTM

Lab Manual

6.3.4.3 Example: Complex Queries
You can have complex queries by joining a number of tables before applying a GROUP
BY/HAVING clause as shown in Figure 6-10. It is a good idea to include description of
the shown IDs. In this case, we include both department id and department name.

Figure 6-10 An Example of Complex Queries
You can also group a number of columns in the GROUP BY clause. In the below
example, Figure 6-11, we group country_id and department_id. Please note there are
seven departments under country US.

Figure 6-11 An Example of Complex Group By


90

UNSW
SISTM

Lab Manual

If we apply HAVING clause to the query in Figure 6-11 by selecting only the average
salary greater than $5,000, three of the US departments will be discarded as shown in
Figure 6-12. The HAVING clause applies to the combination of the columns in the
GROUP BY clause.

Figure 6-12 An Example of Complex GROUP BY/HAVING














91

UNSW
SISTM

Lab Manual

Lab Week 7 Table Creation, Constraints and Management

7.1 Objectives
So far, you have been using predefined tables. Today, you will learn to create new
tables, and also learn how to use a subquery to create a new table using Data Definition
Language (DDL). You will also learn to add constraints to tables. You will be able to
distinguish among PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK, and NOT
NULL constraints and the appropriate use for each constraint. You will gain the
knowledge to create constraints at the column level and table level.
Apart from creating a new table, you will learn to add a column to an existing table;
modify the definition of a column in an existing table; and delete a column from an
existing table. In addition, you will find out how to mark a column as unused and delete
it at a later time; rename a table; and delete a table from the database.
7.1.1 Reference
Casteel Chapter 3 and 4

7.1.2 Database
The database used in this lab is HR database.

7.2 CREATE TABLE Statement
The syntax for CREATE table:
CREATE TABLE [schema.]table_name
(column_name datatype [DEFAULT expression], [...]);

Requirements:
You must have a CREATE TABLE privilege
Allow to access to a storage area
Table and column names:
Can contain a maximum 30 characters no blank spaces
Must begin with a letter
Can contain numbers, underscore (_), and number sign (#)
Must be unique
No reserved words are allowed
Column definition list must be enclosed in parentheses
Datatype must be specified for each column
Maximum of 1,000 columns per table


92

UNSW
SISTM

Lab Manual

7.2.1.1 Example: CREATE a TABLE
We create a new table called departments_history to keep track changes of department
name.

Figure 7-1 CREATE a new table
In the Oracle SQL Developer, you have to click on the refresh option to see your new
table. A data dictionary is a typical component of a DBMS that maintains information
about database objects. You can query the data dictionary to verify all the tables that
exist in your schema. There are options in the Oracle SQL Developer which you can
perform these tasks your tutor will show you some of the options which you might
useful for your lab exercises:


Figure 7-2 Oracle SQL Developer Layout



93

UNSW
SISTM

Lab Manual

7.2.2 User Tables
In Oracle database, there are tables which are created by you, and system tables created by
Oracle - a good example is the DUAL table. You can use some of these public tables. A
public table called user_tables has the information of all the tables created by you:
-- List all the tables in your database.
SELECT table_name FROM user_tables;

TABLE_NAME
------------------------------
REGIONS
LOCATIONS
DEPARTMENTS
JOBS
EMPLOYEES
JOB_HISTORY
DEPARTMENTS_HISTORY
COUNTRIES
8 rows selected
7.3 CREATE TABLE AS Statement
Instead of defining columns when creating a table, you can create a table based on the
results of a query, allowing you to, for instance, easily copy the structure of another
table. Not only you will copy the data structure and, by default, you will also copy the
data and some of the constraints of that table. You can also add new columns as part of
the creating process.
CREATE TABLE table_name [column_name]
AS (subquery);
7.3.1.1 Example: CREATE TABLE AS

Figure 7-3 CREATE TABLE AS


94

UNSW
SISTM

Lab Manual

7.4 Modifying An Existing Table
You can use the ALTER TABLE command to modify an existing table:
Use an ADD clause to add a column
Use a MODIFY clause to change a column
Use a DROP COLUMN to drop a column

ALTER TABLE table_name
ADD | MODIFY | DROP COLUMN | column_name [definition];

The modification guidelines:
Column must be as wide as the data it already contains
If a NUMBER column already contains data, you cannot decrease size of that
column
Adding or changing default data does not affect existing data
7.4.1.1 Example: ALTER TABLE Add, Modify and Drop


Figure 7-4 ALTER TABLE Add, Modify and Drop



95

UNSW
SISTM

Lab Manual

7.5 ALTER TABLESET UNUSED (and DROP) Statement
Instead of dropping a column which immediately taken effect, you might want to mark
a column for deletion. Please note that once a column is marked for deletion, it cannot
be restored but storage space can be freed at a later time.
One of the reasons you might want to mark a column for deletion now, and later delete
permanently is that, during the peak period of a working day, the table might be used
by many applications, and deleting a column of a table requires locking the table.
Locking the whole table exclusively might prevent some applications from running.
Additionally, system resources may be tied up unnecessarily.
The syntax for the ALTER TABLE is:

ALTER TABLE table_name
SET UNUSED [COLUMN] column_name;

To free up storage space from columns previously marked as unused:

ALTER TABLE table_name
DROP UNUSED COLUMNS;


96

UNSW
SISTM

Lab Manual

7.5.1.1 Example: ALTER TABLE SET UNUNSED and DROP

Figure 7-5 ALTER TABLE SET UNUNSED and DROP
7.6 Renaming a Table
This statement is used to rename a table:

RENAME table_name TO new_table_name

For example,

-- Before renaming the table
SELECT table_name FROM USER_TABLES;

TABLE_NAME
------------------------------
REGIONS

JOB_HISTORY
DEPARTMENTS_HISTORY
EMPLOYEES_HISTORY
COUNTRIES




97

UNSW
SISTM

Lab Manual

-- Rename a table...
RENAME employees_history TO employees_hist_2011;

-- employees_history table is not longer recognised
DESCRIBE employees_history;

DESCRIBE employees_history
ERROR:
----------------------------------------------
ERROR: object EMPLOYEES_HISTORY does not exist


SELECT table_name FROM USER_TABLES;

TABLE_NAME
------------------------------
REGIONS

JOB_HISTORY
DEPARTMENTS_HISTORY
EMPLOYEES_HIST_2011
COUNTRIES
7.7 Truncating a Table
TRUNCATE TABLE command is when rows in the table are deleted but the structure
of table remains, i.e. clear the data of a table but keep its table structure. Note: this is
different from the TRUNC() function.

TRUNCATE TABLE table_name

7.8 Deleting a Table
DROP TABLE is to delete a table including its structure and contents.

DROP TABLE table_name [PURGE]

Oracle 10g has introduced a recycle bin. You can drop a table and their contents, but,
later on, you can recover the table from the recycle bin it functions like the recycle
bin in Windows.

-- Delete a table
DROP TABLE employees_hist_2011;

DROP TABLE employees_hist_2011 succeeded.





98

UNSW
SISTM

Lab Manual

-- Find the deleted table in the recycle bin
SELECT object_name, original_name
FROM recyclebin;

OBJECT_NAME ORIGINAL_NAME
------------------------------ --------------------------------
BIN$0Xud4LLjRL2rhSXQejW1zg==$0 EMPLOYEES_HIST_2011

If you want to recover the table from the recycle bin, you have to use the
FLASHBACK command:

FLASHBACK TABLE table_name TO BEFORE DROP

-- Recover the table from the recycle bin
FLASHBACK TABLE employees_hist_2011 TO BEFORE DROP

FLASHBACK TABLE succeeded.

If you want to delete the table permanently, you have to delete the table (again!) in the
recycle bin using the PURGE TABLE command.

-- To remove the table permanently from the recycle bin
PURGE TABLE BIN$0Xud4LLjRL2rhSXQejW1zg==$0
[Note: the object name is uniquely created and
your object name will be different from this example.]

Alternatively, you could have deleted the table permanently in the first place you just
have to add the PURGE keyword to the DROP TABLE statement:

DROP TABLE employees_hist_2011 PURGE

7.9 Constraints
Up to this point, we have been defining how to create, modify and delete a table. Next,
you have to define constraints in your tables. Constraints can be defined as:
Rules used to enforce business rules, practices, and policies
Rules used to ensure accuracy and integrity of data
Constraints can be created at the column level by including the constraint as part of the
column definition or at the table level by defining the constraint after all columns have
been defined. When created at the column level, the column that is the objective of the
constraint is identified first, and then the constraint information is provided.





99

UNSW
SISTM

Lab Manual

All constraints are enforced at the table level and if a data value violates a constraint,
the entire row is rejected. The description for the five constraint types are as follows:
Table 7-1 Table of Types of Constraint

If the constraints are created using the table level approach, the type of constraint is
identified first, and then the column. A constraint can be assigned a name when it is
created; otherwise, the Oracle server will assign a name for the constraint using the
convention format SYS_Cn , e.g. employee_id_pk (see Casteel p.101). When constraint
violations occur, the naming convention for constraint names will help to quickly
identify the specific problem.
7.9.1 Create Constraints
If you want to create a constraint at the same time you are creating a table, you need to
define the constraint after the column:
CREATE TABLE table_name
column_name
[CONSTRAINT constraint_name] constraint_type
[, column_name]

Alternatively, if you want to add a constraint after a table is created, you have to use the
ALTER TABLE command:

ALTER TABLE table_name
ADD [CONSTRAINT constraint_name] constraint_type
column_name;


100

UNSW
SISTM

Lab Manual

7.9.2 Create a Table with Constraints
You can create a primary key as part of the CREATE table process or the primary key
can be added after the table has been created. A primary key can consist of one column,
or two or more columns.
7.9.2.1 Example: Primary and Foreign Keys in the Statement


Figure 7-6 Create a New Table with Constraints
If you enter an invalid country_id, then an error message containing the violated
constraint key for country_id is displayed:
One error saving changes to table HR.LOCATIONS_TEMP:
Row 1: ORA-02291: integrity constraint (HR.LOC_TEMP_C_ID_FK) violated - parent key not
found
ORA-06512: at line 1

A foreign key constraint requires a value to exist in the referenced column of another
table, i.e. enforcing the referential integrity. If you want to ensure that any records
reference the deleted record will also be deleted, you can use ON DELETE CASCADE
option.
For example, if you want to ensure by deleting a country_id, all the records reference
the deleted country_id are also removed, the SQL statement will be:

country_id CHAR(2),
CONSTRAINT loc_temp_c_id_fk
FOREIGN KEY (country_id)
REFERENCES countries (country_id)
ON DELETE CASCADE

However, in practice, you probably would like to check the records first before deleting
them.



101

UNSW
SISTM

Lab Manual

7.9.3 Composite Primary Key
The composite primary key consists of two or more columns. Instead of associating the
primary key with only one column, we create a primary key encloses with a number of
columns.

-- Create a composite primary key.
CREATE TABLE global_region
( manager_id NUMBER(6,0),
region_id NUMBER(2,0),
job_id VARCHAR2(10),
CONSTRAINT global_region_mgr_pk
PRIMARY KEY (manager_id, region_id)
);

When you create a single column primary key, a composite primary key, a foreign key,
or any other constraints, you have to note the syntax of defining the constraint, and the
position of the constraint in the CREATE statement. You also have to note the position
of the comma (,) used in the CREATE statement.

7.9.4 Using the UNIQUE Constraint
The UNIQUE constraint is used to ensure that no duplicate values exist in the specified
column(s). Unlike the PRIMARY KEY constraint, the UNIQUE constraint will allow
NULL values to be entered into the column.

-- Add a new column location_mnemonic and add a constraint for this column
ALTER TABLE locations_temp
ADD location_mnemonic CHAR(2)
CONSTRAINT loc_temp_l_mn_uk
UNIQUE;

-- Alternatively, you can first add the new column location_mnemonic and then
-- use another statement to add the constraint.
ALTER TABLE locations_temp
ADD location_mnemonic CHAR(2);
ALTER TABLE locations_temp
ADD CONSTRAINT loc_temp_l_mn_uk UNIQUE (location_mnemonic);



102

UNSW
SISTM

Lab Manual

7.9.4.1 Example: Unique Key Violation
You cannot enter location_mnemonic L5 again but you can enter NULL value multiple
times (Figure 7-7):


Figure 7-7 Unique Key Violation

7.10 Using the NOT NULL Constraint
The NOT NULL constraint is to test a column that is NOT NULL, i.e. NULL value
will not be accepted. This is in contrast to the UNIQUE constraint which allows NULL
values. This constraint can only be created at the column level.

ALTER TABLE table_name
MODIFY ([column_name [CONSTRAINT constraint_name] NOT NULL);

-- Modify the column first_name so it must have a value, i.e. NULL value cannot be accepted.
ALTER TABLE employees_history
MODIFY (first_name CONSTRAINT first_name_nn NOT NULL);








103

UNSW
SISTM

Lab Manual

7.11 CHECK Constraint
The CHECK (condition) constraint is used to check the input value. You can use
operators such as >, <, BETWEEN, and IN to test the data input.

ALTER TABLE table_name
ADD [CONSTRAINT constraint_name] CHECK (condition);

The check constraint will ensure the condition is satisfied and maintain the consistency
of the data. This checking mechanism is to ensure that all data entered by any means
(via SQLDeveloper, SQLPlus or an application) will pass the check condition. Please
note that when you use user_constriant table, you must quote the name of the table in
UPPER CASE see Figure 7-8.


Figure 7-8 An Example of adding a CHECK Constraint
7.12 Drop Constraints
You can drop the primary key constraint and constraint(s) from a table:

ALTER TABLE table_name
DROP PRIMARY KEY [CASCADE] |
UNIQUE column_name |
CONSTRAINT constraint_name;


104

UNSW
SISTM

Lab Manual

If you try to drop a primary key which is referenced by a foreign key in another table,
an error message is raised indicating that a foreign key reference exists:
Error report:
SQL Error: ORA-02273: this unique/primary key is referenced by some foreign keys
02273. 00000 - this unique/primary key is referenced by some foreign keys
*Cause: Self-evident.
*Action: Remove all references to the key before the key is to be dropped.
If you want to continue to delete the primary key, you have to use the CASCADE
option which will also delete the associated foreign key as previously discussed.
7.12.1.1 Example: Dropping a Primary Key and Constraints


Figure 7-9 Dropping Constraints
7.13 Enable and Disable Constraints
Instead of dropping a constraint, you can disable and enable a constraint. Disabling a
constraint is used when, for example, there are many rows to be inserted into a table,
disabling a constraint will speed up the insert process.
ALTER TABLE table_name
DISABLE CONSTRAINT constraint_name;

ALTER TABLE table_name
ENABLE CONSTRAINT constraint_name;



105

UNSW
SISTM

Lab Manual

Lab Week 8 Data Manipulation Language (DML) and
Transaction Control
8.1 Objectives
Last lab, you learned how to use DDL commands to create, alter and delete tables. In
this lab, you will be exposed to Data Manipulation Language (DML) commands to
insert, update and delete records. The transaction control commands allows you to
control when to update a record permanently to the database, or undo the data changes.
You will also learn to differentiate between a shared lock and an exclusive lock.
8.1.1 Reference
Casteel Chapter 5 and
Casteel Chapter 6 Sequences Section (pp. 177 188)
8.1.2 Database
The database used in this lab is HR database.

8.2 Data Manipulation Language (DML) Commands
There are three basic DML commands: INSERT, UPDATE and DELETE. We will first
have a look at the INSERT command.
8.2.1 INSERT Command
To insert a new row (or record) into an existing table, you have to use the INSERT
command. The syntax for INSERT command is:

INSERT INTO table_name [(column_name, )]
VALUES (data_value, )

The basic rules related to the INSERT command include:
Column names can be omitted from the INSERT INTO clause but the order of
inserting the data values must match the order of the table columns
Only one row can be added to a table at a time
Nonnumeric data must be enclosed in single quotes
Can use NULL for null values
Can include subquery to copy rows from an existing table







106

UNSW
SISTM

Lab Manual

8.2.1.1 Example: I nsert a New Row
You can specify the columns in the INSERT clause, or you can leave as default by not
including any columns in the INSERT clause.

Figure 8-1 Before Inserting New Records into countries table

Figure 8-2 Including and Not including columns in the INSERT statement





107

UNSW
SISTM

Lab Manual

8.2.1.2 Example: Primary Key Constraint Violation
You cannot have two records with the same primary key - an error message will be
issued if the constraint for the primary key has been violated see Figure 8-3.


Figure 8-3 Cannot INSERT the Same Record Again

If you want to save what you have already done, you have to use the COMMIT
command. In the Oracle SQL Developer, instead of typing COMMIT;, you have the
option to click on the COMMIT icon on the SQL Worksheet bar or use F11 function
key (see Figure 8-4). We will discuss more details on COMMIT command in Section
8.3.


Figure 8-4 COMMIT options
The primary key constraint is case sensitive. For example, if you input the character
strings of a primary key in lower case and upper cases they will be regarded as two
distinct keys. More concretely, as far as the database is concerned, nz and NZ are
different keys (see Figure 8-5).


108

UNSW
SISTM

Lab Manual


Figure 8-5 Inserting Upper and Lower Text for the Primary Key column
If you do not want to save what you have already done, you can use the ROLLBACK
command by either typing ROLLBACK;, or clicking on the rollback icon on the SQL
Worksheet bar, or using the F12 function key (see Figure 8-6). Again, we will discuss
more details on COMMIT command in Section 8.3.


Figure 8-6 ROLLBACK Options




109

UNSW
SISTM

Lab Manual

8.2.1.3 Example: Foreign Key Constraint Violation
The same applied to the foreign key constraint. If the value does not exist, an error
message will be issued (see Figure 8-7).

Figure 8-7 Foreign Key Violation
Therefore, it is important that you plan the order of inserting a row to a table to avoid
violating any of the constraints.
8.2.1.4 Example: I nitialised with Default Values
If a column has no data value assigned in the INSERT command, the default value (if
any was provided) will be used. In the absence of a default value, a NULL value will be
assigned to that column.

Figure 8-8 Assign default or NULL value to a column


110

UNSW
SISTM

Lab Manual

8.2.2 INSERTING Data from an Existing Table
You can add a new row from an existing table. The INSERT command is:

INSERT INTO table_name (column_name, )
SELECT column_name,
FROM copy_from_table_name
[WHERE (condition)]

8.2.2.1 Example: I nserting Data from an Existing Table
The columns of the INSERT INTO table must match the columns of the SELECT
FROM query results. You can assign different values to a column. For instance, you
can assign SYSDATE to a modify_date column, and assign department_id to 80
instead of 110 (see Figure 8-9).


Figure 8-9 Insert a new row from an existing table
Before continuing, we need to undo all the changes:
-- Undo all changes in REGIONS and EMPLOYEE_HISTORY tables
ROLLBACK;





111

UNSW
SISTM

Lab Manual

8.2.3 UPDATE Command
Next DML command is UPDATE, which is used to update existing values. The syntax
for the UPDATE command is:

UPDATE table_name
SET column_name = new_data_value,
[WHERE (condition)]

The basic rules related to the INSERT command include:
UPDATE clause identifies table
SET clause identifies column(s) being changed with new value(s)
Optional WHERE clause specifies row(s) to be changed if omitted, all rows will
be updated!

8.2.3.1 Example: Update data in an existing table
Below (Figure 8-10) is an example of updating data in an existing table we change
the country name from New Zealand to All Blacks.

Figure 8-10 Update Data



112

UNSW
SISTM

Lab Manual

8.2.3.2 Example: Updating data without a WHERE clause
Figure 8-11 demonstrates when you forget the WHERE clause, the country name of all
rows are changed to New Zealand.

Figure 8-11 Update Without WHERE clause

8.2.4 Substitution Variables
Instead of having a fixed value, you can use substitution variables to prompt users for
values. Substitution variable is identified by an ampersand (&) preceding a variable
name. This is useful for creating interactive scripts.
8.2.4.1 Example: Using Substitution Variables
Instead of having predefined values, you can define substitution variables. Figure 8-12
demonstrates using predefined variables, namely country name (&Country_name)
and country id (&Country_id), to allow users to enter values. A pop-up box as shown
in Figure 8-12 will ask you to enter a value, in this case the country name.



113

UNSW
SISTM

Lab Manual


Figure 8-12 Using Substitution Variables
Enter the value as requested. The variables are substituted with the entered values
before the command is executed as shown in Figure 8-13.


Figure 8-13 Variables Substituted with Entered Values

If you want to enter a value in the WHERE clause, the value of the variable must match
the value of the column remember values are case-sensitive. For instance, if nz is
entered for country_id, a corresponding record with that key will not be found and no
record will be updated see Figure 8-14.


114

UNSW
SISTM

Lab Manual


Figure 8-14 Invalid country id

8.2.5 DELETE Command
The last of the three DML commands is DELETE. If you want to delete a row, you
have to use the DELETE command. Like the UPDATE command, if the WHERE
clause is omitted, then all the rows will be removed! The syntax for the DELETE
command is:

DELETE FROM table_name
[WHERE (condition)]

8.2.5.1 Example: Delete a record
Figure 8-15 shows a record is deleted where country id is FJ.

Figure 8-15 Delete a Record



115

UNSW
SISTM

Lab Manual

8.3 Transaction Control Commands
The results of DML are not permanently updated to a table until explicit or implicit
COMMIT occurs. Two transaction control statements are:
COMMIT command: update data permanently

ROLLBACK command: undo all the changes since last transaction control
command.
8.3.1 COMMIT Command
COMMIT command saves the data permanently in the database. This allows other
users to view the changes you have done.
Explicit COMMIT occurs by executing COMMIT;

Implicit COMMIT occurs when DDL command is executed or user properly exits
the system. For example, if you exit the Oracle SQL Developer without updating
your changes, a popup box will ask you for action as shown in Figure 8-16:


Figure 8-16 Exit without Update a Popup Box prompts for Action
8.3.2 ROLLBACK Command
ROLLBACK command will undo all the changes that have not been committed. We
have already used the ROLLBACK command in some of the previous examples.

8.4 SAVEPOINT and ROLLBACK TO Commands
Once you have used the COMMIT command to save the transactions, you cannot
rollback the transactions because the records are saved permanently in the database. It
is sometimes useful to be able to rollback a set of uncommitted changes to a predefined
point. A ROLLBACK to a SAVEPOINT allows you to do this.

SAVEPOINT name;
ROLLBACK TO name;



116

UNSW
SISTM

Lab Manual

8.4.1.1 Example: Savepoint and Rollback
The below SQL statements show how you can use SAVEPOINT and ROLLBACK
commands:
-- Use SAVEPOINT and ROLLBACK
INSERT INTO countries (country_id, country_name, region_id)
VALUES (NZ, New Zealand, 3);
INSERT INTO countries
VALUES (FJ, fiji, 3);
COMMIT;

2 rows inserted

-- Update before the SAVEPOINT
UPDATE countries SET country_name = All Blacks
WHERE country_id = NZ;

1 rows updated

-- Set a SAVEPOINT in this case, we name it ONE
SAVEPOINT ONE;

SAVEPOINT ONE succeeded.
-- Update after the SAVEPOINT
UPDATE countries SET country_name = Fiji
WHERE country_id = FJ;

1 rows updated

-- Records before ROLLBACK TO
SELECT * FROM countries
WHERE country_id IN (FJ, NZ);

COUNTRY_ID COUNTRY_NAME REGION_ID
---------- ---------------------------------------- ----------------------
FJ Fiji 3
NZ All Blacks 3

-- Rollback to a point previously defined in our case - ONE
ROLLBACK TO ONE;
SELECT * FROM countries
WHERE country_id IN (FJ, NZ);

rolledback
COUNTRY_ID COUNTRY_NAME REGION_ID
---------- ---------------------------------------- ----------------------
FJ fiji 3
NZ All Blacks 3







117

UNSW
SISTM

Lab Manual

-- Rollback all the records
ROLLBACK;
SELECT * FROM countries
WHERE country_id IN (FJ, NZ);

rolledback
COUNTRY_ID COUNTRY_NAME REGION_ID
---------- ---------------------------------------- ----------------------
FJ fiji 3
NZ New Zealand 3
8.5 Next Sequence Number
In order to ensure each row is unique, we use a sequence number counter to keep track
of the number. You only have to define the sequence number once. The syntax to create
a sequence number, which we start from 10, is:
CREATE SEQUENCE region_id_seq
INCREMENT BY 1
START WITH 10
MAXVALUE 9999
NOCACHE
NOCYCLE;

To get the next sequence number from the regions id when you insert a new employee
record, you simply use NEXTVAL pseudo column:
INSERT INTO regions (region_id, region_name)
VALUES (region_id_seq.NEXTVAL, Next Sequence Value);

The sequence number is automatically incremented. Rollback will have no impact on
the sequence number, i.e. the sequence number will not be rollbacked to a previous
value.
If you want to use the current sequence number again, the syntax is:
region_id_seq.CURRVAL

You can also find out the current sequence value:
SELECT region_id_seq.CURRVAL
FROM dual;

The syntax to delete a sequence number is:
DROP SEQUENCE region_id_seq;



118

UNSW
SISTM

Lab Manual

8.6 Table Locks
In some applications, it is critical for you to prevent other users from mistakenly
overwriting changes made by you. Table locks can prevent users from changing same
data or objects. There are two common types of table locks:
Shared prevents DML operations on a portion of table
Exclusive locks table preventing other exclusive or shared locks
8.6.1 LOCK TABLE Command Shared Lock
Locks portion of table affected by DML operation
Implicitly occurs during UPDATE or DELETE operations
Explicitly occurs through LOCK TABLE command with SHARE MODE option
SHARE mode allows other users to place shared locks on other portions of the table,
but it prevents users from placing an exclusive lock on the table
Released when COMMIT (implicit or explicit) or ROLLBACK occurs
8.6.2 LOCK TABLE Command Exclusive Lock
Implicitly locks table for DDL operations CREATE or ALTER TABLE
EXCLUSIVE mode option is the most restrictive TABLE LOCK and it prevents any
other user from placing any locks on the same table
A lock is released when a transaction control statement is issued, a DDL statement is
executed, or the user exits the system by using the EXIT command
8.7 SELECTFOR UPDATE Command
The syntax for the SELECTFOR UPDATE Command is:

SELECT column_name,
FROM table_name,
[WHERE condition ]
FOR UPDATE;

The basic rules related to the SELECTFOR UPDATE command include:
The SELECT . . . FOR UPDATE command can be used to place a shared lock for a
specific row or rows
Creates shared lock on retrieved portion of table
Prevents one user from changing a row while another user is selecting rows to be
changed
Released through implicit or explicit commit
The lock will not be released unless a COMMIT or ROLLBACK command is issued
or the user exits the system



119

UNSW
SISTM

Lab Manual

Lab Week 9 Subqueries and Merge Statements
9.1 Objectives
Up to now, most of the queries you have used are considered as single-row queries. In
this lab, you will learn more advanced queries, namely the subquery. A subquery is a
nested query one complete query inside another query. In this course, we only cover
some of the basic subquery commands. You will be applying these subqueries in a
more advanced course offered by this school, and in the industry.
9.1.1 Reference
Casteel Chapter 12
9.1.2 Database
The database used in this lab is HR database.

9.2 Subqueries and Their Uses
A subquery is a nested query one complete query inside another query. When you
have two queries, the results of the subquery (i.e. the inner query) will be passed to the
outer query (also called the parent query). A sub-query must itself be a complete query
and must be enclosed in parentheses to separate it from the outer query.
With the exception of the ORDER BY clause, you can virtually nest a subquery in any
of the clauses in a SELECT statement:

SELECT
<SubQuery>
FROM
<SubQuery>
JOIN
<SubQuery>
WHERE
<SubQuery>
HAVING
<SubQuery>
ORDER BY
<Column>

You can nest a number of subqueries in a SELECT statement.



120

UNSW
SISTM

Lab Manual

The subquery can be classified into five common types:
Table 9-1 Five common types of Subquery


We will now go through each of the subqueries.

9.2.1 Single-Row Subquery
The subquery only returns only one result to the outer query.

9.2.1.1 Example: Single-Row Subquery in a WHERE Clause
You want to find all employees who earn more than the highest earner of department
80. To find these employees, you need to have two queries. In the first query, or
subquery, you have to find how much the highest earner of department 80 earns. In the
second query or the parent query, you have to find the employees who earn more than
the highest earner of department 80, which passed from the subquery as shown in
Figure 9-1.

Figure 9-1 Single-Row Subquery in a WHERE Clause
It is also a good practice to give an alias to each of the tables used. This will become
more apparent later in the lab.



121

UNSW
SISTM

Lab Manual

9.2.1.2 Example: Single-Row Subquery in a HAVI NG Clause
Figure 9-2 shows using GROUP BY and HAVING to compare the average salary
between the two queries.

Figure 9-2 Single-Row Subquery in a HAVING Clause
9.2.1.3 Example: Single-Row Subquery in a SELECT Clause
You can have another SELECT clause in the SELECT clause (see Figure 9-3). This
calculates the average salary for this department to be $9,500 - i.e. ($6,000
+$13,000)/2.


Figure 9-3 Single-Row Subquery in a SELECT Clause


122

UNSW
SISTM

Lab Manual

9.3 Multiple-Row Subqueries
Multiple-Row Subqueries return more than one row of results. Therefore, you need to
use the operators such as IN, ANY, ALL, or EXISTS. We have already looked at the
IN operator previously. As for the ANY and ALL operators, they combine with other
comparison operators to treat a subquerys results as a set of values instead of single
values. Table 9-2 summarises the use of the ALL and ANY operators with other
comparison operators.
Table 9-2 ALL and ANY Operator Combinations


The next three examples demonstrate the use of IN, ANY and ALL operators
respectively in the parent queries.
9.3.1.1 Example: Using the I N Operator

Figure 9-4 Using the IN Operator



123

UNSW
SISTM

Lab Manual

9.3.1.2 Example: Using the ALL Operator
As an example, when you use the > ALL operator, all the values of the parent query
must be greater than all the values in the subquery, or the highest value returned by
the subquery. In this case, the highest value returned by the subquery is $12,008 (see
Figure 9-5).

Figure 9-5 Using the ALL Operator



124

UNSW
SISTM

Lab Manual

9.3.1.3 Example: Using the ANY Operator
On the other hand, for the > ANY operator, all the values of the parent query must
be greater than any of the values in the subquery, or the lowest value returned by the
subquery. In this case, the lowest value returned by the subquery is $8,300 (see Figure
9-5). The query in Figure 9-6 is same as Figure 9-5 except the ANY operator is used
instead of the ALL operator but the results are quite different. A total of 30 rows were
retrieved for employees with salary greater than $8,300.

Figure 9-6 Using the ANY Operator





125

UNSW
SISTM

Lab Manual

9.4 Multiple-Column Subqueries
A multiple-column subquery returns more than one column to the parent query and can
be listed in the parent querys FROM, WHERE or HAVING clause.
Figure 9-7 shows the average salary for each of the departments.

Figure 9-7 Departments Average Salary

9.4.1 Multiple-Column Subquery in a FROM clause
When a multiple-column subquery is used in the parent querys FROM clause, it
creates a temporary table, also known as inline view, that can be used by other clauses
of the parent query. The subquerys results are treated like any other table in the FROM
clause. For example, Figure 9-8 shows the employees whose salary is above their
departments average salary, and EAVG in the SELECT statement is a temporary table:

(SELECT em.department_id, AVG(em.salary) avg_salary
FROM employees em
GROUP BY em.department_id) EAVG


126

UNSW
SISTM

Lab Manual


Figure 9-8 Subquery using JOIN in the From clause

9.4.2 Multiple-Column Subquery in a WHERE clause
Figure 9-9 shows how you can identify employees whose salary is exactly same as the
departments average salary.

Figure 9-9 Subquery in the WHERE clause




127

UNSW
SISTM

Lab Manual

9.5 Nested Subqueries
The order of execution is always the same the innermost subquery is executed first,
then the next highest level subquery is executed, and so on, until the outermost query is
reached. In the case of Figure 9-10, the order of execution will be A (innermost query),
followed by B, and finally C (parent query).


Figure 9-10 Order of Execution in Nested Subqueries
9.6 Correlated Subqueries
So far, the subqueries we executed are called uncorrelated subqueries. The sequences
of uncorrelated subqueries process are as follows:
(1) Inner query is executed first
(2) The result is then passed from the inner query to the parent query
(3) Parent query is executed
On the other hand, the process sequence for correlated subqueries is different:
(1) Inner query is executed once for each row processed by the parent query
(2) Inner query references the row contained in the parent query

9.6.1.1 Example: Correlated Subqueries
We want to find all the locations currently used in the department as shown in Figure
9-11. In the WHERE clause of the subquery, we test the condition:
departments.location_id = locations.location_id
Please note that the departments table is from the subquery whereas locations table is
from the parent query.


128

UNSW
SISTM

Lab Manual


Figure 9-11 Correlated Subqueries
We could have used department table in the parent query but we want to demonstrate
the use of the EXISTS clause. If you want to find which location is not currently
assigned to any of the departments, you can use NOT EXISTS instead, i.e. to look for
records that do not exist in the departments table.

Figure 9-12 Correlated Subqueries using EXISTS clause
There are 23 locations in the locations table, we already know there are 7 locations
currently actively used in the departments table (see Figure 9-11). Therefore, you
should have 16 locations currently not assigned in the departments table and the result
of Figure 9-12 confirms this.



129

UNSW
SISTM

Lab Manual

9.7 MERGE Statement
A MERGE statement is commonly used in the data warehousing environment. The
MERGE statement allows multiple DML actions (i.e. INSERT, UPDATE and
DELETE commands) to be conditionally performed while comparing data of two
tables. This is best illustrated with examples.
9.7.1.1 Example: MERGE
In this example, we will create two temporary tables (see Figure 9-13), namely
regions_temp_one and regions_temp_two, based on regions table for demonstration.
The regions_temp_one table has five rows whereas egions_temp_two table only has
four rows. Dummy values are assigned to the fields in the region_name column (see
Figure 9-14). This will allow us to demonstrate how these values are updated and
overwritten with the MERGE statement.


Figure 9-13 MERGE Statement - Create temporary tables


130

UNSW
SISTM

Lab Manual


Figure 9-14 MERGE Statement - List Records in the temporary tables
In regions_temp_two table, four rows are updated and one row is added as shown in
Figure 9-15. The two temporary tables contain the same records.

Figure 9-15 MERGE Statement - List Changes in temporary tables



131

UNSW
SISTM

Lab Manual

Lab Week 10 Views

10.1 Objectives
The last topic you will learn is to create and drop a view. We only cover simple and
complex views. You can update date values using a view but we will not cover this
topic in this course.
10.1.1 Reference
Casteel Chapter 13
10.1.2 Database
The database used in this lab is HR database.

10.2 Background of Views
A view contains no data of its own. A view is a logical table based on a table or another
view. The view is stored as a SELECT statement in the data dictionary. The tables on
which a view is based are called base tables. The two main purposes of using a view are
to: reduce the complexity of some queries and restrict users access to sensitive data.
There are four types of views and they are summarised as (see Table 10-1):
Table 10-1 Four Types of Views


You can update a table using a VIEW but, in this course, we will not cover using DML
in a View. Nor we will cover inline and materialized views. We will only cover simple
views, complex views and dropping a view.





132

UNSW
SISTM

Lab Manual

10.3 Simple View
The syntax for VIEW command is:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_table
[(alias)]
AS subquery
[WITH [CHECK OPTION] [READ ONLY OPTION]]

The rules for the Simple view statement:
Use the CREATE VIEW clause to create a view
Use OR REPLACE clause if the view already exists.
Use FORCE if the underlying table does not exist at the time of creation
Provide new column names if necessary
WITH CHECK OPTION constraint if used, prevents data changes that will
make the data subsequently inaccessible to the view
WITH READ ONLY OPTION prevents DML operations
Only references one table no group functions, GROUP BY clause, or
expressions
Before you create a view, you have to make sure the SELECT statement runs and the
data retrieved is exactly what you want. Once a view is created, you can access the data
using the SELECT statement.
10.3.1.1 Example: Simple View

Figure 10-1 An Example of a Simple View



133

UNSW
SISTM

Lab Manual

10.4 Complex View
A complex view is like a simple view except a complex view may contain data from
multiple tables or data created with the GROUP BY clause, functions, or expressions.
10.4.1.1 Example: Complex View
In the previous lab, we created a complex SELECT statement to identify employees
whose salary is exactly the same as the departments average salary as shown in Figure
9-9. As an example, you can create a VIEW, as shown in Figure 10-2, to allow your
colleagues to run the same SELECT statement as yourself. Once a view is created, you
can, for example, use a WHERE clause to retrieve the data you require (see Figure
10-3).


Figure 10-2 An Example of a Complex View


134

UNSW
SISTM

Lab Manual


Figure 10-3 Using WHERE Clause in a VIEW
10.5 Dropping a View
The syntax to drop a View:

DROP VIEW view_table


10.5.1.1 Example: Dropping a View


Figure 10-4 Dropping a View







135

UNSW
SISTM

Lab Manual

Appendix A Sample Database Structures
A.1 Sample Databases
In this course, we use two sample databases:
(i) HR database (provided by Oracle) and
(ii) JustLeeBooks database (provided by Casteel).
The lab materials are based on the HR database, and the lab exercises are based on the
JustLeeBooks database.
A.2 HR (Human Resources) Database
The Oracle database sample schemas portray a sample company. The HR database
tracks information about the employees and facilities. In the Human Resource (HR)
records, each employee has an identification number, email address, job identification
code, salary, and manager. Some employees earn commissions in addition to their
salary.
The company also tracks information about jobs within the organisation. Each job has
an identification code, job title, and a minimum and maximum salary range. Some
employees have been with the company for a long time and have held different
positions within the company. When an employee resigns, the duration the employee
was working for, the job identification number, and the department are recorded.
The sample company is regionally diverse, so it tracks the locations of its warehouses
and departments. Each employee is assigned to a department, and each department is
identified either by a unique department number or a short name. Each department is
associated with one location, and each location has a full address that includes the street
name, postal code, city, state or province, and the country code.
In places where the departments and warehouses are located, the company records
details such as the country name, currency symbol, currency name, and the region
where the country is located geographically.


136

UNSW
SISTM

Lab Manual

A.3 The HR Entity Relationship Diagram

Figure A-1 ER Diagram for HR Database

A.4 The Human Resources (HR) Table Descriptions
A.4.1 countries Table

A.4.2 departments Table







137

UNSW
SISTM

Lab Manual

A.4.3 employees Table



A.4.4 job Table



A.4.5 job_history Table






138

UNSW
SISTM

Lab Manual

A.4.6 locations Table



A.4.7 regions Table




A.5 JustLeeBooks Database
This is an Oracle sample schemas for Just Lee book store. This database tracks
information about the customers, orders and promotions. The database structure of
JustLeeBooks is shown below (Figure A-2 ), and you can find the table descriptions of
JustLeeBooks database in Casteel, Appendix A (pp. 511-517).

Figure A-2 JustLeeBooks ER Diagram



139

UNSW
SISTM

Lab Manual

Appendix B Instructions to connect to a server database in
Oracle SQL Developer

1. Select Oracle SQL Developer from the menu.
2. Your Oracle SQL Developer screen should look similar to Figure B-1:

Figure B-1 Select Configure File Type Associations
3. Select all Configure File Types associate with SQL Developer as shown in Figure B-
1, and click the OK button.
4. To connect to a database, you need to click the + in Connections menu. A form,
similar to Figure B-2, will prompt you to enter fields to connect to a server database:

Figure B-2 Server Database Connection Form


140

UNSW
SISTM

Lab Manual

5. The fields you have to enter in the form shown in Figure B-2 are as follows:
Connection Name: HR
Username: z (your student number)
Password: (your password note the password is
case sensitive)
Save Password: If you are running on your own laptop or other devices, you might
want to click this box so you do not have to enter your password
every time you log in.
Hostname: sage.business.unsw.edu.au
Port: 1521
SID: orcl01 (note: the fourth character is l for Larry not one)

Once completed, your form should look similar to Figure B-3 (note: substitute the
Username field with your student number):


Figure B-3 Database Connection Details

To test the connection, click the Test button as shown in Figure B-3. You will see an
error if the connection is unsuccessful. Otherwise, click the Connect button to connect
to the server database.





141

UNSW
SISTM

Lab Manual

6. Once connected, you will see two sets of tables as shown in Figure B-4: one set of
tables is used in the Oracle Manual, and the other set is used in your lab exercises.

Figure B-4 Sample Tables
7. You need to format the dates to the DD-MON-RR. To change the date format, you
need to go the option: Tools > Preferences > Database > NLS, and change the format
to DD-MON-RR as shown:

Figure B-5 Set Date Format


142

UNSW
SISTM

Lab Manual

Appendix C Instructions to connect to Oracle SQL Developer
Data Modeler

Oracle SQL Developer Data Modeler is a data modeling and database design tool. For
instance, you can use the tool to design an Entity Relationship Diagrams (ERD). You
can download the software free from the Oracle website.
You can create a database from scratch using Data Modeler. Alternatively, you can
create an ERD by importing tables of a database you have already created. We will now
demonstrate how to import tables from an existing database to Data Modeler.
First, you have to select the Data Dictionary (or Ctrl-Shift-B) option from the File
menu as shown in Figure C-1:


Figure C-1 Select Option to import a Data Dictionary





143

UNSW
SISTM

Lab Manual

You have to establish a connection to an existing database by following four steps as
shown in Figure C-2:


Figure C-2 Connect to an existing database
Next, you have to choose a database and you might have to enter your username and
password as shown in Figure C-3. In this case, we select the HR database:


Figure C-3 Select a Database


144

UNSW
SISTM

Lab Manual

Next, you have to select a schema/database either student or group account - you
want to use in your data modelling (Figure C-4):


Figure C-4 Select a Schema
Once you have connected to the schema, you then select the tables you want to model.
As an example, the tables we selected as shown in Figure C-5 are countries,
departments, employees, jobs, job_history and locations:


Figure C-5 Select Six Tables






145

UNSW
SISTM

Lab Manual

A summary of six tables imported is shown in Figure C-6:


Figure C-6 Summary of Number of Imported Tables
Once all the tables are imported successfully, a log similar to Figure C-7 appears, and
clicks on the close button to complete the importing task:


Figure C-7 A Successful Log



146

UNSW
SISTM

Lab Manual

Data Modeler will automatically attempt to create an ERD based on the tables and
constraints from the schema/database. The ERD shown in Figure C-8 is created based
on the selected six tables:


Figure C-8 ERD for the Selected Tables

Você também pode gostar