DB2 SQL Workshop for Experienced Users (Course Code CF13)

Similar documents
DB2 SQL Workshop (Course Code CF12)

DB2 SQL for the 21 st Century: Overlooked Enhancements. David Simpson

After completing this unit, you should be able to: Define the terms

An Introduction to Structured Query Language

An Introduction to Structured Query Language

You can access VSAM and sequential datasets in batch mode, and you can retrieve, view, and update VSAM and temporary storage queues in online mode.

An Introduction to Structured Query Language

After completing this unit, you should be able to: Use inner joins to retrieve data from more than one table

An Introduction to Structured Query Language

An Introduction to Structured Query Language

Advanced SQL and the Power of Rewriting Queries

Maintaining Data 3.3.1

V cover. Front cover. DB2 Stored Procedures Programming Workshop. (Course Code CF71) Student Exercises ERC 4.0. IBM Certified Course Material

DB2 Advanced SQL Working with Complex Queries. Tony Andrews, Application Tuning Consultant Themis, Inc.

Notes. CS 640 Relational Algebra Winter / 16. Notes. CS 640 Relational Algebra Winter / 16. Notes

The Relational Model

Unit 4. Scalar Functions and Arithmetic

Query Optimization Overview

Installing and Administering a Satellite Environment

Data Modelling and Multimedia Databases M

Data Modelling and Multimedia Databases M

Front cover. DB2 Universal Database Programming Workshop for Linux, UNIX, and Windows (Course Code CF10) Lab Set Up Guide

Tables From Existing Tables

IBM A Assessment: DB2 9 Fundamentals-Assessment. Download Full Version :

Cost Models. the query database statistics description of computational resources, e.g.

"Charting the Course to Your Success!" MOC D Querying Microsoft SQL Server Course Summary

"Charting the Course... MOC C: Querying Data with Transact-SQL. Course Summary

C Examcollection.Premium.Exam.58q

IBM DB2 Universal Database. SQL Getting Started. Version 7 SC

IBM DB2 9 Family Fundamentals. Download Full Version :

Unit 6. Scalar Functions

Business Intelligence Tutorial

Query Optimization Overview

GIFT Department of Computing Science. CS-217/224: Database Systems. Lab-5 Manual. Displaying Data from Multiple Tables - SQL Joins

Chapter 2. DB2 concepts

IBM DB2 9 Application Developer. Practice Test. Version 1.1.

Table : Purchase. Field DataType Size Constraints CustID CHAR 5 Primary key CustName Varchar 30 ItemName Varchar 30 PurchaseDate Date

The SQL Guide to Pervasive PSQL. Rick F. van der Lans

DB2 9 DBA exam 731 prep, Part 3: Database access

A View to a Kill. Please reload this page to view the headlines. 1 of 21 5/20/2009 9:18 AM. by Craig Mullins. Discussion Points

Intermediate SQL: Aggregated Data, Joins and Set Operators

Objectives. After completing this lesson, you should be able to do the following:

DB2 9 DBA exam 731 prep, Part 3: Database access

Test Bank for Database Processing Fundamentals Design and Implementation 13th Edition by Kroenke

Full file at

GIFT Department of Computing Science Data Selection and Filtering using the SELECT Statement

Advanced SQL GROUP BY Clause and Aggregate Functions Pg 1

Introduction to SQL. ECE 650 Systems Programming & Engineering Duke University, Spring 2018

Using JDBC Data Source with DB2

Database 2: Slicing and Dicing Data in CF and SQL

INDEX. 1 Basic SQL Statements. 2 Restricting and Sorting Data. 3 Single Row Functions. 4 Displaying data from multiple tables

"Charting the Course... MOC A Developing Microsoft SQL Server 2012 Databases. Course Summary

Slicing and Dicing Data in CF and SQL: Part 1

"Charting the Course... MOC C: Developing SQL Databases. Course Summary

SQL STRUCTURED QUERY LANGUAGE

INTERNATIONAL INDIAN SCHOOL, RIYADH XI XII BOYS SECTION. Subject- Informatics Practices

KORA. RDBMS Concepts II

1Z0-007 ineroduction to oracle9l:sql

E-R Diagram to Relational Schema. Translating Entity-Relationship to Relational Tables. Representing Weak Entity Sets. Representing Strong Entity Sets

MySQL and PHP - Developing Dynamic Web Applications

SQL Queries. for. Mere Mortals. Third Edition. A Hands-On Guide to Data Manipulation in SQL. John L. Viescas Michael J. Hernandez

SQL. Char (30) can store ram, ramji007 or 80- b

INTERNATIONAL INDIAN SCHOOL, RIYADH XI XII BOYS SECTION

CS2 Current Technologies Note 1 CS2Bh


Advanced Query Tuning with IBM Data Studio. Tony Andrews Themis

IBM DB DB2 application development Hands-On Lab. Information Management Cloud Computing Center of Competence. IBM Canada Lab

Exam sell. Higher Quality Better Service! Certified IT practice exam authority.

Business Intelligence Roadmap HDT923 Three Days

Visual Explain Tutorial

Translating Entity-Relationship to Relational Tables

CA Chorus for DB2 Database Management

SQL Structured Query Language Introduction

Vendor: IBM. Exam Code: Exam Name: DB Fundamentals. Version: DEMO

2) SQL includes a data definition language, a data manipulation language, and SQL/Persistent stored modules. Answer: TRUE Diff: 2 Page Ref: 36

Vendor: IBM. Exam Code: C Exam Name: DB Fundamentals. Version: Demo

5 Integrity Constraints and Triggers

GIFT Department of Computing Science. CS-217: Database Systems. Lab-4 Manual. Reporting Aggregated Data using Group Functions

1 SQL Structured Query Language

King Fahd University of Petroleum and Minerals

Translating Entity-Relationship to Relational Tables

CITY UNIVERSITY OF NEW YORK. i. Visit:

Vendor: IBM. Exam Code: Exam Name: DB2 9 Application Developer. Version: Demo

Fastrack to federated replication

Oracle Database 10g Express

1 SQL Structured Query Language

COSC 304 Introduction to Database Systems SQL. Dr. Ramon Lawrence University of British Columbia Okanagan

Mathematics Shape and Space: Polygon Angles

Optimize Enterprise Generation Language (EGL) applications using purequery

EE221 Databases Practicals Manual

Principles of Data Management

,LOCATE_IN_STRING(lastName, 'SON', 1, 1) AS Location_of_String derrja.employee

Slicing and Dicing Data in CF and SQL: Part 2

Employer Self Service (ESS) User Quick Guide

COMP 3400 Mainframe Administration 1

IBM DB2 9 Application Developer. Download Full Version :

Sample Question Paper

IBM QMF for Windows for IBM iseries, V7.2 Business Intelligence Starts Here!

Error Message Reference

MANAGING DATA(BASES) USING SQL (NON-PROCEDURAL SQL, X401.9)

Transcription:

DB2 SQL Workshop for Experienced Users (Course Code CF13) ERC4.1 IBM Learning Services Worldwide Certified Material

