3. Tera-Cram SQL Final

147
Tera-Tom Notes 1 Tera-Cram for Teradata SQL Certification

Transcript of 3. Tera-Cram SQL Final

Page 1: 3. Tera-Cram SQL Final

Tera-Tom Notes 1

Tera-Cram for Teradata SQL Certification

Page 2: 3. Tera-Cram SQL Final

2 Tera-Tom Notes Copyright OSS 2001

First Edition 2001

Written by Tom Coffing III

Web Page: www.Tera-Tom.com E-Mail addresses:

Tom: [email protected]

Teradata, NCR, and BYNET are registered trademarks of NCR Corporation, Dayton, Ohio, U.S.A., IBM and DB2 are registered trademarks of IBM Corporation, ORACLE is a registered trademark of Oracle, SYBASE is a registered trademark of SYBASE, ANSI is a registered trademark of the American National Standards Institute. In addition to these products names, all brands and product names in this document are registered names or trademarks of their respective holders. Coffing Data Warehousing shall have neither liability nor responsibility to any person or entity with respect to any loss or damages arising from the information contained in this book or from the use of programs or program segments that are included. The manual is not a publication of NCR Corporation, nor was it produced in conjunction with NCR Corporation. Copyright 2001 by Coffing Publishing All rights reserved. No part of this book shall be reproduced, stored in a retrieval system, or transmitted by any means, electronic, mechanical, photocopying, recording, or otherwise, without written permission from the publisher. No patent liability is assumed with respect to the use of information contained herein. Although every precaution has been taken in the preparation of this book, the publisher and author assume no responsibility for errors or omissions, neither is any liability assumed for damages resulting from the use of information contained herein. For information, address: Coffing Publishing 7810 Kiester Rd. Middletown, OH 45042 International Standard Book Number: ISBN 0-9704980-3-9

Printed in the United States of America

All terms mentioned in this book that are known to be trademarks or service have been stated. Coffing Publishing cannot attest to the accuracy of this information. Use of a term in this book should not be regarded as affecting the validity of any trademark or service mark.

Page 3: 3. Tera-Cram SQL Final

Tera-Tom Notes 3

Acknowledgements and Special Thanks

This book is dedicated the Coffing Data warehousing team.

Tom Coffing Jr. Teradata Certified Master Morgan Jones Teradata Certified Master Mike Larkins Teradata Certified Master Jamar Boyd Teradata Certified Master Randy Volters Teradata Certified Master Chris Coffing Teradata Certified Master Robert Hines Teradata Certified Master Gareth Walter Teradata Certified Master Steve Wilmes Teradata Certified Master Todd Carroll Teradata Certified Master Tom Coffing Sr. Teradata Certified Professional Leona Coffing

Page 4: 3. Tera-Cram SQL Final

4 Tera-Tom Notes Copyright OSS 2001

Table of Contents

Module 1 – Teradata Basics ................................................................................7 Introduction .........................................................................................................8 A Table has Rows and Columns..........................................................................10 Retrieving Data From A Table ............................................................................12 Example of Selecting Data From A Table...........................................................14 Example of Selecting All Columns in a table......................................................16 Example of Selecting Only Certain Rows ...........................................................18 Example of Sorting the Data................................................................................20 Checking for NULL Data ....................................................................................22 Examples of NULL Data .....................................................................................24 How Sorting Works with NULL Data.................................................................26 AND, OR, and NOT ............................................................................................28 Valid Table Names ..............................................................................................30 Absolute Function................................................................................................32 The Extract Function ...........................................................................................34 The Date Function ...............................................................................................36 The Between Statement .......................................................................................38 ADD_MONTHS Command ................................................................................40 IN Command .......................................................................................................42 Subqueries............................................................................................................44 Aliasing................................................................................................................46 Joining Two Tables Using Teradata Syntax........................................................48 Joining Two Tables Using ANSI Syntax.............................................................50 SET Operators .....................................................................................................52 SET Operators Continued....................................................................................54 Macros .................................................................................................................56 Derived Tables.....................................................................................................58 Macros .................................................................................................................60 What is a View?...................................................................................................62 Cast ......................................................................................................................64 Traditional Subqueries.........................................................................................66 Traditional Subqueries Continued .......................................................................68 Correlated Subqueries..........................................................................................70 How Correlated Subqueries Work.......................................................................72 Insert Select .........................................................................................................74 Insert Select Continued........................................................................................76 SHOW Commands ..............................................................................................78 HELP Command..................................................................................................80 CREATE a Secondary INDEX............................................................................82 The NULLIF Command ......................................................................................84 Aggregate Functions............................................................................................86 GROUP BY .........................................................................................................88 GROUP BY and HAVING Conditions ...............................................................90 Some Aggregate examples ..................................................................................92

Page 5: 3. Tera-Cram SQL Final

Tera-Tom Notes 5

Some Aggregate examples Continued ................................................................ 94 Some Aggregate examples Continued ................................................................ 96 Advanced Aggregate example ............................................................................ 98 Using WITH… BY for Subtotals........................................................................ 100 Creating a Report Using WITH …BY................................................................ 102 WITH …BY Multiple Aggregates...................................................................... 104 WITH for a final total ......................................................................................... 106 Multiple WITH BY Statements .......................................................................... 108 What type of join is this? .................................................................................... 110 Characters Functions........................................................................................... 112 Trim..................................................................................................................... 114 Trim and Characters Combined .......................................................................... 116 Unique Constraint ............................................................................................... 118 Compress............................................................................................................. 120 Substring ............................................................................................................. 122 INDEX and POSITION functions ...................................................................... 124 UPDATE............................................................................................................. 126 Creating a Table .................................................................................................. 128 CASE Statement (Option 1)................................................................................ 130 CASE Statement (Option 2)................................................................................ 132 COALESCE Option ............................................................................................ 134 Distinct Option.................................................................................................... 136 NULLIFZERO and ZEROIFNULL.................................................................... 138 SQL Flag ............................................................................................................. 140 Left Outer Join .................................................................................................... 142 Right Outer Join .................................................................................................. 144 Full Outer Join .................................................................................................... 146

Page 6: 3. Tera-Cram SQL Final

6 Tera-Tom Notes Copyright OSS 2001

Page 7: 3. Tera-Cram SQL Final

Tera-Tom Notes 7

Module 1

Module 1 – Teradata Basics

AMP

AMP

AMP

AMP

1 2 3 4 5 6 7 8 9 10 11 12

13 14 15 16

AMP

AMP

AMP

AMP

AMP

AMP

AMP

AMP

1 2 3 4 5 6 7 8 9 10 11 12

13 14 15 16

1 2 3 4 5 6 7 8 9 10 11 12

13 14 15 16

Page 8: 3. Tera-Cram SQL Final

8 Tera-Tom Notes Copyright OSS 2001

Introduction Welcome to the Tera-Cram series. The Tera-Cram series is designed to teach readers Teradata and help them pass their Teradata exams. This book is your guide to passing the Teradata Basics Certification exam. Look for the BOLD and enlarged print that jumps out at you on the right pages. Know this information especially well and your chances for success go way up.

Page 9: 3. Tera-Cram SQL Final

Tera-Tom Notes 9

Introduction

You can also take practice tests on the

website Tera-Tom.Com.

Page 10: 3. Tera-Cram SQL Final

10 Tera-Tom Notes Copyright OSS 2001

A Table has Rows and Columns In yesterdays programming languages we referred to files, records, and fields. This is replaced in SQL and relational databases as tables, rows, and columns. Data is stored in the Teradata DBS according to the relational model, which is based on tables with rows and columns. Each row of a table is composed of a number of fields identified by column name. Each field contains a data item with a single data type. A database consists of a collection of related tables. The rows of a table can be considered an unordered set. A row is the smallest unit that can be inserted into, or deleted from, a relational table. Rows can be inserted interactively or automatically. When building a new database, you can use one of the load utilities (for example, FastLoad) to populate several large tables automatically. You modify the contents of a table by inserting rows into, deleting rows from the table, or updating (changing) row data.

Page 11: 3. Tera-Cram SQL Final

Tera-Tom Notes 11

A Table has Rows and Columns Employee EMP DEPT LNAME FNAME SAL Primary Key

1 2 3 4

10 20 30 10

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.0050000.0065000.0044000.00

Data is stored on Teradata in tables. Each table is comprised of rows and columns. On row represents a single record. For example, the two people in dept 10 are Dave Jones and Sue Wilson. The table above has four rows and five columns.

Page 12: 3. Tera-Cram SQL Final

12 Tera-Tom Notes Copyright OSS 2001

Retrieving Data From A Table To retrieve data from a table you will primarily use four key words. They are: SELECT FROM WHERE ORDER BY At a minimum you must use the keywords SELECT and FROM. Lets talk about all of these. SELECT: After the word SELECT you will name all the columns you would like to retrieve. FROM: After the word FROM you will name the table or tables in which the information will be retrieved. WHERE: The WHERE is designed to limit the number of rows coming back. If you don’t use a WHERE clause then all rows from the table will be returned. ORDER BY: The ORDER BY statement sorts the data. If you don’t use the ORDER BY statement then the data comes back in random order.

Page 13: 3. Tera-Cram SQL Final

Tera-Tom Notes 13

Retrieving Data From A Table Employee EMP DEPT LNAME FNAME SAL Primary Key

1 2 3 4

10 20 30 10

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.0050000.0065000.0044000.00

To retrieve data from a table users use the four key words SELECT, FROM, WHERE, and ORDER BY. You must use the keywords SELECT and FROM. SELECT: After the word SELECT you will name all the columns you would like to retrieve. FROM: After the word FROM you will name the table or tables in which the information will be retrieved. WHERE: The WHERE is designed to limit the number of rows coming back. If you don’t use a WHERE clause then all rows from the table will be returned. ORDER BY: The ORDER BY statement sorts the data. If you don’t use the ORDER BY statement then the data comes back in random order.

Page 14: 3. Tera-Cram SQL Final

14 Tera-Tom Notes Copyright OSS 2001

Example of Selecting Data From A Table

In the example on the following page we have SELECTed three columns. Remember that after the word SELECT we will list the columns we want to retrieve. A comma separates each column requested. After the FROM clause is the table in which the data resides.

Page 15: 3. Tera-Cram SQL Final

Tera-Tom Notes 15

Examples of Selecting Data From A Table Employee EMP DEPT LNAME FNAME SAL Primary Key

1 2 3 4

10 20 30 10

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.0050000.0065000.0044000.00

SELECT emp ,dept ,lname FROM Employee; Four Rows Returned EMP DEPT LNAME 1 10 JONES 2 20 SMITH 3 30 CHANG 4 10 WILSON In the above query all rows were returned. This is because there was no WHERE clause. Notice that we asked for three columns. Each column after the SELECT is separated by a comma.

