You are on page 1of 147

Tera-Cram for

Teradata SQL
Certification

Tera-Tom Notes

First Edition 2001


Written by Tom Coffing III
Web Page: www.Tera-Tom.com
E-Mail addresses:
Tom: Tcoffing3@aol.com
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.

Tera-Tom Notes

Copyright OSS 2001

Acknowledgements and Special Thanks


This book is dedicated the Coffing Data warehousing team.
Tom Coffing Jr.
Morgan Jones
Mike Larkins
Jamar Boyd
Randy Volters
Chris Coffing
Robert Hines
Gareth Walter
Steve Wilmes
Todd Carroll
Tom Coffing Sr.
Leona Coffing

Tera-Tom Notes

Teradata Certified Master


Teradata Certified Master
Teradata Certified Master
Teradata Certified Master
Teradata Certified Master
Teradata Certified Master
Teradata Certified Master
Teradata Certified Master
Teradata Certified Master
Teradata Certified Master
Teradata Certified Professional

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
4

Tera-Tom Notes

Copyright OSS 2001

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

Tera-Tom Notes

Tera-Tom Notes

Copyright OSS 2001

Module 1

Module 1 Teradata Basics

A
M
P

A
M
P

A
M
P

1
5
9
13

2
6
10
14

3
7
11
15

Tera-Tom Notes

A
M
P

4
8
12
16

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.

Tera-Tom Notes

Copyright OSS 2001

Introduction

You can also take


practice tests on the
website
Tera-Tom.Com.

Tera-Tom Notes

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.

10

Tera-Tom Notes

Copyright OSS 2001

A Table has Rows and Columns


Employee
EMP
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

10
20
30
10

JONES
SMITH
CHANG
WILSON

DAVE
MARY
VU
SUE

SAL
45000.00
50000.00
65000.00
44000.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.

Tera-Tom Notes

11

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 dont use a WHERE clause then all rows from the table will be returned.
ORDER BY: The ORDER BY statement sorts the data. If you dont use the
ORDER BY statement then the data comes back in random order.

12

Tera-Tom Notes

Copyright OSS 2001

Retrieving Data From A Table


Employee
EMP
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

10
20
30
10

JONES
SMITH
CHANG
WILSON

DAVE
MARY
VU
SUE

SAL
45000.00
50000.00
65000.00
44000.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 dont use a WHERE clause
then all rows from the table will be returned.
ORDER BY: The ORDER BY statement sorts the data. If
you dont use the ORDER BY statement then the data
comes back in random order.

Tera-Tom Notes

13

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.

14

Tera-Tom Notes

Copyright OSS 2001

Examples of Selecting Data From A Table


Employee
EMP
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

10
20
30
10

JONES
SMITH
CHANG
WILSON

DAVE
MARY
VU
SUE

SAL
45000.00
50000.00
65000.00
44000.00

SELECT emp
,dept
,lname
FROM Employee;
Four Rows Returned

EMP
1
2
3
4

DEPT
10
20
30
10

LNAME
JONES
SMITH
CHANG
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.

Tera-Tom Notes

15

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.

16

Tera-Tom Notes

Copyright OSS 2001

Example of Selecting All Columns in a Table


Employee
EMP
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

10
20
30
10

JONES
SMITH
CHANG
WILSON

DAVE
MARY
VU
SUE

SAL
45000.00
50000.00
65000.00
44000.00

SELECT *
FROM Employee;
Four Rows Returned

EMP
1
2
3
4

DEPT
10
20
30
10

LNAME
JONES
SMITH
CHANG
WILSON

FNAME
Dave
Mary
Vu
Sue

SAL
45000.00
50000.00
65000.00
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.

Tera-Tom Notes

17

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.

18

Tera-Tom Notes

Copyright OSS 2001

Example of Selecting only Certain Rows


Employee
EMP
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

10
20
30
10

JONES
SMITH
CHANG
WILSON

DAVE
MARY
VU
SUE

SAL
45000.00
50000.00
65000.00
44000.00

