Sunteți pe pagina 1din 147

Tera-Cram for

Teradata SQL
Certification

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

2 Tera-Tom Notes Copyright OSS 2001


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

Tera-Tom Notes 3
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 5
6 Tera-Tom Notes Copyright OSS 2001
Module 1

Module 1 – Teradata Basics

A A A A
M M M M
P P P P

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

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

8 Tera-Tom Notes Copyright OSS 2001


Introduction

You can also take


practice tests on the
website
Tera-Tom.Com.

Tera-Tom Notes 9
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 DEPT LNAME FNAME SAL


Primary
Key
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 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 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.

12 Tera-Tom Notes Copyright OSS 2001


Retrieving Data From A Table
Employee
EMP DEPT LNAME FNAME SAL
Primary
Key
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 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 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.

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 DEPT LNAME FNAME SAL
Primary
Key
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 44000.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.

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 DEPT LNAME FNAME SAL
Primary
Key
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 44000.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.

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 DEPT LNAME FNAME SAL
Primary
Key
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 44000.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.

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 DEPT LNAME FNAME SAL
Primary
Key
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 44000.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.

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

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 LNAME FNAME SAL
Primary
Key
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 44000.00
99 NULL NULL JIM 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 DEPT LNAME FNAME SAL
Primary
Key
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 44000.00
99 NULL NULL JIM 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

Tera-Tom Notes 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 DEPT LNAME FNAME SAL
Primary
Key
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 44000.00
99 NULL NULL JIM 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.

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 DEPT LNAME FNAME SAL
Primary
Key
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 44000.00
99 NULL NULL JIM 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.

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

Tera-Tom Notes 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 HIRE_DATE LNAME FNAME SAL
Primary
Key
1 01-10-85 JONES DAVE 45000.00
2 02-20-90 SMITH MARY 50000.00
3 02-30-95 CHANG VU 65000.00
4 04-20-99 WILSON SUE 44000.00
99 05-06-01 NULL JIM 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

Tera-Tom Notes 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 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 01-10-85 JONES DAVE 45000.00
2 02-20-90 SMITH MARY 50000.00
3 02-30-95 CHANG VU 65000.00
4 04-20-99 WILSON SUE 44000.00
99 05-06-01 NULL JIM 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 HIRE_DATE LNAME FNAME SAL
Primary
Key
1 01-10-85 JONES DAVE 45000.00
2 02-20-90 SMITH MARY 50000.00
3 02-30-95 CHANG VU 65000.00
4 04-20-99 WILSON SUE 44000.00
99 05-06-01 NULL JIM 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

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 HIRE_DATE LNAME FNAME SAL
Primary
Key
1 01-10-85 JONES DAVE 45000.00
2 02-20-90 SMITH MARY 50000.00
3 02-30-95 CHANG VU 65000.00
4 04-20-99 WILSON SUE 44000.00
99 05-06-01 NULL JIM 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

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 DEPT LNAME FNAME SAL
Primary
Key
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 44000.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

Tera-Tom Notes 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 LNAME FNAME SAL
Primary Foreign
Key Key *
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 44000.00

Department Table
DEPT DEPT_NAME
PK
10 SALES
20 MARKETING
30 FINANCE
40 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

Tera-Tom Notes 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 LNAME FNAME SAL
Primary Foreign
Key Key *
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 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 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.

48 Tera-Tom Notes Copyright OSS 2001


Joining Two Tables Using Teradata Syntax

AMP 1 AMP 2
Department_Table Department_Table
& Employee_Table & Employee_Table
PI PI
Dept DeptName Dept DeptName
10 Sales 30 Finance
20 Mrkt 40 IT
PI PI
Emp Dept Name Salary Emp Dept Name Salary
1 10 Bo Doe 50000 2 10 Vu Too 60000
4 20 Jo Noe 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 DEPT NAME DeptName


1 10 Bo Doe Sales
2 10 Vu Too Sales
4 20 Jo Noe Mrkt
3 30 Lu Koo Finance

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

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 3
2 4
3 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 3
2 4
3 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 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.

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.

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.

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

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.

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 /* */.

Tera-Tom Notes 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 FNAME SAL


1 10 Jones Dave XXXXX
2 20 Smith Mary XXXXX
3 30 Chang Vu XXXXX
4 10 Wilson 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 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.

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 DEPT LNAME FNAME SAL
Primary Foreign
Key Key *
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 44000.00

Department Table
DEPT DEPT_NAME
PK
10 SALES
20 MARKETING
30 FINANCE
40 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.

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 DEPT LNAME FNAME SAL
Primary Foreign
Key Key *
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 50 WILSON SUE 44000.00

Department Table
DEPT DEPT_NAME
PK
10 SALES
20 MARKETING
30 FINANCE
40 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.

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 DEPT LNAME FNAME SAL
Primary Foreign
Key Key *
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 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.

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 DEPT LNAME FNAME SAL
Primary Foreign
Key Key *
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 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.

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 DEPT LNAME FNAME SAL
Primary Foreign
Key Key *
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 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 Foreign
Key Key *
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 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 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.

76 Tera-Tom Notes Copyright OSS 2001