Publishing Information This publication has been produced using BookMaster (Program Number 5668-015), the Document Composition Facility (Program Number 5748-XX9), and Freelance for Windows. It was printed on the IBM 3820 Page Printer. Trademarks IBM is a registered trademark of International Business Machines Corporation. The following are trademarks International Business Machines Corporation in the United States, or other countries, or both: AIX AS/400 BookMaster DataJoiner DB2 DB2 Universal Database OS/2 OS/390 OS/400 QMF SQL/DS Freelance Graphics and Lotus are trademarks of Lotus Development Corporation in the United States, or other countries, or both. Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both. Microsoft, Windows, Windows NT, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both. Intel is a registered trademark of Intel Corporation in the United States, other countries, or both. UNIX is a registered trademark in the United States and other countries licensed exclusively through The Open Group. Linux is a trademark of Linus Torvalds. Other company, product, and service names may be trademarks or service marks of others. January, 2001 The information contained in this document has not been submitted to any formal IBM test and is distributed on an as is basis without any warranty either express or implied. The use of this information or the implementation of any of these techniques is a customer responsibility and depends on the customer's ability to evaluate and integrate them into the customer's operational environment. While each item may have been reviewed by IBM for accuracy in a specific situation, there is no guarantee that the same or similar results will result elsewhere. Customers attempting to adapt these techniques to their own environments do so at their own risk. The original repository material for this course has been certified as being Year 2000 compliant. Copyright International Business Machines Corporation 1998, 2001. All rights reserved. This document may not be reproduced in whole or in part Note to U.S. Government Users Documentation related to restricted rights Use, duplication or disclosure is subject to restrictions set forth in GSA ADP Schedule Contract with IBM Corp.

Contents Exercises Description............................................. v Table Descriptions............................................. xiii Table Content.................................................. xv Exercises Exercise 1. SQL Basics Review, CUBE AND ROLLUP.................... 1-1 Exercise 2. Create Objects....................................... 2-1 Exercise 3. Joins.............................................. 3-1 Exercise 4. CASE and CAST...................................... 4-1 Exercise 5. Subqueries.......................................... 5-1 Exercise 6. Scalar Functions...................................... 6-1 Exercise 7. Table Expressions and Recursive SQL...................... 7-1 Exercise 8. Performance and UDT/UDF.............................. 8-1 Copyright IBM Corp. 1998, 2001 Contents iii

iv DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

Exercises Description Be sure to read the General Information section and the description of the lab tables before attempting the exercises. Feel free to consult with the instructor if you need a hint or encounter difficulties while you are formulating the query. Expected Results repeats the problem and shows the results that you should get if you run the query. In most cases, the complete result is shown. In cases where the result set is too large, an ellipsis (...) is shown to indicate that there are additional rows in the result. In these cases, the correct number of rows for the result set is shown so that you can be sure that you got the right result. Solutions contains the correct query that solves the problem. Remember that sometimes there can be several correct answers. Your solution may be different than the one shown in the document. If you have any doubts about whether your solution is correct or if it is as good as the given solution from a performance point of view, please consult your instructor. General Information This lab guide provides the information necessary to complete the required and optional labs for the IBM DB2 SQL Workshop for Experienced Users course. In countries that provide several query tools for each environment, this lab guide will be supplemented by additional documentation that describes the basics of each query tool. You can do the exercises for this course in OS/390 or in a Workstation environment. Depending on where you are taking the course, these Workstation platforms may be available for your use: OS/2, AIX, Windows 95/98 or Windows NT. Be sure to read the instructions for the operating system you chose before attempting the exercises. All of the workstation platforms use the same instructions. You will be able to use any of the query tools that we have installed on each operating system. Please note that the emphasis of this course is on teaching you SQL, not how to use the tools. Therefore, you will only see the basics of using the tool in this course. If you want more information about these tools, ask the instructor for recommendations on the best manuals to read or courses to take for this purpose. Copyright IBM Corp. 1998, 2001 Exercises Description v

You do not need to save your solutions or show them to the instructor but feel free to do so if you like. Full solutions are provided for every question but if you wish to save your own solutions to diskette or print them, ask your instructor when you begin the first exercise. In some cases, diskettes or printers may not be available. vi DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

General Information for OS/390 Users There are many different query tools that work with DB2 for OS/390, including SPUFI, QMF, and others. You can use any tool installed to do the labs. The following query tools are available for this course: The instructor will tell you how to logon to the OS/390 system and what specific user ID and password to use. In addition, you will probably be given a team number: this number will be used occasionally during the exercises so that you can distinguish your files or objects from those of other students. Your logon ID is. Your password is. Your team number is. The instructor will give you brief verbal or written instructions on how to use the tool you choose so that you will have enough information to get started. If you want to know more about a tool, for example how to save a query, be sure to ask the instructor. You will need a partitioned dataset in order to complete the exercises. This dataset already exists. The dataset name is. Each of the tables described in the Table Relationships section of this document already exists and has the same qualifier. The qualifier is. When you refer to these tables in your SQL, you will need to prefix the table names with the qualifier identified above. For example, if you want to display the complete contents of the EMPLOYEE table, enter the following, substituting the qualifier you were given: SELECT * FROM qualifier.employee Note: Using member CRTAB to create table TESTEMP, if the table has not been provided in advance. You may need to add an IN clause to your CREATE TABLE statements that identifies where the table is being created. The IN clause you need to add is: IN. Copyright IBM Corp. 1998, 2001 Exercises Description vii

When you are using the TESTEMP table, you will have to omit the qualifier or use your logon ID as qualifier. For example, if you are trying to read the TESTEMP table, you will have to write: SELECT * FROM TESTEMP or SELECT * FROM logon ID.TESTEMP You do not have to save your SQL but if you want to save it, you may put it in your partitioned dataset. viii DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

General Information for DB2 UDB on UNIX, Windows and OS/2 Users There are many different query tools that work with DB2 on the workstation platforms, including Command Center, CLP, and others. You can use any tool installed to do the labs. The following query tools are available for this course: Students doing the exercises on workstation platforms do not need a team number. Each workstation student has a complete standalone environment and will not share any files or tables with other students. Each student will have to sign on with the following information: USERID is PASSWORD is The instructor will give you brief verbal or written instructions on how to use the tool you choose so that you have enough information to get started. If you want to know more about a tool, for example how to save a query, be sure to ask the instructor. A database named sample has already been created for you. To connect in a single-user environment, enter the following at a command prompt: db2 connect to sample To connect in a client/server environment, enter the following at a command prompt, substituting the userid and password you were assigned: db2 connect to sample user userid using password Each of the tables described in the Table Relationships section of this document already exists and has the same qualifier. The qualifier is. When you refer to these tables in your SQL, you will need to prefix the table names with the qualifier identified above. For example, if you want to display the complete contents of the EMPLOYEE table, enter the following, substituting the qualifier you were given: SELECT * FROM qualifier.employee Copyright IBM Corp. 1998, 2001 Exercises Description ix

Note: Using member CRTAB to create table TESTEMP, if the table has not been provided in advance. Using the following command to create table TESTEMP: DB2 -tvf CRTAB In cases where you are using your TESTEMP table you need to omit the qualifier or use your logon ID as qualifier. For example, if you are trying to read the TESTEMP table, you will need to write: SELECT * FROM TESTEMP or SELECT * FROM logon ID.TESTEMP If you choose to do the labs in CLP, you may create your SQL in the \CF13 directory. x DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

Figure 0-1. Table Relationships (CF13X010) Notes:: This diagram illustrates the relationships between the tables used in the exercises for this course. The lines show the connection between the tables. Copyright IBM Corp. 1998, 2001 Exercises Description xi

xii DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