Page 16: 3. Tera-Cram SQL Final

16 Tera-Tom Notes Copyright OSS 2001

Example of Selecting All Columns in a table In the example on the following page we have SELECTed all columns in the table. The * represents all columns. Remember that after the word SELECT we will list the columns we want to retrieve and the * means every column. After the FROM clause is the table in which the data resides.

Page 17: 3. Tera-Cram SQL Final

Tera-Tom Notes 17

Example of Selecting All Columns in a Table Employee EMP DEPT LNAME FNAME SAL Primary Key

1 2 3 4

10 20 30 10

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.0050000.0065000.0044000.00

SELECT * FROM Employee; Four Rows Returned EMP DEPT LNAME FNAME SAL 1 10 JONES Dave 45000.00 2 20 SMITH Mary 50000.00 3 30 CHANG Vu 65000.00 4 10 WILSON Sue 44000.00 In the above query all columns were returned. The * means all columns in the table. Notice that all rows were also returned. This is because there was no WHERE clause.

Page 18: 3. Tera-Cram SQL Final

18 Tera-Tom Notes Copyright OSS 2001

Example of Selecting Only Certain Rows In the example on the following page we have SELECTed all columns in the table, but have limited the number of rows returned. This is done with the WHERE clause. The WHERE clause will decide what rows are returned. In our example we have asked for only the rows where the DEPT equals 10. We have two rows returned.

Page 19: 3. Tera-Cram SQL Final

Tera-Tom Notes 19

Example of Selecting only Certain Rows Employee EMP DEPT LNAME FNAME SAL Primary Key

1 2 3 4

10 20 30 10

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.0050000.0065000.0044000.00

SELECT * FROM Employee WHERE Dept = 10; Two Rows Returned EMP DEPT LNAME FNAME SAL 1 10 JONES Dave 45000.00 4 10 WILSON Sue 44000.00 The WHERE clause only retrieves rows that are requested in the WHERE Clause. Think of the WHERE clause as a filter.

Page 20: 3. Tera-Cram SQL Final

20 Tera-Tom Notes Copyright OSS 2001

Example of Sorting the Data In the example on the following page we have SELECTed all columns in the table and all rows. We have also sorted the data by using the ORDER BY clause.

Page 21: 3. Tera-Cram SQL Final

Tera-Tom Notes 21

Example of Sorting the Data Employee EMP DEPT LNAME FNAME SAL Primary Key

1 2 3 4

10 20 30 10

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.0050000.0065000.0044000.00

SELECT * FROM Employee ORDER BY LNAME; Four Rows Returned EMP DEPT LNAME FNAME SAL 3 30 CHANG Vu 65000.00 1 10 JONES Dave 45000.00 2 20 SMITH Mary 50000.00 4 10 WILSON Sue 44000.00 The above result set was sorted in ascending order by the column LNAME.

Page 22: 3. Tera-Cram SQL Final

22 Tera-Tom Notes Copyright OSS 2001

Checking for NULL Data NULL data is data that is an undetermined value. It is not zeros and it is not spaces, but undetermined. Because NULL data is undetermined you cannot check for it with an equality statement. For example, if you were to write: SELECT * FROM Employee WHERE DEPT = NULL; Zero Rows Returned You would never get rows to return because you can’t check to see if an undetermined value is equal to something. To check if a value is NULL you can only use two statements. They are: IS NULL IS NOT NULL

Page 23: 3. Tera-Cram SQL Final

Tera-Tom Notes 23

Checking for NULL Data Lets insert some NULL data into our table. INSERT INTO EMPLOYEE ( 99, NULL, NULL, ‘JIM’, 99000 ); SELECT * FROM EMPLOYEE; Employee Table EMP DEPT LNAME FNAME SAL Primary Key

1 2 3 4 99

10 20 30 10 NULL

JONES SMITH CHANG WILSON NULL

DAVE MARY VU SUE JIM

45000.0050000.0065000.0044000.0099000.00

Since a NULL value is undetermined data you can never check for a NULL value with an equality condition. You can only check for NULL by using: IS NULL IS NOT NULL

Page 24: 3. Tera-Cram SQL Final

24 Tera-Tom Notes Copyright OSS 2001

Examples of NULL Data In the examples on the following page you will notice that no data is ever returned when we check to see if something is equal to NULL. Data is returned however when we use either the IS NULL or IS NOT NULL commands.

Page 25: 3. Tera-Cram SQL Final

Tera-Tom Notes 25

Examples of NULL Data Employee Table EMP DEPT LNAME FNAME SAL Primary Key

1 2 3 4 99

10 20 30 10 NULL

JONES SMITH CHANG WILSON NULL

DAVE MARY VU SUE JIM

45000.00 50000.00 65000.00 44000.00 99000.00

SELECT * FROM EMPLOYEE WHERE DEPT = NULL; No Rows Returned SELECT EMP, FNAME FROM EMPLOYEE WHERE DEPT IS NULL; One Row Returned EMP FNAME 99 JIM SELECT EMP, FNAME FROM EMPLOYEE WHERE DEPT IS NOT NULL; Four Rows Returned EMP FNAME

1 Dave 2 Mary

3 Vu 4 Sue

Page 26: 3. Tera-Cram SQL Final

26 Tera-Tom Notes Copyright OSS 2001

How Sorting Works with NULL Data NULL data sorted in Ascending Order will always be before all positive and negative values and before blank values.

Page 27: 3. Tera-Cram SQL Final

Tera-Tom Notes 27

How Sorting Works with NULL Data Employee Table EMP DEPT LNAME FNAME SAL Primary Key

1 2 3 4 99

10 20 30 10 NULL

JONES SMITH CHANG WILSON NULL

DAVE MARY VU SUE JIM

45000.00 50000.00 65000.00 44000.00 99000.00

SELECT EMP ,DEPT FROM EMPLOYEE ORDER BY Dept; Five Rows Returned EMP DEPT

99 NULL 1 10

4 10 2 20 3 30

NULL data sorted in Ascending Order will always be before all positive and negative values and before blank values.

Page 28: 3. Tera-Cram SQL Final

28 Tera-Tom Notes Copyright OSS 2001

AND, OR, and NOT The Order of Precedence is NOT, AND, and then OR. One way to remember this is that NOT comes first. After that it is done by alphabetic order. AND comes before OR because A comes before O. You can change the order of precedence with parenthesis. Parenthesis are always read first. If there are multiple parenthesis then they are evaluated from left to right.

Page 29: 3. Tera-Cram SQL Final

Tera-Tom Notes 29

AND, OR, and NOT The Order of Precedence is NOT, AND, and then OR. Think of it as NOT first and then in Alphabetic order. AND is before OR because A comes before O. Employee Table EMP DEPT LNAME FNAME SAL Primary Key

1 2 3 4 99

10 20 30 10 NULL

JONES SMITH CHANG WILSON NULL

DAVE MARY VU SUE JIM

45000.00 50000.00 65000.00 44000.00 99000.00

SELECT EMP ,DEPT ,FNAME FROM EMPLOYEE WHERE Dept = 10 AND Dept = 20 OR Sal > 80000.00; One Row Returned EMP DEPT FNAME

99 NULL 99000.00

IN the above example the only thing that comes back is anyone making a SAL over 80000.00.

Page 30: 3. Tera-Cram SQL Final

30 Tera-Tom Notes Copyright OSS 2001

Valid Table Names Teradata allows you to name tables anyway you want as long as you follow the rules. Here are the rules: No two databases or users may have the same name in the entire system. No two tables in the same database or user may have the same name. No two columns in the same table may have the same name. A table can be a maximum of 30 characters. These include: Upper and lowercase alphabetic characters Integers These special characters: _ # $

Page 31: 3. Tera-Cram SQL Final

Tera-Tom Notes 31

Valid Table Names

Teradata allows you to name tables anyway you want as long as you follow the rules. Here are the rules:

• No two databases or users may have the same name in the entire system.

• No two tables in the same database or user may

have the same name.

• No two columns in the same table may have the same name.

A table can be a maximum of 30 characters. These include:

• Upper and lowercase alphabetic characters

• Integers

• These special characters: _ # $

Page 32: 3. Tera-Cram SQL Final

32 Tera-Tom Notes Copyright OSS 2001

Absolute Function The Absolute Function returns the absolute value for any value requested in the function. It even returns values for negative numbers and makes them positives.

Page 33: 3. Tera-Cram SQL Final

Tera-Tom Notes 33

Absolute Function The ABS function looks for the Absolute functions. It can even look at negative numbers and return the absolute value which is positive. Sel ABS(-1.2) One Row Returned 1.2 Sel ABS(-8.1) One Row Returned 8.1

Page 34: 3. Tera-Cram SQL Final

34 Tera-Tom Notes Copyright OSS 2001

The Extract Function The extract function allows you to extract date information from a date field.

Page 35: 3. Tera-Cram SQL Final

Tera-Tom Notes 35

The Extract Function If you want to find the people who were hired during the month of May you would use the extract function. Employee Table EMP HIRE_DATE LNAME FNAME SAL Primary Key

1 2 3 4 99

01-10-85 02-20-90 02-30-95 04-20-99 05-06-01

JONES SMITH CHANG WILSON NULL

DAVE MARY VU SUE JIM

45000.00 50000.00 65000.00 44000.00 99000.00

SELECT * FROM Employee WHERE EXTRACT(month from HIRE_DATE) = 5; One Row Returned EMP HIRE_DATE LNAME FNAME SAL 99 05-06-01 NULL JIM 99000.00

Page 36: 3. Tera-Cram SQL Final

36 Tera-Tom Notes Copyright OSS 2001

The Date Function The DATE function allows you to select the DATE.

Page 37: 3. Tera-Cram SQL Final

Tera-Tom Notes 37

The Date Function The DATE function allows you to select today’s date. Because the DATE is stored as an integer you can:

• Utilize math to select certain portions of the date • Subtract different dates to find the difference • Add or subtract days to get a different date

Employee Table EMP HIRE_DATE LNAME FNAME SAL Primary Key

1 2 3 4 99

01-10-85 02-20-90 02-30-95 04-20-99 05-06-01

JONES SMITH CHANG WILSON NULL

DAVE MARY VU SUE JIM

45000.00 50000.00 65000.00 44000.00 99000.00

SELECT (Date – Hire_Date) / 365 as YRS_OF_SERVICE FROM Employee; 5 Rows Returned YRS_OF_SERVICE 17 12 7 3 1 The above query gave us Years since Hire_date for all employees in the table.

Page 38: 3. Tera-Cram SQL Final

38 Tera-Tom Notes Copyright OSS 2001