Insert Select Continued
Employee Table
EMP DEPT LNAME FNAME SAL
Primary Foreign
Key Key *
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 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
INSERT INTO EMPXX
Emp, dept, lname FROM Employee;
EMPXX Table
EMP DEPT LNAME
Primary Foreign
Key Key *
1 10 JONES
2 20 SMITH
3 30 CHANG
4 10 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.

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 or database that
contains it.

Tera-Tom Notes 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: HELP ‘SQL’ and HELP ‘SQL <sqlcommand>’;

80 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 Type Comment


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

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

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

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 DEPT LNAME FNAME SAL
Primary Foreign
Key Key *
1 10 JONES DAVE 45000.00
2 20 SMITH MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 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

Tera-Tom Notes 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 100000
2 100000
3 100000
4 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 100000
2 100000
3 100000
4 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 100000
2 100000
3 100000
4 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 97
Advanced Aggregate example
The following page shows examples of aggregates.

98 Tera-Tom Notes Copyright OSS 2001


Advanced Aggregate Example
Employee Table
EMP DEPT LNAME FNAME SAL
Primary Foreign
Key Key *
1 10 Wilson DAVE 45000.00
2 10 Wilson MARY 50000.00
3 30 CHANG VU 65000.00
4 10 WILSON SUE 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.

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

100 Tera-Tom Notes Copyright OSS 2001


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!

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

102 Tera-Tom Notes Copyright OSS 2001


Creating a Report Using WITH…BY

Empxx Table
EMP DEPT LNAME FNAME SAL
Primary Foreign
Key Key *
1 10 JONES DAVE 45000.00
2 10 SMITH MARY 50000.00
3 20 CHANG VU 65000.00
4 20 WILSON SUE 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.

Tera-Tom Notes 103


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

104 Tera-Tom Notes Copyright OSS 2001


WITH…BY Multiple Aggregates

Empxx Table
EMP DEPT LNAME FNAME SAL
Primary Foreign
Key Key *
1 10 JONES DAVE 45000.00
2 10 SMITH MARY 50000.00
3 20 CHANG VU 65000.00
4 20 WILSON SUE 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

Tera-Tom Notes 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 DEPT LNAME FNAME SAL
Primary Foreign
Key Key *
1 10 JONES DAVE 45000.00
2 10 SMITH MARY 50000.00
3 20 CHANG VU 65000.00
4 20 WILSON SUE 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.

Tera-Tom Notes 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 Sales City State Country
1 50000 Dayton OHIO USA
2 100000 Dayton OHIO USA
3 40000 Cincinnati OHIO USA
4 200000 Cincinnati OHIO USA

SELECT Store_No, Sales, City, State


FROM Empxx
WITHSUM(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.

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 Dept Lname Sal Mgr
1 10 Smith 50000 Y
2 10 Jones 40000 N
3 10 Wilson 100000 N
4 20 Lane 50000 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 Dept Lname Sal Mgr
1 10 Smith 50000 Y
2 10 Jones 40000 N
3 10 Wilson 100000 N
4 20 Lane 50000 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> ) /* defaults to BOTH */

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 */

In ANSI mode leading and trailing PAD


characters are removed.

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 Table does not support compression.

Tera-Tom Notes 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 S2
ell 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 POSITION( ‘e’ IN lname )


Jones 4
Davis 0
Marley 5

Tera-Tom Notes 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 Number of Credits


Logical Database Design 2 Credits
V2R3 SQL Features 2 Credits
Advanced SQL 3 Credits

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

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 Phone
--------------- ---------------------
Jim Blue (513) 300-0341
Jane Green No Phone
Bill Davis (643) 888-3939

Tera-Tom Notes 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 Dept Lname Sal
1 10 Smith 0
2 10 Jones 40000
3 10 Wilson NULL
4 20 Lane 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

Tera-Tom Notes 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 EmpXX Table

01 Mason 8888 01
02 Doctor 9333 01
03 Lawyer 8854 03
04 Teacher 8121 04
05 Nurse 0043 01
06 Baker 4320 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 8888
Mason 9333
Mason 0043
Doctor NULL
Lawyer 8854
Teacher 8121
Nurse NULL
Baker 4320

Tera-Tom Notes 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 EmpXX Table

01 Mason 8888 01
02 Doctor 9333 01
03 Lawyer 8854 03
04 Teacher 8121 04
05 Nurse 0043 07
06 Baker 4320 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 8888
Mason 9333
Lawyer 8854
Teacher 8121
Baker 4320
NULL 0043

Tera-Tom Notes 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 EmpXX Table

01 Mason 8888 01
02 Doctor 9333 01
03 Lawyer 8854 03
04 Teacher 8121 04
05 Nurse 0043 07
06 Baker 4320 06
Skill Skill Emp Skill
No No
SELECT Skills.skill, Empxx.emp
FROM Skills FULL OUTER JOIN EmpXX
ON skills.skillno = Empxx.skillno;

Outer Join Results

Mason 8888
Mason 9333
Doctor NULL
Lawyer 8854
Teacher 8121
Nurse NULL
Baker 4320
NULL 0043

Tera-Tom Notes 147

S-ar putea să vă placă și