Table Descriptions The tables are described in hierarchical order, as shown in the Table Relationships on the previous page. DEPARTMENT There is one row in the DEPARTMENT table for each department in the company. Column Name Meaning Data Type NULLS allowed DEPTNO Department Number CHAR(3) N DEPTNAME Department Name VARCHAR(36) N MGRNO Employee Number of the Responsible CHAR(6) Y Manager ADMRDEPT Department Number of the CHAR(3) N Department to which the Department reports LOCATION Location Number CHAR(5) Y EMPLOYEE There is one row in the EMPLOYEE table for each of the employees in the company. Column Name Meaning Data Type NULLS allowed EMPNO Employee Number CHAR(6) N FIRSTNME First Name VARCHAR(20) N MIDINIT Middle Initial CHAR(1) N LASTNAME Last Name VARCHAR(15) N WORKDEPT Department in which the Employee CHAR(3) Y Works PHONENO Phone Number CHAR(4) Y HIREDATE Date of Hire DATE Y JOB Job CHAR(8) Y EDLEVEL Number of Years of Formal Education SMALLINT Y SEX Sex (M male, F female) CHAR(1) Y BIRTHDATE Date of Birth DATE Y SALARY Yearly Salary DECIMAL(9, 2) Y BONUS Yearly Bonus DECIMAL(9, 2) Y COMM Yearly Commission DECIMAL(9, 2) Y Copyright IBM Corp. 1998, 2001 Table Descriptions xiii

PROJECT There is one row in the PROJECT table for each project. Column Name Meaning Data Type NULLS allowed PROJNO Project Number CHAR(6) N PROJNAME Project Name VARCHAR(24) N DEPTNO Responsible Department CHAR(3) N RESPEMP Employee Number of the Responsible CHAR(6) N Employee PRSTAFF Estimated Mean Staffing DECIMAL(5, 2) Y PRSTDATE Estimated Start Date DATE Y PRENDATE Estimated End Date DATE Y MAJPROJ Major Project for a Subproject CHAR(6) Y EMP_ACT There are many rows in the EMP_ACT table for any employee or any project. Column Name Meaning Data Type NULLS allowed EMPNO Employee Number of Employee CHAR(6) N Performing the Activity PROJNO Project Number CHAR(6) N ACTNO Activity Number SMALLINT N EMPTIME Proportion of Employee's Time Spent DECIMAL(5, 2) Y on Project EMSTDATE Date Activity Starts DATE Y EMENDATE Date Activity Ends DATE Y xiv DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

Table Content DEPARTMENT Table DEPTNO DEPTNAME MGRNO ADMRDEPT LOCATION ------ ------------------------------ ------ -------- -------- A00 SPIFFY COMPUTER SERVICE DIV. 000010 A00 B01 PLANNING 000020 A00 C01 INFORMATION CENTER 000030 A00 D01 DEVELOPMENT CENTER - A00 D11 MANUFACTURING SYSTEMS 000060 D01 D21 ADMINISTRATION SYSTEMS 000070 D01 E01 SUPPORT SERVICES 000050 A00 E11 OPERATIONS 000090 E01 E21 SOFTWARE SUPPORT 000100 E01 Copyright IBM Corp. 1998, 2001 Table Content xv

EMPLOYEE Table EMPNO FIRSTNME MIDINIT LASTNAME WORKDEPT PHONENO HIREDATE ------ ---------- ------- ---------- -------- ------- ---------- 000010 CHRISTINE I HAAS A00 3978 1965-01-01 000020 MICHAEL L THOMPSON B01 3476 1973-10-10 000030 SALLY A KWAN C01 4738 1975-04-05 000050 JOHN B GEYER E01 6789 1949-08-17 000060 IRVING F STERN D11 6423 1973-09-14 000070 EVA D PULASKI D21 7831 1980-09-30 000090 EILEEN W HENDERSON E11 5498 1970-08-15 000100 THEODORE Q SPENSER E21 0972 1980-06-19 000110 VINCENZO G LUCCHESI A00 3490 1958-05-16 000120 SEAN O'CONNELL A00 2167 1963-12-05 000130 DOLORES M QUINTANA C01 4578 1971-07-28 000140 HEATHER A NICHOLLS C01 1793 1976-12-15 000150 BRUCE ADAMSON D11 4510 1972-02-12 000160 ELIZABETH R PIANKA D11 3782 1977-10-11 000170 MASATOSHI J YOSHIMURA D11 2890 1978-09-15 000180 MARILYN S SCOUTTEN D11 1682 1973-07-07 000190 JAMES H WALKER D11 2986 1974-07-26 000200 DAVID BROWN D11 4501 1966-03-03 000210 WILLIAM T JONES D11 0942 1979-04-11 000220 JENNIFER K LUTZ D11 0672 1968-08-29 000230 JAMES J JEFFERSON D21 4265 1966-11-21 000240 SALVATORE M MARINO D21 3780 1979-12-05 000250 DANIEL S SMITH D21 0961 1969-10-30 000260 SYBIL V JOHNSON D21 8953 1975-09-11 000270 MARIA L PEREZ D21 9001 1980-09-30 000280 ETHEL R SCHNEIDER E11 8997 1967-03-24 000290 JOHN R PARKER E11 4502 1980-05-30 000300 PHILIP X SMITH E11 2095 1972-06-19 000310 MAUDE F SETRIGHT E11 3332 1964-09-12 000320 RAMLAL V MEHTA E21 9990 1965-07-07 000330 WING LEE E21 2103 1976-02-23 000340 JASON R GOUNOT E21 5698 1947-05-05 xvi DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

EMPLOYEE Table (Cont) JOB EDLEVEL SEX BIRTHDATE SALARY BONUS COMM --------- ------- --- ---------- --------- -------- -------- PRES 18 F 1933-08-14 52750.00 1000.00 4220.00 MANAGER 18 M 1948-02-02 41250.00 800.00 3300.00 MANAGER 20 F 1941-05-11 38250.00 800.00 3060.00 MANAGER 16 M 1925-09-15 40175.00 800.00 3214.00 MANAGER 16 M 1945-07-07 32250.00 600.00 2580.00 MANAGER 16 F 1953-05-26 36170.00 700.00 2893.00 MANAGER 16 F 1941-05-15 29750.00 600.00 2380.00 MANAGER 14 M 1956-12-18 26150.00 500.00 2092.00 SALESREP 19 M 1929-11-05 46500.00 900.00 3720.00 CLERK 14 M 1942-10-18 29250.00 600.00 2340.00 ANALYST 16 F 1925-09-15 23800.00 500.00 1904.00 ANALYST 18 F 1946-01-19 28420.00 600.00 2274.00 DESIGNER 16 M 1947-05-17 25280.00 500.00 2022.00 DESIGNER 17 F 1955-04-12 22250.00 400.00 1780.00 DESIGNER 16 M 1951-01-05 24680.00 500.00 1974.00 DESIGNER 17 F 1949-02-21 21340.00 500.00 1707.00 DESIGNER 16 M 1952-06-25 20450.00 400.00 1636.00 DESIGNER 16 M 1941-05-29 27740.00 600.00 2217.00 DESIGNER 17 M 1953-02-23 18270.00 400.00 1462.00 DESIGNER 18 F 1948-03-19 29840.00 600.00 2387.00 CLERK 14 M 1935-05-30 22180.00 400.00 1774.00 CLERK 17 M 1954-03-31 28760.00 600.00 2301.00 CLERK 15 M 1939-11-12 19180.00 400.00 1534.00 CLERK 16 F 1936-10-05 17250.00 300.00 1380.00 CLERK 15 F 1953-05-26 27380.00 500.00 2190.00 OPERATOR 17 F 1936-03-28 26250.00 500.00 2100.00 OPERATOR 12 M 1946-07-09 15340.00 300.00 1227.00 OPERATOR 14 M 1936-10-27 17750.00 400.00 1420.00 OPERATOR 12 F 1931-04-21 15900.00 300.00 1272.00 FIELDREP 16 M 1932-08-11 19950.00 400.00 1596.00 FIELDREP 14 M 1941-07-18 25370.00 500.00 2030.00 FIELDREP 16 M 1926-05-17 23840.00 500.00 1907.00 Copyright IBM Corp. 1998, 2001 Table Content xvii