The Between Statement The BETWEEN statement is used in the where clause to retrieve rows that are between a certain value. The BETWEEN statement is inclusive. If you asked if X was BETWEEN Y and Z the logic would be: X >= y AND X <= Z

Page 39: 3. Tera-Cram SQL Final

Tera-Tom Notes 39

The Between Statement The Between statement is inclusive. Employee Table EMP HIRE_DATE LNAME FNAME SAL Primary Key

1 2 3 4 99

01-10-85 02-20-90 02-30-95 04-20-99 05-06-01

JONES SMITH CHANG WILSON NULL

DAVE MARY VU SUE JIM

45000.00 50000.00 65000.00 44000.00 99000.00

SELECT * FROM Employee WHERE SAL BETWEEN 45000.00 AND 65000.00; Three Rows Returned EMP HIRE_DATE LNAME FNAME SAL 1 01-10-85 JONES DAVE 45000.00 2 02-20-90 SMITH MARY 50000.00 3 02-30-95 CHANG VU 65000.00 If you had asked if X was BETWEEN A and C the logic would be:

X >= A AND X <= C

Page 40: 3. Tera-Cram SQL Final

40 Tera-Tom Notes Copyright OSS 2001

ADD_MONTHS Command and the SQL request uses the Primary Index, then the PEP uses the hash algorithm and the hash map to locate the AMP that owns that record and only one AMP is utilized. We will talk about the Primary Index and the Hash Maps in the next couple of pages.

Page 41: 3. Tera-Cram SQL Final

Tera-Tom Notes 41

ADD_MONTHS Command The ADD_MONTHS command utilizes the date or a date column as the first parameter and adds the number of months as the second parameter. Employee Table EMP HIRE_DATE LNAME FNAME SAL Primary Key

1 2 3 4 99

01-10-85 02-20-90 02-30-95 04-20-99 05-06-01

JONES SMITH CHANG WILSON NULL

DAVE MARY VU SUE JIM

45000.00 50000.00 65000.00 44000.00 99000.00

SELECT Emp, Hire_date ,ADD_MONTHS(Hire_date, 2) as Months_Plus2 FROM Employee; Five Rows Returned EMP HIRE_DATE Months_Plus2 1 01-10-85 03-10-85 2 02-20-90 04-20-90 3 02-30-95 04-30-95 4 04-20-99 06-20-99 99 05-06-01 07-06-01 What is the Answer Below? Sel Add_months(Hire_Date, 12 * 5) Answer: The Hire_Date + 5 years

Page 42: 3. Tera-Cram SQL Final

42 Tera-Tom Notes Copyright OSS 2001

IN Command The IN command provides a list of values to the query as input. It is looked at like a OR situation.

Page 43: 3. Tera-Cram SQL Final

Tera-Tom Notes 43

IN Command

The IN OPERATOR is used in the WHERE CLAUSE. It is also used when a column is used in a SET OF VALUES. Employee EMP DEPT LNAME FNAME SAL Primary Key

1 2 3 4

10 20 30 10

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.0050000.0065000.0044000.00

SELECT * FROM Employee WHERE DEPT IN (20,30); Two Rows Returned EMP DEPT LNAME FNAME SAL 3 30 CHANG Vu 65000.00 2 20 SMITH Mary 50000.00

Page 44: 3. Tera-Cram SQL Final

44 Tera-Tom Notes Copyright OSS 2001

Subqueries A subquery involves two queries which are the top query and the bottom query. The bottom query runs first. It delivers a distinct list of values that are used as input to the top query. The Subquery fully qualifies which rows will be in the answer set, but data selected in the subquery will NOT be in the Answer Set. Here is another way of thinking about subqueries. It is easy to understand the IN Operator. Here is an example:

SELECT * FROM Employee WHERE DEPT IN (20,30); The above query will select all columns from the employee table where the DEPT is equal to 20 or 30. A subquery is similar except it builds the list (which was 20 or 30) on the fly. On the following page you will notice that the bottom query asks: SELECT DEPT from Department WHERE Dept_name = ‘Finance’; The DEPT that has a Dept_name = ‘Finance’ is DEPT 30. 30 is passed to the top query. The top query in a sense is now asking: SELECT * FROM EMPLOYEE WHERE DEPT IN (30);

Page 45: 3. Tera-Cram SQL Final

Tera-Tom Notes 45

Subqueries A Subquery involves two queries. The bottom query which is the subquery runs first. The Subquery fully qualifies which rows will be in the answer set, but data selected in the subquery will NOT be in the Answer Set. Employee Table EMP DEPT LNAME FNAME SAL Primary Key

Foreign Key *

1 2 3 4

10 20 30 10

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.00 50000.00 65000.00 44000.00

Department Table

DEPT DEPT_NAME PK 10 20 30 40

SALES MARKETING FINANCE HUMAN RESOURCES

SELECT * FROM EMPLOYEE WHERE DEPT IN (SELECT DEPT FROM Department WHERE DEPT_NAME = ‘FINANCE’); One Row Returned EMP DEPT LNAME FNAME SAL 3 30 CHANG Vu 65000.00

Page 46: 3. Tera-Cram SQL Final

46 Tera-Tom Notes Copyright OSS 2001

Aliasing To give an alias is to give a column or table a new name. Once you alias a column or a table you must use the alias throughout the SQL.

Page 47: 3. Tera-Cram SQL Final

Tera-Tom Notes 47

Aliasing You can alias a column or a table by giving them a new name. A golden rule is that once you alias you must use the alias throughout the SQL. Employee Table EMP DEPT LNAME FNAME SAL Primary Key

Foreign Key *

1 2 3 4

10 20 30 10

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.00 50000.00 65000.00 44000.00

SELECT LNAME AS LAST_NAME FROM EMPLOYEE AS EMP_Table WHERE DEPT IN (20,30) ORDER BY LAST_NAME DESC; Two Rows Returned LAST_NAME SMITH CHANG The above Query uses LAST_NAME as an alias for LNAME and EMP_Table as an alias for EMPLOYEE. Notice the ORDER BY statement. It uses LAST_NAME as the sort key. We have followed the golden rule.

Page 48: 3. Tera-Cram SQL Final

48 Tera-Tom Notes Copyright OSS 2001

Joining Two Tables Using Teradata Syntax A join allows you to select columns and rows from two or more tables and views. Up to 64 tables and views may be joined. An inner join selects data from two or more tables or views. Each source must be named and the join condition, the common relationship between the tables or views to be joined, specified in a WHERE clause. Remember, The key to joins is in the WHERE or ON clause. When you are joining information from two tables you will be SELECTing fields from both tables. To do this you are joining together information from two separate rows from two separate tables. That means you must match the two rows from the different tables. The match will usually occur where there is a PRIMARY KEY and a FOREIGN KEY relationship. This is because this was how the tables were logically defined. The FOREIGN KEY from one table is a PRIMARY KEY in another table The following page uses an SQL statement that utilizes information from both the employee table and department table. This is a classic two-table join. The query is looking for columns from both tables. We have listed both syntax options. The first is the Teradata Join Syntax and the second is the ANSI Join Syntax.

Important Note: Notice that we have qualified the DEPT column in our query with the table name first. Do you know why we called it E.DEPT? The reason is that the column DEPT is in both the EMPLOYEE_TABLE AS E and DEPARTMENT_TABLE AS D. If you don’t qualify the column name when the column name exists in both tables you will get an error message saying, “Column Ambiguous”. This means the system is not sure which table you want to get the column from. Even though the result might be the same from either table, the system still needs you to tell it which table you want the duplicate column name to come from.

Page 49: 3. Tera-Cram SQL Final

Tera-Tom Notes 49

Joining Two Tables Using Teradata Syntax

The first example join is done using Teradata syntax Four Rows Returned EMP DEPT NAME DeptName 1 10 Bo Doe Sales 2 10 Vu Too Sales 4 20 Jo Noe Mrkt 3 30 Lu Koo Finance

Dept DeptName10 Sales20 Mrkt

Dept DeptName30 Finance40 IT

Emp Dept Name Salary1 10 Bo Doe 500004 20 Jo Noe 60000

Emp Dept Name Salary2 10 Vu Too 600003 30 Lu Koo 70000

Department_Table& Employee_Table

Department_Table& Employee_Table

AMP 1 AMP 2

PI

PI PI

PI

SELECT Emp,E.Dept,Name,DeptName

FROM Employee_Table E,Department_Table D

WHERE E.Dept = D.Dept

Page 50: 3. Tera-Cram SQL Final

50 Tera-Tom Notes Copyright OSS 2001

Joining Two Tables Using ANSI Syntax A join allows you to select columns and rows from two or more tables and views. Up to 64 tables and views may be joined. An inner join selects data from two or more tables or views. Each source must be named and the join condition, the common relationship between the tables or views to be joined, specified in a WHERE clause. Remember, The key to joins is in the WHERE or ON clause. When you are joining information from two tables you will be SELECTing fields from both tables. To do this you are joining together information from two separate rows from two separate tables. That means you must match the two rows from the different tables. The match will usually occur where there is a PRIMARY KEY and a FOREIGN KEY relationship. This is because this was how the tables were logically defined. The FOREIGN KEY from one table is a PRIMARY KEY in another table The following page uses an SQL statement that utilizes information from both the employee table and department table. This is a classic two-table join. The query is looking for columns from both tables. We have listed both syntax options. The first is the Teradata Join Syntax and the second is the ANSI Join Syntax.

Page 51: 3. Tera-Cram SQL Final

Tera-Tom Notes 51

Joining Two Tables using ANSI syntax

Four Rows Returned EMP DEPT NAME DeptName 1 10 Bo Doe Sales 2 10 Vu Too Sales 4 20 Jo Noe Mrkt 3 30 Lu Koo Finance The ON Clause is required when the keyword JOIN, INNER JOIN, or OUTER JOIN is specified. There are two join condition options for an inner join: (1) The WHERE Clause for Teradata Syntax (2) The ON Clause for ANSI Syntax

SELECT Emp,E.Dept,Name,DeptName

FROM Employee_Table AS EINNER JOIN Department_Table AS DON E.Dept = D.Dept

Page 52: 3. Tera-Cram SQL Final

52 Tera-Tom Notes Copyright OSS 2001

SET Operators The SET Operators are UNION, INTERSECT, and EXCEPT. The word MINUS is also acceptable and it means the exact same thing as EXCEPT. SET Operators

Page 53: 3. Tera-Cram SQL Final

Tera-Tom Notes 53

Set Operators

The SET Operators are UNION, INTERSECT, and EXCEPT/MINUS. The SET Operators are two queries that are separated by the word UNION or INTERSECT or EXCEPT. Both Queries run simultaneously and the answer sets are combined eliminating duplicates.