SELECT *
FROM Employee
WHERE Dept = 10;
Two Rows Returned

EMP
1
4

DEPT
10
10

LNAME
JONES
WILSON

FNAME
Dave
Sue

SAL
45000.00
44000.00

The WHERE clause only retrieves rows that are


requested in the WHERE Clause.
Think of the WHERE clause as a filter.

Tera-Tom Notes

19

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.

20

Tera-Tom Notes

Copyright OSS 2001

Example of Sorting the Data


Employee
EMP
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

10
20
30
10

JONES
SMITH
CHANG
WILSON

DAVE
MARY
VU
SUE

SAL
45000.00
50000.00
65000.00
44000.00

SELECT
*
FROM
Employee
ORDER BY LNAME;
Four Rows Returned

EMP
3
1
2
4

DEPT
30
10
20
10

LNAME
CHANG
JONES
SMITH
WILSON

FNAME
Vu
Dave
Mary
Sue

SAL
65000.00
45000.00
50000.00
44000.00

The above result set was sorted in ascending order by the


column LNAME.

Tera-Tom Notes

21

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 cant 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

22

Tera-Tom Notes

Copyright OSS 2001

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
Primary
Key
10
1
20
2
30
3
10
4
NULL
99

LNAME

FNAME

JONES
SMITH
CHANG
WILSON
NULL

DAVE
MARY
VU
SUE
JIM

SAL
45000.00
50000.00
65000.00
44000.00
99000.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

Tera-Tom Notes

23

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.

24

Tera-Tom Notes

Copyright OSS 2001

Examples of NULL Data


Employee Table
EMP
Primary
Key
1
2
3
4
99

DEPT

LNAME

FNAME

10
20
30
10
NULL

JONES
SMITH
CHANG
WILSON
NULL

DAVE
MARY
VU
SUE
JIM

SAL

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
99

FNAME
JIM

SELECT EMP, FNAME FROM EMPLOYEE


WHERE DEPT IS

NOT NULL;

Four Rows Returned

EMP
1
2
3
4

Tera-Tom Notes

FNAME
Dave
Mary
Vu
Sue

25

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.

26

Tera-Tom Notes

Copyright OSS 2001

How Sorting Works with NULL Data


Employee Table
EMP
Primary
Key
1
2
3
4
99

DEPT

LNAME

FNAME

10
20
30
10
NULL

JONES
SMITH
CHANG
WILSON
NULL

DAVE
MARY
VU
SUE
JIM

SAL

45000.00
50000.00
65000.00
44000.00
99000.00

SELECT EMP
,DEPT
FROM EMPLOYEE

ORDER BY Dept;
Five Rows Returned

EMP
99
1
4
2
3

DEPT

NULL
10
10
20
30

NULL data sorted in Ascending Order will always be

before all positive and negative values and


before blank values.

Tera-Tom Notes

27

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.

28

Tera-Tom Notes

Copyright OSS 2001

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
Primary
Key
1
2
3
4
99

DEPT

LNAME

FNAME

10
20
30
10
NULL

JONES
SMITH
CHANG
WILSON
NULL

DAVE
MARY
VU
SUE
JIM

SAL

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
99

DEPT

FNAME

NULL 99000.00

IN the above example the only thing that comes back is


anyone making a SAL over 80000.00.

Tera-Tom Notes

29

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: _ #
$

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

Tera-Tom Notes

characters:

31

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.

32

Tera-Tom Notes

Copyright OSS 2001

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

Tera-Tom Notes

33

The Extract Function


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

34

Tera-Tom Notes

Copyright OSS 2001

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
Primary
Key
1
2
3
4
99

HIRE_DATE

LNAME

FNAME

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

SAL

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

99

05-06-01

Tera-Tom Notes

LNAME FNAME
NULL

JIM

SAL
99000.00

35

The Date Function


The DATE function allows you to select the DATE.

36

Tera-Tom Notes

Copyright OSS 2001

The Date Function


The DATE function allows you to select todays 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
Primary
Key
1
2
3
4
99

HIRE_DATE