PROJECT Table DEPT PR PROJNO PROJNAME NO RESPEMP STAFF PRSTDATE PRENDATE MAJPROJ ------ --------------------------------- ----- ---------- ---------- ------- AD3100 ADMIN SERVICES D01 000010 6.50 1982-01-01 1983-02-01 - AD3110 GENERAL AD SYSTEMS D21 000070 6.00 1982-01-01 1983-02-01 AD3100 AD3111 PAYROLL PROGRAMMING D21 000230 2.00 1982-01-01 1983-02-01 AD3110 AD3112 PERSONNEL PROGRAMMG D21 000250 1.00 1982-01-01 1983-02-01 AD3110 AD3113 ACCOUNT.PROGRAMMING D21 000270 2.00 1982-01-01 1983-02-01 AD3110 IF1000 QUERY SERVICES C01 000030 2.00 1982-01-01 1983-02-01 - IF2000 USER EDUCATION C01 000030 1.00 1982-01-01 1983-02-01 - MA2100 WELD LINE AUTOMATION D01 000010 12.00 1982-01-01 1983-02-01 - MA2110 W L PROGRAMMING D11 000060 9.00 1982-01-01 1983-02-01 MA2100 MA2111 W L PROGRAM DESIGN D11 000220 2.00 1982-01-01 1982-12-01 MA2110 MA2112 W L ROBOT DESIGN D11 000150 3.00 1982-01-01 1982-12-01 MA2110 MA2113 W L PROD CONT PROGS D11 000160 3.00 1982-02-15 1982-12-01 MA2110 OP1000 OPERATION SUPPORT E01 000050 6.00 1982-01-01 1983-02-01 - OP1010 OPERATION E11 000090 5.00 1982-01-01 1983-02-01 OP1000 OP2000 GEN SYSTEMS SERVICES E01 000050 5.00 1982-01-01 1983-02-01 - OP2010 SYSTEMS SUPPORT E21 000100 4.00 1982-01-01 1983-02-01 OP2000 OP2011 SCP SYSTEMS SUPPORT E21 000320 1.00 1982-01-01 1983-02-01 OP2010 OP2012 APPLICATIONS SUPPORT E21 000330 1.00 1982-01-01 1983-02-01 OP2010 OP2013 DB/DC SUPPORT E21 000340 1.00 1982-01-01 1983-02-01 OP2010 PL2100 WELD LINE PLANNING B01 000020 1.00 1982-01-01 1982-09-15 MA2100 xviii DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

EMP_ACT Table EMPNO PROJNO ACTNO EMPTIME EMSTDATE EMENDATE ------ ------ ------ -------- ---------- ---------- 000010 AD3100 10 0.50 1982-01-01 1982-07-01 000070 AD3110 10 1.00 1982-01-01 1983-02-01 000230 AD3111 60 1.00 1982-01-01 1982-03-15 000230 AD3111 60 0.50 1982-03-15 1982-04-15 000230 AD3111 70 0.50 1982-03-15 1982-10-15 000230 AD3111 80 0.50 1982-04-15 1982-10-15 000230 AD3111 180 1.00 1982-10-15 1983-01-01 000240 AD3111 70 1.00 1982-02-15 1982-09-15 000240 AD3111 80 1.00 1982-09-15 1983-01-01 000250 AD3112 60 0.50 1982-02-01 1982-03-15 000250 AD3112 60 1.00 1982-01-01 1982-02-01 000250 AD3112 60 1.00 1983-01-01 1983-02-01 000250 AD3112 60 0.50 1982-12-01 1983-01-01 000250 AD3112 70 1.00 1982-03-15 1982-08-15 000250 AD3112 70 0.50 1982-02-01 1982-03-15 000250 AD3112 70 0.25 1982-08-15 1982-10-15 000250 AD3112 80 0.25 1982-08-15 1982-10-15 000250 AD3112 80 0.50 1982-10-15 1982-12-01 000250 AD3112 180 0.50 1982-08-15 1983-01-01 000260 AD3113 70 0.50 1982-06-15 1982-07-01 000260 AD3113 70 1.00 1982-07-01 1983-02-01 000260 AD3113 80 1.00 1982-01-01 1982-03-01 000260 AD3113 80 0.50 1982-03-01 1982-04-15 000260 AD3113 180 0.50 1982-03-01 1982-04-15 000260 AD3113 180 0.50 1982-06-01 1982-07-01 000260 AD3113 180 1.00 1982-04-15 1982-06-01 000270 AD3113 60 0.25 1982-09-01 1982-10-15 000270 AD3113 60 1.00 1982-04-01 1982-09-01 000270 AD3113 60 0.50 1982-03-01 1982-04-01 000270 AD3113 70 0.75 1982-09-01 1982-10-15 000270 AD3113 70 1.00 1982-10-15 1983-02-01 000270 AD3113 80 1.00 1982-01-01 1982-03-01 000270 AD3113 80 0.50 1982-03-01 1982-04-01 000030 IF1000 10 0.50 1982-06-01 1983-01-01 000130 IF1000 90 1.00 1982-01-01 1982-10-01 000130 IF1000 100 0.50 1982-10-01 1983-01-01 000140 IF1000 90 0.50 1982-10-01 1983-01-01 Copyright IBM Corp. 1998, 2001 Table Content xix

EMP_ACT Table (Cont) EMPNO PROJNO ACTNO EMPTIME EMSTDATE EMENDATE ------ ------ ------ -------- ---------- ---------- 000030 IF2000 10 0.50 1982-01-01 1983-01-01 000140 IF2000 100 1.00 1982-01-01 1982-03-01 000140 IF2000 100 0.50 1982-03-01 1982-07-01 000140 IF2000 110 0.50 1982-03-01 1982-07-01 000140 IF2000 110 0.50 1982-10-01 1983-01-01 000010 MA2100 10 0.50 1982-01-01 1982-11-01 000110 MA2100 20 1.00 1982-01-01 1982-03-01 000010 MA2110 10 1.00 1982-01-01 1983-02-01 000200 MA2111 50 1.00 1982-01-01 1982-06-15 000200 MA2111 60 1.00 1982-06-15 1983-02-01 000220 MA2111 40 1.00 1982-01-01 1983-02-01 000150 MA2112 60 1.00 1982-01-01 1982-07-15 000150 MA2112 180 1.00 1982-07-15 1983-02-01 000170 MA2112 60 1.00 1982-01-01 1983-06-01 000170 MA2112 70 1.00 1982-06-01 1983-02-01 000190 MA2112 70 1.00 1982-02-01 1982-10-01 000190 MA2112 80 1.00 1982-10-01 1983-10-01 000160 MA2113 60 1.00 1982-07-15 1983-02-01 000170 MA2113 80 1.00 1982-01-01 1983-02-01 000180 MA2113 70 1.00 1982-04-01 1982-06-15 000210 MA2113 80 0.50 1982-10-01 1983-02-01 000210 MA2113 180 0.50 1982-10-01 1983-02-01 000050 OP1000 10 0.25 1982-01-01 1983-02-01 000090 OP1010 10 1.00 1982-01-01 1983-02-01 000280 OP1010 130 1.00 1982-01-01 1983-02-01 000290 OP1010 130 1.00 1982-01-01 1983-02-01 000300 OP1010 130 1.00 1982-01-01 1983-02-01 000310 OP1010 130 1.00 1982-01-01 1983-02-01 000050 OP2010 10 0.75 1982-01-01 1983-02-01 000100 OP2010 10 1.00 1982-01-01 1983-02-01 000320 OP2011 140 0.75 1982-01-01 1983-02-01 000320 OP2011 150 0.25 1982-01-01 1983-02-01 000330 OP2012 140 0.25 1982-01-01 1983-02-01 000330 OP2012 160 0.75 1982-01-01 1983-02-01 000340 OP2013 140 0.50 1982-01-01 1983-02-01 000340 OP2013 170 0.50 1982-01-01 1983-02-01 000020 PL2100 30 1.00 1982-01-01 1982-09-15 xx DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