SELECT * FROM TableA Title ‘ANSWER’ UNION SELECT * FROM TableB; Five Rows Returned ANSWER 1 2 3 4 5

123

345

TableA TableB

Page 54: 3. Tera-Cram SQL Final

54 Tera-Tom Notes Copyright OSS 2001

SET Operators Continued The SET Operators are UNION, INTERSECT, and EXCEPT. The word MINUS is also acceptable and it means the exact same thing as EXCEPT. SET Operators

Page 55: 3. Tera-Cram SQL Final

Tera-Tom Notes 55

Set Operators Continued

SELECT First_column FROM TableA Title ‘ANSWER’ UNION SELECT Column_One FROM TableB; Five Rows Returned ANSWER 1 2 3 4 5 What did the above query deliver? All rows from TableA and TableB with duplicates eliminated.

123

345

TableA TableB

Page 56: 3. Tera-Cram SQL Final

56 Tera-Tom Notes Copyright OSS 2001

Macros Users can create macros even if they don’t have PERM space because MACROS are stored in the DATA DICTIONARY. Macros don’t need privileges on underlying tables, views, or other macros. You can have multiple SQL statements in a macro and you can place comments inside a macro. All of the above information is important to know.

Page 57: 3. Tera-Cram SQL Final

Tera-Tom Notes 57

Macros Users can create macros even if they don’t have PERM space because MACROS are stored in the DATA DICTIONARY. Macros don’t need privileges on underlying tables, views, or other macros. Here is an example of creating a macro: CREATE MACRO MYMAC /* We will select everything from the employee table and then select everything from the department table */ AS (SELECT * FROM Employee; SELECT * FROM Department;); The above MACRO contains multiple SQL statements and a comment. You can create comments by placing them inside /* */. Security and a simplified operation are goods reason to use parameterized macros.

Page 58: 3. Tera-Cram SQL Final

58 Tera-Tom Notes Copyright OSS 2001

Derived Tables Derived tables are a fantastic way for users to create temporary tables inside their query. Derived tables are always local to a single SQL request. They are built dynamically using an additional SELECT within the query. The rows of the derived table are stored in spool and discarded as soon as the query finishes. The DD has no knowledge of derived tables. Therefore, no extra privileges are necessary. Its space comes from the users spool space. Example: SELECT employee_number, dept, salary, maxsal From EMPLOYEE_TABLE, (SELECT max(salary) from EMPLOYEE_TABLE) derived_tbl(maxsal); In the example above we pulled employee_number, dept, and salary from the employee_table. We created a derived table to get the Maxsal field. Notice how the second query selects Max(sal) from the employee_table and places it into a table called Derived_tbl. Inside Derived_tbl we name the column we just selected as maxsal.

Page 59: 3. Tera-Cram SQL Final

Tera-Tom Notes 59

Derived Tables Derived tables are always local to a single SQL request and cannot be referenced by multiple SQL statements in a multi-statement request. Derived tables cannot have secondary indexes and they are NOT created from Perm Space. Derived tables are always created in the users SPOOL Space. SELECT employee_number, dept, salary, maxsal From EMPLOYEE_TABLE, (SELECT max(salary) from EMPLOYEE_TABLE) derived_tbl(maxsal); Derived tables allow for aggregates to be used in the WHERE clause. A referenced value can be generated in a derived table.

Derived tables cannot be shared between users and do not affect the data dictionary.

Page 60: 3. Tera-Cram SQL Final

60 Tera-Tom Notes Copyright OSS 2001

Macros Users can create macros even if they don’t have PERM space because MACROS are stored in the DATA DICTIONARY. Macros don’t need privileges on underlying tables, views, or other macros. You can have multiple SQL statements in a macro and you can place comments inside a macro. All of the above information is important to know.

Page 61: 3. Tera-Cram SQL Final

Tera-Tom Notes 61

Macros Users can create macros even if they don’t have PERM space because MACROS are stored in the DATA DICTIONARY. Macros don’t need privileges on underlying tables, views, or other macros. Here is an example of creating a macro: CREATE MACRO MYMAC /* We will select everything from the employee table and then select everything from the department table */ AS (SELECT * FROM Employee; SELECT * FROM Department;); The above MACRO contains multiple SQL statements and a comment. You can create comments by placing them inside /* */.

Page 62: 3. Tera-Cram SQL Final

62 Tera-Tom Notes Copyright OSS 2001

What is a View? A view can be compared to a window through which you can see selected portions of a database. A view is used to retrieve portions of one or more tables and/or other views. Views look like tables; they display data in columns and rows and, in general, may be used as if they were tables. However, only their column definitions are stored. A view is not assembled until it is referenced by a statement. A view does not contain data. Some operations used on tables are not valid on views, and other operations are restricted, depending on how the view is defined. The CREATE VIEW statement defines a view. The statement names the view and its columns, defines a SELECT of one or more columns from one or more underlying tables and/or views, and can include conditional expressions and aggregate operators to limit the row retrieval. There is information in some tables such as SALARY that employers do not want individuals to see, but would like these individuals to have access to much of the other information in a table. This is the purpose of views. Views do not actually store the data, but are SQL statements that are stored in the DD/D. When the view is selected from the system actually run the query against only the data defined in the view against the table or tables. This provides a window into tables that have sensitive data. Management can define what columns employees can see and what columns they cannot.

Page 63: 3. Tera-Cram SQL Final

Tera-Tom Notes 63

What is a View? A virtual table where data is not duplicated or stored allowing restricted access to certain columns or rows. The definition is stored in the Data Dictionary (DD) so a creator needs no PERM space. Most users utilize views to access Teradata tables. Because there can be thousands of end users utilizing window based tools a great way to maximize concurrent access is to create views with Locking for Access. EMPXXView - A typical view

Create view Emp_View as locking employee_table for access SELECT emp, dept, lname, fname FROM Employee_table;

EMP DEPT LNAME FNAME SAL1 10 Jones Dave XXXXX2 20 Smith Mary XXXXX3 30 Chang Vu XXXXX4 10 Wilson Sue XXXXX

EMP DEPT LNAME FNAME SAL1 10 Jones Dave XXXXX2 20 Smith Mary XXXXX3 30 Chang Vu XXXXX4 10 Wilson Sue XXXXX

Page 64: 3. Tera-Cram SQL Final

64 Tera-Tom Notes Copyright OSS 2001

Cast Under most conditions, the data types defined and stored in a table should be appropriate. However, sometimes it is neither convenient nor desirable to use the defined type. That is where the CAST statement comes into play. You can use the CAST statement to temporarily convert data into a different data type. This allows you to compare apples to apples and oranges to oranges.

Page 65: 3. Tera-Cram SQL Final

Tera-Tom Notes 65

CAST The CAST statement stands for Convert And Store. You can utilize CAST to change column data types temporarily. This example uses literals to show actual conversions, but you can also use column names: SELECT CAST(‘ABC’ AS CHAR(1) ) AS Alph ,CAST(128 AS CHAR(3) ) AS 128 ,CAST(127 AS INTEGER ) AS Big ,CAST(151.53 AS SMALLINT) AS chop ,CAST(151.53 AS DECIMAL(3,0)) AS Round ; ONE ROW RETURNED ALPH 128 Big chop Round A 128 127 151 152

Notice that when you cast something as a Decimal(3,0) the system will round the result. The reason is the 0 in Decimal(3,0). Because the cast has requested no decimals the system rounds the answer. This is also the same if you were to cast to: Decimal(10,0) or any decimal with a 0 for the number of decimals.

Page 66: 3. Tera-Cram SQL Final

66 Tera-Tom Notes Copyright OSS 2001

Traditional Subqueries Traditional subqueries are generally read from the bottom to the top. The lowest or bottom query is answered and the results are put to the next level of query. An SQL statement may reference up to 16 tables or views, thus resulting in up to 16 subquery levels. Remember some simple keys about subqueries:

Subqueries can be nested. They are usually the object of

an IN or NOT IN clause. They will always generate a distinct list of values.

Page 67: 3. Tera-Cram SQL Final

Tera-Tom Notes 67

Traditional Subqueries A subquery is two queries in one. The bottom query runs first and delivers a list of values to the top query. The top query uses that list for input. Employee Table EMP DEPT LNAME FNAME SAL Primary Key

Foreign Key *

1 2 3 4

10 20 30 10

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.00 50000.00 65000.00 44000.00

Department Table

DEPT DEPT_NAME PK 10 20 30 40

SALES MARKETING FINANCE HUMAN RESOURCES

SELECT Emp, Dept, lname from Employee WHERE Dept in (SELECT d.Dept from department d where Dept_name Like ‘Sales’); Two rows returned EMP DEPT LNAME -------- --------- ---------- 1 10 Jones 4 10 Wilson The above query finds all employees in the sales dept.

Page 68: 3. Tera-Cram SQL Final

68 Tera-Tom Notes Copyright OSS 2001

Traditional Subqueries Continued Traditional subqueries are generally read from the bottom to the top. The lowest or bottom query is answered and the results are put to the next level of query. An SQL statement may reference up to 16 tables or views, thus resulting in up to 16 subquery levels. Remember some simple keys about subqueries:

Subqueries can be nested. They are usually the object of

an IN or NOT IN clause. They will always generate a distinct list of values.

Page 69: 3. Tera-Cram SQL Final

Tera-Tom Notes 69

Traditional Subqueries Continued Employee Table EMP DEPT LNAME FNAME SAL Primary Key

Foreign Key *

1 2 3 4

10 20 30 50

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.00 50000.00 65000.00 44000.00

Department Table

DEPT DEPT_NAME PK 10 20 30 40

SALES MARKETING FINANCE HUMAN RESOURCES

SELECT Emp, Dept, lname from Employee WHERE Dept in (SELECT Dept from department); Three rows returned EMP DEPT LNAME -------- --------- ---------- 1 10 Jones 2 20 Smith 3 30 Chang The above query lists all employees with valid department numbers. Notice that employee 4 did not come back. WHY? There is no Dept 50 in the department table.

Page 70: 3. Tera-Cram SQL Final

70 Tera-Tom Notes Copyright OSS 2001

Correlated Subqueries Correlated subqueries are processed differently from traditional subqueries. Each row of the outer query is selected and is compared to the criteria in the subquery. Usually, correlated subqueries involve aggregates, although they may involve expressions and other computed columns. Correlated subqueries allow the SQL user to write one query instead of having to write two. In the past the user would have to write a query and build a table to run the second result against.

Page 71: 3. Tera-Cram SQL Final

Tera-Tom Notes 71

Correlated Subqueries Employee Table EMP DEPT LNAME FNAME SAL Primary Key

Foreign Key *

1 2 3 4

10 20 30 10

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.00 50000.00 65000.00 44000.00