LNAME

FNAME

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

SAL

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.

Tera-Tom Notes

37

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

38

Tera-Tom Notes

Copyright OSS 2001

The Between Statement


The Between statement is inclusive.
Employee Table
EMP
Primary
Key
1
2
3
4
99

HIRE_DATE

LNAME

FNAME

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

SAL

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
1
2
3

HIRE_DATE
01-10-85
02-20-90
02-30-95

LNAME
JONES
SMITH
CHANG

FNAME
DAVE
MARY
VU

SAL
45000.00
50000.00
65000.00

If you had asked if X was BETWEEN A and C


the logic would be:

X >= A AND X <= C

Tera-Tom Notes

39

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.

40

Tera-Tom Notes

Copyright OSS 2001

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
Primary
Key
1
2
3
4
99

HIRE_DATE

LNAME

FNAME

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

SAL

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
1
2
3
4
99

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

Months_Plus2
03-10-85
04-20-90
04-30-95
06-20-99
07-06-01

What is the Answer Below?


Sel Add_months(Hire_Date, 12 * 5)
Answer: The Hire_Date + 5 years

Tera-Tom Notes

41

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

42

Tera-Tom Notes

Copyright OSS 2001

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
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

10
20
30
10

JONES
SMITH
CHANG
WILSON

DAVE
MARY
VU
SUE

SAL
45000.00
50000.00
65000.00
44000.00

SELECT
*
FROM
Employee
WHERE DEPT IN (20,30);
Two Rows Returned

EMP
3
2

Tera-Tom Notes

DEPT
30
20

LNAME
CHANG
SMITH

FNAME
Vu
Mary

SAL
65000.00
50000.00

43

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);

44

Tera-Tom Notes

Copyright OSS 2001

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
Primary
Foreign
Key
Key *
1
10
2
20
3
30
4
10

LNAME

FNAME

JONES
SMITH
CHANG
WILSON

DAVE
MARY
VU
SUE

SAL

45000.00
50000.00
65000.00
44000.00

Department Table
DEPT
PK
10
20
30
40

DEPT_NAME
SALES
MARKETING
FINANCE
HUMAN RESOURCES

SELECT * FROM EMPLOYEE


WHERE DEPT IN
(SELECT DEPT FROM Department
WHERE DEPT_NAME = FINANCE);
One Row Returned

EMP
3

Tera-Tom Notes

DEPT
30

LNAME
CHANG

FNAME
Vu

SAL
65000.00

45

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.

46

Tera-Tom Notes

Copyright OSS 2001

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
Primary
Foreign
Key
Key *
1
10
2
20
3
30
4
10

LNAME

FNAME

JONES
SMITH
CHANG
WILSON

DAVE
MARY
VU
SUE

SAL

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.

Tera-Tom Notes

47

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 dont 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.

48

Tera-Tom Notes

Copyright OSS 2001

Joining Two Tables Using Teradata Syntax


AMP 1

AMP 2

Department_Table
& Employee_Table
PI

Dept
10
20

Department_Table
& Employee_Table
PI

DeptName
Sales
Mrkt

Dept
30
40

PI

Emp Dept Name Salary


1
10
Bo Doe 50000
4
20
Jo Noe 60000

DeptName
Finance
IT

PI

Emp Dept Name Salary


2
10
Vu Too 60000
3
30
Lu Koo 70000

The first example join is done using Teradata syntax


SELECT

Emp
,E.Dept
,Name
,DeptName
FROM Employee_Table
E
,Department_Table D
WHERE
E.Dept = D.Dept
Four Rows Returned

EMP
1
2
4
3

Tera-Tom Notes

DEPT
10
10
20
30

NAME
Bo Doe
Vu Too
Jo Noe
Lu Koo

DeptName
Sales
Sales
Mrkt
Finance

49

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.

50

Tera-Tom Notes

Copyright OSS 2001

Joining Two Tables using ANSI syntax


SELECT