CARS Table The CARS table is to use in unit 7 (recursive SQL). LEVEL ASSEMBLY COMPONENT QUANTITY ------ ------------------------- ------------------------- -------- 1 HONDA ACCORD ENGINE COMPARTMENT 1 1 HONDA ACCORD PASSENGER COMPARTMENT 1 2 ENGINE COMPARTMENT ENGINE 1 2 ENGINE COMPARTMENT IGNITION SYSTEM 1 2 PASSENGER COMPARTMENT SEAT GROUP 3 2 PASSENGER COMPARTMENT DASHBOARD 1 2 PASSENGER COMPARTMENT TRUNK 1 3 ENGINE CAMSHAFT 1 3 ENGINE CRANKSHAFT 1 3 ENGINE PISTON 4 3 ENGINE CONNECTING ROD 4 3 SEAT GROUP FRONT SEAT ASSEMBLY 2 3 SEAT GROUP REAR SEAT ASSEMBLY 1 3 DASHBOARD VENT 4 3 DASHBOARD STEREO SYSTEM 1 3 DASHBOARD GAUGE CLUSTER 1 3 DASHBOARD CONTROL CLUSTER 1 3 TRUNK TOOL KIT 1 4 STEREO SYSTEM RADIO 1 4 STEREO SYSTEM CD PLAYER 1 4 GAUGE CLUSTER SPEEDOMETER 1 4 GAUGE CLUSTER ODOMETER 1 4 CONTROL CLUSTER FOG LAMP CONTROL 1 4 CONTROL CLUSTER FOUR WAY FLASHER CONTROL 1 4 CONTROL CLUSTER TURN SIGNAL CONTROL 1 4 FRONT SEAT ASSEMBLY FRONT SEAT 1 4 FRONT SEAT ASSEMBLY LAP/SHOULDER BELT 1 4 REAR SEAT ASSEMBLY REAR SEAT 1 4 REAR SEAT ASSEMBLY LAP/SHOULDER BELT 3 4 REAR SEAT ASSEMBLY SHOULDER BELT 3 Copyright IBM Corp. 1998, 2001 Table Content xxi

TESTEMP Table The TESTEMP table is to use in unit 2 (views). EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS ---------------- -------- ---------- -------- ------- 000111 SMITH C01 25.06.1998 25000.00.00 000010 HAAS A00 01.01.1965 52750.00 1000.00 000020 THOMPSON B01 10.10.1973 41250.00 800.00 000030 KWAN C01 05.04.1975 38250.00 800.00 000050 GEYER E01 17.08.1949 40175.00 800.00 xxii DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

Content of VIEWS The listed views have to be used for the exercises in unit 3. Data types are listed in the table description. VEMPLOYEE View EMPNO LASTNAME SALARY WORKDEPT ------ --------- -------- -------- 000010 HAAS 52750.00 A00 000030 KWAN 38250.00 C01 000120 O'CONNELL 29250.00 A00 000130 QUINTANA 23800.00 C01 000140 NICHOLLS 28420.00 C01 VDEPARTMENT View DEPTNO DEPTNAME MGRNO ------ ---------------------------- ------ A00 SPIFFY COMPUTER SERVICE DIV. 000010 C01 INFORMATION CENTER 000030 D01 DEVELOPMENT CENTER ------ VPROJECT View PROJNO PROJNAME DEPTNO RESPEMP ------ -------------- ------ ------- AD3100 ADMIN SERVICES D01 000010 IF1000 QUERY SERVICES C01 000030 IF2000 USER EDUCATION C01 000030 Copyright IBM Corp. 1998, 2001 Table Content xxiii

Each exercise in this course is divided into sections as described below. Select the section that best fits your method of performing labs. You may elect to use a combination of these sections as appropriate. Exercise Instructions This section contains what it is you are to accomplish. There are no definitive details on how to perform the tasks. You can work through the exercises based on what you have learned in the unit presentation, as well as the unit Student Notebook, your past experience and some intuition. Exercise Instructions With Hints This section is an exact duplicate of the Exercise Instructions section except that in addition, specific details and/or hints are provided to help step you through the exercise. A combination of using the Instructions section along with Instructions With Hints section can make for a rewarding combination providing you with no hints when you don't want them and hints when you need them. xxiv DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

Exercise 1. SQL Basics Review, CUBE AND ROLLUP What This Exercise Is About This exercise provides an opportunity to review some basic topics What You Should Be Able to Do At the end of the lab, you should be able to: Code SELECT statements with multiple conditions Use the GROUP BY clause Use column functions Use the new super groups features, CUBE & ROLLUP Introduction See the data model at the start of this Exercise Guide to get the column names and descriptions for each table. Required Materials Student handout SQL Reference Copyright IBM Corp. 1998, 2001 Exercise 1. SQL Basics Review, CUBE & ROLLUP 1-1

Exercise Instructions Problem 1 Problem 2 Problem 3 Problem 4 Ron is the SQL specialist in the department. Joe is a colleague of Ron and does not have SQL knowledge. Joe asked Ron for help to solve the following problems. Note: See the data model at the beginning of this exercise guide for descriptions of the tables used in the labs and for their column names. Joe's manager wants information about employees which match the following criteria: Their yearly salary is between 22000 and 24000. They work in departments D11 or D21. List the employee number, last name, yearly salary, and department number of the appropriate employees. Now, Joe's manager wants information about the yearly salary. He wants to know the minimum, the maximum, and average yearly salary of all employees with an education level of 16. He also wants to know how many employees have this education level. Joe's manager is interested in some additional salary information. This time, he wants information for every department that appears in the EMPLOYEE table, provided that the department has more than five employees. The report needs to show the department number, the minimum, maximum, and average yearly salary, and the number of employees who work in the department. Joe's manager wants information about employees grouped by department, grouped by sex and in addition by the combination of department and sex. List only those who work in a department which start with the letter D. List the department, the sex, sum of the salaries, minimum salary and maximum salary. Note, the solution of this problem can only be used on DB2 UDB for UNIX, Windows and OS/2. END OF LAB 1-2 DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