SELECT EMP, DEPT, LNAME FROM Employee e WHERE sal = (SEL MIN (Sal) FROM Employee ee WHERE e.dept = ee.dept); Three rows returned EMP DEPT LNAME ------- --------- ------------ 4 10 Wilson 2 20 Smith 3 30 Chang Notice that the above Correlated subquery returns the employees with the lowest salary in their respective departments. Notice that employee 1 did not come back because they don’t have the minimum salary in department 10.

Page 72: 3. Tera-Cram SQL Final

72 Tera-Tom Notes Copyright OSS 2001

How Correlated Subqueries Work Correlated subqueries are processed differently from traditional subqueries. Each row of the outer query is selected and is compared to the criteria in the subquery. Usually, correlated subqueries involve aggregates, although they may involve expressions and other computed columns. Correlated subqueries use a shared spool technique that can speed up processing. The following page shows a typical correlated subquery. The subquery executes by: 1. Read a row from the table. 2. Gets the max salary for the deptxx from the subquery 3. Compares the salary to the max salary 4. If equal, output the row. If not equal, go to step 1.

Page 73: 3. Tera-Cram SQL Final

Tera-Tom Notes 73

How Correlated Subqueries Work Employee Table EMP DEPT LNAME FNAME SAL Primary Key

Foreign Key *

1 2 3 4

10 20 30 10

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.00 50000.00 65000.00 44000.00

SELECT EMP, DEPT, LNAME FROM Employee e WHERE sal = (SEL MIN (Sal) FROM Employee ee WHERE e.sal = ee.sal);

1.Read a row from the table from the top query (outer query).

2. Gets the min salary for the dept from the subquery

or inner query. 3. Compare the salary to the min salary 4. If equal, output the row. If not equal, go to step 1.

Page 74: 3. Tera-Cram SQL Final

74 Tera-Tom Notes Copyright OSS 2001

Insert Select You can populate one table directly from another table with an INSERT SELECT statement.

Page 75: 3. Tera-Cram SQL Final

Tera-Tom Notes 75

Insert Select Employee Table EMP DEPT LNAME FNAME SAL Primary Key

Foreign Key *

1 2 3 4

10 20 30 10

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.00 50000.00 65000.00 44000.00

The Employee table exists and it has four rows. I will create another table called EMPXX. CREATE TABLE EMPXX ( emp integer ,dept integer ,lname Char(20) ,fname Char(20) ,Sal Decimal(10,2) ) Unique Primary Index(emp); EMPXX is empty until we do an insert select.

INSERT INTO EMPXX SELECT * FROM Employee; EMPXX Table EMP DEPT LNAME FNAME SAL Primary Key

Foreign Key *

1 2 3 4

10 20 30 10

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.00 50000.00 65000.00 44000.00

The above INSERT SELECT utilizes the SELECT * from Employee because both tables have the same number of columns with compatible data types.

Page 76: 3. Tera-Cram SQL Final

76 Tera-Tom Notes Copyright OSS 2001

Insert Select Continued You can populate one table directly from another table with an INSERT SELECT statement. If the two tables have the same number of columns and compatible data types you can say: INSERT INTO NEW_TABLE SELECT * FROM OLD_TABLE; The key here is the SELECT * FROM OLD_TABLE. This takes each column and row from the OLD_TABLE and INSERTS them into the new table. If however, the tables have a different number of columns or incompatible data types you can’t say SELECT * FROM OLD_TABLE. To INSERT into the new table you must list the columns you want to place into the new table. If our OLD_TABLE had 5 columns and our NEW_TABLE had 3 columns we would have to do the INSERT SELECT by SELECTING the exact columns that are to be moved. For example: INSERT INTO NEW_TABLE SELECT EMP, DEPT, LNAME FROM OLD_TABLE; The NEW_TABLE having only 3 columns is expecting to only receive 3 columns. By selecting the 3 columns we want to move Teradata knows how to populate the NEW_TABLE.

Page 77: 3. Tera-Cram SQL Final

Tera-Tom Notes 77

Insert Select Continued Employee Table EMP DEPT LNAME FNAME SAL

Primary Key

Foreign Key *

1 2 3 4

10 20 30 10

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.00 50000.00 65000.00 44000.00

The Employee table exists and it has four rows. I will create another table called EMPXX, but this time the two tables will have a different number of columns. CREATE TABLE EMPXX2 ( emp integer ,dept integer ,lname Char(20) ) Unique Primary Index(emp); EMPXX is empty until we do an insert select.

INSERT INTO EMPXX SELECT Emp, dept, lname FROM Employee; EMPXX Table EMP DEPT LNAME Primary Key

Foreign Key *

1 2 3 4

10 20 30 10

JONES SMITH CHANG WILSON

Because the two tables have a different number of columns we must do the INSERT SELECT by selecting specific columns. SELECT * Won’t Work.

Page 78: 3. Tera-Cram SQL Final

78 Tera-Tom Notes Copyright OSS 2001

SHOW Commands The SHOW command shows the actual create statements to let the user see useful information. This is what the user actually typed in to create the table, view, or macro. The following syntax applies: SHOW TABLE tablename; (Displays the CREATE statement used for the TABLE definition) SHOW VIEW viewname; (Displays a VIEW definition) SHOW MACRO macroname; (Displays a MACRO definition) SHOW CONTROL; (Displays BTEQ format information)

Page 79: 3. Tera-Cram SQL Final

Tera-Tom Notes 79

Show Commands

The Show Table command shows the CREATE Statement or Data Definition Language (DDL) for a specific table.

Show Table Department; Results: CREATE TABLE Department, NO FALLBACK ( DEPT INTEGER ,DEPT_NAME CHAR(20) ) PRIMARY INDEX (Dept) To use the SHOW command on a table the user must have a privilege on the table or database that contains it.

Page 80: 3. Tera-Cram SQL Final

80 Tera-Tom Notes Copyright OSS 2001

HELP Command The HELP command is used to provide help with databases, tables, views, macros, columns, indexes, statistics, and sessions. When you use help you will be able to see help information about the table, view, etc. that you want to see. The following page shows the help command on a table. You can then see information about the table columns, column types, and a comment. You only see comment information if the customer has built the comments themselves. The I, CV,CF, and D in the type column stand for Integer, Character Variable, Character Fixed, and Decimal. Here is the syntax for help: HELP DATABASE databasename; (This command shows all the tables, views, macros, and triggers in a particular database) HELP TABLE tablename; (This command shows all the columns in a particular table) HELP VIEW viewname; (This command shows the columns in a view that are accessible) HELP MACRO macroname; (Shows MACRO parameters) HELP COLUMN tablename.*; tablename.colname; viewname.*; viewname.colname; (Gives help on columns) HELP INDEX tablename; (Gives help on indexes of a particular table) HELP STATISTICS tablename; (Gives help on number or rows and duplicates, etc. You need to collect statistics on a table to see this information) Other helpful command that provides information including the Current Database and Transaction Semantics: HELP SESSION; SQL Help: HELP ‘SQL’ and HELP ‘SQL <sqlcommand>’;

Page 81: 3. Tera-Cram SQL Final

Tera-Tom Notes 81

HELP Command

The HELP command is a Teradata extension that can be used to get information about a table, database, view, macro, column, index or statistics. The HELP command reports information from the Teradata Data Dictionary. The HELP TABLE COMMAND will show a user three things about a table:

• Column names • Data types • Any comments

HELP TABLE Empxx;

Column Name Type Comment -------------------- ------- ---------------------- EMP I EMPLOYEE NUMBER DEPT I DEPARTMENT No LNAME CF Surname FNAME CV First Name SAL D Pay

Page 82: 3. Tera-Cram SQL Final

82 Tera-Tom Notes Copyright OSS 2001

CREATE a Secondary INDEX Primary indexes are created with a CREATE table statement. Secondary indexes can also be made during the CREATE table statement or can be made at a later time. Indexes can be unique or non-unique. If you create a unique index then that column will not allow duplicates. Secondary indexes can improve system performance; note however, that creating a secondary index causes the Teradata DBS to build a separate internal subtable. A secondary index is a subtable that is stored separately from the primary table. Each subtable row contains a secondary index value, plus one or more row identifiers (IDs) that point to the primary table row(s) containing that value. Secondary indexes are optional. You can define one or more secondary indexes in the CREATE TABLE statement, or add them to an existing table using the CREATE INDEX statement. An index may be given a name. This allows several table, index, and statistical statements to address indexes by their assigned names. The Teradata SQL statements that may reference named indexes are:

• CREATE INDEX • DROP INDEX • COLLECT STATISTICS • DROP STATISTICS

An index may be optionally named as seen in the NUSI on the opposite page (DeptIdx). This is a good idea when the index is a composite (multi-column) index. The name allows the index to be dropped using the name instead of repeating all the column names.

Page 83: 3. Tera-Cram SQL Final

Tera-Tom Notes 83

CREATE a Secondary INDEX Secondary indexes can be defined with the CREATE INDEX or CREATE TABLE statements. When creating an index ensure that there is space available for up to four times the expected index size. CREATE INDEX uses table permanent space as workspace.

To create a unique secondary index use this format: CREATE UNIQUE INDEX(lname, fname) on EMPLOYEE; To create a non-unique secondary index use the format:

CREATE INDEX(Dept) on EMPLOYEE;

To create a Value-Ordered NUSI the indexed column can only be a four-byte column. Here is the syntax:

CREATE INDEX(Hire_Date) on EMPLOYEE ORDER BY VALUES;

Page 84: 3. Tera-Cram SQL Final

84 Tera-Tom Notes Copyright OSS 2001

The NULLIF Command The NULLIF command is an ANSI compliant command that compares two values. IF the values are equal then the result will be NULL. If the values are not equal then the result will be the first value in the list. Here is an example using literals. SELECT NULLIF(0,0); The result is NULL. This is because the two values in the list are equal. Here is another example: SELECT NULLIF(3,0); The result is 3. This is because the two values in the list are not equal. Thus Teradata returns the first value in the list.

Here is another way of looking at the NULLIF logic:

When x = y then Null else X

Page 85: 3. Tera-Cram SQL Final

Tera-Tom Notes 85

The NULLIF Command

The NULLIF command is an ANSI compliant command that compares two values in a list. IF the values are equal then the result will be NULL. If the values are not equal then the result will be the first value in the list. Here is an example using literals. SELECT NULLIF(0,0); The result is NULL. This is because the two values in the list are equal. Here is another example: SELECT NULLIF(3,0); The result is 3. This is because the two values in the list are not equal. Thus Teradata returns the first value in the list. Here is another way of looking at the NULLIF logic: When x = y then Null else X

Page 86: 3. Tera-Cram SQL Final