Emp
,E.Dept
,Name
,DeptName
FROM
Employee_Table AS E
INNER JOIN Department_Table AS D
ON
E.Dept = D.Dept
Four Rows Returned

EMP
1
2
4
3

DEPT
10
10
20
30

NAME
Bo Doe
Vu Too
Jo Noe
Lu Koo

DeptName
Sales
Sales
Mrkt
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

Tera-Tom Notes

51

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

52

Tera-Tom Notes

Copyright OSS 2001

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.

TableA

TableB

1
2
3

3
4
5

SELECT * FROM TableA Title ANSWER


UNION
SELECT * FROM TableB;
Five Rows Returned

ANSWER
1
2
3
4
5

Tera-Tom Notes

53

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

54

Tera-Tom Notes

Copyright OSS 2001

Set Operators Continued

TableA

TableB

1
2
3

3
4
5

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.

Tera-Tom Notes

55

Macros
Users can create macros even if they dont have PERM space because MACROS
are stored in the DATA DICTIONARY. Macros dont 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.

56

Tera-Tom Notes

Copyright OSS 2001

Macros
Users can create macros even if they dont have PERM
space because MACROS are stored in the DATA

DICTIONARY.
Macros dont 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

statements and a comment.


comments by placing them inside /*

SQL

You can create


*/.

Security and a simplified operation are goods


reason to use parameterized macros.

Tera-Tom Notes

57

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.

58

Tera-Tom Notes

Copyright OSS 2001

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.

Tera-Tom Notes

59

Macros
Users can create macros even if they dont have PERM space because MACROS
are stored in the DATA DICTIONARY. Macros dont 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.

60

Tera-Tom Notes

Copyright OSS 2001

Macros
Users can create macros even if they dont have PERM
space because MACROS are stored in the DATA

DICTIONARY.
Macros dont 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

statements and a comment.


comments by placing them inside /*

Tera-Tom Notes

SQL

You can create


*/.

61

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.

62

Tera-Tom Notes

Copyright OSS 2001

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

EMP DEPT LNAME


1
10
Jones
2
20
Smith
3
30
Chang
4
10
Wilson

FNAME SAL
Dave XXXXX
Mary XXXXX
Vu
XXXXX
Sue
XXXXX

Create view Emp_View as


locking employee_table for access
SELECT emp, dept, lname, fname
FROM Employee_table;

Tera-Tom Notes

63

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.

64

Tera-Tom Notes

Copyright OSS 2001

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
A

128 Big
128

chop
127

Round
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.

Tera-Tom Notes

65

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.

66

Tera-Tom Notes

Copyright OSS 2001

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
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

SAL

Foreign
Key *
10
20
30
10

JONES
SMITH
CHANG
WILSON

DAVE
MARY
VU
SUE

45000.00
50000.00
65000.00
44000.00

Department Table
DEPT
PK
10
20
30
40

DEPT_NAME
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
-------1
4

DEPT
--------10
10

LNAME
---------Jones
Wilson

The above query finds all employees in the sales dept.

Tera-Tom Notes

67

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.

68

Tera-Tom Notes

Copyright OSS 2001

Traditional Subqueries Continued


Employee Table
EMP
Primary
Key
1
2
3
4

DEPT
Foreign
Key *
10
20
30

50

LNAME

FNAME

SAL

JONES
SMITH
CHANG
WILSON

DAVE
MARY
VU
SUE

45000.00
50000.00
65000.00
44000.00

Department Table
DEPT
PK
10
20
30
40

DEPT_NAME
SALES
MARKETING
FINANCE
HUMAN RESOURCES

SELECT Emp, Dept, lname


from Employee WHERE Dept in
(SELECT Dept from department);
Three rows returned

EMP
-------1
2
3

DEPT
--------10
20
30

LNAME
---------Jones
Smith
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.

Tera-Tom Notes

69

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.

70

Tera-Tom Notes

Copyright OSS 2001

Correlated Subqueries
Employee Table
EMP
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

SAL

Foreign
Key *
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
------4
2
3

DEPT
--------10
20
30

LNAME
-----------Wilson
Smith
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 dont have the minimum salary in
department 10.