Exercise Instructions With Hints (Expected Results) Problem 1 Joe's manager wants information about employees which match the following criteria: Their yearly salary is between 22000 and 24000. They work in departments D11 or D21. Result Problem 2 Result Problem 3 Result Problem 4 List the employee number, last name, yearly salary, and department number of the appropriate employees. EMPNO LASTNAME SALARY WORKDEPT ------ --------- -------- --------- 000160 PIANKA 22250.00 D11 000230 JEFFERSON 22180.00 D21 Now, Joe's manager wants information about the yearly salary. He wants to know the minimum, the maximum, and average yearly salary of all employees with an education level of 16. He also wants to know how many employees have this education level. MIN MAX AVG COUNT -------- -------- -------------- ----- 17250.00 40175.00 26777.91666666 12 Joe's manager is interested in some additional salary information. This time, he wants information for every department that appears in the EMPLOYEE table, provided that the department has more than five employees. The report needs to show the department number, the minimum, maximum, and average yearly salary, and the number of employees who work in the department. WORKDEPT MIN MAX AVG COUNT -------- -------- -------- -------------- ----- D11 18270.00 32250.00 24677.77777777 9 D21 17250.00 36170.00 25153.33333333 6 Joe's manager wants information about employees grouped by department, grouped by sex and in addition by the combination of department and sex. List only those who work in a department which start with the letter D. List the department, the sex, sum of the salaries, minimum salary and maximum salary. Copyright IBM Corp. 1998, 2001 Exercise 1. SQL Basics Review, CUBE & ROLLUP 1-3

Result Note, the solution of this problem can only be used on DB2 UDB for UNIX, Windows and OS/2. WORKDEPT SEX MIN MAX SUM -------- --- ----------- ----------- -------------------- D11-18270.00 32250.00 222100.00 D21-17250.00 36170.00 150920.00 - - 17250.00 36170.00 373020.00 - F 17250.00 36170.00 154230.00 - M 18270.00 32250.00 218790.00 D11 F 21340.00 29840.00 73430.00 D21 F 17250.00 36170.00 80800.00 D11 M 18270.00 32250.00 148670.00 D21 M 19180.00 28760.00 70120.00 9 record(s) selected. END OF LAB (with hints) 1-4 DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

Solution Problem 1 Problem 2 Problem 3 Problem 4 SELECT EMPNO, LASTNAME, SALARY, WORKDEPT FROM EMPLOYEE WHERE WORKDEPT IN ('D11', 'D21') AND SALARY BETWEEN 22000 AND 24000 SELECT MIN(SALARY) AS MIN, MAX(SALARY) AS MAX, AVG(SALARY) AS AVG, COUNT(*) AS COUNT FROM EMPLOYEE WHERE EDLEVEL = 16 SELECT WORKDEPT, MIN(SALARY) AS MIN, MAX(SALARY) AS MAX, AVG(SALARY) AS AVG, COUNT(*) AS COUNT FROM EMPLOYEE GROUP BY WORKDEPT HAVING COUNT(*) > 5 SELECT WORKDEPT,SEX,MIN(SALARY) AS MIN,MAX(SALARY) AS MAX, SUM(SALARY) AS SUM FROM EMPLOYEE WHERE WORKDEPT LIKE 'D%' GROUP BY CUBE (WORKDEPT,SEX) END OF SOLUTION Copyright IBM Corp. 1998, 2001 Exercise 1. SQL Basics Review, CUBE & ROLLUP 1-5

1-6 DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

Exercise 2. Create Objects What This Exercise Is About This exercise gives you an opportunity to implement a small data model. What You Should Be Able to Do At the end of the lab, you should be able to: Create tables with check constraints Create index Use referential integrity Create triggers Create views Understand the effect of CHECK OPTION in a view Appreciate some of the advantages of using views Introduction See the data model at the start of this Exercise Guide to get the column names and descriptions for each table. OS/390 Users: Be sure to add the correct IN clause to your CREATE TABLE statements. Ask the instructor if you forgot which IN clause to use. Required Materials Student handout SQL Reference Copyright IBM Corp. 1998, 2001 Exercise 2. Create Objects 2-1

Exercise Instructions Problem 1 Harvey needs your help to create a database for his test environment. He has accurately defined the requirements, but he does not know the SQL syntax. You should help him to do the subsequent steps. Create the table EMPDEPT with these columns: EMPNO LASTNAME SALARY DEPTNO DEP_NAME The data types and null characteristics for these columns should be the same as for the columns with the same names in the EMPLOYEE and DEPARTMENT tables. These tables are described in our course data model. The definition of the table should limit the values for the yearly salary (SALARY) column to ensure that: The yearly salary for employees in department E11 (operations) must not exceed 28000. No employee in any department may have a yearly salary that exceeds 50000. The values in the EMPNO column should be unique. The uniqueness should be guaranteed via a unique index. Create the table HIGH_SALARY_RAISE with the following columns: EMPNO PREV_SAL NEW_SAL The data type for column EMPNO is CHAR(6). The other columns should be defined as DECIMAL(9,2). All columns in this table should be defined with NOT NULL. 2-2 DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

Problem 2 Problem 3 Problem 4 After creating the table, you should add referential constraints. The primary key for the EMPDEPT table should be EMPNO. The EMPDEPT table should only allow values in column EMPNO which exist in the EMPLOYEE table. If an employee is deleted from the EMP table, the corresponding row in the EMPDEPT table should also be immediately deleted. The EMPDEPT table should only allow values in column DEPTNO which exist in the DEPARTMENT table. It should not be possible to delete a department from the DEPARTMENT table as long as a corresponding DEPTNO exists in the EMPDEPT table. Note: In DB2 for OS/390 the used sample tables are originally defined as views. You can not have a foreign key reference a view. Ask your instructor for the name and the qualifier of the tables which should be referenced. Klaus must update the yearly salaries for the employees of the EMPDEPT table. If the new value for a salary exceeds the previous value by 10 percent or more, Harvey wants to insert a row into the HIGH_SALARY_RAISE table. The values in this row should be the employee number, the previous salary, and the new salary. Create something in DB2 that will ensure that a row is inserted into the HIGH_SALARY_RAISE table whenever an employee of the EMPDEPT table gets a raise of 10 percent or more. Now, you should insert data in the EMPDEPT table. Use the combined contents of tables EMPLOYEE and DEPARTMENT as the source for your data. Did your insert work? If not, correct your INSERT statement so that you get only rows which satisfy the check constraints on the EMPDEPT table. Copyright IBM Corp. 1998, 2001 Exercise 2. Create Objects 2-3

Problem 5 Problem 6 Problem 7 Problem 8 Problem 9 Harvey wants to test the table-level check constraint on the EMPDEPT table. Ethel Schneider works in the operations department. Her department number is E11, and her employee number is 000280. Try to set her yearly salary to the value of 30000. Does it work? Harvey wants to see if the trigger works. Elizabeth Pianka, whose employee number is 000160, has been given a raise. Set her yearly salary to 25000. Inspect the HIGH_SALARY_RAISE table to see if the trigger worked. Create a view named VEMPPAY that contains one row for each employee in the company. Each row should contain employee number, last name, department number, and total earnings for the corresponding employee. Total earnings means salary plus bonus plus commission for the employee. Then, determine the average of the earnings for the departments by using the view you just created. Create a view named VEMP1 containing employee number, last name, yearly salary, and work department based on your TESTEMP table. Only employees with a yearly salary less than 50000 should be displayed when you use the view. Note: It is very important that you base this view on the TESTEMP table that was created for you or you created with the CRTABS member. Otherwise, you may get incorrect results in a later lab. Display the rows in the view in employee number sequence. Our employee with the employee number 000020 (Thompson) changed jobs and will get a new salary of 51000. Update the data for employee number 000020 using the view VEMP1. Display the view again, arranging the rows in employee number sequence. What happened? Is Thompson still in the view? Query the row of employee number 000020 in your TESTEMP table. Did the update work? Reset the salary of employee Thompson (empno = '000020') to the value of 41250. Create a view named VEMP2 which has the same definition as in problem 8, but add a CHECK OPTION. Again, base the view on your TESTEMP table. 2-4 DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