86 Tera-Tom Notes Copyright OSS 2001

Aggregate Functions Aggregate operators can be used in arithmetic expressions. An aggregate operator is used to perform a computation for the values in a group. The group used is the entire table unless a GROUP BY clause is specified. Aggregates do not give you detail lines. You are getting a one-line report that shows the SUM of the entire table. If you use the GROUP BY statement you can get a one-line report per the GROUP. Aggregate operators are often used for reports. These are: SUM AVERAGE COUNT MINIMUM MAXIMUM It is legal to apply AVERAGE, MINIMUM, MAXIMUM, or COUNT to Date, but it is not legal to do SUM(Date). All aggregate operators can be applied to numeric data. MIN, MAX, and COUNT operate on character as well as numeric data; MIN may be used to return the lowest sort order of a character expression, MAX the highest. The COUNT operator has two forms, COUNT(value) and COUNT(*). Both forms of COUNT operate on any data type.

Page 87: 3. Tera-Cram SQL Final

Tera-Tom Notes 87

Aggregate Functions Aggregate functions are: COUNT, SUM, AVG, MAX, AND MIN.

AGGREGATES can ONLY produce SINGLE-LINE answers. AGGREGATE operations ignore NULLs.

SELECT COUNT(column) ,SUM(column) ,AVG(column) ,MAX(column) ,MIN(column) FROM table; Select AVG (Salary) from Employee; One row returned AVG(Salary) ------------------ $50,000

Page 88: 3. Tera-Cram SQL Final

88 Tera-Tom Notes Copyright OSS 2001

GROUP BY The GROUP BY clause of the SELECT statement groups result rows by the values in one or more columns. The GROUP BY clause creates summary information for a table. Each col_name in a GROUP BY clause is the name of a column referenced in the SELECT expression list. When an aggregate operation (SUM, AVERAGE, MAX, MIN, or COUNT) is specified, GROUP BY can be used to return a summary row for each group. Aggregate operators can be used only in the SELECT expression list or in the optional HAVING clause. All non-aggregate groups in a SELECT expression list must be included in the GROUP BY clause. If an ORDER BY clause is used, any group contained in the ORDER BY clause must also be included in the GROUP BY clause. The following page shows the GROUP BY options. The pages following will provide examples.

Page 89: 3. Tera-Cram SQL Final

Tera-Tom Notes 89

GROUP BY The GROUP BY clause will produce aggregates by GROUP. Any non-aggregated attribute in a SELECT List

must be part of the GROUP BY Clause. The following statement is used to generate a report of salary totals by department: SELECT Dept, SUM(Sal) FROM EmpXX

GROUP BY Dept; Dept Sum(Sal) ------ ---------------------- 001 180,500.00 002 143,000.00

003 268,000.00 In the above example we get a sum of all salaries by Department. Notice that DEPT is a non-aggregate. Also notice that the query works because DEPT was placed in the GROUP BY statement. The Group By statement does NOT support the display of detail data and summary data ever!

Page 90: 3. Tera-Cram SQL Final

90 Tera-Tom Notes Copyright OSS 2001

GROUP BY and HAVING Conditions The GROUP BY and HAVING conditions are often used to group and select via a criteria. The following page will look at each department and select totals from the departments that have an average salary of over 40000000.

Page 91: 3. Tera-Cram SQL Final

Tera-Tom Notes 91

GROUP BY and HAVING Conditions

The HAVING clause can eliminate some or all of the groupings in an SQL statement.

WHERE will exclude rows before the GROUP BY and HAVING will exclude groups after the totals have been grouped. Employee Table EMP DEPT LNAME FNAME SAL Primary Key

Foreign Key *

1 2 3 4

10 20 30 10

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.00 50000.00 65000.00 44000.00

SELECT DEPT, SUM(SAL), MAX(SAL), AVG(SAL) FROM EMPXX GROUP BY DEPT HAVING AVG(SAL) < 45000; One row returned DEPT SUM(SAL) MAX(SAL) AVG(SAL) --------- ------------- -------------- -------------- 10 89000.00 45000.00 44500.00

Page 92: 3. Tera-Cram SQL Final

92 Tera-Tom Notes Copyright OSS 2001

Some Aggregate examples The following page shows examples of aggregates.

Page 93: 3. Tera-Cram SQL Final

Tera-Tom Notes 93

Some Aggregate Examples EmpXX Table EMP Salary 1 2 3 4

100000 100000 100000 NULL

SELECT AVG(Salary) from Empxx; One row returned AVG(Salary) ------------------ 100000 The reason the answer is 100000 is because aggregates ignore nulls.

SELECT COUNT(Salary) from EMPxx; One row returned Count(Salary) -------------------- 3 The count above was on Salary and since aggregates ignore NULLs the answer is 3.

Page 94: 3. Tera-Cram SQL Final

94 Tera-Tom Notes Copyright OSS 2001

Some Aggregate examples Continued The following page shows examples of aggregates.

Page 95: 3. Tera-Cram SQL Final

Tera-Tom Notes 95

Some Aggregate Examples Continued EmpXX Table EMP Salary 1 2 3 4

100000 100000 100000 NULL

SELECT COUNT(*) from Empxx; One row returned COUNT(*) ------------------ 4 The reason the answer is 4 is because the COUNT(*) counts the entire row. Since the entire row is not NULL the count is 4.

Page 96: 3. Tera-Cram SQL Final

96 Tera-Tom Notes Copyright OSS 2001

Some Aggregate examples Continued The following page shows examples of aggregates.

Page 97: 3. Tera-Cram SQL Final

Tera-Tom Notes 97

Some Aggregate Examples Continued EmpXX Table EMP Salary 1 2 3 4

100000 100000 100000 NULL

SELECT COUNT(*) from Empxx; One row returned COUNT(*) ------------------ 4 The reason the answer is 4 is because the COUNT(*) counts the entire row. Since the entire row is not NULL the count is 4.

Page 98: 3. Tera-Cram SQL Final

98 Tera-Tom Notes Copyright OSS 2001

Advanced Aggregate example The following page shows examples of aggregates.

Page 99: 3. Tera-Cram SQL Final

Tera-Tom Notes 99

Advanced Aggregate Example Employee Table EMP DEPT LNAME FNAME SAL Primary Key

Foreign Key *

1 2 3 4

10 10 30 10

Wilson Wilson CHANG WILSON

DAVE MARY VU SUE

45000.00 50000.00 65000.00 44000.00

SELECT Dept, Lname, COUNT(*) FROM EMPLOYEE GROUP by Dept, Lname Having COUNT(*) > 2; One row returned Dept Lname Count(*) -------- ---------- ------------ 10 Wilson 3 Notice that only one row is returned. This is because of the having clause. For a row to be returned more than 2 people had to have the same last name and be in the exact same department.

Page 100: 3. Tera-Cram SQL Final

100 Tera-Tom Notes Copyright OSS 2001

Using WITH… BY for Subtotals The following page lists the fundamentals for the WITH…BY command. Note: These commands may not work with Queryman and other ODBC related tools. These are report writing features, BTEQ is a report writer.

Page 101: 3. Tera-Cram SQL Final

Tera-Tom Notes 101

Using WITH…By for Subtotals WITH…By:

• Creates subtotal lines, within groupings, for a detail list.

• Automatically gives order results. • Differs from GROUP BY in that detail lines are not

eliminated. • Allows subtotals “breaks” on more than one column. • Is a Teradata extension

• WITH BY does not work with Queryman!

Page 102: 3. Tera-Cram SQL Final

102 Tera-Tom Notes Copyright OSS 2001

Creating a Report Using WITH …BY The following page shows an example of the WITH..BY command. The WITH….BY performs a sort to put all the same values of the BY column together for display and aggregation. The multiple WITH…BY subtotals may be requested in the same SELECT. When this is done, the last WITH…BY is the major sort. The ORDER BY can be used with a WITH…BY. When it is used, it is the most minor sort sequence.

Page 103: 3. Tera-Cram SQL Final

Tera-Tom Notes 103

Creating a Report Using WITH…BY Empxx Table EMP DEPT LNAME FNAME SAL Primary Key

Foreign Key *

1 2 3 4

10 10 20 20

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.00 50000.00 65000.00 44000.00

SELECT emp, dept, lname, sal FROM Empxx WITH SUM(sal) by dept; Emp Dept Lname Sal -------- --------- ----------- ------------- 1 10 Jones 45000.00 2 10 Smith 50000.00 ---------------------- Sum(sal) 95000.00 3 20 Chang 65000.00 4 20 Wilson 44000.00 ---------------------- Sum(sal) 109000.00 Notice that the With By allows for detailed information as well as subtotals on breaks by Dept.

Page 104: 3. Tera-Cram SQL Final

104 Tera-Tom Notes Copyright OSS 2001

WITH …BY Multiple Aggregates You can use the WITH…BY command with multiple aggregates as seen on the following page.

Page 105: 3. Tera-Cram SQL Final

Tera-Tom Notes 105

WITH…BY Multiple Aggregates Empxx Table EMP DEPT LNAME FNAME SAL Primary Key

Foreign Key *

1 2 3 4

10 10 20 20

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.00 50000.00 65000.00 44000.00

SELECT emp, dept, lname, sal FROM Empxx WITH SUM(sal), AVG(sal) by dept; Emp Dept Lname Sal -------- --------- ----------- ------------- 1 10 Jones 45000.00 2 10 Smith 50000.00 ---------------------- Sum(sal) 95000.00 Avg(sal) 47500.00 3 20 Chang 65000.00 4 20 Wilson 44000.00 ---------------------- Sum(sal) 109000.00 Avg(sal) 54500.00

Page 106: 3. Tera-Cram SQL Final

106 Tera-Tom Notes Copyright OSS 2001

WITH for a final total You can use the WITH command by itself to provide a final total as seen on the following page.

Page 107: 3. Tera-Cram SQL Final

Tera-Tom Notes 107

WITH for a Final Total Empxx Table EMP DEPT LNAME FNAME SAL Primary Key

Foreign Key *

1 2 3 4

10 10 20 20

JONES SMITH CHANG WILSON

DAVE MARY VU SUE

45000.00 50000.00 65000.00 44000.00

SELECT emp, dept, lname, sal FROM Empxx WITH SUM(sal) ; Emp Dept Lname Sal -------- --------- ----------- ------------- 1 10 Jones 45000.00 2 10 Smith 50000.00 3 20 Chang 65000.00 4 20 Wilson 44000.00 ---------------------- Sum(sal) 204,000.00 The WITH BY statement gives detail lines and

subtotals. The WITH statement gives a grand total at the end of the report.

Page 108: 3. Tera-Cram SQL Final

108 Tera-Tom Notes Copyright OSS 2001