Tera-Tom Notes

71

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.

72

Tera-Tom Notes

Copyright OSS 2001

How Correlated Subqueries Work


Employee Table
EMP
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

SAL

Foreign
Key *
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
or inner query.

salary for the dept from the subquery

3. Compare the salary to the min

salary

4. If equal, output the row. If not equal, go to step 1.

Tera-Tom Notes

73

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

74

Tera-Tom Notes

Copyright OSS 2001

Insert Select
Employee Table
EMP
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

SAL

Foreign
Key *
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
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

SAL

Foreign
Key *
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.

Tera-Tom Notes

75

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 cant 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.

76

Tera-Tom Notes

Copyright OSS 2001

Insert Select Continued


Employee Table
EMP
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

Foreign
Key *
10
20
30
10

JONES
SMITH
CHANG
WILSON

DAVE
MARY
VU
SUE

SAL

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.

SELECT
Emp, dept, lname FROM Employee;
INSERT INTO EMPXX

EMPXX Table
EMP
Primary
Key
1
2
3
4

DEPT

LNAME

Foreign
Key *
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 * Wont Work.

Tera-Tom Notes

77

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)

78

Tera-Tom Notes

Copyright OSS 2001

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
contains it.

Tera-Tom Notes

or database that

79

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:

80

HELP SQL and HELP SQL <sqlcommand>;

Tera-Tom Notes

Copyright OSS 2001

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
-------------------EMP
DEPT
LNAME
FNAME
SAL

Tera-Tom Notes

Type
------I
I
CF
CV
D

Comment
---------------------EMPLOYEE NUMBER
DEPARTMENT No
Surname
First Name
Pay

81

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.

82

Tera-Tom Notes

Copyright OSS 2001

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;

Tera-Tom Notes

83

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

84

Tera-Tom Notes

Copyright OSS 2001

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

Tera-Tom Notes

85

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 oneline 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.

86

Tera-Tom Notes

Copyright OSS 2001

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

Tera-Tom Notes

87

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.

88

Tera-Tom Notes

Copyright OSS 2001

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
-----001
002
003

Sum(Sal)
---------------------180,500.00
143,000.00
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!

Tera-Tom Notes

89

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.

90

Tera-Tom Notes

Copyright OSS 2001

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
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

SAL

Foreign
Key *
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
--------10

SUM(SAL)
------------89000.00

Tera-Tom Notes

MAX(SAL)
-------------45000.00

AVG(SAL)
-------------44500.00

91

Some Aggregate examples


The following page shows examples of aggregates.

92

Tera-Tom Notes

Copyright OSS 2001

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.

Tera-Tom Notes

93

Some Aggregate examples Continued


The following page shows examples of aggregates.

94

Tera-Tom Notes

Copyright OSS 2001

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.

Tera-Tom Notes

95

Some Aggregate examples Continued


The following page shows examples of aggregates.

96

Tera-Tom Notes

Copyright OSS 2001

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

answer is 4

The reason the


is because the
row. Since the entire row is not NULL the count is 4.

Tera-Tom Notes

COUNT(*) counts the entire

97

Advanced Aggregate example


The following page shows examples of aggregates.

98

Tera-Tom Notes

Copyright OSS 2001

Advanced Aggregate Example


Employee Table
EMP
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

SAL

Foreign
Key *
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
-------10

Lname
---------Wilson

Count(*)
-----------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.

Tera-Tom Notes

99

Using WITH BY for Subtotals


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

100

Tera-Tom Notes

Copyright OSS 2001

Using WITHBy for Subtotals


WITHBy:
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!

Tera-Tom Notes

101

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 WITHBY subtotals may be
requested in the same SELECT. When this is done, the last WITHBY is the major
sort.
The ORDER BY can be used with a WITHBY. When it is used, it is the most
minor sort sequence.

102

Tera-Tom Notes

Copyright OSS 2001

Creating a Report Using WITHBY


Empxx Table
EMP
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

SAL

Foreign
Key *
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
Emp
-------1
2