Display the rows in the view in employee number sequence. Our employee with the employee number 000050 (Geyer) also changed jobs and will have a new salary of 55000. Update the data for employee number 000050 using the view VEMP2. Does the UPDATE statement work? Display the view again, arranging the rows in employee number sequence. Query Geyer's row in your TESTEMP table. Did the data in the base table change? END OF LAB Copyright IBM Corp. 1998, 2001 Exercise 2. Create Objects 2-5

Exercise Instructions With Hints (Expected Results) Problem 1 Create the table EMPDEPT with these columns: EMPNO LASTNAME SALARY DEPTNO DEP_NAME The data types and null characteristics for these columns should be the same as for the columns with the same names in the EMPLOYEE and DEPARTMENT tables. These tables are described in our course data model. The definition of the table should limit the values for the yearly salary (SALARY) column to ensure that: The yearly salary for employees in department E11 (operations) must not exceed 28000. No employee in any department may have a yearly salary that exceeds 50000. The values in the EMPNO column should be unique. The uniqueness should be guaranteed via a unique index. Create the table HIGH_SALARY_RAISE with the following columns: EMPNO PREV_SAL NEW_SAL Result The data type for column EMPNO is CHAR(6). The other columns should be defined as DECIMAL(9,2). All columns in this table should be defined with NOT NULL. The CREATE statements for the EMPDEPT table, the unique index on the EMPDEPT table, and the HIGH_SALARY_RAISE table should all be successful. 2-6 DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

Problem 2 Result Problem 3 Result Problem 4 Result After creating the table, you should add referential constraints. The primary key for the EMPDEPT table should be EMPNO. The EMPDEPT table should only allow values in column EMPNO which exist in the EMPLOYEE table. If an employee is deleted from the EMP table, the corresponding row in the EMPDEPT table should also be immediately deleted. The EMPDEPT table should only allow values in column DEPTNO which exist in the DEPARTMENT table. It should not be possible to delete a department from the DEPARTMENT table as long as a corresponding DEPTNO exists in the EMPDEPT table. Note: In DB2 for OS/390 the used sample tables are originally defined as views. You can not have a foreign key reference a view. Ask your instructor for the name and the qualifier of the tables which should be referenced. The ALTER statements which add the primary key and the foreign keys should execute successfully. Klaus must update the yearly salaries for the employees of the EMPDEPT table. If the new value for a salary exceeds the previous value by 10 percent or more, Harvey wants to insert a row into the HIGH_SALARY_RAISE table. The values in this row should be the employee number, the previous salary, and the new salary. Create something in DB2 that will ensure that a row is inserted into the HIGH_SALARY_RAISE table whenever an employee of the EMPDEPT table gets a raise of 10 percent or more. The CREATE TRIGGER statement should execute successfully. Now, you should insert data in the EMPDEPT table. Use the combined contents of tables EMPLOYEE and DEPARTMENT as the source for your data. Did your insert work? If not, correct your INSERT statement so that you get only rows which satisfy the check constraints on the EMPDEPT table. The initial INSERT should fail due to a check constraint violation. The INSERT should work after it has been modified so that none of the rows violates a check constraint. Copyright IBM Corp. 1998, 2001 Exercise 2. Create Objects 2-7

Problem 5 Result Problem 6 Result Problem 7 Result Problem 8 Harvey wants to test the table-level check constraint on the EMPDEPT table. Ethel Schneider works in the operations department. Her department number is E11, and her employee number is 000280. Try to set her yearly salary to the value of 30000. Does it work? The UPDATE for Ethel Schneider will fail because it violates a check constraint. Harvey wants to see if the trigger works. Elizabeth Pianka, whose employee number is 000160, has been given a raise. Set her yearly salary to 25000. Inspect the HIGH_SALARY_RAISE table to see if the trigger worked. The UPDATE for Elizabeth Pianka should succeed and should fire the trigger. You can verify that the trigger has fired by examining the contents of the HIGH_SALARY_RAISE table. You should see a row there for Elizabeth Pianka (EMPNO = 000160). EMPNO PREV_SAL NEW_SAL ------ -------- -------- 000160 22250.00 25000.00 Create a view named VEMPPAY that contains one row for each employee in the company. Each row should contain employee number, last name, department number, and total earnings for the corresponding employee. Total earnings means salary plus bonus plus commission for the employee. Then, determine the average of the earnings for the departments by using the view you just created. WORKDEPT AVG_TOTAL_EARNINGS -------- ------------------ A00 47093.333333 B01 45350.000000 C01 33202.666666 D11 27151.666666 D21 27648.666666 E01 44189.000000 E11 23097.800000 E21 26208.750000 Create a view named VEMP1 containing employee number, last name, yearly salary, and work department based on your TESTEMP table. 2-8 DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

Result Problem 9 Only employees with a yearly salary less than 50000 should be displayed when you use the view. Note: It is very important that you base this view on the TESTEMP table that was created for you or you created with the CRTABS member. Otherwise, you may get incorrect results in a later lab. Display the rows in the view in employee number sequence. Our employee with the employee number 000020 (Thompson) changed jobs and will get a new salary of 51000. Update the data for employee number 000020 using the view VEMP1. Display the view again, arranging the rows in employee number sequence. What happened? Is Thompson still in the view? Query the row of employee number 000020 in your TESTEMP table. Did the update work? You should see the following when you first display the view contents: EMPNO LASTNAME SALARY WORKDEPT ------ -------- -------- -------- 000020 THOMPSON 41250.00 B01 000030 KWAN 38250.00 C01 000050 GEYER 40175.00 E01 000111 SMITH 25000.00 C01 You should see the following when you display the view contents after the update: EMPNO LASTNAME SALARY WORKDEPT ------ -------- -------- -------- 000030 KWAN 38250.00 C01 000050 GEYER 40175.00 E01 000111 SMITH 25000.00 C01 You should see the following when you query the TESTEMP table: EMPNO LASTNAME SALARY WORKDEPT ------ -------- -------- -------- 000020 THOMPSON 51000.00 B01 The update worked. Reset the salary of employee Thompson (empno = '000020') to the value of 41250. Create a view named VEMP2 which has the same definition as in problem 8, but add a CHECK OPTION. Again, base the view on your TESTEMP table. Display the rows in the view in employee number sequence. Copyright IBM Corp. 1998, 2001 Exercise 2. Create Objects 2-9

Our employee with the employee number 000050 (Geyer) also changed also jobs and will have a new salary of 55000. Update the data for employee number 000050 using the view VEMP2. Does the UPDATE statement work? Display the view again, arranging the rows in employee number sequence. Query Geyer's row in your TESTEMP table. Result Did the data in the base table change? You should see the following when you first display the view contents: EMPNO LASTNAME SALARY WORKDEPT ------ -------- -------- -------- 000020 THOMPSON 41250.00 B01 000030 KWAN 38250.00 C01 000050 GEYER 40175.00 E01 000111 SMITH 25000.00 C01 The SQLCODE (-161 in OS/390, SQL0161N on the workstation) indicates that the UPDATE did not work. The desired value for Geyer's SALARY, that is, 55000, was outside of the scope of the view (SALARY < 50000). The CHECK OPTION prevented the UPDATE. You should see the following when displaying the view after the update: EMPNO LASTNAME SALARY WORKDEPT ------ -------- -------- -------- 000020 THOMPSON 41250.00 B01 000030 KWAN 38250.00 C01 000050 GEYER 40175.00 E01 000111 SMITH 25000.00 C01 You should see the following when you query the TESTEMP table after the update: EMPNO LASTNAME SALARY WORKDEPT ------ -------- -------- -------- 000050 GEYER 40175.00 E01 The data in the base table did not change. Remember that the data seen through the view is actually the base table data so this should not be a surprise. END OF LAB (with hints) 2-10 DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