Multiple WITH BY Statements Multiple With By statements can be utilized during a query.

Page 109: 3. Tera-Cram SQL Final

Tera-Tom Notes 109

Multiple With By Statements Empxx Table Store_No Sales City State Country 1 2 3 4

50000 100000 40000 200000

Dayton Dayton Cincinnati Cincinnati

OHIO OHIO OHIO OHIO

USA USA USA USA

SELECT Store_No, Sales, City, State FROM Empxx WITH SUM(sales) BY City With SUM(sales) BY State; Store_no Sales City State -------------- --------- ----------- ------------- 1 50000 Dayton Ohio 2 100000 Dayton Ohio Sum(Sales) by City 150000 3 40000 Cincinnati Ohio 4 200000 Cincinnati Ohio Sum(Sales) by City 240000 ---------------------- Sum(sales) By State 390,000.00 This query shows detail lines with subtotals by city within state and subtotals by State.

Page 110: 3. Tera-Cram SQL Final

110 Tera-Tom Notes Copyright OSS 2001

What type of join is this? Run the query on the following page. Answer the questions also on the following page.

Page 111: 3. Tera-Cram SQL Final

Tera-Tom Notes 111

What type of join is this? Employee Table Emp Dept Lname Sal Mgr 1 2 3 4

10 10 10 20

Smith Jones Wilson Lane

50000 40000 100000 50000

Y N N Y

SELECT WRKS.Emp ,WRKS.Dept ,WRKS,Lname ,WRKS.Sal ,MGRS.Lname ,MGRS.Sal From Employee WRKS ,Employee MGRS WHERE MGRS.dept = WRKS.dept AND MGRS.Mgr = ‘Y’ AND WRKS.Sal > MGRS.Sal ; Emp Dept Lname Sal Lname Sal -------- -------- ----------- -------- --------- ------- 3 10 Wilson 100000 Smith 50000 The above Query is a SELF JOIN. Notice that the two tables being joined are both the same table. The Employee table is given the aliases WRKS and MGRS.

Page 112: 3. Tera-Cram SQL Final

112 Tera-Tom Notes Copyright OSS 2001

Characters Functions The Characters function works with Varchar data types and returns the length of the column. The following page shows and excellent example.

Page 113: 3. Tera-Cram SQL Final

Tera-Tom Notes 113

Characters Function Employee Table Emp Dept Lname Sal Mgr 1 2 3 4

10 10 10 20

Smith Jones Wilson Lane

50000 40000 100000 50000

Y N N Y

SELECT Lname /* A VARCHAR 20 Column */ ,CHARACTERS(Lname) AS Name_Length FROM Employee; Lname Name_Length ------------- -------------------- Smith 5 Jones 5 Wilson 6 Lane 4

Page 114: 3. Tera-Cram SQL Final

114 Tera-Tom Notes Copyright OSS 2001

Trim The TRIM function is used to eliminate either leading, trailing spaces or both leading and trailing spaces from character data. The following are the four different syntax options for the TRIM function: TRIM( TRAILING FROM <column-name> ) /* Trims only spaces stored after all text characters */ TRIM( LEADING FROM <column-name> ) /* Trims only spaces stored before all text characters */ TRIM( BOTH FROM <column-name> ) /* spaces before and after */ /* Trims all spaces stored before and after all text characters */ TRIM( <column-name> ) /* defaults to BOTH */

Page 115: 3. Tera-Cram SQL Final

Tera-Tom Notes 115

Trim The TRIM function is used to eliminate either leading, trailing spaces or both leading and trailing spaces from character data. The following are the four different syntax options for the TRIM function: TRIM( TRAILING FROM <column-name> ) /* Trims only spaces stored after all text characters */ TRIM( LEADING FROM <column-name> ) /* Trims only spaces stored before all text characters */ TRIM( BOTH FROM <column-name> ) /* spaces before and after */ /* Trims all spaces stored before and after all text characters */ TRIM( <column-name> ) /* defaults to BOTH */

In ANSI mode leading and trailing PAD characters are removed. Example: Select Trim(‘ ABCDE ’) Results: ABCDE The leading and trailing spaces have been trimmed.

Page 116: 3. Tera-Cram SQL Final

116 Tera-Tom Notes Copyright OSS 2001

Trim and Characters Combined The following page shows an example of the TRIM and CHARACTERS functions combined. Because the Characters is run first there is no TRIM that needs to be performed.

Page 117: 3. Tera-Cram SQL Final

Tera-Tom Notes 117

Trim and Characters Combined SELECT TRIM(Both from(Characters(BBBdataBBB’))); (Note: The BBB stands for Blanks or Spaces) The result of the above query is 10. Why? The Characters function will be run first. It returns the number of characters. There are 10 characters. By the time the answer set is interpreted by the TRIM function the spaces are gone. The only answer is 10.

Page 118: 3. Tera-Cram SQL Final

118 Tera-Tom Notes Copyright OSS 2001

Unique Constraint The UNIQUE constraint is used to enforce uniqueness of values stored within the column(s). This means that no two rows in the table can have the same value for the column or columns utilizing the UNIQUE constraint.

Page 119: 3. Tera-Cram SQL Final

Tera-Tom Notes 119

UNIQUE Constraint The UNIQUE constraint is used to enforce uniqueness of values stored within the column(s). No two rows in the table can have the same value for the column or columns utilizing the UNIQUE constraint. CREATE TABLE Employee (Emp Integer NOT NULL Constraint EmpUniq UNIQUE ,Dept Integer ,Name Character(40) ,Sal Integer ) Primary Index (Dept) The UNIQUE Constraint cannot be performed on a column that may have values that are NULL. Constraints can be defined at either the table or column level.

Page 120: 3. Tera-Cram SQL Final

120 Tera-Tom Notes Copyright OSS 2001

Compress Compressing a column value can save valuable disk space. The compress allows you to specify a value in a column and not store that value. The value is stored in the table header. For example, you might have a State in your database like CALIFORNIA. Because your business is located in California most of the values in your database have a state code of CALIFORNIA. You can compress the value CALIFORNIA and instead of storing it on the disk for almost every row you can compress the value. There are some trade offs with compress. While compression greatly reduces the amount of storage space required, it increases the processing overhead whenever a compressed column is accessed because the location of the data must be computed on the fly. Most of the time you can compress up to about 5 columns in a table before you start to see performance impacts. A Volatile Table does not support compression.

Page 121: 3. Tera-Cram SQL Final

Tera-Tom Notes 121

Compress Compressing a column value can save valuable disk space. The compress allows you to specify a value in a column and not store that value. The value is stored in the table header. For example, you might have a State in your database like CALIFORNIA. Because your business is located in California most of the values in your database have a state code of CALIFORNIA. You can compress the value CALIFORNIA and instead of storing it on the disk for almost every row you can compress the value. There are some trade offs with compress. While compression greatly reduces the amount of storage space required, it increases the processing overhead whenever a compressed column is accessed because the location of the data must be computed on the fly. Most of the time you can compress up to about 5 columns in a table before you start to see performance impacts. A Volatile Table does not support compression.

Page 122: 3. Tera-Cram SQL Final

122 Tera-Tom Notes Copyright OSS 2001

Substring The SUBSTRING function is used to extract a portional character string from character data. The following page shows some examples.

Page 123: 3. Tera-Cram SQL Final

Tera-Tom Notes 123

Substring Substring extracts a substring from a named string based on position. The Substring function will be performed on a string expression. The expression can be a column value or a literal. You will describe the starting position of the substring and the length of the substing to be extracted from the string expression. This example uses literals: SELECT SUBSTRING(‘Hello’ FROM 2 FOR 3) AS S1 , SUBSTRING(‘Hello’ FROM 2) AS S2 ; One row returned S1 S2 ell ello

Page 124: 3. Tera-Cram SQL Final

124 Tera-Tom Notes Copyright OSS 2001

INDEX and POSITION functions The POSITION and INDEX functions allow you check the contents of character data to determine if a different partial string is a subset of the other. The INDEX function returns a number that represents the location of one or more characters in a string when compared to the second string. The following would return 3 due to the ‘c’ being the third character in the string: INDEX(‘abcdef’,’c’) - Result = 3

The newer ANSI standard code for this function is POSITION. Its functionality is exactly the same as INDEX, however it is written differently. The following would return 3 due to the ‘c’ being the third character in the string: POSITION(’c’ IN ‘abcdef’) - Result = 3 An advanced usage is shown as an example on the following page. The INDEX looks for an ‘n’ and when found, it returns a 1. Otherwise, it returns a 0. The SUBSTRING uses it to return the opposite character – hence converts Y to N and N to Y in a single pass of the rows in the table. The page also shows the exact same operation using the CASE as an alternative.

Page 125: 3. Tera-Cram SQL Final

Tera-Tom Notes 125

POSITION and INDEX

The POSITION and the INDEX functions are used to determine whether or not a character string is contained in another character string:

SELECT Lname ,POSITION( ‘e’ IN lname ) FROM EMPxx ;

Using the following three names, the results of the POSITION function are: Lname POSITION( ‘e’ IN lname ) Jones 4 Davis 0 Marley 5

Page 126: 3. Tera-Cram SQL Final

126 Tera-Tom Notes Copyright OSS 2001

UPDATE The UPDATE command updates a table. This can be done through a view or a self-join also. For an UPDATE to a table the user must have UPDATE privileges. As a matter of fact the user must also have READ privileges on the table being updated. The following page shows the syntax.

Page 127: 3. Tera-Cram SQL Final

Tera-Tom Notes 127

Update The UPDATE command updates a table. This can be done through a view or a self-join also. For an UPDATE to a table the user must have UPDATE privileges. As a matter of fact the user must also have READ privileges on the table being updated. This example gives employee 99 a new salary of $50,000. UPDATE Empxx SET Sal = 50000 WHERE Emp = 99;

Page 128: 3. Tera-Cram SQL Final

128 Tera-Tom Notes Copyright OSS 2001

Creating a Table The CREATE TABLE statement is used to create a new table. The Primary Index is specified at TABLE CREATE time. Each column in the table can have a definition set. This means that each column defines the data type definition. This follows the column name.

Page 129: 3. Tera-Cram SQL Final

Tera-Tom Notes 129

Creating a Table The CREATE TABLE statement is used to create a new table. The Primary Index is specified at TABLE CREATE time. Each column in the table can have a definition set. This means that each column defines the data type definition. This follows the column name Create Table EmpXX ( emp Integer ,dept Integer ,lname Char(20) ,fname Char(20) ,Sal Decimal (10,2) ) Unique Primary Index (emp);

Page 130: 3. Tera-Cram SQL Final

130 Tera-Tom Notes Copyright OSS 2001