3
4

SUM(sal) by dept;
Dept
Lname
Sal
--------- ----------- ------------10
Jones
45000.00
10
Smith
50000.00
---------------------Sum(sal) 95000.00
20
Chang
20
Wilson
---------------------Sum(sal) 109000.00

65000.00
44000.00

Notice that the With By allows for detailed information as


well as subtotals on breaks by Dept.

Tera-Tom Notes

103

WITH BY Multiple Aggregates


You can use the WITHBY command with multiple aggregates as seen on the
following page.

104

Tera-Tom Notes

Copyright OSS 2001

WITHBY Multiple Aggregates


Empxx Table
EMP
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

SAL

Foreign
Key *
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
-------1
2

Dept
Lname
Sal
--------- ----------- ------------10
Jones
45000.00
10
Smith
50000.00
---------------------Sum(sal) 95000.00
Avg(sal) 47500.00

3
4

20
Chang
20
Wilson
---------------------Sum(sal) 109000.00
Avg(sal) 54500.00

Tera-Tom Notes

65000.00
44000.00

105

WITH for a final total


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

106

Tera-Tom Notes

Copyright OSS 2001

WITH for a Final Total


Empxx Table
EMP
Primary
Key
1
2
3
4

DEPT

LNAME

FNAME

SAL

Foreign
Key *
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
Emp
-------1
2
3
4

SUM(sal) ;
Dept
Lname
Sal
--------- ----------- ------------10
Jones
45000.00
10
Smith
50000.00
20
Chang
65000.00
20
Wilson
44000.00
---------------------Sum(sal) 204,000.00

The WITH

BY statement gives detail lines and


subtotals.
The WITH statement gives a grand
of the report.

Tera-Tom Notes

total at the end

107

Multiple WITH BY Statements


Multiple With By statements can be utilized during a query.

108

Tera-Tom Notes

Copyright OSS 2001

Multiple With By Statements


Empxx Table
Store_No
1
2
3
4

Sales

City

50000
100000
40000
200000

State

Dayton
Dayton
Cincinnati
Cincinnati

Country

OHIO
OHIO
OHIO
OHIO

USA
USA
USA
USA

SELECT Store_No, Sales, City, State


FROM Empxx

SUM(sales) BY City
With SUM(sales) BY State;
WITH

Store_no
-------------1
2

Sales
City
--------- ----------50000
Dayton
100000 Dayton

State
------------Ohio
Ohio

Sum(Sales) by City 150000


3
4

40000
200000

Cincinnati
Cincinnati

Ohio
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.

Tera-Tom Notes

109

What type of join is this?


Run the query on the following page. Answer the questions also on the following
page.

110

Tera-Tom Notes

Copyright OSS 2001

What type of join is this?


Employee Table
Emp
1
2
3
4

Dept
10
10
10
20

Lname

Sal

Smith
Jones
Wilson
Lane

50000
40000
100000
50000

Mgr
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.
Tera-Tom Notes

111

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

112

Tera-Tom Notes

Copyright OSS 2001

Characters Function
Employee Table
Emp
1
2
3
4

Dept
10
10
10
20

Lname

Sal

Smith
Jones
Wilson
Lane

50000
40000
100000
50000

Mgr
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

Tera-Tom Notes

113

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> )

114

/* defaults to BOTH

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

*/

In ANSI mode leading and trailing


characters are removed.

PAD

Example:
Select Trim( ABCDE )
Results: ABCDE
The leading and trailing spaces have been trimmed.

Tera-Tom Notes

115

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.

116

Tera-Tom Notes

Copyright OSS 2001

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.

Tera-Tom Notes

117

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.

118

Tera-Tom Notes

Copyright OSS 2001

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.

Tera-Tom Notes

119

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.

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

Tera-Tom Notes

Table does not support compression.

121

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

122

Tera-Tom Notes

Copyright OSS 2001

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
ell

S2
ello

Tera-Tom Notes

123

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.

124

Tera-Tom Notes