Solution Problem 1 CREATE TABLE EMPDEPT (EMPNO CHAR(6) NOT NULL, LASTNAME VARCHAR(15) NOT NULL, SALARY DECIMAL(9,2) CHECK(SALARY <= 50000), DEPTNO CHAR(3) NOT NULL, DEP_NAME VARCHAR(36) NOT NULL, CONSTRAINT DEPT_SAL CHECK (SALARY <= 28000 or DEPTNO <> 'E11')) --IN clause (OS/390 users only) ; CREATE UNIQUE INDEX EMPIND ON EMPDEPT(EMPNO); Problem 2 CREATE TABLE HIGH_SALARY_RAISE (EMPNO CHAR(6) NOT NULL, PREV_SAL DECIMAL(9,2) NOT NULL, NEW_SAL DECIMAL(9,2) NOT NULL) --IN clause (OS/390 users only) ; ALTER TABLE EMPDEPT ADD PRIMARY KEY (EMPNO); ALTER TABLE EMPDEPT ADD FOREIGN KEY (EMPNO) REFERENCES EMPLOYEE ON DELETE CASCADE; Problem 3 Problem 4 ALTER TABLE EMPDEPT ADD FOREIGN KEY (DEPTNO) REFERENCES DEPARTMENT ON DELETE RESTRICT; CREATE TRIGGER HIGH_SAL AFTER UPDATE OF SALARY ON EMPDEPT REFERENCING OLD AS O NEW AS N FOR EACH ROW MODE DB2SQL WHEN (N.SALARY >= O.SALARY * 1.1) INSERT INTO HIGH_SALARY_RAISE VALUES (N.EMPNO, O.SALARY, N.SALARY); Remember, OLD identifies the value that is in column SALARY before the update and NEW the value after the update. Copyright IBM Corp. 1998, 2001 Exercise 2. Create Objects 2-11

Problem 5 Problem 6 Problem 7 The correct version of the INSERT is as follows: INSERT INTO EMPDEPT SELECT E.EMPNO, E.LASTNAME, E.SALARY, D.DEPTNO, D.DEPTNAME FROM EMPLOYEE E, DEPARTMENT D WHERE E.WORKDEPT = D.DEPTNO AND ((E.SALARY <= 50000 and E.WORKDEPT <> 'E11') OR (E.SALARY <= 28000 and E.WORKDEPT = 'E11')) ; The WHERE condition satisfies the check condition on the SALARY column of the EMPDEPT table (SALARY < 50000). The table constraint DEPT_SAL ensures that employees in department E11 have a yearly salary of 2800 or less. The condition "E.SALARY < = 50000 AND E.WORKDEPT < > 'E11'" selects employees who are not in department E11 and have a salary of less than 50000. The condition "E.SALARY < = 28000 AND E.WORKDEPT = 'E11'" selects employees who are in department E11 and have a salary of less than 28000. UPDATE EMPDEPT SET SALARY = 30000 WHERE EMPNO = '000280' The update fails because the table constraint DEPT_SAL ensures that employees in department E11 have a yearly salary of less than 28000. UPDATE EMPDEPT SET SALARY = 27999 WHERE EMPNO = '000280' This statement works. 28000 is the maximum yearly salary for Ethel Schneider unless she changed departments. UPDATE EMPDEPT SET SALARY = 25000 WHERE EMPNO = '000160'; SELECT * FROM HIGH_SALARY_RAISE; Create the view: CREATE VIEW VEMPPAY (EMPNO, LASTNAME, WORKDEPT, TOTAL_EARNINGS) AS SELECT EMPNO, LASTNAME, WORKDEPT, SALARY + BONUS + COMM FROM EMPLOYEE; Use the view to determine the average total earnings for each department: 2-12 DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

Problem 8 Problem 9 SELECT WORKDEPT, AVG(TOTAL_EARNINGS) AS AVG_TOTAL_EARNINGS FROM VEMPPAY GROUP BY WORKDEPT Create the view: CREATE VIEW VEMP1 AS SELECT EMPNO, LASTNAME, SALARY, WORKDEPT FROM TESTEMP WHERE SALARY < 50000; Determine which employees appear in the view: SELECT * FROM VEMP1 ORDER BY EMPNO; Update the data using the view: UPDATE VEMP1 SET SALARY = 51000 WHERE EMPNO = '000020'; Display the view again. SELECT * FROM VEMP1 ORDER BY EMPNO; See if the update worked: SELECT EMPNO, LASTNAME, SALARY, WORKDEPT FROM TESTEMP WHERE EMPNO = '000020'; Reset the salary for Thompson: UPDATE TESTEMP SET SALARY = 41250 WHERE EMPNO = '000020' Create the view: CREATE VIEW VEMP2 AS SELECT EMPNO, LASTNAME, SALARY, WORKDEPT FROM TESTEMP WHERE SALARY < 50000 WITH CHECK OPTION; Determine which employees appear in the view: SELECT * FROM VEMP2 ORDER BY EMPNO; Update the data using the view: Copyright IBM Corp. 1998, 2001 Exercise 2. Create Objects 2-13

UPDATE VEMP2 SET SALARY = 55000 WHERE EMPNO = '000050'; Display the view again. SELECT * FROM VEMP2 ORDER BY EMPNO; See if the update worked: SELECT EMPNO, LASTNAME, SALARY, WORKDEPT FROM TESTEMP WHERE EMPNO = '000050'; END OF SOLUTION 2-14 DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001

Exercise 3. Joins What This Exercise Is About This exercise will give you the opportunity to code inner and outer joins. What You Should Be Able to Do Introduction Required Materials At the end of the lab, you should be able to: Code Inner and Outer Joins See the data model at the start of this Exercise Guide to get the column names and descriptions for each table. Note: Use the views VDEPARTMENT, VEMPLOYEE, and VPROJECT during this unit. Student handout SQL Reference Copyright IBM Corp. 1998, 2001 Exercise 3. Joins 3-1

Exercise Instructions Problem 1 Problem 2 Problem 3 Problem 4 Problem 5 Display all employees who work in the INFORMATION CENTER department. Show department number, employee number and last name for all employees in that department. Use the "old" SQL syntax that puts the join condition in the WHERE clause. Note: Use the views VDEPARTMENT, VEMPLOYEE, and VPROJECT during this unit. Solve problem 1 again using the newer SQL syntax that places the join condition in the ON clause. Bill needs a list of those employees whose departments are involved in projects. The list needs to show employee number, last name, department number, and project name. The list should be ordered by project names. Now Bill wants to see all employees, whether or not their departments are involved a project. The list needs to show the employee number, last name, department number, and project name. If the department of an employee is not involved in a project, display NULLs instead of the project name. The list should be ordered by employee number. Now Bill wants to see all projects, including those assigned to departments without employees. The list needs to show employee number, last name, department number, and project name. If a project is not assigned to a department having employees, NULLS should be displayed instead of the department number, employee number and last name. The list should be ordered by project name. 3-2 DB2 SQL for Experienced Users Copyright IBM Corp. 1998, 2001