CASE Statement (Option 1) The CASE statement has two different syntax options. They are shown on the following pages.

Page 131: 3. Tera-Cram SQL Final

Tera-Tom Notes 131

CASE Statement (Option 1) The CASE function provides an additional level of data testing after a row is accepted by the WHERE clause. The basic syntax of the CASE follows: CASE <column-name> WHEN <value1> THEN <true-result1> WHEN <value2> THEN <true-result2> WHEN <valueN> THEN <true-resultN> [ ELSE <false-result> ] END Example SELECT Course_Name ,CASE Credits WHEN 1 THEN ‘1 Credit’ WHEN 2 THEN ‘2 Credits’ WHEN 3 THEN ‘3 Credits’ ELSE ‘More than 3 Credits’ END “Number of Credits” FROM Course_table ORDER BY credits, 1; Course_name Number of Credits Logical Database Design 2 Credits V2R3 SQL Features 2 Credits Advanced SQL 3 Credits

Page 132: 3. Tera-Cram SQL Final

132 Tera-Tom Notes Copyright OSS 2001

CASE Statement (Option 2) The CASE statement has two different syntax options. They are shown on the following pages.

Page 133: 3. Tera-Cram SQL Final

Tera-Tom Notes 133

CASE Statement (Option 2) In Option one after the word CASE was an immediate column name. In this option you can only check for equality. In Option two after the word CASE is the word WHEN. With Option two you can check for <>, between, IN, etc. Option two is more flexible. SELECT CASE WHEN Grade_pt IN (1,2,3) THEN ‘Integer GPA’ WHEN Grade_pt BETWEEN 1 AND 2 THEN ‘Low Decimal value’ WHEN Grade_pt < 3.9 THEN ‘High Decimal value’ ELSE ‘4.0 GPA’ END AS Grade_Point_Average FROM Student_table; Grade_Point_Average High Decimal value 4.0 GPA High Decimal value 4.0 GPA

Page 134: 3. Tera-Cram SQL Final

134 Tera-Tom Notes Copyright OSS 2001

COALESCE Option The COALESCE option will allow you to have options to manipulate nulls. A situation where COALESCE can help, relates to the use of aggregates, in particular the AVG function. Since aggregates ignore NULLs in the data, the average using NULL will be a higher result then when a zero is used. If the NULL was intended to represent a zero, the result will be incorrect. The COALESCE can convert the NULL values to zero and use them in the aggregate. Another use for situation is when there is a potential for a column to contain a NULL. Then, when it is a NULL another column is to be used to return its value. The COALESE will continue to look at columns or values until it finds a non-NULL and it will be returned. However, if all of the values checked contain NULL, it has no choice but to return a NULL. The following page gives some examples of using the logic.

Page 135: 3. Tera-Cram SQL Final

Tera-Tom Notes 135

COALESCE Option Coalesce will pick the first non-null value in a list. If every value in the list is NULL then Coalesce will return NULL. Think of Coalesce another way: CASE When Y is not null then Y WHEN Z is not null then Z ELSE NULL SELECT Name, Coalesce(WorkPhone, HomePhone, ‘No Phone’) as Phone From Employee; Three Rows Returned Name Phone --------------- --------------------- Jim Blue (513) 300-0341 Jane Green No Phone Bill Davis (643) 888-3939

Page 136: 3. Tera-Cram SQL Final

136 Tera-Tom Notes Copyright OSS 2001

Distinct Option The Distinct option eliminates duplicate values in an answer set. The number of expressions used as the argument for an aggregate has unlimited arguments.

Page 137: 3. Tera-Cram SQL Final

Tera-Tom Notes 137

Distinct Operator

The Distinct option eliminates duplicate values in an answer set. The number of expressions used as the argument for an aggregate has unlimited expressions. Example: SELECT DISTINCT Class_code FROM student_table ORDER BY class_code; Class_code FR JR SO SR

Page 138: 3. Tera-Cram SQL Final

138 Tera-Tom Notes Copyright OSS 2001

NULLIFZERO and ZEROIFNULL The NULLIFZERO command converts zeros to NULLS. The ZEROIFNULL converts NULLS to zeros.

Page 139: 3. Tera-Cram SQL Final

Tera-Tom Notes 139

NULLIFZERO and ZEROIFNULL

The NULLIFZERO command converts zeros to NULLS. The ZEROIFNULL command converts NULLS to zeros. Employee Table Emp Dept Lname Sal 1 2 3 4

10 10 10 20

Smith Jones Wilson Lane

0 40000 NULL 50000

SELECT Salary ,NULLIFZERO(Salary) As NOZERO ,ZEROIFNULL(Salary) AS NONULL FROM Employee; SALARY NOZERO NONULL -------------- -------------- -------------- 0 NULL 0 40000 40000 40000 NULL NULL 0 50000 50000 50000

Page 140: 3. Tera-Cram SQL Final

140 Tera-Tom Notes Copyright OSS 2001

SQL Flag The SQLFLAG command enables or disables the SQL Flagger. The SQL Flagger generates a warning message when nonstandard SQL is used. The SQL Flag will display NON-ANSI SQL. The SQL FLAG can be set to: FULL INTERMEDIATE NONE ENTRY Remember the letters FINE. They stand for FULL, INTERMEDIATE, NONE, AND ENTRY.

Page 141: 3. Tera-Cram SQL Final

Tera-Tom Notes 141

SQL Flag

The SQLFLAG command enables or disables the SQL Flagger. The SQL Flagger generates a warning message when nonstandard SQL is used. The SQL Flag will display NON-ANSI SQL. The SQL FLAG can be set to: FULL INTERMEDIATE NONE ENTRY Remember the letters FINE. They stand for FULL, INTERMEDIATE, NONE, AND ENTRY.

Page 142: 3. Tera-Cram SQL Final

142 Tera-Tom Notes Copyright OSS 2001

Left Outer Join An outer join is an extension of an inner join. An outer join is two or more tables that perform an inner join, and in addition, return rows from the “left” join table, or the right join table, or both tables which were not returned in the result of the inner join, extending these rows with null values. LEFT OUTER - Left means the first table listed in the FROM clause. The rows from the left table that are not returned in the result of the inner join of the tables be included in the result, but contain NULLs in the rows with no match. The type of outer join (in this case, left), specified by the keyword LEFT indicates the source of the rows not returned in the result of the inner join. These are called non-matching rows. The other outer join types are right and full, specified by the key words RIGHT and FULL. Thus, in addition to performing an inner join of two or more tables according to a join condition, a left outer join, as in the example above, returns non-matching rows from its "left" table (table A) and extends them with null values. A right outer join returns non-matching rows from its "right" table and extends them with nulls. A full outer join returns non-matching rows from both its tables and extends them with nulls. The reserved word OUTER is optional. Having a join condition specified in an ON clause within a FROM clause is always required if the keyword JOIN is specified for either an inner join or an outer join. Nulls: The key feature of the outer join is that in returning rows from the "left" join table, the "right" join table, or both tables, the outer join extends the rows that have no matching values with nulls, as if these values came from the corresponding table.

Page 143: 3. Tera-Cram SQL Final

Tera-Tom Notes 143

Left Outer Join

SELECT Skills.skill, EmpXX.emp FROM Skills LEFT OUTER JOIN empxx ON skills.skillno = Empxx.Skillno;

MasonMasonMasonDoctorLawyerTeacher 8121Nurse NULLBaker 4320

888893330043NULL88548121

Outer Join Results

01 Mason

02 Doctor

03 Lawyer

04 Teacher

05 Nurse

06 Baker

8888 01

9333 01

8854 03

8121 04

0043 01

4320 06

Skil ls Table EmpXX Table

Skil l

No

Emp Skil l Skil l

No

Page 144: 3. Tera-Cram SQL Final

144 Tera-Tom Notes Copyright OSS 2001

Right Outer Join An outer join is an extension of an inner join. An outer join is two or more tables that perform an inner join, and in addition, return rows from the “left” join table, or the right join table, or both tables which were not returned in the result of the inner join, extending these rows with null values. RIGHT OUTER - Right means the second table listed in the FROM clause. The rows from the right table that are not returned in the result of the inner join of the tables be included in the result, but contain NULLs in rows with no match. The type of outer join (in this case, right), specified by the keyword RIGHT indicates the source of the rows not returned in the result of the inner join. These are called non-matching rows. The other outer join types are left and full, specified by the key words LEFT and FULL. Thus, in addition to performing an inner join of two or more tables according to a join condition, a right outer join, as in the example, returns non-matching rows from its "right" table (table B) and extends them with null values. A left outer join returns non-matching rows from its "left" table and extends them with nulls. A full outer join returns non-matching rows from both its tables and extends them with nulls. The reserved word OUTER is optional. Having a join condition specified in an ON clause within a FROM clause is always required if the keyword JOIN is specified for either an inner join or an outer join. Nulls: The key feature of the outer join is that in returning rows from the "right" join table, the "left" join table, or both tables, the outer join extends the rows that have no matching values with nulls, as if these values came from the corresponding table.

Page 145: 3. Tera-Cram SQL Final

Tera-Tom Notes 145

Right Outer Join

SELECT Skills.skill, EmpXX.emp FROM Skills Right OUTER JOIN EmpXX ON skills.skillno = Empxx.skillno;

MasonMason LawyerTeacher 8121 Baker 4320 NULL 0043

88889333 8854

Outer Join Results

01 Mason

02 Doctor

03 Lawyer

04 Teacher

05 Nurse

06 Baker

8888 01

9333 01

8854 03

8121 04

0043 07

4320 06

Skil ls Table EmpXX Table

Skil l

No

Emp Skil l Skil l

No

Page 146: 3. Tera-Cram SQL Final

146 Tera-Tom Notes Copyright OSS 2001

Full Outer Join An outer join is an extension of an inner join. An outer join is two or more tables that perform an inner join, and in addition, return rows from the “left” join table, or the right join table, or both tables which were not returned in the result of the inner join, extending these rows with null values. FULL OUTER - Rows from both tables that have not been returned in the result of the inner join will be returned in the outer join result and extended with NULL values.

Page 147: 3. Tera-Cram SQL Final

Tera-Tom Notes 147

FULL Outer Join

SELECT Skills.skill, Empxx.emp FROM Skills FULL OUTER JOIN EmpXX ON skills.skillno = Empxx.skillno;

Outer Join Results

Mason 8888Mason 9333Doctor NULLLawyer 8854Teacher 8121Nurse NULLBaker 4320NULL 0043

01 Mason

02 Doctor

03 Lawyer

04 Teacher

05 Nurse

06 Baker

8888 01

9333 01

8854 03

8121 04

0043 07

4320 06

Skil ls Table EmpXX Table

Skil l

No

Emp Skil l Skil l

No