Copyright OSS 2001

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
Jones
Davis
Marley

Tera-Tom Notes

POSITION( e IN lname )
4
0
5

125

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.

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.
This example gives employee 99 a new salary of $50,000.
UPDATE Empxx SET Sal = 50000
WHERE Emp = 99;

Tera-Tom Notes

127

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.

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
Create Table EmpXX
(
emp
Integer
,dept
Integer
,lname
Char(20)
,fname
Char(20)
,Sal
Decimal (10,2)
)
Unique Primary Index (emp);

Tera-Tom Notes

129

CASE Statement (Option 1)


The CASE statement has two different syntax options. They are shown on the
following pages.

130

Tera-Tom Notes

Copyright OSS 2001

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
Logical Database Design
V2R3 SQL Features
Advanced SQL

Tera-Tom Notes

Number of Credits
2 Credits
2 Credits
3 Credits

131

CASE Statement (Option 2)


The CASE statement has two different syntax options. They are shown on the
following pages.

132

Tera-Tom Notes

Copyright OSS 2001

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

Tera-Tom Notes

133

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 nonNULL 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.

134

Tera-Tom Notes

Copyright OSS 2001

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
--------------Jim Blue
Jane Green
Bill Davis

Tera-Tom Notes

Phone
--------------------(513) 300-0341
No Phone
(643) 888-3939

135

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.

136

Tera-Tom Notes

Copyright OSS 2001

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

Tera-Tom Notes

137

NULLIFZERO and ZEROIFNULL


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

138

Tera-Tom Notes

Copyright OSS 2001

NULLIFZERO and ZEROIFNULL


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

Dept
10
10
10
20

Lname

Sal

Smith
Jones
Wilson
Lane

0
40000
NULL
50000

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

Tera-Tom Notes

NOZERO
-------------NULL
40000
NULL
50000

NONULL
-------------0
40000
0
50000

139

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.

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.

Tera-Tom Notes

141

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.

142

Tera-Tom Notes

Copyright OSS 2001

Left Outer Join


Skills Table

01
02
03
04
05
06

Mason
Doctor
Lawyer
Teacher
Nurse
Baker

EmpXX Table

8888
9333
8854
8121
0043
4320

01
01
03
04
01
06

Skill Skill
Emp
Skill
No
No
SELECT Skills.skill, EmpXX.emp
FROM Skills LEFT OUTER JOIN empxx
ON skills.skillno = Empxx.Skillno;
Outer Join Results

Mason
Mason
Mason
Doctor
Lawyer
Teacher
Nurse
Baker

Tera-Tom Notes

8888
9333
0043
NULL
8854
8121
NULL
4320

143

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.

144

Tera-Tom Notes

Copyright OSS 2001

Right Outer Join


Skills Table

01
02
03
04
05
06

Mason
Doctor
Lawyer
Teacher
Nurse
Baker

EmpXX Table

8888
9333
8854
8121
0043
4320

01
01
03
04
07
06

Skill Skill
Emp
Skill
No
No
SELECT Skills.skill, EmpXX.emp
FROM Skills Right OUTER JOIN EmpXX
ON skills.skillno = Empxx.skillno;
Outer Join Results

Mason
Mason
Lawyer
Teacher
Baker
NULL

Tera-Tom Notes

8888
9333
8854
8121
4320
0043

145

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.

146

Tera-Tom Notes

Copyright OSS 2001

FULL Outer Join


Skills Table

01
02
03
04
05
06
Skill
No

Mason
Doctor
Lawyer
Teacher
Nurse
Baker
Skill

EmpXX Table

8888
9333
8854
8121
0043
4320

01
01
03
04
07
06

Emp

Skill
No

SELECT Skills.skill, Empxx.emp


FROM Skills FULL OUTER JOIN EmpXX
ON skills.skillno = Empxx.skillno;
Outer Join Results

Mason
Mason
Doctor
Lawyer
Teacher
Nurse
Baker
NULL

Tera-Tom Notes

8888
9333
NULL
8854
8121
NULL
4320
0043

147

You might also like