HA150 Hana

January 11, 2017 | Author: Sumeet Patil | Category: N/A
Share Embed Donate


Short Description

Download HA150 Hana ...

Description

HA150 SQL Basics for HANA

Material Number: 50119271

SQL Basics For HANA – Agenda Motivation And Basic Concepts Reading Data From A Table Or View

Exercises 1 - 19

Aggregating Data

Exercises 20 - 29

Reading Data From Multiple Tables Part I

Exercises 30 - 40

Reading Data From Multiple Tables Part II

Exercises 41 - 45

Understanding NULL Values Changing Data Stored in Tables

Exercises 46 - 53

Defining How Data Is Stored

Exercises 54 - 58

Using Views For Data Access

Exercises 59 - 60

Defining Data Access Database Transactions ©

2013 SAP AG. All rights reserved.

2

SQL Basics For HANA Course

The SQL Basics course is designed to ... 

Explain basic concepts in the database world and the Relational Database Model



Refresh and deepen SQL knowledge, especially for developing on HANA database systems

The SQL Basics course is not designed to ... 

Explain implementation details of SAP HANA



Supersede official SAP HANA documentation



Solve specific development problems



Serve as a basis for decision-making for development projects

©

2013 SAP AG. All rights reserved.

3

Unit 1 Motivation & Basic Concepts

4

Unit 1: Motivation And Basic Concepts Learning Objectives After completing this unit, you will be able to: • List some database models • Understand the motivation for and foundation of the relational model • Understand why learning SQL is important when dealing with HANA • Understand how the relation model and SQL are related • List the three sub-languages of SQL • Understand the sample database used throughout the course

© 2013 SAP AG. All rights reserved.

5

Basic Concepts

What are the terms •

Database



Database System



Database Management System ?

©

2013 SAP AG. All rights reserved.

6

DBS = DB + DBMS



The Database Management System (DBMS) manages the database  

Every access to the database (create, read, insert, update, delete) goes exclusively through the DBMS The DBMS exercises complete control over the database



Database (DB) = structured collection of "records"



Database System (DBS) = specific database + DBMS

©

2013 SAP AG. All rights reserved.

7

DBS = DB + DBMS

User / Application

DBMS DBS

DB ©

2013 SAP AG. All rights reserved.

8

DBS = DB + DBMS



„What Database do you use?“ 



„Which Database Management System do you use?“ 



„We are using HANA as Database.“ 



„We are using SAP HANA as Database Management System.“ 



In everyday life, these terms are usually used incorrectly …

©

2013 SAP AG. All rights reserved.

9

Basics Concepts

3 Level Schema Architecture

©

2013 SAP AG. All rights reserved.

10

3 Level Schema Architecture

Objective: Changes at a lower level should not affect a higher level (if possible)

Application/User

External Schema 1

Application/User …

External Schema n

Conceptual Schema

Internal Schema

©

2013 SAP AG. All rights reserved.

External Level

Conceptual Level

Internal Level

11

3 Level Schema Architecture

The address book should not display salary data  External Level (VIEW) An Employee has a D-Number, name, and salary and is assigned to a department  Conceptual Level (TABLE) The board mostly accesses employee data according to descending order of salary (which has to be very fast)  Internal Level (INDEX)

©

2013 SAP AG. All rights reserved.

12

Basic Concepts

Which Database Models are available?

©

2013 SAP AG. All rights reserved.

13

Database Models



Hierarchical Database Model



Network Database Model



Relational Database Model



Object-relational Database Model



Object-oriented Database Model



XML-based Database Model





©

2013 SAP AG. All rights reserved.

14

Basic Concepts

Relational Database Model

©

2013 SAP AG. All rights reserved.

15

Relational Database Model

Invented in the late 1960s by Edgar F. Codd (1923-2003)  IBM Almaden Research Lab in San Jose (California)

First prototype in the mid-1970s • "System R", IBM San Jose

Relational DBMS products (selection) • • • •

©

Oracle (since 1979) IBM DB2 (since 1983) SQL Server (since 1989) SAP HANA (since 2011)

2013 SAP AG. All rights reserved.

16

Relational Database Model

Initial Development Goals (1960s):  Simple but mathematically profound database model – Easy to understand but still mathematically precise

 Simple but mathematically-based database language – Easy to learn, but semantics still described with mathematical precision – Provable equivalence of two queries

 Integrity monitoring largely by the DBMS  Storage & retrieval of data is the responsibility of the DBMS (and not of the user) – Descriptive language rather than navigation (optimizer selects optimal execution strategy)

 Clean separation between conceptual and internal schema

©

2013 SAP AG. All rights reserved.

17

Basic Concepts

Why is the Relational Database Model actually called Relational Database Model?

©

2013 SAP AG. All rights reserved.

18

Relations

A relation (in the sense of mathematics) is the subset of the Cartesian product of sets

R⊆AxBxC

©

2013 SAP AG. All rights reserved.

19

Comparative Relations (=,≠,,≥)

N = {1, 2, 3, 4, 5} N × N = {(1,1), (1,2), (1,3), (1,4), (1,5), (2,1), (2,2), (2,3), (2,4), (2,5), (3,1), (3,2), (3,3), (3,4), (3,5), (4,1), (4,2), (4,3), (4,4), (4,5), (5,1), (5,2), (5,3), (5,4), (5,5)}

©

2013 SAP AG. All rights reserved.

20

Comparative Relations (=,≠,,≥) ≤ ⊆ N × N ≤ ⊆ {(1,1), (2,1), (3,1), (4,1), (5,1),

(1,2), (2,2), (3,2), (4,2), (5,2),

(1,3), (2,3), (3,3), (4,3), (5,3),

(1,4), (2,4), (3,4), (4,4), (5,4),

(1,5), (2,5), (3,5), (4,5), (5,5)}

≤ = {(1,1), (1,2), (1,3), (1,4), (1,5), (2,2), (2,3), (2,4), (2,5), (3,3), (3,4), (3,5), (4,4), (4,5), (5,5)} (2,3) ϵ ≤ 2 ≤ 3

©

2013 SAP AG. All rights reserved.

21

Relations PersNumber = {P036407, P040824, P052867, …} Name = {Ben, Paul, Raja, …} HiringYear = {2001, 2008, 2010, …} PersNumber × Name × HiringYear= {(P036407,Ben,2001), (P036407,Ben,2008), (P036407,Paul,2001), (P036407,Paul,2008), (P035607,Raja,2001), (P036407,Raja,2008), (P040824,Ben,2001), (P040824,Ben,2008), (P040824,Paul,2001), (P040824,Paul,2008), (P040824,Raja,2001), (P040824,Raja,2008), (P052867,Ben,2001), (P052867,Jim,2008), (P052867,Paul,2001), (P052867,Vishal,2008), (P052867,Raja,2001), (P052867,Werner,2008),

©

2013 SAP AG. All rights reserved.

(P036407,Ben,2010), (P036407,Paul,2010), (P036407,Raja,2010), (P040824,Ben,2010), (P040824,Paul,2010), (P040824,Raja,2010), (P052867,Ben,2010), (P052867,Paul,2010), (P052867,Raja,2010), …}

22

Relations Employee ⊆ PersNumber × Name × HiringYear Employee ⊆ {(P036407,Ben,2001), (P036407,Paul,2001), (P035607,Raja,2001), (P040824,Ben,2001), (P040824,Paul,2001), (P040824,Raja,2001), (P052867,Ben,2001), (P052867,Paul,2001), (P052867,Raja,2001),

(P036407,Ben,2008), (P036407,Paul,2008), (P036407,Raja,2008), (P040824,Ben,2008), (P040824,Paul,2008), (P040824,Raja,2008), (P052867,Jim,2008), (P052867,Vishal,2008), (P052867,Werner,2008),

(P036407,Ben,2010), (P036407,Paul,2010), (P036407,Raja,2010), (P040824,Ben,2010), (P040824,Paul,2010), (P040824,Raja,2010), (P052867,Ben,2010), (P052867,Paul,2010), (P052867,Raja,2010), …}

Employee= {(P036407,Paul,2001), (P040824,Ben,2008), (P052867,Raja,2010)}

©

2013 SAP AG. All rights reserved.

23

Relations & Tables

A relation can be represented as a table Employee= {(P036407,Paul,2001), (P040824,Ben,2008), (P052867,Raja,2010)}

Employee

©

2013 SAP AG. All rights reserved.

PersNumber

Name

HiringYear

P036407 P040824 P052867

Paul Ben Raja

2001 2008 2010

24

Basic Concepts

Which languages ​are available for the Relational Database Model?

©

2013 SAP AG. All rights reserved.

25

Relational Languages

Relational Algebra  

Formal basis for DBMS internal query optimization 6 basic operations (selection, projection, cross join, union, difference, rename)

Relational Calculus 

Tuple variables and quantifiers

SQL 

©

Standardized and used in practice

2013 SAP AG. All rights reserved.

26

Why SQL?

Why SQL is important?

Why it is worth working with SQL

©

2013 SAP AG. All rights reserved.

27

Why SQL? → Reasons #1 and #2 In almost every business application scenario, the data is managed using database systems. The most significant are database systems based on the relational data model and using SQL (Structured Query Language) as a database language.

SQL is a widely-established, powerful, standardized database language many application programmers have experience in. There is (so far) no other database language that has all the advantages mentioned.

SAP HANA is a relational data base management system and SAP HANA supports SQL ©

2013 SAP AG. All rights reserved.

28

Why SQL?

Different application architectures and development models are possible with SAP HANA Data Marts with SAP HANA

Standalone HANA Apps

BI Tools, MS Excel, Web Browser …

Standalone Application SAP HANA clients

Traditional DBMS

©

2013 SAP AG. All rights reserved.

HANA Content / Database Tables

HANA Content / Database Tables

SAP HANA

Schema replication

SAP HANA

BI 4.0 (optional) Semantic Layer

29

Why SQL?

Different application architectures and development models are possible with SAP HANA HANA as primary Database HANA as Accelerator (secondary DB) (for AS ABAP) SAP GUI, Browser-based GUI

SAP GUI, Browser-based GUI

SAP Application Server

SAP Application Server

replication

Data

SAP HANA

ABAP Schema

ABAP Schema / Database Tables

SAP HANA

E.g. CRM on HANA – NW 7.40

Aggregation Levels

Traditional DBMS

©

2013 SAP AG. All rights reserved.

30

Why SQL? → Reason #3

HANA supports an extended version of SQL

No matter which HANA-based architecture or development model you work with, it is likely that using HANA SQL will be beneficial.

©

2013 SAP AG. All rights reserved.

31

SQL

SQL Features

©

2013 SAP AG. All rights reserved.

32

SQL Features

 SQL is standardized – No uncontrolled growth with respect to syntax and semantics

 SQL is descriptive (rather than procedural) – The "what" and not "how" is described

 SQL execution is optimized – SQL statement is first parsed and optimized, and then executed – Optimizer determines optimal execution plan (at least in theory)

 SQL is multi-set oriented (and not single record-based) – Using a single SQL statement multiple table rows can be read, modified or deleted in one go

©

2013 SAP AG. All rights reserved.

33

SQL Language Elements

SQL language elements can be divided into three categories: 

DML = Data Manipulation Language SELECT, INSERT, UPDATE, DELETE



DDL = Data Definition Language CREATE, ALTER, DROP, RENAME



DCL = Data Control Language GRANT, REVOKE

©

2013 SAP AG. All rights reserved.

34

SQL

SQL is standardized!

©

2013 SAP AG. All rights reserved.

35

SQL Standard: History

1970s

SEQUEL (Structured English Query Language) as a language for "System R" • "System R" was the first relational prototype developed by IBM in San Jose

End of 1970

Renaming of SEQUEL into SQL (Structured Query Language)

1982

American National Standards Institute (ANSI) begins with standardization of SQL

1986

First version of the SQL standard is adopted (as ANSI) SQL-86 ("SQL0“)

1987

International Organization for Standardization (ISO) does SQL standard (ISO standard)

1989

SQL-89 ("SQL1")

1992

SQL-92 ("SQL2"), 3 attenuation levels: Entry Level, Intermediate Level, Full Level

1999

SQL:1999 ("SQL3")

2003

SQL:2003 ("SQL4"), "SQL/XML:2006" 2006 official standard part of SQL:2003

2008

SQL:2008 ("SQL5"), officially: "ISO/IEC 9075:2008" and "DIN 9075" (> 3,000 pages)

©

2013 SAP AG. All rights reserved.

36

SQL

SQL ≠ relational

©

2013 SAP AG. All rights reserved.

37

SQL

SQL is the most important database language for relational database model. Although SQL is based on the relational database model, it deviates in important points from the "purely relational" model: 

No (primary) key required 



NULL values ​are allowed 



3-valued logic required ("A = A" need not be TRUE)

The language is not closed   

©

Duplicates (identical rows) allowed (multi-sets instead of sets)

Order of the result rows may be relevant (ORDER BY) Anonymous result columns allowed Duplicate result column names allowed

2013 SAP AG. All rights reserved.

38

Database Objects

What can be found in the database?

©

2013 SAP AG. All rights reserved.

39

Database Objects

The table is the primary database object - but not the only one. Apart from tables a database usually contains:     

©

Views to simplify and limit data access Indexes to speed up (certain) read accesses Constraints to ensure data consistency Stored procedures for more complex tasks Triggers to selectively respond to particular events

2013 SAP AG. All rights reserved.

40

Basic Concepts

What is a table?

©

2013 SAP AG. All rights reserved.

41

Tables

A (database) table represents a relation (but: multi-set of rows instead of set of tuples)

Employee PersNumber

Name

HiringYear

P036407

Paul

2001

P040824

Ben

2008

P052867

Raja

2010

Employee = {(P036407,Paul,2001), (P040824,Ben,2008), (P052867,Raja,2010)}

©

2013 SAP AG. All rights reserved.

42

Tables

A table consists of rows and columns 

A table can therefore be represented two-dimensionally

A table represents a relation (with multi-sets property) 

©

A table represents a (unordered) multi-set of points in n-dimensional space:  Each point of the multi-set corresponds to a table row  Each of the n dimensions is equivalent to a table column

2013 SAP AG. All rights reserved.

43

Table rows as points in space

Name

Paul HiringYear Raja

(P040824, Ben, 2008) 2010 2008

Ben

2001 PersNumber

P030407

©

2013 SAP AG. All rights reserved.

P040824

P052867

44

Projection on the plane

Projection list

Name

SELECT PersNumber, Name FROM Employee WHERE PersNumber = 'P040824';

Paul

HiringYear Raja

(P030824, Ben, 2008) 2010 2008

Ben

(P040824, Ben)

2001 PersNumber

P036407

©

2013 SAP AG. All rights reserved.

P040824

P052867

45

Projection on an axis

Projection list

Name

SELECT Name FROM Employee WHERE PersNumber = 'P040824';

Paul

HiringYear Raja

(P040824, Ben, 2008) 2010 2008

Ben

2001 PersNumber

P036407

©

2013 SAP AG. All rights reserved.

P040824

P052867

46

Basic Concepts

What are the components of a (database) table?

©

2013 SAP AG. All rights reserved.

47

Tables

Table-Name

Primary Key

Column Name

Employee PersNumber Name P036407 Paul Table Row P040824 Ben P052867 Raja

HiringYear 2001 2008 2010 (Table Column) value

(Table) Column

©

2013 SAP AG. All rights reserved.

48

Basic Concepts

What is a key?

©

2013 SAP AG. All rights reserved.

49

Key

Key = is a set of columns which serves to uniquely identify any row in the table. The ability to uniquely identify rows must apply in principle (and not only for the rows existing at a certain point in time).

Employee PersNumber Name P036407 Paul P040824 Ben P052867 Raja

©

2013 SAP AG. All rights reserved.

HiringYear 2001 2008 2010

50

Multi-column Keys

A key can consist of multiple columns

Employee Name Country City BuildingNr Block Floor Room SeatNr Mr A

DE

WDF

03

A

5

29

1

Ms B

DE

WDF

03

A

5

29

2

Ms C

DE

WDF

03

A

5

29

3

















 In this example the key consists of 7 columns  1 Key (not 7 keys)!

©

2013 SAP AG. All rights reserved.

51

Multiple Keys

There may be more than one key

Employee PNumber Name TaxID

Passport ID

Plate Number

ChasisNr

CarLicense ID

SWIFT

IBAN

P000815







HD-MM 815









P004711







HD-ML 4711









P012345







HD-OI 2345



























 Here are 7 keys (provided there are no joint accounts)  Just 1 key is selected as Primary Key

©

2013 SAP AG. All rights reserved.

52

Basic Concepts

What is a Foreign-Key?

©

2013 SAP AG. All rights reserved.

53

Foreign-Keys

Foreign-Key = set of columns, which is a (primary) key in an(other) table •

The foreign-key can refer to its own table



It is not necessary to share the same name(s)



The foreign-key can contain only those values ​that occur as a (primary) key value in another table (in addition and if applicable, NULL values ​are allowed)



The foreign-key is usually not a key!

Employee

©

DNumber D010000 D010001 D010002 D010003 D010004 D010005

2013 SAP AG. All rights reserved.

Name Mr A Ms B Mr C Ms D Mr E Ms F

DepartmentNR A01 A01 A02 A02 A02 A03

Foreign-key Relationship

Department DNr Function A01 HANA-Development A02 HANA-Sales A03 HANA-Training A04 ABAP-Development

54

Foreign-Keys

A Foreign-Key can consist of multiple columns

Publication PaperID Topic P001 In-Memory P002 Column Store P003 Row Store P004 SQL & XML P005 XML & SQL P006 DB Recovery

Uni HPI HPI

StudentID 12345 12345

HPI FSU FSU FSU

77777 12345 12345 77777

Student

Uni StudentID Name FirstName HPI 12345 A B HPI 77777 C D FSU 12345 E F FSU 77777 G H

 This example shows 1 Foreign-Key built on 2 columns

©

2013 SAP AG. All rights reserved.

55

Foreign-Keys

There can be multiple Foreign-Keys

Vendor

VID L1 L2 L3 …

©

Name Heidelberg Paper Wiesloch Paper Walldorf Paper …

2013 SAP AG. All rights reserved.

Delivery VID PNr Year Quantity

L1 L1 L1 L1 L2 L2 L3 …

A1 A1 A1 A2 A1 A2 A1 …

2010 2011 2012 2012 2011 2011 2012 …

320 570 925 102 577 100 999 …

Product PNr Description A1 Sticky Notes A2 Printing Paper A3 Envelopes … …

56

Foreign-Keys

The foreign-key can refer to its own table

Employee

©

2013 SAP AG. All rights reserved.

DNumber D010000 D010001 D010002 D010003 D010004 D010005 D010006 D010007

Name Mr A Ms B Mr C Ms D Mr E Ms F Mr G Ms H

DNumberManager D010007 D010007 D010004 D010002 D010002 D010005 D010005

57

Example Scenario

Fictional vehicle registration office as an example scenario

©

2013 SAP AG. All rights reserved.

58

Example: Registration Office

 The database of a fictional registration office will serve as the basis for further explanations.  The tables in this database have been specifically tailored to the SQL course and are not an example of good database design.    

©

The officials working in the fictional registration office have a manager. Each vehicle is registered for exactly one owner (or is unregistered). There is a list of vehicles that have been reported stolen. Owners, who have at least three vehicles registered, are assigned to one or multiple contacts.

2013 SAP AG. All rights reserved.

59

Example: Registration Office

Official(PNr, Name, Overtime, Salary, Manager)

Contact(PersNumber, OwnerID) Owner(OwnerID, Name, Birthday, City)

Car(CarID, PlateNumber, Brand, Color, HP, Owner) Stolen(PlateNumber, reported_at)

©

2013 SAP AG. All rights reserved.

60

Officials

Official

©

PNr

Name

P01

Mr A

P02

Salary

Manager

10

A09

P04

Mr B

10

A10

P04

P03

Ms C

20

A09

P04

P04

Ms D

NULL

A12

P09

P05

Mr E

10

A08

P08

P06

Mr F

18

A09

P08

P07

Ms G

22

A11

P08

P08

Ms H

NULL

A13

P09

P09

Mr I

NULL

A14

NULL

2013 SAP AG. All rights reserved.

Overtime

61

Owner

Owner

©

2013 SAP AG. All rights reserved.

OwnerID

Name

Birthday

City

H01

Ms T

20.06.1934

Wiesloch

H02

Ms U

11.05.1966

Hockenheim

H03

SAP AG

NULL

Walldorf

H04

HDM AG

NULL

Heidelberg

H05

Mr V

21.04.1952

Leimen

H06

Ms W

01.06.1957

Wiesloch

H07

IKEA

NULL

Walldorf

H08

Mr X

30.08.1986

Walldorf

H09

Ms Y

10.02.1986

Sinsheim

H10

Mr Z

03.02.1986

Ladenburg

62

Contact

Contact

©

2013 SAP AG. All rights reserved.

PersNumber

OwnerID

P01

H03

P01

H04

P01

H07

P04

H03

P04

H04

P08

H04

P08

H07

P09

H03

63

Cars Car

©

CarID

PlateNumber

Brand

Color

F01 F02 F03 F04 F05 F06 F07 F08 F09 F10

HD-V 106 HD-VW 4711 HD-JA 1972 HD-AL 1002 HD-MM 3206 HD-VW 1999 HD-ML 3206 HD-IK 1002 HD-UP 13 HD-MT 507

Fiat VW BMW Mercedes Mercedes Audi Audi VW Skoda BMW

red black blue white black yellow blue black red black

75 120 184 136 170 260 116 160 105 140

H06 H03 H03 H07 H03 H05 H03 H07 H02 H04

F11 F12 F13 F14 F15 F16 F17 F18 F19 F20

HD-MM 208 HD-XY 4711 HD-IK 1001 HD-MM 1977 HD-MB 3030 NULL HD-Y 333 HD-MQ 2006 HD-VW 2012 NULL

BMW Skoda Renault Mercedes Skoda Opel Audi Renault VW Audi

green red red white black green orange red black green

184 105 136 170 136 120 184 90 125 184

H02 H04 H07 H03 H03 NULL H09 H03 H01 NULL

2013 SAP AG. All rights reserved.

HP

Owner

64

Stolen Cars Stolen

©

PlateNumber

reported_at

HD-VW 1999

20.06.2012

HD-V 106

01.06.2012

HD-Y 333

21.05.2012

2013 SAP AG. All rights reserved.

65

Registration Office & EU

 A new (fictional) European Union directive requires that the information about which vehicle is registered to which owner, has to be stored in a central transnational database.  The vehicle identification number (CarID) is unique across the EU, but not the Owner ID. Owner_EU(Country, OwnerID, Name, Birthday, City) Car_EU(CarID, PlateNumber, Brand, Color, HP, Country, Owner)

©

2013 SAP AG. All rights reserved.

66

Owner (EU-wide) Owner_EU

©

Country

OwnerID

Name

Birthday

City

D

H01

Ms T

20.06.1934

Wiesloch

D

H02

Ms U

11.05.1966

Hockenheim

D

H03

SAP AG

NULL

Walldorf

D

H04

HDM AG

NULL

Heidelberg

D

H05

Mr V

21.04.1952

Leimen

D

H06

Ms W

01.06.1957

Wiesloch

D

H07

IKEA

NULL

Walldorf

D

H08

Mr X

30.08.1986

Walldorf

D

H09

Ms Y

10.02.1986

Sinsheim

D

H10

Mr Z

03.02.1986

Ladenburg

A

H01

Ms O

21.05.1977

Wien

A

H02

Mr P

02.08.1977

Salzburg

E

H01

Señor Q

18.02.1925

Madrid

E

H02

Señora R

27.02.1927

Barcelona

2013 SAP AG. All rights reserved.

67

Cars (EU-wide) Car_EU

©

CarID F01 F02 F03 F04 F05 F06 F07 F08 F09 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24

2013 SAP AG. All rights reserved.

PlateNumber HD-V 106 HD-VW 4711 HD-JA 1972 HD-AL 1002 HD-MM 3206 HD-VW 1999 HD-ML 3206 HD-IK 1002 HD-UP 13 HD-MT 507 HD-MM 208 HD-XY 4711 HD-IK 1001 HD-MM 1977 HD-MB 3030 NULL HD-Y 333 HD-MQ 2006 HD-VW 2012 NULL W-302 ML S-215 MM 1409 EMM 3206 MLM

Brand Fiat VW BMW Mercedes Mercedes Audi Audi VW Skoda BMW BMW Skoda Renault Mercedes Skoda Opel Audi Renault VW Audi Mercedes VW Audi VW

Color red black blue white black yellow blue black red black green red red white black green orange red black green black silvern blue black

HP 75 120 184 136 170 260 116 160 105 140 184 105 136 170 136 120 184 90 125 184 170 184 116 170

Country D D D D D D D D D D D D D D D NULL D D D NULL A A E E

Owner H06 H03 H03 H07 H03 H05 H03 H07 H02 H04 H02 H04 H07 H03 H03 NULL H09 H03 H01 NULL H01 H02 H01 H02

68

Unit 1: Motivation And Basic Concepts Summary

You should now be able to: • List some database models

• • • • •

Understand the motivation for and foundation of the relational model Understand why learning SQL is important when dealing with HANA Understand how the relation model and SQL are related List the three sub-languages of SQL Understand the sample database used throughout the course

© 2012 SAP AG. All rights reserved.

Internal

6969

Unit 2 Reading data from a table or view

70

Unit 2: Reading Data From A Table Or View

After completing this unit, you will be able to: • Write simple database queries using SQL‘s SELECT statement • Project columns in and out of queries using the SELECT clause • Avoid duplicates in SELECT statement result sets • Include columns based on conditions • Use built-in functions in column lists and WHERE clauses • Limit results sets to the first N rows • Ensure a specific order in SELECT statement result sets • Restrict the result set using the WHERE clause

© 2013 SAP AG. All rights reserved.

Internal

7171

Reading Database Access

Which SQL statement can be used for reading data from a table or view?

©

2013 SAP AG. All rights reserved.

72

Reading Database Access

SELECT … FROM … WHERE …  It

is used to read from a table or view



The SELECT statement is the central construct for read access to data (database) with SQL



The SELECT statement can include the following (optional) clauses:

WHERE, GROUP BY, HAVING, ORDER BY

©

2013 SAP AG. All rights reserved.

73

Reading Database Access

The SELECT statement

©

2013 SAP AG. All rights reserved.

74

SELECT Statement

SELECT FROM WHERE GROUP BY HAVING ORDER BY

©

2013 SAP AG. All rights reserved.

Column, Column, COUNT(*) Table Condition Column, Column Group_Condition Column ASC, Column DESC;

75

SELECT

SELECT clause

©

2013 SAP AG. All rights reserved.

76

SELECT Clause

You can specify a single column in the projection list:

SELECT Name FROM Official;

©

2013 SAP AG. All rights reserved.

NAME ---Mr A Mr B Ms C Ms D Mr E Mr F Ms G Ms H Mr I

77

SELECT Clause

You can specify multiple columns in the projection list:

SELECT PNr, Name, Salary FROM Official;

©

2013 SAP AG. All rights reserved.

PNR --P01 P02 P03 P04 P05 P06 P07 P08 P09

NAME ---Mr A Mr B Ms C Ms D Mr E Mr F Ms G Ms H Mr I

Salary -----A09 A10 A09 A12 A08 A09 A11 A13 A14

78

SELECT Clause

The sequence of the columns in the projection list is relevant:

SELECT PNr, Name FROM Official; PNR --P01 P02 P03 P04 …

©

NAME ---Mr A Mr B Ms C Ms D …

2013 SAP AG. All rights reserved.

SELECT Name, PNr FROM Official; NAME ---Mr A Mr B Ms C Ms D …

PNR --P01 P02 P03 P04 …

79

SELECT Clause

The same column can appear several times in the projection list: We do not recommend using this option

SELECT PNr, PNr, PNr FROM Official;

©

2013 SAP AG. All rights reserved.

PNR --P01 P02 P03 P04 P05 P06 P07 P08 P09

PNR --P01 P02 P03 P04 P05 P06 P07 P08 P09

PNR --P01 P02 P03 P04 P05 P06 P07 P08 P09

80

SELECT Clause

An asterisk (*) in the projection list represents "all columns“:

SELECT * FROM Official; PNR --P01 P02 P03 P04 …

©

2013 SAP AG. All rights reserved.

NAME ---Mr A Mr B Ms C Ms D …

OVERTIME -------10 10 20 ? …

SALARY -----A09 A10 A09 A12 …

MANAGER ------P04 P04 P04 P09 …

81

SELECT Clause Columns can be specified in the projection list in addition to the asterisk (*): We do not recommend using this option

SELECT PNr, *, Name FROM Official; PNR --P01 P02 P03 P04 …

©

PNR --P01 P02 P03 P04 …

NAME ---Mr A Mr B Ms C Ms D …

2013 SAP AG. All rights reserved.

OVERTIME -------10 10 20 ? …

SALARY -----A09 A10 A09 A12 …

MANAGER ------P04 P04 P04 P09 …

NAME ---Mr A Mr B Ms C Ms D …

82

SELECT Clause

The asterisk (*) can be used multiple times in the projection list: We do not recommend using this option

SELECT *, *, * FROM Official; PNR

NAME

OVERTIME

SALARY

MANAGER

PNR

NAME

OVERTIME

SALARY

MANAGER

PNR

NAME

OVERTIME

SALARY

MANAGER

---

----

--------

------

-------

---

----

--------

------

-------

---

----

--------

------

-------

P01

Mr A

10

A09

P04

P01

Mr A

10

A09

P04

P01

Mr A

10

A09

P04

P02

Mr B

10

A10

P04

P02

Mr B

10

A10

P04

P02

Mr B

10

A10

P04

P03

Ms C

20

A09

P04

P03

Ms C

20

A09

P04

P03

Ms C

20

A09

P04

P04

Ms D

?

A12

P09

P04

Ms D

?

A12

P09

P04

Ms D

?

A12

P09

P05

Mr E

10

A08

P08

P05

Mr E

10

A08

P08

P05

Mr E

10

A08

P08

P06

Mr F

18

A09

P08

P06

Mr F

18

A09

P08

P06

Mr F

18

A09

P08

P07

Ms G

22

A11

P08

P07

Ms G

22

A11

P08

P07

Ms G

22

A11

P08

P08

Ms H

?

A13

P09

P08

Ms H

?

A13

P09

P08

Ms H

?

A13

P09

P09

Mr I

?

A14

?

P09

Mr I

?

A14

?

P09

Mr I

?

A14

?

©

2013 SAP AG. All rights reserved.

83

SELECT Clause

You can generate additional “artificial” result columns:

SELECT 'Today', Name, 'has been assigned to salary group', Salary FROM Official; 'Today' ------Today Today Today Today Today …

©

NAME ---Mr A Mr B Ms C Ms D Mr E …

2013 SAP AG. All rights reserved.

'has been assigned to salary group' ----------------------------------has been assigned to salary group has been assigned to salary group has been assigned to salary group has been assigned to salary group has been assigned to salary group …

SALARY -----A09 A10 A09 A12 A08 …

84

SELECT Clause

The additional artificial result column can have a numeric type:

SELECT 'The working week of', Name, 'amounts to', 40, 'hours.' FROM Official; 'The working week of' --------------------The working week of The working week of The working week of The working week of The working week of The working week of The working week of The working week of The working week of

©

2013 SAP AG. All rights reserved.

NAME ---Mr A Mr B Ms C Ms D Mr E Mr F Ms G Ms H Mr I

'amounts to' -----------amounts to amounts to amounts to amounts to amounts to amounts to amounts to amounts to amounts to

40 -40 40 40 40 40 40 40 40 40

'hours'. -------hours. hours. hours. hours. hours. hours. hours. hours. hours.

85

SELECT Clause

The projection list may only contain artificial result columns:

SELECT 'Good Morning!' FROM Official;

©

2013 SAP AG. All rights reserved.

'Good Morning!' --------------Good Morning! Good Morning! Good Morning! Good Morning! Good Morning! Good Morning! Good Morning! Good Morning! Good Morning!

86

SELECT Clause

If the projection list only contains artificial result columns, you can use the special table “Dummy” as reference:

SELECT 'Good Morning!' FROM Dummy;

'Good Morning!' --------------Good Morning!

The “DUMMY“ table contains one column and one row:

SELECT * FROM Dummy;

©

2013 SAP AG. All rights reserved.

DUMMY ----X

87

SELECT Clause

SELECT a, 'b', "c", 1, '2', "3" FROM "4";

a

©

A … … …

'b' --b b b

c … … …

1 1 1 1

'2' --2 2 2

3 … … …

Existing column named “A“ (“A“ as capital letter)

'b'

Artificial result column with string “b“ as value in each row

"c"

Existing column named “c“ (“c“ as lower case letter)

1

Artificial result column with 1 as numeric value in each row

'2'

Artificial result column with string “2“ as value in each row

"3"

Existing column named “3“

"4"

Existing table named “4“

2013 SAP AG. All rights reserved.

88

SELECT Clause

The projection list can have computed columns. If a NULL value is used in an arithmetic operation, the result is also a NULL value:

SELECT Name, Overtime * 60 FROM Official;

©

2013 SAP AG. All rights reserved.

NAME ---Mr A Mr B Ms C Ms D Mr E Mr F Ms G Ms H Mr I

OVERTIME*60 ----------600 600 1200 ? 600 1080 1320 ? ? 89

SELECT Clause

0 * NULL results in NULL (and not 0):

SELECT Name, Overtime, Overtime * 0 FROM Official; NAME ---Mr A Mr B Ms C Ms D Mr E Mr F Ms G Ms H Mr I ©

2013 SAP AG. All rights reserved.

OVERTIME -------10 10 20 ? 10 18 22 ? ?

OVERTIME*0 ---------0 0 0 ? 0 0 0 ? ? 90

SELECT Clause

You can explicitly name computed result columns:

SELECT Name, Overtime * 60 AS Overminutes FROM Official; NAME ---Mr A Mr B Ms C Ms D …

©

2013 SAP AG. All rights reserved.

OVERMINUTES ----------600 600 1200 ? …

91

SELECT Clause

Quotation marks are required, if the result column name should include lowercase letters:

SELECT Name, Overtime * 60 AS "Overminutes" FROM Official; NAME ---Mr A Mr B Ms C Ms D …

©

2013 SAP AG. All rights reserved.

Overminutes ----------600 600 1200 ? …

92

SELECT Clause

Quotation marks are also required, if the result column name should contain blanks:

SELECT Name, Overtime * 60 AS "overtime minutes" FROM Official; NAME ---Mr A Mr B Ms C Ms D …

©

2013 SAP AG. All rights reserved.

overtime minutes ---------------600 600 1200 ? …

93

SELECT Clause

You can also rename non-calculated result columns:

SELECT PNr AS PersNumber, Salary AS "Salary Group" FROM Official; PERSNUMBER ---------P01 P02 P03 P04 …

©

2013 SAP AG. All rights reserved.

Salary Group -----------A09 A10 A09 A12 …

94

SELECT Clause

In the (re)naming of result columns the keyword "AS“ can be omitted:

SELECT PNr PersNumber, Salary "Salary Group" FROM Official; PERSNUMBER ---------P01 P02 P03 P04 …

©

2013 SAP AG. All rights reserved.

Salary Group -----------A09 A10 A09 A12 …

95

SELECT Clause

You can use existing column names for (re)naming of result columns:

SELECT PNr Salary, Salary PNr FROM Official;

©

2013 SAP AG. All rights reserved.

SALARY -----P01 P02 P03 P04 P05 P06 P07 P08 P09

PNR --A09 A10 A09 A12 A08 A09 A11 A13 A14

96

SELECT Clause

Multiple result columns can have the same name: We do not recommend using this option

SELECT PNr AS xyz, Name AS xyz, Salary AS xyz FROM Official; XYZ --P01 P02 P03 P04 …

©

2013 SAP AG. All rights reserved.

XYZ ---Mr A Mr B Ms C Ms D …

XYZ --A09 A10 A09 A12 …

97

SELECT Clause

 

You can use functions in the projection list. The corresponding result columns can be named explicitly.

 Which owner is born in which year?

SELECT Name, YEAR(Birthday) AS "Year of Birth" FROM Owner;

©

2013 SAP AG. All rights reserved.

NAME -----Ms T Ms U SAP AG HDM AG Mr V Ms W IKEA Mr X Ms Y Mr Z

Year of Birth ------------1934 1966 ? ? 1952 1957 ? 1986 1986 1986

98

SELECT Clause

 When were vehicle owners first allowed to drive a car in Germany?

SELECT Name, ADD_YEARS(Birthday, 18) AS "18th Birthday" FROM Owner; NAME -----Ms T Ms U SAP AG HDM AG Mr V Ms W IKEA Mr X Ms Y Mr Z

©

2013 SAP AG. All rights reserved.

18th Birthday ------------1952-06-20 1984-05-11 ? ? 1970-04-21 1975-06-01 ? 2004-08-30 2004-02-10 2004-02-03

99

SELECT Clause

Function calls can be nested  On which day is the owner’s 18th birthday?

SELECT Name, DAYNAME ( ADD_YEARS (Birthday, ROUND(ABS(-18.2)) ) ) AS Weekday FROM Owner;

©

2013 SAP AG. All rights reserved.

NAME -----Ms T Ms U SAP AG HDM AG Mr V Ms W IKEA Mr X Ms Y Mr Z

WEEKDAY ------FRIDAY FRIDAY ? ? TUESDAY SUNDAY ? MONDAY TUESDAY TUESDAY 100

Functions

Which functions are provided by SAP HANA?

©

2013 SAP AG. All rights reserved.

101

Functions

SAP HANA provides following functions (selection):

©

Function

Explanation

YEAR(Date)

year

ADD_YEARS(Date, n)

n years later

DAYNAME(Date)

weekday (English)

CURRENT_DATE

current date

ABS(Number)

absolute value

ROUND(Number)

rounding

SQRT(Number)

square root

UPPER(String)

convert to upper case

SUBSTR(String, Start, Length)

cut out of a string (substring)

LENGTH(String)

length of a string

2013 SAP AG. All rights reserved.

102

SELECT Clause

You can qualify the column name by adding the table name:

SELECT Official.Name FROM Official;

©

2013 SAP AG. All rights reserved.

NAME ---Mr A Mr B Ms C Ms D Mr E Mr F Ms G Ms H Mr I

103

SELECT Clause

The qualification with the table name is also allowed, if the output table has to contain all columns:

SELECT Official.* FROM Official; PNR --P01 P02 P03 P04 …

©

2013 SAP AG. All rights reserved.

NAME ---Mr A Mr B Ms C Ms D …

OVERTIME -------10 10 20 ? …

SALARY -----A09 A10 A09 A12 …

MANAGER ------P04 P04 P04 P09 …

104

SELECT Clause

The projection list can include a mix of qualified and unqualified column names:

SELECT Name, Official.PNr FROM Official;

©

2013 SAP AG. All rights reserved.

NAME ---Mr A Mr B Ms C Ms D Mr E Mr F Ms G Ms H Mr I

PNR --P01 P02 P03 P04 P05 P06 P07 P08 P09

105

Tuple Variables Or Table Aliases

Using Tuple Variables, also known as Table Aliases

©

2013 SAP AG. All rights reserved.

106

Tuple Variables aka Table Aliases

You can use tuple variables in the projection list. Tuple variables are defined in the FROM clause and also referred to as table aliases in SAP HANA (and most other DBMSs).

SELECT o.Name, o.PNr FROM Official o; You can use the (optional) key word AS in the definition of a tuple variable:

SELECT o.Name, o.PNr FROM Official AS o;

©

2013 SAP AG. All rights reserved.

NAME ---Mr A Mr B Ms C Ms D Mr E Mr F Ms G Ms H Mr I

PNR --P01 P02 P03 P04 P05 P06 P07 P08 P09

107

Tuple Variables aka Table Aliases

Despite having defined table aliases the projection list may contain unqualified column names:

SELECT Name, PNr FROM Official o; A mix of qualified and unqualified column names is possible:

SELECT o.Name, PNr FROM Official o;

©

2013 SAP AG. All rights reserved.

NAME ---Mr A Mr B Ms C Ms D Mr E Mr F Ms G Ms H Mr I

PNR --P01 P02 P03 P04 P05 P06 P07 P08 P09

108

Tuple Variables aka Table Aliases

If a table alias is defined in the FROM clause, you are not allowed to use the corresponding table name for qualification of a column name:

SELECT Official.Name FROM Official o;

SELECT Official.Name FROM Official;

SELECT o.Name FROM Official o;

SELECT o.Name FROM Official;

SELECT Name FROM Official o;

SELECT Name FROM Official;

©

2013 SAP AG. All rights reserved.

109

Case Differentiation

Can the projection list contain columns that are based on a case differentiation?

©

2013 SAP AG. All rights reserved.

110

Case Differentiation

The projection list can contain columns that are based on a case differentiation These columns can be named explicitly:

SELECT *, CASE WHEN WHEN ELSE END AS FROM Car;

©

2013 SAP AG. All rights reserved.

HP < 120 THEN 'low' HP >= 120 AND HP < 180 THEN 'medium' 'high' Rating

111

Case Differentiation CARID ----F01 F02 F03 F04 F05 F06 F07 F08 F09 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20

©

PLATENUMBER ----------HD-V 106 HD-VW 4711 HD-JA 1972 HD-AL 1002 HD-MM 3206 HD-VW 1999 HD-ML 3206 HD-IK 1002 HD-UP 13 HD-MT 507 HD-MM 208 HD-XY 4711 HD-IK 1001 HD-MM 1977 HD-MB 3030 ? HD-Y 333 HD-MQ 2006 HD-VW 2012 ?

2013 SAP AG. All rights reserved.

BRAND -------Fiat VW BMW Mercedes Mercedes Audi Audi VW Skoda BMW BMW Skoda Renault Mercedes Skoda Opel Audi Renault VW Audi

COLOR -----red black blue white black yellow blue black red black green red red white black green orange red black green

HP --75 120 184 136 170 260 116 160 105 140 184 105 136 170 136 120 184 90 125 184

OWNER ----H06 H03 H03 H07 H03 H05 H03 H07 H02 H04 H02 H04 H07 H03 H03 ? H09 H03 H01 ?

RATING -----low medium high medium medium high low medium low medium high low medium medium medium medium high low medium high

112

Case Differentiation

If a case differentiation does not correspond to any of the listed cases, a NULL value is returned:

SELECT CarID, CASE Color WHEN 'red' WHEN 'green' WHEN 'yellow' WHEN 'blue' WHEN 'white' WHEN 'black' END AS Color FROM Car;

©

2013 SAP AG. All rights reserved.

THEN THEN THEN THEN THEN THEN

'FF0000' '00FF00' 'FFFF00' '0000FF' 'FFFFFF' '000000'

CARID ----F01 F02 F03 F04 F05 F06 F07 F08 F09 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20

COLOR -----FF0000 000000 0000FF FFFFFF 000000 FFFF00 0000FF 000000 FF0000 000000 00FF00 FF0000 FF0000 FFFFFF 000000 00FF00 ? FF0000 000000 00FF00

113

Case Differentiation

Both the THEN and the ELSE branch can contain references to table columns:

SELECT CarID, CASE WHEN PlateNumber IS NOT NULL THEN PlateNumber ELSE 'The Car is not registered!' END AS PlateNumber, CASE Brand WHEN 'Mercedes' THEN 'Mercedes-Benz' WHEN 'VW' THEN 'Volkswagen' ELSE Brand END AS Brand, Color, HP FROM Car;

©

2013 SAP AG. All rights reserved.

114

Case Differentiation CARID ----F01 F02 F03 F04 F05 F06 F07 F08 F09 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20

©

PLATENUMBER -------------------------HD-V 106 HD-VW 4711 HD-JA 1972 HD-AL 1002 HD-MM 3206 HD-VW 1999 HD-ML 3206 HD-IK 1002 HD-UP 13 HD-MT 507 HD-MM 208 HD-XY 4711 HD-IK 1001 HD-MM 1977 HD-MB 3030 The Car is not registered! HD-Y 333 HD-MQ 2006 HD-VW 2012 The Car is not registered!

2013 SAP AG. All rights reserved.

BRAND ------------Fiat Volkswagen BMW Mercedes-Benz Mercedes-Benz Audi Audi Volkswagen Skoda BMW BMW Skoda Renault Mercedes-Benz Skoda Opel Audi Renault Volkswagen Audi

COLOR -----red black blue white black yellow blue black red black green red red white black green orange red black green

HP --75 120 184 136 170 260 116 160 105 140 184 105 136 170 136 120 184 90 125 184

115

Duplicate Elimination

SELECT DISTINCT

©

2013 SAP AG. All rights reserved.

116

Duplicate Elimination

A table with a primary key does not contain duplicates

SELECT * FROM Car; CARID ----… F04 F05 … F09 … F14 F15 …

©

2013 SAP AG. All rights reserved.

PLATENUMBER ----------… HD-AL 1002 HD-MM 3206 … HD-UP 13 … HD-MM 1977 HD-MB 3030 …

BRAND -------… Mercedes Mercedes … Skoda … Mercedes Skoda …

COLOR ----… white black … red … white black …

HP --… 136 170 … 105 … 170 136 …

OWNER ----… H07 H03 … H02 … H03 H03 …

117

Duplicate Elimination

Duplicates can occur when a key column is not included in the projection list:

SELECT Brand FROM Car;

©

2013 SAP AG. All rights reserved.

BRAND -------… Mercedes Mercedes … Skoda … Mercedes Skoda …

118

Duplicate Elimination

If duplicate elimination is not intended, you can specify the keyword ALL:

SELECT ALL Brand FROM Car;

©

2013 SAP AG. All rights reserved.

BRAND -------… Mercedes Mercedes … Skoda … Mercedes Skoda …

119

Duplicate Elimination

The keyword

DISTINCT ensures that the result table contains no duplicates:

SELECT DISTINCT Brand FROM Car;

©

2013 SAP AG. All rights reserved.

BRAND -------Fiat VW BMW Mercedes Audi Skoda Renault Opel

120

Duplicate Elimination

NULL values ​are treated in duplicate elimination as "normal" values The result table contains (at most) one row that consists entirely of NULL values:

SELECT DISTINCT Overtime FROM Official;

©

2013 SAP AG. All rights reserved.

OVERTIME -------10 20 ? 18 22

121

Duplicate Elimination The "duplicate" term always refers to full result rows:

SELECT Brand, Color FROM Car;

Duplicates

©

2013 SAP AG. All rights reserved.

BRAND -------… Mercedes Mercedes Skoda Skoda Mercedes Skoda …

COLOR ----… white black red red white black …

122

Duplicate Elimination

If a projection list contains multiple columns, DISTINCT always refers to the combination of all these columns:

SELECT DISTINCT Brand, Color FROM Car;

©

2013 SAP AG. All rights reserved.

BRAND -------… Mercedes Mercedes Skoda Skoda …

COLOR ----… white black red black …

123

Duplicate Elimination

DISTINCT can also be used if the result table should contain all the columns If the (source) table has a (primary) key DISTINCT is not required: SELECT DISTINCT * FROM Car; CARID ----… F04 F05 … F09 … F14 F15 …

©

2013 SAP AG. All rights reserved.

PLATENUMBER ----------… HD-AL 1002 HD-MM 3206 … HD-UP 13 … HD-MM 1977 HD-MB 3030 …

BRAND -------… Mercedes Mercedes … Skoda … Mercedes Skoda …

COLOR ----… white black … red … white black …

HP --… 136 170 … 105 … 170 136 …

OWNER ----… H07 H03 … H02 … H03 H03 …

124

Sorting

ORDER BY

©

2013 SAP AG. All rights reserved.

125

Sorting

The result table can be sorted by a specific column:

SELECT Brand, Color FROM Car ORDER BY Brand;

©

2013 SAP AG. All rights reserved.

BRAND -------Audi Audi Audi Audi BMW BMW BMW Fiat Mercedes Mercedes Mercedes Opel Renault Renault Skoda Skoda Skoda VW VW VW

COLOR -----yellow blue orange green blue black green red white black white green red red red red black black black black 126

Sorting

A descending sorting is possible:

SELECT Brand, Color FROM Car ORDER BY Brand DESC;

©

2013 SAP AG. All rights reserved.

BRAND -------VW VW VW Skoda Skoda Skoda Renault Renault Opel Mercedes Mercedes Mercedes Fiat BMW BMW BMW Audi Audi Audi Audi

COLOR -----black black black black red red red red green white black white red green black blue green orange blue yellow 127

Sorting

To sort ascending apply the optional keyword

SELECT Brand, Color FROM Car ORDER BY Brand ASC;

©

2013 SAP AG. All rights reserved.

ASC:

BRAND -------Audi Audi Audi Audi BMW BMW BMW Fiat Mercedes Mercedes Mercedes Opel Renault Renault Skoda Skoda Skoda VW VW VW

COLOR -----yellow blue orange green blue black green red white black white green red red red red black black black black

128

Sorting

The sorting can be applied using a column that does not appear in the projection list:

SELECT Brand, Color FROM Car ORDER BY PlateNumber;

©

2013 SAP AG. All rights reserved.

BRAND -------Opel Audi Renault Mercedes VW BMW Skoda Audi Mercedes BMW Mercedes Renault BMW Skoda Fiat Audi VW VW Skoda Audi

COLOR -----green green red white black blue black blue white green black red black red red yellow black black red orange 129

Sorting

You can sort using a combination of columns:

SELECT Brand, Color FROM Car ORDER BY Brand ASC, Color DESC;

©

2013 SAP AG. All rights reserved.

BRAND -------Audi Audi Audi Audi BMW BMW BMW Fiat Mercedes Mercedes Mercedes Opel Renault Renault Skoda Skoda Skoda VW VW VW

COLOR -----yellow orange green blue green blue black red white white black green red red red red black black black black 130

Sorting

Instead of the column names in the ORDER BY clause, the column numbers (based on the projection list) can be used:

SELECT Brand, Color FROM Car ORDER BY 1 ASC, 2 DESC;

©

2013 SAP AG. All rights reserved.

BRAND -------Audi Audi Audi Audi BMW BMW BMW Fiat Mercedes Mercedes Mercedes Opel Renault Renault Skoda Skoda Skoda VW VW VW

COLOR -----yellow orange green blue green blue black red white white black green red red red red black black black black 131

Sorting

If result columns are named explicitly, you can refer to the new name for sorting:

SELECT Brand AS Manufacturer, Color FROM Car ORDER BY Manufacturer ASC, Color DESC;

©

2013 SAP AG. All rights reserved.

MANUFACTURER -----------Audi Audi Audi Audi BMW BMW BMW Fiat Mercedes Mercedes Mercedes Opel Renault Renault Skoda Skoda Skoda VW VW VW

COLOR -----yellow orange green blue green blue black red white white black green red red red red black black black black 132

Sorting

If result columns are explicitly renamed, you can still reference the original name in the ORDER BY clause:

SELECT Brand AS Manufacturer, Color FROM Car ORDER BY Brand ASC, Color DESC;

©

2013 SAP AG. All rights reserved.

MANUFACTURER -----------Audi Audi Audi Audi BMW BMW BMW Fiat Mercedes Mercedes Mercedes Opel Renault Renault Skoda Skoda Skoda VW VW VW

COLOR -----yellow orange green blue green blue black red white white black green red red red red black black black black 133

Sorting

You can sort based on calculated values.  Sorting criteria: How much is the power below 200 kW?

SELECT CarID, Brand, HP FROM Car ORDER BY 200 - HP / 1.36 ASC;

©

2013 SAP AG. All rights reserved.

CARID ----F06 F03 F11 F17 F20 F05 F14 F08 F10 F04 F13 F15 F19 F02 F16 F07 F09 F12 F18 F01

BRAND -------Audi BMW BMW Audi Audi Mercedes Mercedes VW BMW Mercedes Renault Skoda VW VW Opel Audi Skoda Skoda Renault Fiat

HP --260 184 184 184 184 170 170 160 140 136 136 136 125 120 120 116 105 105 90 75 134

Sorting

You can reference functions in the ORDER BY clause:

SELECT Name, Birthday FROM Owner ORDER BY YEAR(Birthday) DESC, Name ASC; NAME -----Mr X Mr Z Ms Y Ms U Ms W Mr V Ms T HDM AG IKEA SAP AG ©

2013 SAP AG. All rights reserved.

BIRTHDAY ---------1986-08-30 1986-02-03 1986-02-10 1966-05-11 1957-06-01 1952-04-21 1934-06-20 ? ? ? 135

Top-n Clause

How many rows are in the result set?

©

2013 SAP AG. All rights reserved.

136

Top-n Clause

You can determine how many rows should be included in the query result (maximum).  What are the ten most powerful vehicles (based on horse power)?

SELECT TOP 10 CarID, Brand, Color, HP FROM Car CARID BRAND ORDER BY 4 DESC; ----- -------F06 F20 F17 F11 F03 F14 F05 F08 F10 F15 ©

2013 SAP AG. All rights reserved.

Audi Audi Audi BMW BMW Mercedes Mercedes VW BMW Skoda

COLOR -----yellow green orange green blue white black black black black

HP --260 184 184 184 184 170 170 160 140 136 137

Top-n Clause

You can also use the Top-n Clause if the result table should include all columns.  What are the 5 most powerful vehicles (based on horse power)?

SELECT TOP 5 * FROM Car ORDER BY HP DESC; CARID ----F06 F20 F17 F11 F03

©

2013 SAP AG. All rights reserved.

PLATENUMBER ----------HD-VW 1999 ? HD-Y 333 HD-MM 208 HD-JA 1972

BRAND ----Audi Audi Audi BMW BMW

COLOR -----yellow green orange green blue

HP --260 184 184 184 184

OWNER ----H05 ? H09 H02 H03

138

Top-n Clause

You can combine the Top-n Clause with the keyword DISTINCT.  What are the 7 highest HP values?

SELECT TOP 7 DISTINCT HP FROM Car ORDER BY 1 DESC;

©

2013 SAP AG. All rights reserved.

HP --260 184 170 160 140 136 125

139

Top-n Clause

No error is thrown if you request more rows than available. The result set will not be filled with additional, “artificial” rows.  570 different colors are requested:

SELECT TOP 570 DISTINCT Color FROM Car;

©

2013 SAP AG. All rights reserved.

COLOR -----red black blue white yellow green orange

140

Top-n Clause

It is possible to request 0 result rows. In this case the result set does not contain any row.  Zero colors are requested:

SELECT TOP 0 Color FROM Car;

©

2013 SAP AG. All rights reserved.

COLOR -----

141

Limit And Offset Clause

You can use the Limit clause as alternative to the Top-n clause. The Limit clause comes at the very end of the SELECT statement.  What are the 5 most powerful vehicles (based on horse power)?

SELECT * FROM Car ORDER BY HP DESC LIMIT 5; CARID ----F06 F20 F17 F11 F03

©

2013 SAP AG. All rights reserved.

PLATENUMBER ----------HD-VW 1999 ? HD-Y 333 HD-MM 208 HD-JA 1972

BRAND ----Audi Audi Audi BMW BMW

COLOR -----yellow green orange green blue

HP --260 184 184 184 184

OWNER ----H05 ? H09 H02 H03

142

Limit And Offset Clause

The Limit clause can be combined with the Offset clause to skip records. This allows you to read result sets “page by page”.  What are the next 5 most powerful vehicles (based on horse power)?

SELECT * FROM Car ORDER BY HP DESC LIMIT 5 CARID OFFSET 5; ----F78 F77 F14 F05 F07

©

2013 SAP AG. All rights reserved.

PLATENUMBER ----------HD-MT 2510 HD-MT 2509 HD-MM 1977 HD-MM 3206 HD-IK 1002

BRAND -------? ? Mercedes Mercedes VW

COLOR -----green red white black black

HP --260 184 184 184 184

OWNER ----? ? H03 H03 H07

143

WHERE Clause

Which rows are included in the result set?

©

2013 SAP AG. All rights reserved.

144

WHERE Clause

The WHERE clause is used to filter rows. It is used to extract only those rows that fulfill a specified criterion.

SELECT PlateNumber, Brand, Color FROM Car WHERE Brand = 'BMW'; PLATENUMBER ----------HD-JA 1972 HD-MT 507 HD-MM 208

©

2013 SAP AG. All rights reserved.

BRAND ----BMW BMW BMW

COLOR ----blue black green

145

WHERE Clause

You can reference numeric columns in the WHERE clause.

SELECT HP, Brand, Color FROM Car WHERE HP >= 170;

©

2013 SAP AG. All rights reserved.

HP --184 170 260 184 170 184 184

BRAND -------BMW Mercedes Audi BMW Mercedes Audi Audi

COLOR -----blue black yellow green white orange green

146

WHERE Clause

You can reference a column in the WHERE clause that is not included in the projection list.

SELECT Brand, Color FROM Car WHERE HP >= 170;

©

2013 SAP AG. All rights reserved.

BRAND -------BMW Mercedes Audi BMW Mercedes Audi Audi

COLOR -----blue black yellow green white orange green

147

WHERE Clause

You can check for NULL in the WHERE clause:

SELECT CarID, Brand, Color FROM Car WHERE PlateNumber IS NULL; CARID ----F16 F20

©

2013 SAP AG. All rights reserved.

BRAND ----Opel Audi

COLOR ----green green

148

WHERE Clause

You can check for IS in the WHERE clause:

NOT NULL

SELECT CarID, Brand, Color FROM Car WHERE PlateNumber IS NOT NULL;

©

2013 SAP AG. All rights reserved.

CARID ----F01 F02 F03 F04 F05 F06 F07 F08 F09 F10 F11 F12 F13 F14 F15 F17 F18 F19

BRAND -------Fiat VW BMW Mercedes Mercedes Audi Audi VW Skoda BMW BMW Skoda Renault Mercedes Skoda Audi Renault VW

COLOR -----red black blue white black yellow blue black red black green red red white black orange red black

149

WHERE Clause

You can check if values are included IN a value-list.

SELECT Brand, Color FROM Car WHERE Color IN ('red', 'blue', 'orange'); BRAND ------Fiat BMW Audi Skoda Skoda Renault Audi Renault ©

2013 SAP AG. All rights reserved.

COLOR -----red blue blue red red red orange red 150

WHERE Clause

You can check if values are included in an interval.

SELECT PlateNumber, Brand, Color, HP FROM Car WHERE HP BETWEEN 140 AND 170; PLATENUMBER ----------HD-MM 3206 HD-IK 1002 HD-MT 507 HD-MM 1977

©

2013 SAP AG. All rights reserved.

BRAND -------Mercedes VW BMW Mercedes

COLOR ----black black black white

HP --170 160 140 170

151

WHERE Clause

You can reference calculated values in the WHERE clause. We do not recommend this option for performance reasons.  Which cars have a power of at least 125 kW?

SELECT CarID, Brand, HP FROM Car WHERE HP / 1.36 >= 125;

©

2013 SAP AG. All rights reserved.

CARID ----F03 F05 F06 F11 F14 F17 F20

BRAND -------BMW Mercedes Audi BMW Mercedes Audi Audi

HP --184 170 260 184 170 184 184

152

WHERE Clause

You can use functions in the WHERE clause.

SELECT * FROM Owner WHERE YEAR(Birthday) = 1986; OWNERID ------H08 H09 H10

©

2013 SAP AG. All rights reserved.

NAME ---Mr X Ms Y Mr Z

BIRTHDAY ---------1986-08-30 1986-02-10 1986-02-03

CITY --------Walldorf Sinsheim Ladenburg

153

WHERE Clause

You can use search patterns in the WHERE clause.

SELECT PlateNumber, Brand, Color, HP FROM Car WHERE PlateNumber LIKE '%MM%'; PLATENUMBER ----------HD-MM 3206 HD-MM 208 HD-MM 1977

©

2013 SAP AG. All rights reserved.

BRAND -------Mercedes BMW Mercedes

COLOR ----black green white

HP --170 184 170

154

LIKE Predicate The wildcard character % (percentage sign) represents any string containing no, one, or multiple characters. The wildcard character _ (underscore) represents any single character. WHERE MyColumn LIKE 'M%'

String starting with “M“

WHERE MyColumn LIKE 'M _'

String of two characters starting with “M“

WHERE MyColumn LIKE '%M'

String ending with “M“

WHERE MyColumn LIKE '%M%'

String containing “M“

WHERE MyColumn LIKE '_ _ _'

String with length 3

WHERE MyColumn LIKE '_ _ _ _T_M%'

“T“ on fifth and “M“ on seventh position

©

2013 SAP AG. All rights reserved.

155

LIKE Predicate If you want to search for the percentage sign (%) or underscore (_) itself, you have to place an ESCAPE character in front. You can choose the ESCAPE character (with some restrictions). LIKE '$%%' ESCAPE '$'

String starting with a percentage sign

LIKE '$_ _' ESCAPE '$'

String of two characters starting with an underscore

LIKE '%$%' ESCAPE '$'

String ending with a percentage sign

LIKE '%$%%' ESCAPE '$'

String containing a percentage sign

LIKE '%$_$%%' ESCAPE '$'

String containing an underscore followed by a percentage sign

LIKE '_ _ _ _ $%_ $ _%' ESCAPE '$'

“%“ on fifth and “_“ on seventh position.

©

2013 SAP AG. All rights reserved.

156

LIKE Predicate If you need to search for the escape character within a string, you need to put the escape character in front of itself to mask it. LIKE '$%%$$' ESCAPE '$'

String starting with a percentage sign and ending with $

LIKE '$_%$$%$_' ESCAPE '$'

String starting and ending with an underscore and containing the escape character $

LIKE '%$%$$%' ESCAPE '$'

String containing a percentage sign followed by $

LIKE '%$_%$$' ESCAPE '$'

String containing an underscore and ending with $

LIKE '_ _ _ _ $%_ $$%' ESCAPE '$'

“%“ on fifth and “$“ on seventh position

©

2013 SAP AG. All rights reserved.

157

WHERE Clause

You can use compound WHERE clauses.

SELECT PlateNumber, Brand, Color FROM Car WHERE Brand = 'Skoda' AND Color = 'red'; PLATENUMBER ----------HD-UP 13 HD-XY 4711

©

2013 SAP AG. All rights reserved.

BRAND ----Skoda Skoda

COLOR ----red red

158

WHERE Clause

You can reference the same column multiple times.

SELECT PlateNumber, Brand, Color FROM Car WHERE Brand = 'Skoda' OR Brand = 'BMW'; PLATENUMBER ----------HD-JA 1972 HD-UP 13 HD-MT 507 HD-MM 208 HD-XY 4711 HD-MB 3030

©

2013 SAP AG. All rights reserved.

BRAND ----BMW Skoda BMW BMW Skoda Skoda

COLOR ----blue red black green red black

159

WHERE Clause

You can use brackets.

SELECT PlateNumber, Brand, Color FROM Car WHERE (Brand = 'Skoda' OR Brand = 'BMW') AND Color = 'black'; PLATENUMBER ----------HD-MT 507 HD-MB 3030

©

2013 SAP AG. All rights reserved.

BRAND ----BMW Skoda

COLOR ----black black

160

WHERE Clause  The license plate started with "HD" for Heidelberg  I'm sure I saw an "M"  I clearly remember the digits "2" and "6"  The "2" was definitely left of the "6"  Between the "2" and the "6" was exactly one digit  It was neither Skoda, nor a VW  The car was blue or green CARID ----F07

PLATENUMBER ----------HD-ML 3206

BRAND ----Audi

COLOR ----blue

HP --116

SELECT * FROM Car WHERE PlateNumber LIKE 'HD-%M% %2_6%' AND Brand 'Skoda' AND Brand 'VW' AND (Color = 'blue' OR Color = 'green');

©

2013 SAP AG. All rights reserved.

OWNER ----H03

161

Operator Precedence

What is the precedence of the different operators?

©

2013 SAP AG. All rights reserved.

162

Operator Precedence

The operators have the precedence indicated by the table below: Precedence

Operator

Explanation

Highest

()

parentheses



unary minus

*, /

multiplication, division

+, ‒

addition, subtraction

=, =, , IS NULL, LIKE, BETWEEN

Lowest

©

2013 SAP AG. All rights reserved.

comparison

NOT

logical negation

AND

conjunction

OR

disjunction

163

Unit 2: Reading Data From A Table And View Summary

You should now be able to: • Write simple database queries using SQL‘s SELECT statement

• • • • • • •

©

Project columns in and out of queries using the SELECT clause Avoid duplicates in SELECT statement result sets Include columns based on conditions Use built-in functions in column lists and WHERE clauses Limit results sets to the first N rows Ensure a specific order in SELECT statement result sets Restrict the result set using the WHERE clause

2013 SAP AG. All rights reserved.

164

Unit 3 Aggregating Data

165

Unit 3: Aggregating Data Learning Objectives After completing this unit, you will be able to: • Determine aggregated values on table columns using a single SELECT statement • List the aggregate functions supported by HANA • Determine such aggregated values for groups of rows, using the GROUP BY clause • Filter such groups using the HAVING clause

©

2013 SAP AG. All rights reserved.

166

Aggregate Expressions

Calculations across multiple rows

©

2013 SAP AG. All rights reserved.

167

Aggregate Expressions

Count(*)



You can calculate the number of rows in the result set using COUNT .



Rows containing only NULL values are included.

 What is the quantity of cars with the brand “Audi“?

SELECT COUNT(*) FROM Car WHERE Brand = 'Audi';

©

2013 SAP AG. All rights reserved.

COUNT(*) -------4

168

Count(*)

Aggregate Expressions

You can explicitly name columns created by aggregate expressions.

 What is the quantity of cars with the brand “Audi“?

SELECT COUNT(*) AS "Quantity of Audi" FROM Car WHERE Brand = 'Audi'; Quantity of Audi ---------------4

©

2013 SAP AG. All rights reserved.

169

Aggregate Expressions

Count()

 

You can calculate the number of values within a single column. NULL values are not included.



You can only use a single column as parameter of COUNT.

 How many cars are registered to an owner?  This does not calculate the number of different owners!

SELECT COUNT(Owner) FROM Car;

©

2013 SAP AG. All rights reserved.

COUNT(OWNER) -----------18

170

Aggregate Expressions





Count(DISTINCT )

You can calculate the number of different NOT-NULL-values of a certain column. You can use only a single column as parameter for COUNT DISTINCT. NULL values are not included.

 How many different owners have a registered car?

SELECT COUNT(DISTINCT Owner) FROM Car; COUNT(DISTINCT OWNER) --------------------8

©

2013 SAP AG. All rights reserved.

171

Aggregate Expressions

SELECT * FROM T; SELECT S FROM T;

S ? ? ? X X

SELECT COUNT(*) FROM T;

COUNT(*) -------5

SELECT COUNT(S) FROM T;

COUNT(S) -------2

SELECT COUNT(DISTINCT *) FROM T; SELECT COUNT(DISTINCT S) FROM T;

©

2013 SAP AG. All rights reserved.

COUNT(DISTINCT S) ----------------1

172

Aggregate Expressions

MIN/MAX()

You can calculate the minimum or maximum value in a column.

 What is the horsepower range of the registered cars?

SELECT MIN(HP), MAX(HP) FROM Car;

©

2013 SAP AG. All rights reserved.

MIN(HP) ------75

MAX(HP) ------260

173

Aggregate Expressions

You can combine aggregate expressions and “normal” functions.

In which year was the youngest owner born?

SELECT MAX(YEAR(Birthday)) AS Year FROM Owner;

YEAR ---1986

SELECT YEAR(MAX(Birthday)) AS Year FROM Owner;

©

2013 SAP AG. All rights reserved.

174

Aggregate Expressions

The sequence of nested functions can be relevant.

 What is the lowest or highest HP value?

SELECT ABS(MAX(0 - HP)) FROM Car;

SELECT MAX(ABS(0 - HP)) FROM Car;

©

2013 SAP AG. All rights reserved.

ABS(MAX(0-HP)) -------------75

MAX(ABS(0-HP)) -------------260

175

Aggregate Expressions

The WHERE clause is included in the minimum and maximum calculation.

 What is the horsepower range of BMWs?

SELECT MIN(HP), MAX(HP) FROM Car WHERE Brand = 'BMW';

©

2013 SAP AG. All rights reserved.

MIN(HP) ------140

MAX(HP) ------184

176

Aggregate Expressions

   

SUM()

You can sum up the values in a column. The WHERE clause is included in the summation. NULL values in the column are ignored. Individual NULL values contained in the column do not result in NULL for the sum. (as long as there is at least one numeric value)

 What is the sum of horsepower for all Audis?

SELECT SUM(HP) FROM Car WHERE Brand = 'Audi';

©

2013 SAP AG. All rights reserved.

SUM(HP) ------744

177

Aggregate Expressions

    

You can sum up the distinct values of a column. The WHERE clause is included in the summation. NULL values of the column are ignored. Individual NULL values contained in the column do not result in NULL for the sum. (as long as there is at least one numeric value) If a value occurs multiple times, it is still counted only once when summing

SELECT SUM(DISTINCT HP) FROM Car WHERE Brand = 'Audi';

©

SUM(DISTINCT )

2013 SAP AG. All rights reserved.

SUM(DISTINCT HP) ---------------560

178

Aggregate Expressions

   

AVG()

You can calculate the average of all values in a column. The WHERE clause is included in the calculation. NULL values in the column are completely ignored (in the numerator and denominator) Individual NULL values contained in the column do not result in NULL for the average.

 What is the average horsepower of Audi?

SELECT AVG(HP) FROM Car WHERE Brand = 'Audi';

©

2013 SAP AG. All rights reserved.

AVG(HP) ------186

179

Aggregate Expressions

    

AVG(DISTINCT )

You can calculate the average of all distinct values in a column. The WHERE clause is included in the calculation. NULL values in the column are completely ignored (in the numerator and denominator) Individual NULL values contained in the column do not result in NULL for the average. If a value occurs multiple times, it is still counted only once for the average calculation.

SELECT AVG(DISTINCT HP) FROM Car WHERE Brand = 'Audi'; AVG(DISTINCT HP) ----------------------------------186.6666666666666666666666666666667

©

2013 SAP AG. All rights reserved.

180

Aggregate Expressions

Which aggregate expressions are available in SAP HANA?

©

2013 SAP AG. All rights reserved.

181

Aggregate Expressions

SAP HANA provides the following aggregate expressions:

©

2013 SAP AG. All rights reserved.

Aggregate Name

Description

COUNT

Count

MIN

Minimum

MAX

Maximum

SUM

Sum

AVG

Average

STDDEV

Standard Deviation

VAR

Variance

182

Group By

GROUP BY

©

2013 SAP AG. All rights reserved.

183

Group By

  

A table can be divided into (disjoint) groups of rows A group is represented in the query result by a single row Aggregate expressions will be evaluated separately for each group

 What is the number of cars per brand?

SELECT Brand, COUNT(*) FROM Car GROUP BY Brand;

©

2013 SAP AG. All rights reserved.

BRAND -------Fiat VW BMW Mercedes Audi Skoda Renault Opel

COUNT(*) -------1 3 3 3 4 3 2 1

184

Group By



What is the highest horse power value per brand?

SELECT Brand, MAX(HP) FROM Car GROUP BY Brand;

©

2013 SAP AG. All rights reserved.

BRAND -------Fiat VW BMW Mercedes Audi Skoda Renault Opel

MAX(HP) ------75 160 184 170 260 136 136 120

185

Group By

NULL values of the GROUP BY column are treated as “normal” values creating a single group.  How often a certain overtime value occurs?

SELECT Overtime, COUNT(*) AS Frequency FROM Official GROUP BY Overtime; OVERTIME FREQUENCY -------10 20 ? 18 22

©

2013 SAP AG. All rights reserved.

--------3 1 3 1 1

186

Group By

You can combine GROUP BY with ORDER BY for sorting.

SELECT FROM GROUP BY ORDER BY

©

2013 SAP AG. All rights reserved.

Brand, MAX(HP) Car Brand 2 DESC, 1 ASC;

BRAND -------Audi BMW Mercedes VW Renault Skoda Opel Fiat

MAX(HP) ------260 184 170 160 136 136 120 75

187

Group By

You can use functions in the GROUP BY clause.



What is the number of owners per year of birth?

SELECT FROM GROUP BY ORDER BY

YEAR(Birthday), COUNT(*) Owner YEAR(Birthday) 2 DESC, 1 ASC; YEAR(BIRTHDAY) -------------? 1986 1934 1952 1957 1966

©

2013 SAP AG. All rights reserved.

COUNT(*) -------3 3 1 1 1 1

188

Group By

The WHERE clause is processed before the grouping.  What is the number of black cars per brand?  Only brands with black cars are included into the result set.

SELECT FROM WHERE GROUP BY

©

Brand, COUNT(*) Car Color = 'black' Brand;

2013 SAP AG. All rights reserved.

BRAND -------VW Mercedes BMW Skoda

COUNT(*) -------3 1 1 1

189

Group By

You can use a combination of columns in the GROUP BY clause.

SELECT Brand, Color, COUNT(*) FROM Car GROUP BY Brand, Color;

©

2013 SAP AG. All rights reserved.

BRAND -------Fiat VW BMW Mercedes Mercedes Audi Audi Skoda BMW BMW Renault Skoda Opel Audi Audi

COLOR -----red black blue white black yellow blue red black green red black green orange green

COUNT(*) -------1 3 1 2 1 1 1 2 1 1 2 1 1 1 1

190

Group By

You can explicitly rename result columns in combination with GROUP BY.

SELECT Brand AS Manufacturer, Color, COUNT(*) AS "# of cars" FROM Car GROUP BY Brand, Color; MANUFACTURER -----------Fiat VW BMW Mercedes Mercedes Audi Audi Skoda BMW BMW Renault …

©

2013 SAP AG. All rights reserved.

COLOR -----red black blue white black yellow blue red black green red …

# of cars --------1 3 1 2 1 1 1 2 1 1 2 …

191

HAVING Clause

What groups are included in the query result?

©

2013 SAP AG. All rights reserved.

192

HAVING

Using the HAVING clause you can specify which conditions a group must meet to be included in the result set.  Which combinations of brand and color occur at least twice?

SELECT FROM GROUP BY HAVING

Brand, Color, COUNT(*) Car Brand, Color COUNT(*) >= 2; BRAND -------VW Mercedes Skoda Renault

©

2013 SAP AG. All rights reserved.

COLOR ----black white red red

COUNT(*) -------3 2 2 2

193

HAVING

The HAVING condition can reference columns not included in the projection list.  What is the number of brand-color combinations, where at least one car has less than 120 HP?  We want to analyze based on the quantity of all cars, not only the cars with less than 120 HP.

SELECT FROM GROUP BY HAVING

Brand, Color, COUNT(*) Car Brand, Color MIN(HP) < 120; BRAND ------Fiat Audi Skoda Renault

©

2013 SAP AG. All rights reserved.

COLOR ----red blue red red

COUNT(*) -------1 1 2 2

194

SELECT statement

    

What is the number of cars per brand, which are black or red? Rename the Brand column to "Manufacturer" Display only those manufacturers with at least 2 cars Sort the result set first descending by number of cars Sort the result set second ascending by manufacturer.

SELECT FROM WHERE GROUP BY HAVING ORDER BY

©

c.Brand AS "Manufacturer", COUNT(*) Car c Color IN ('black', 'red') Brand COUNT(*) >= 2 Manufacturer 2 DESC, Brand ASC;

2013 SAP AG. All rights reserved.

-----------Skoda VW Renault

COUNT(*) -------3 3 2

195

Unit 3: Aggregating Data Summary

You should now be able to: • Determine aggregated values on table columns using a single SELECT statement • List the aggregate functions supported by HANA • Determine such aggregated values for groups of rows, using the GROUP BY clause • Filter such groups using the HAVING clause

©

2013 SAP AG. All rights reserved.

196

Unit 4 Reading Data From Multiple Tables Part I

197

Unit 4: Reading Data From Multiple Tables Part I Learning Objectives After completing this unit, you will be able to: • Merge the result of several select statements using the UNION statement • • •

©

Combine data from several tables when querying data using JOIN constructs List the various types of Joins Explain the differences between the various types of Joins, and apply the right type of Join depending on the problem

2013 SAP AG. All rights reserved.

198

Access to multiple tables

How can I read data from multiple tables and views?

©

2013 SAP AG. All rights reserved.

199

Access to multiple tables

For read access to multiple database tables / views the following options are available:  Combination of results from several partial queries (UNION)  UNION ALL vs. UNION

 Combination of several tables (JOIN)  CROSS JOIN vs. INNER JOIN vs. OUTER JOIN  Implicit JOIN vs. Explicit JOIN

 Nested queries (Sub Query)  Uncorrelated Sub Query vs. Correlated Sub Query

©

2013 SAP AG. All rights reserved.

200

UNION [ALL]

Combination of results from several partial queries

©

2013 SAP AG. All rights reserved.

201

UNION [ALL]

SELECT Column, Column, Column FROM Table WHERE Condition UNION ALL SELECT Column, Column, Column FROM Table WHERE Condition;

©

2013 SAP AG. All rights reserved.

202

UNION [ALL]

You can combine the result tables of multiple queries using UNION [ALL].   

The individual result tables must have the same number of columns. The corresponding result columns must have compatible data types. The column names of the resulting output table are based on the first SELECT statement.

SELECT PNr, Name FROM Official WHERE Salary = 'A09' UNION ALL SELECT OwnerID, Name FROM Owner WHERE Birthday >= '1977-05-21';

©

2013 SAP AG. All rights reserved.

PNR --P01 P03 P06 H08 H09 H10

NAME ---Mr A Ms C Mr F Mr X Ms Y Mr Z

203

UNION [ALL]

 Almost the same statement as on the previous slide – but with a changed sequence of partial queries.  The column names of the resulting output table are based on the first SELECT statement.

SELECT OwnerID, Name FROM Owner WHERE Birthday >= '1977-05-21' UNION ALL SELECT PNr, Name FROM Official WHERE Salary = 'A09';

©

2013 SAP AG. All rights reserved.

OWNERID ------H08 H09 H10 P01 P03 P06

NAME ---Mr X Ms Y Mr Z Mr A Ms C Mr F

204

UNION [ALL]

With UNION [ALL] you can also explicitly rename the result columns. SELECT OwnerID AS "Person ID", Name FROM Owner WHERE Birthday >= '1977-05-21' UNION ALL SELECT PNr, Name FROM Official WHERE Salary = 'A09';

©

2013 SAP AG. All rights reserved.

Person ID --------H08 H09 H10 P01 P03 P06

NAME ---Mr X Ms Y Mr Z Mr A Ms C Mr F

205

UNION ALL

If the results of multiple partial queries overlap, the overall result includes duplicates with UNION ALL. SELECT PlateNumber, Brand, Color FROM Car WHERE Brand = 'Mercedes' UNION ALL SELECT PlateNumber, Brand, Color FROM Car WHERE Color = 'white';

Duplicates

©

2013 SAP AG. All rights reserved.

PLATENUMBER ----------HD-AL 1002 HD-MM 3206 HD-MM 1977 HD-AL 1002 HD-MM 1977

BRAND -------Mercedes Mercedes Mercedes Mercedes Mercedes

COLOR ----white black white white white

206

UNION

You use UNION instead of UNION ALL to eliminate duplicates.

SELECT FROM WHERE UNION SELECT FROM WHERE

PlateNumber, Brand, Color Car Brand = 'Mercedes' PlateNumber, Brand, Color Car Color = 'white'; PLATENUMBER ----------HD-AL 1002 HD-MM 3206 HD-MM 1977

©

2013 SAP AG. All rights reserved.

BRAND -------Mercedes Mercedes Mercedes

COLOR ----white black white 207

UNION [ALL]

You can use UNION [ALL] to combine result tables of multiple partial queries. SELECT FROM WHERE UNION SELECT FROM WHERE UNION SELECT FROM WHERE

©

PlateNumber, Brand, Color Car Brand = 'BMW' PlateNumber, Brand, Color Car Color = 'yellow'

PlateNumber, Brand, Color Car Color = 'orange';

2013 SAP AG. All rights reserved.

PLATENUMBER ----------HD-JA 1972 HD-MT 507 HD-MM 208 HD-VW 1999 HD-Y 333

BRAND ----BMW BMW BMW Audi Audi

COLOR -----blue black green yellow orange 208

Joining Tables

Joining tables

©

2013 SAP AG. All rights reserved.

209

Joining Tables

With JOIN semantics you can distinguish between:  CROSS JOIN  INNER JOIN  OUTER JOIN –

LEFT OUTER JOIN



RIGHT OUTER JOIN



FULL OUTER JOIN

With JOIN syntax you can distinguish between:  Implicit JOIN  Explicit JOIN

©

2013 SAP AG. All rights reserved.

210

Joining Tables

CROSS JOIN (Cartesian Product)

©

2013 SAP AG. All rights reserved.

211

CROSS JOIN

 

Each row of the left table is connected to each row of the right table. There is no CROSS JOIN join condition.

L

©

… … … … … …

X 1 2 3 4 5

2013 SAP AG. All rights reserved.

… … … … … …

… … … … … …

R

… … … … … …

Y 3 4 5 6 7

… … … … … …

… … … … … …

212

CROSS JOIN

SELECT Column, Column, Column FROM Table, Table WHERE Condition; SELECT Column, Column, Column FROM Table CROSS JOIN Table WHERE Condition;

©

2013 SAP AG. All rights reserved.

213

Implicit CROSS JOIN

Each row of a table is connected to each row of the other table.  The result set contains 10 * 20 = 200 rows

SELECT * FROM Owner, Car; OWNERID ------H01 H02 H03 … H01 H02 H03 … H01 H02 H03 … H10

©

2013 SAP AG. All rights reserved.

NAME -----Ms T Ms U SAP AG … Ms T Ms U SAP AG … Ms T Ms U SAP AG … Mr Z

BIRTHDAY ---------1934-06-20 1966-05-11 ? … 1934-06-20 1966-05-11 ? … 1934-06-20 1966-05-11 ? … 1986-02-03

CITY ---------Wiesloch Hockenheim Walldorf … Wiesloch Hockenheim Walldorf … Wiesloch Hockenheim Walldorf … Ladenburg

CARID ----F01 F01 F01 … F02 F02 F02 … F03 F03 F03 … F20

PLATENUMBER ----------HD-V 106 HD-V 106 HD-V 106 … HD-VW 4711 HD-VW 4711 HD-VW 4711 … HD-JA 1972 HD-JA 1972 HD-JA 1972 … ?

BRAND ----Fiat Fiat Fiat … VW VW VW … BMW BMW BMW … Audi

COLOR ----red red red … black black black … blue blue blue … green

HP --75 75 75 … 120 120 120 … 184 184 184 … 184

OWNER ----H06 H06 H06 … H03 H03 H03 … H03 H03 H03 … ?

214

Explicit CROSS JOIN

Each row of a table is connected to each row of the other table.  The result set contains 10 * 20 = 200 rows

SELECT * FROM Owner CROSS JOIN Car; OWNERID ------H01 H02 H03 … H01 H02 H03 … H01 H02 H03 … H10

©

2013 SAP AG. All rights reserved.

NAME -----Ms T Ms U SAP AG … Ms T Ms U SAP AG … Ms T Ms U SAP AG … Mr Z

BIRTHDAY ---------1934-06-20 1966-05-11 ? … 1934-06-20 1966-05-11 ? … 1934-06-20 1966-05-11 ? … 1986-02-03

CITY ---------Wiesloch Hockenheim Walldorf … Wiesloch Hockenheim Walldorf … Wiesloch Hockenheim Walldorf … Ladenburg

CARID ----F01 F01 F01 … F02 F02 F02 … F03 F03 F03 … F20

PLATENUMBER ----------HD-V 106 HD-V 106 HD-V 106 … HD-VW 4711 HD-VW 4711 HD-VW 4711 … HD-JA 1972 HD-JA 1972 HD-JA 1972 … ?

BRAND ----Fiat Fiat Fiat … VW VW VW … BMW BMW BMW … Audi

COLOR ----red red red … black black black … blue blue blue … green

HP --75 75 75 … 120 120 120 … 184 184 184 … 184

OWNER ----H06 H06 H06 … H03 H03 H03 … H03 H03 H03 … ?

215

CROSS JOIN

You can specify a WHERE clause for the implicit and explicit CROSS JOIN.

SELECT * FROM Owner, Car WHERE HP > 250; OWNERID ------H01 H02 H03 H04 H05 H06 H07 H08 H09 H10

©

NAME -----Ms T Ms U SAP AG HDM AG Mr V Ms W IKEA Mr X Ms Y Mr Z

2013 SAP AG. All rights reserved.

BIRTHDAY ---------1934-06-20 1966-05-11 ? ? 1952-04-21 1957-06-01 ? 1986-08-30 1986-02-10 1986-02-03

SELECT * FROM Owner CROSS JOIN Car WHERE HP > 250; CITY ---------Wiesloch Hockenheim Walldorf Heidelberg Leimen Wiesloch Walldorf Walldorf Sinsheim Ladenburg

CARID ----F06 F06 F06 F06 F06 F06 F06 F06 F06 F06

PLATENUMBER ----------HD-VW 1999 HD-VW 1999 HD-VW 1999 HD-VW 1999 HD-VW 1999 HD-VW 1999 HD-VW 1999 HD-VW 1999 HD-VW 1999 HD-VW 1999

BRAND ----Audi Audi Audi Audi Audi Audi Audi Audi Audi Audi

COLOR -----yellow yellow yellow yellow yellow yellow yellow yellow yellow yellow

HP --260 260 260 260 260 260 260 260 260 260

OWNER ----H05 H05 H05 H05 H05 H05 H05 H05 H05 H05

216

CROSS JOIN

You can join a table to itself. 

The result set contains 20 * 20 = 400 rows

SELECT * FROM Owner, Car WHERE HP > 250; CARID ----F01 F01 F01 … F02 F02 F02 … F03 F03 F03 … F20 ©

PLATENUMBER ----------HD-V 106 HD-V 106 HD-V 106 … HD-VW 4711 HD-VW 4711 HD-VW 4711 … HD-JA 1972 HD-JA 1972 HD-JA 1972 … ?

2013 SAP AG. All rights reserved.

BRAND ----Fiat Fiat Fiat … VW VW VW … BMW BMW BMW … Audi

COLOR ----red red red … black black black … blue blue blue … green

SELECT * FROM Owner CROSS JOIN Car WHERE HP > 250; HP --75 75 75 … 120 120 120 … 184 184 184 … 184

OWNER ----H06 H06 H06 … H03 H03 H03 … H03 H03 H03 … ?

CARID ----F01 F02 F03 … F01 F02 F03 … F01 F02 F03 … F20

PLATENUMBER ----------HD-V 106 HD-VW 4711 HD-JA 1972 … HD-V 106 HD-VW 4711 HD-JA 1972 … HD-V 106 HD-VW 4711 HD-JA 1972 … ?

BRAND ----Fiat VW BMW … Fiat VW BMW … Fiat VW BMW … Audi

COLOR ----red black blue … red black blue … red black blue … green

HP --75 120 184 … 75 120 184 … 75 120 184 … 184

OWNER ----H06 H03 H03 … H06 H03 H03 … H06 H03 H03 … ? 217

CROSS JOIN

You can combine more than two tables.  The result set contains 10 * 20 * 3 = 600 rows

SELECT * FROM Owner CROSS JOIN Car CROSS JOIN Stolen;

SELECT * FROM Owner, Car, Stolen; OWNERID ------H01 H01 H01 … H01 H01 H01 … H02 H02 H02 … H10

©

NAME ---Ms T Ms T Ms T … Ms T Ms T Ms T … Ms U Ms U Ms U … Mr Z

BIRTHDAY ---------1934-06-20 1934-06-20 1934-06-20 … 1934-06-20 1934-06-20 1934-06-20 … 1966-05-11 1966-05-11 1966-05-11 … 1986-02-03

2013 SAP AG. All rights reserved.

CITY ---------Wiesloch Wiesloch Wiesloch … Wiesloch Wiesloch Wiesloch … Hockenheim Hockenheim Hockenheim … Ladenburg

CARID ----F01 F01 F01 … F02 F02 F02 … F01 F01 F01 … F20

PLATENUMBER ----------HD-V 106 HD-V 106 HD-V 106 … HD-VW 4711 HD-VW 4711 HD-VW 4711 … HD-V 106 HD-V 106 HD-V 106 … ?

BRAND ----Fiat Fiat Fiat … VW VW VW … Fiat Fiat Fiat … Audi

COLOR ----red red red … black black black … red red red … green

HP --75 75 75 … 120 120 120 … 75 75 75 … 184

OWNER ----H06 H06 H06 … H03 H03 H03 … H06 H06 H06 … ?

PLATENUMBER ----------HD-VW 1999 HD-V 106 HD-Y 333 … HD-VW 1999 HD-V 106 HD-Y 333 … HD-VW 1999 HD-V 106 HD-Y 333 … HD-Y 333

REGISTERED_AT ------------2012-06-20 2012-06-01 2012-05-21 … 2012-06-20 2012-06-01 2012-05-21 … 2012-06-20 2012-06-01 2012-05-21 … 2012-05-21

218

Joining Tables

INNER JOIN

©

2013 SAP AG. All rights reserved.

219

INNER JOIN

One row of the left table and one row of the right table are always joined to a common result row - provided that the JOIN condition is fulfilled. JOIN Condition: L.X



L

©

… … … … … …

X 1 2 3 4 5

2013 SAP AG. All rights reserved.

… … … … … …

= R.Y

… … … … … …

R

… … … … … …

Y 3 4 5 6 7

… … … … … …

… … … … … …

220

INNER JOIN

SELECT Column, Column, Column FROM Table, Table WHERE JOIN_Condition AND Supplementary_Condition; SELECT Column, Column, Column FROM Table JOIN Table ON JOIN_Condition WHERE Supplementary_Condition;

©

2013 SAP AG. All rights reserved.

221

Implicit INNER JOIN One row of a table and one row of another table are always connected to a common result row - provided that the JOIN condition is fulfilled.  The JOIN condition is part of the WHERE clause  To whom which car is registered?

SELECT * FROM Owner, Car WHERE OwnerID = Owner; OWNERID ------H06 H03 H03 H07 H03 …

©

NAME -----Ms W SAP AG SAP AG IKEA SAP AG …

BIRTHDAY ---------1957-06-01 ? ? ? ? …

2013 SAP AG. All rights reserved.

CITY -------Wiesloch Walldorf Walldorf Walldorf Walldorf …

CARID ----F01 F02 F03 F04 F05 …

PLATENUMBER ----------HD-V 106 HD-VW 4711 HD-JA 1972 HD-AL 1002 HD-MM 3206 …

BRAND -------Fiat VW BMW Mercedes Mercedes …

COLOR ----red black blue white black …

HP --75 120 184 136 170 …

OWNER ----H06 H03 H03 H07 H03 …

222

Explicit INNER JOIN 

One row of a table and one row of another table are always connected to a common result row - provided that the JOIN condition is fulfilled.  The JOIN condition is part of the JOIN operation (and not of the WHERE clause)  To whom is which car registered?

SELECT * FROM Owner INNER JOIN Car ON OwnerID = Owner; OWNERID ------H06 H03 H03 H07 H03 …

©

NAME -----Ms W SAP AG SAP AG IKEA SAP AG …

BIRTHDAY ---------1957-06-01 ? ? ? ? …

2013 SAP AG. All rights reserved.

CITY -------Wiesloch Walldorf Walldorf Walldorf Walldorf …

CARID ----F01 F02 F03 F04 F05 …

PLATENUMBER ----------HD-V 106 HD-VW 4711 HD-JA 1972 HD-AL 1002 HD-MM 3206 …

BRAND -------Fiat VW BMW Mercedes Mercedes …

COLOR ----red black blue white black …

HP --75 120 184 136 170 …

OWNER ----H06 H03 H03 H07 H03 …

223

Explicit INNER JOIN  

You can simply write "JOIN“ instead of "INNER JOIN“. The INNER JOIN is the most important JOIN variant (and therefore the default)

 To whom is which car registered?

SELECT * FROM Owner JOIN Car ON OwnerID = Owner; OWNERID ------H06 H03 H03 H07 H03 …

©

NAME -----Ms W SAP AG SAP AG IKEA SAP AG …

BIRTHDAY ---------1957-06-01 ? ? ? ? …

2013 SAP AG. All rights reserved.

CITY -------Wiesloch Walldorf Walldorf Walldorf Walldorf …

CARID ----F01 F02 F03 F04 F05 …

PLATENUMBER ----------HD-V 106 HD-VW 4711 HD-JA 1972 HD-AL 1002 HD-MM 3206 …

BRAND -------Fiat VW BMW Mercedes Mercedes …

COLOR ----red black blue white black …

HP --75 120 184 136 170 …

OWNER ----H06 H03 H03 H07 H03 …

224

Implicit INNER JOIN

You can specify certain columns in the projection list also for the implicit JOIN.  To whom is which car registered?

SELECT Name, Brand, Color FROM Owner, Car WHERE OwnerID = Owner;

©

2013 SAP AG. All rights reserved.

NAME -----Ms W SAP AG SAP AG IKEA SAP AG Mr V SAP AG IKEA Ms U HDM AG Ms U HDM AG IKEA SAP AG SAP AG Ms Y SAP AG Ms T

BRAND -------Fiat VW BMW Mercedes Mercedes Audi Audi VW Skoda BMW BMW Skoda Renault Mercedes Skoda Audi Renault VW

COLOR -----red black blue white black yellow blue black red black green red red white black orange red black

225

Explicit INNER JOIN

You can specify certain columns in the projection list also for the explicit JOIN.  To whom is which car registered?

SELECT Name, Brand, Color FROM Owner JOIN Car ON OwnerID = Owner;

©

2013 SAP AG. All rights reserved.

NAME -----Ms W SAP AG SAP AG IKEA SAP AG Mr V SAP AG IKEA Ms U HDM AG Ms U HDM AG IKEA SAP AG SAP AG Ms Y SAP AG Ms T

BRAND -------Fiat VW BMW Mercedes Mercedes Audi Audi VW Skoda BMW BMW Skoda Renault Mercedes Skoda Audi Renault VW

COLOR -----red black blue white black yellow blue black red black green red red white black orange red black

226

Implicit INNER JOIN

You can also use table aliases or tuple variables in the projection list for the implicit JOIN.  

The JOIN condition can also refer to table aliases or tuple variables. If column names are not unique, you must qualify them NAME with the table aliases or tuple variables. -----Ms W  To whom is which car registered? SAP AG

SELECT o.Name, c.Brand, c.Color FROM Owner o, Car c WHERE o.OwnerID = c.Owner;

©

2013 SAP AG. All rights reserved.

SAP AG IKEA SAP AG Mr V SAP AG IKEA Ms U HDM AG Ms U HDM AG IKEA SAP AG SAP AG Ms Y SAP AG Ms T

BRAND -------Fiat VW BMW Mercedes Mercedes Audi Audi VW Skoda BMW BMW Skoda Renault Mercedes Skoda Audi Renault VW

COLOR -----red black blue white black yellow blue black red black green red red white black orange red black

227

Explicit INNER JOIN

You can use table aliases or tuple variables in the projection list for the explicit JOIN.  

The JOIN condition can also refer to table aliases or tuple variables. If column names are not unique, you must qualify them NAME with the table aliases or tuple variables. -----Ms W  To whom is which car registered? SAP AG

SELECT o.Name, c.Brand, c.Color FROM Owner o JOIN Car c ON o.OwnerID = c.Owner;

©

2013 SAP AG. All rights reserved.

SAP AG IKEA SAP AG Mr V SAP AG IKEA Ms U HDM AG Ms U HDM AG IKEA SAP AG SAP AG Ms Y SAP AG Ms T

BRAND -------Fiat VW BMW Mercedes Mercedes Audi Audi VW Skoda BMW BMW Skoda Renault Mercedes Skoda Audi Renault VW

COLOR -----red black blue white black yellow blue black red black green red red white black orange red black

228

Implicit INNER JOIN

You do not have to include a column from every involved table in the projection list. 

Besides the JOIN condition the WHERE clause can contain additional conditions.  To whom is a black car registered (at least one)?

SELECT DISTINCT o.Name FROM Owner o, Car c WHERE o.OwnerID = c.Owner AND c.Color = 'black';

©

2013 SAP AG. All rights reserved.

NAME -----Ms T SAP AG HDM AG IKEA

229

Explicit INNER JOIN

You do not need to include a column from every involved table in the

projection list.  In addition to the JOIN condition you can specify a WHERE clause.  To whom is a black car registered (at least one)?

SELECT DISTINCT o.Name FROM Owner o JOIN Car c ON o.OwnerID = c.Owner WHERE c.Color = 'black';

©

2013 SAP AG. All rights reserved.

NAME -----Ms T SAP AG HDM AG IKEA

230

Implicit INNER JOIN

You can explicitly rename result columns for the implicit JOIN.  Sorting the result table is also possible  To whom is a black car registered (at least one)?

SELECT DISTINCT o.Name AS "Owners' name" FROM Owner o, Car c WHERE o.OwnerID = c.Owner AND c.Color = 'black' ORDER BY o.Name; Owners'

name -----------HDM AG IKEA Ms T SAP AG

©

2013 SAP AG. All rights reserved.

231

Explicit INNER JOIN

You can explicitly rename result columns for the explicit JOIN.  Sorting the result table is also possible  To whom is a black car registered (at least one)?

SELECT DISTINCT o.Name AS "Owners' name" FROM Owner o JOIN Car c ON o.OwnerID = c.Owner WHERE c.Color = 'black' ORDER BY o.Name; Owners'

name -----------HDM AG IKEA Ms T SAP AG

©

2013 SAP AG. All rights reserved.

232

Implicit INNER JOIN

You can add a GROUP BY clause for the implicit Join.  How many black cars are registered to which owner?

SELECT FROM WHERE GROUP BY ORDER BY

o.Name, COUNT(*) AS "# black cars" Owner o, Car c o.OwnerID = c.Owner AND c.Color = 'black' o.OwnerID, o.Name 2 DESC, 1 ASC; NAME -----SAP AG HDM AG IKEA Ms T

©

2013 SAP AG. All rights reserved.

# black cars -----------3 1 1 1

233

Explicit INNER JOIN

You can add a GROUP BY clause for the explicit Join.  How many black cars are registered to which owner?

SELECT o.Name, COUNT(*) AS "# black cars" FROM Owner o JOIN Car c ON o.OwnerID = c.Owner WHERE c.Color = 'black' GROUP BY o.OwnerID, o.Name ORDER BY 2 DESC, 1 ASC; NAME # black -----SAP AG HDM AG IKEA Ms T

©

2013 SAP AG. All rights reserved.

cars -----------3 1 1 1

234

Implicit INNER JOIN

You can build the JOIN condition on multiple columns for the implicit JOIN.  To whom within the EU is a black car registered (at least one)?

SELECT DISTINCT o.Name AS "Owners' name" FROM Owner_EU o, Car_EU c WHERE o.Country = c.Country AND o.OwnerID = c.Owner AND c.Color = 'black' Owners' name ORDER BY o.Name; -----------HDM AG IKEA Ms O Ms T SAP AG Señora R

©

2013 SAP AG. All rights reserved.

235

Explicit INNER JOIN

You can build the JOIN condition on multiple columns for the explicit JOIN.  To whom within the EU is a black car registered (at least one)?

SELECT DISTINCT o.Name AS "Owners' name" FROM Owner_EU o JOIN Car_EU c ON o.Country = c.Country AND o.OwnerID = c.Owner WHERE c.Color = 'black' Owners' name ORDER BY o.Name; -----------HDM AG IKEA Ms O Ms T SAP AG Señora R

©

2013 SAP AG. All rights reserved.

236

Implicit INNER JOIN

You can join a table to itself.  Who is the manager of which employee?

SELECT e.Name AS Employee, m.Name AS Manager FROM Official e, Official m WHERE e.Manager = m.PNr; EMPLOYEE -------Mr A Mr B Ms C Ms D Mr E Mr F Ms G Ms H

©

2013 SAP AG. All rights reserved.

MANAGER ------Ms D Ms D Ms D Mr I Ms H Ms H Ms H Mr I

237

Explicit INNER JOIN

You can join a table to itself also for the explicit JOIN.  Who is the manager of which employee?

SELECT e.Name AS Employee, m.Name AS Manager FROM Official e JOIN Official m ON e.Manager = m.PNr; EMPLOYEE -------Mr A Mr B Ms C Ms D Mr E Mr F Ms G Ms H

©

2013 SAP AG. All rights reserved.

MANAGER ------Ms D Ms D Ms D Mr I Ms H Ms H Ms H Mr I

238

Implicit INNER JOIN

You can combine more than two tables.  To whom is which stolen car registered?

SELECT o.Name, c.Brand, c.Color, c.PlateNumber FROM Owner o, Car c, Stolen s WHERE o.OwnerID = c.Owner AND c.PlateNumber = s.PlateNumber; NAME ---Ms W Mr V Ms Y

©

2013 SAP AG. All rights reserved.

BRAND ----Fiat Audi Audi

COLOR -----red yellow orange

PLATENUMBER ----------HD-V 106 HD-VW 1999 HD-Y 333

239

Explicit INNER JOIN

You can combine more than two tables also for the explicit JOIN.  To whom is which stolen car registered?

SELECT o.Name, c.Brand, c.Color, c.PlateNumber FROM Owner o JOIN Car c ON o.OwnerID = c.Owner JOIN Stolen s ON c.PlateNumber = s.PlateNumber;

NAME ---Ms W Mr V Ms Y

©

2013 SAP AG. All rights reserved.

BRAND ----Fiat Audi Audi

COLOR -----red yellow orange

PLATENUMBER ----------HD-V 106 HD-VW 1999 HD-Y 333

240

Explicit INNER JOIN

You can use different comparison operators other than EQUAL in the JOIN condition.  Which owner is older than which other owner?

SELECT o.Name AS "older", y.Name AS "younger" FROM Owner o JOIN Owner y ON o.Birthday < y.Birthday;

©

2013 SAP AG. All rights reserved.

older ----Ms T Ms T Ms T Ms T Ms T Ms T Ms U Ms U Ms U Mr V Mr V Mr V Mr V Mr V Ms W Ms W Ms W Ms W Ms Y Mr Z Mr Z

younger ------Ms U Mr V Ms W Mr X Ms Y Mr Z Mr X Ms Y Mr Z Ms U Ms W Mr X Ms Y Mr Z Ms U Mr X Ms Y Mr Z Mr X Mr X Ms Y

241

Explicit INNER JOIN

You can use calculations in the JOIN condition.  Which car has at least three times the power than which other car?

SELECT m.*, l.* FROM Car m JOIN Car l ON m.HP >= l.HP * 3; CARID ----F06

©

PLATENUMBER ----------HD-VW 1999

2013 SAP AG. All rights reserved.

BRAND ----Audi

COLOR -----yellow

HP --260

OWNER ----H05

CARID ----F01

PLATENUMBER ----------HD-V 106

BRAND ----Fiat

COLOR ----red

HP -75

OWNER ----H06

242

Explicit INNER JOIN

You can use functions in the JOIN condition.  Which owner was born in the same year as which other owner?

SELECT o1.Name, o1.Birthday, o2.Name, o2.Birthday FROM Owner o1 JOIN Owner o2 ON YEAR(o1.Birthday) = YEAR(o2.Birthday) AND o1.OwnerID < o2.OwnerID;

NAME ---Mr X Mr X Ms Y

©

2013 SAP AG. All rights reserved.

BIRTHDAY ---------1986-08-30 1986-08-30 1986-02-10

NAME ---Ms Y Mr Z Mr Z

BIRTHDAY ---------1986-02-10 1986-02-03 1986-02-03

243

Joining Tables

OUTER JOIN

©

2013 SAP AG. All rights reserved.

244

OUTER JOIN

The OUTER JOIN has three sub types:  LEFT OUTER JOIN  RIGHT OUTER JOIN  FULL OUTER JOIN

 For all three sub types of the OUTER JOIN SAP HANA only provides the explicit syntax variant.

©

2013 SAP AG. All rights reserved.

245

LEFT OUTER JOIN

 

One row of a table and one row of another table are always connected to a common result row - provided the JOIN condition is fulfilled. In addition, rows of the left table without matching row in the right table are copied to the query result. The missing values ​(from the right table) are filled with NULL values.

L

©

… … … … … …

X 1 2 3 4 5

2013 SAP AG. All rights reserved.

… … … … … …

… … … … … …

NULL NULL NULL NULL

R

… … … … … …

Y 3 4 5 6 7

… … … … … …

… … … … … … 246

RIGHT OUTER JOIN

 

One row of a table and one row of another table are always connected to a common result row - provided that the JOIN condition is fulfilled. In addition, rows of the right table without matching row in the left table are copied to the query result. The missing values ​(from the left table) are filled with NULL values.

L

… … … … … …

X 1 2 3 4 5

… … … … … …

… … … … … …

NULL NULL NULL NULL

©

2013 SAP AG. All rights reserved.

R

… … … … … …

Y 3 4 5 6 7

… … … … … …

… … … … … … 247

FULL OUTER JOIN

 

One row of a table and one row of another table are always connected to a common result row - provided that the JOIN condition is fulfilled. In addition, rows of both tables without matching records are copied to the query result. The missing values ​(from the other table) are filled with NULL values.

L

… … … … … …

X 1 2 3 4 5

… … … … … …

… … … … … …

NULL NULL NULL NULL

©

2013 SAP AG. All rights reserved.

NULL NULL NULL NULL

R

… … … … … …

Y 3 4 5 6 7

… … … … … …

… … … … … … 248

OUTER JOIN

SELECT Column, Column, Column FROM Table LEFT OUTER JOIN Table ON JOIN_Condition WHERE Additional_Condition; SELECT Column, Column, Column FROM Table RIGHT OUTER JOIN Table ON JOIN_Condition WHERE Additional_Condition; SELECT Column, Column, Column FROM Table FULL OUTER JOIN Table ON JOIN_Condition WHERE Additional_Condition;

©

2013 SAP AG. All rights reserved.

249

LEFT OUTER JOIN

 Which car is registered to which individual or company?  Individuals and companies that currently do not have a car registered should be included.  Cars without a registration should not be included in the result.

SELECT Name, CarID, Brand FROM Owner LEFT OUTER JOIN Car ON OwnerID = Owner;

©

2013 SAP AG. All rights reserved.

NAME -----Ms T Ms U Ms U SAP AG SAP AG SAP AG SAP AG SAP AG SAP AG SAP AG HDM AG HDM AG Mr V Ms W IKEA IKEA IKEA Mr X Ms Y Mr Z

CARID ----F19 F09 F11 F02 F03 F18 F05 F15 F07 F14 F12 F10 F06 F01 F13 F08 F04 ? F17 ?

BRAND -------VW Skoda BMW VW BMW Renault Mercedes Skoda Audi Mercedes Skoda BMW Audi Fiat Renault VW Mercedes ? Audi ?

250

RIGHT OUTER JOIN

 Which car is registered to which individual or company?  Cars without a registration should be included.  Individuals and companies that currently do not have a car registered should not be included in the result.

SELECT Name, CarID, Brand FROM Owner RIGHT OUTER JOIN Car ON OwnerID = Owner;

©

2013 SAP AG. All rights reserved.

NAME -----Ms W SAP AG SAP AG IKEA SAP AG Mr V SAP AG IKEA Ms U HDM AG Ms U HDM AG IKEA SAP AG SAP AG ? Ms Y SAP AG Ms T ?

CARID ----F01 F02 F03 F04 F05 F06 F07 F08 F09 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20

BRAND -------Fiat VW BMW Mercedes Mercedes Audi Audi VW Skoda BMW BMW Skoda Renault Mercedes Skoda Opel Audi Renault VW Audi

251

FULL OUTER JOIN

 Which car is registered to which individual or company?  Individuals and companies that currently do not have a car registered should be included.  Cars without a registration should be included in the result .

SELECT Name, CarID, Brand FROM Owner FULL OUTER JOIN Car ON OwnerID = Owner;

©

2013 SAP AG. All rights reserved.

NAME -----Ms W SAP AG SAP AG IKEA SAP AG Mr V SAP AG IKEA Ms U HDM AG Ms U HDM AG IKEA SAP AG SAP AG ? Ms Y SAP AG Ms T ? Mr X Mr Z

CARID ----F01 F02 F03 F04 F05 F06 F07 F08 F09 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 ? ?

BRAND -------Fiat VW BMW Mercedes Mercedes Audi Audi VW Skoda BMW BMW Skoda Renault Mercedes Skoda Opel Audi Renault VW Audi ? ?

252

LEFT OUTER JOIN

For the LEFT OUTER JOIN you can also add a WHERE clause in addition to the JOIN condition.  Which car is registered to which individual?  Assume that companies don’t have a birthday.  Individuals that currently do not have a car registered should be included.  Cars without a registration should not be included in the result.

SELECT Name, CarID, Brand FROM Owner LEFT OUTER JOIN Car ON OwnerID = Owner WHERE Birthday IS NOT NULL;

©

2013 SAP AG. All rights reserved.

NAME -----Ms T Ms U Ms U SAP AG SAP AG SAP AG SAP AG SAP AG SAP AG SAP AG HDM AG HDM AG Mr V Ms W IKEA IKEA IKEA Mr X Ms Y Mr Z

CARID ----F19 F09 F11 F02 F03 F18 F05 F15 F07 F14 F12 F10 F06 F01 F13 F08 F04 ? F17 ?

BRAND -------VW Skoda BMW VW BMW Renault Mercedes Skoda Audi Mercedes Skoda BMW Audi Fiat Renault VW Mercedes ? Audi ?

253

RIGHT OUTER JOIN

For the RIGHT OUTER JOIN you can also add a WHERE clause in addition to the JOIN condition.  Which car is registered to which individual?  Individuals who currently do not have a car registered should be excluded. (Realized by RIGHT OUTER JOIN)  Cars without a registration should not be included in the result. (Realized by the WHERE clause)

SELECT Name, CarID, Brand FROM Owner RIGHT OUTER JOIN Car ON OwnerID = Owner WHERE Birthday IS NOT NULL;

©

2013 SAP AG. All rights reserved.

NAME -----Ms W SAP AG SAP AG IKEA SAP AG Mr V SAP AG IKEA Ms U HDM AG Ms U HDM AG IKEA SAP AG SAP AG ? Ms Y SAP AG Ms T ?

CARID ----F01 F02 F03 F04 F05 F06 F07 F08 F09 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20

BRAND -------Fiat VW BMW Mercedes Mercedes Audi Audi VW Skoda BMW BMW Skoda Renault Mercedes Skoda Opel Audi Renault VW Audi

254

FULL OUTER JOIN

For the FULL OUTER JOIN you can also add a WHERE clause in addition to the JOIN condition.  Which car is registered to which individual?  Individuals that currently do not have a car registered should be included.  Cars without a registration should not be included in the result. (Realized by the WHERE clause)

SELECT Name, CarID, Brand FROM Owner FULL OUTER JOIN Car ON OwnerID = Owner WHERE Birthday IS NOT NULL;

©

2013 SAP AG. All rights reserved.

NAME -----Ms W SAP AG SAP AG IKEA SAP AG Mr V SAP AG IKEA Ms U HDM AG Ms U HDM AG IKEA SAP AG SAP AG ? Ms Y SAP AG Ms T ? Mr X Mr Z

CARID ----F01 F02 F03 F04 F05 F06 F07 F08 F09 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 ? ?

BRAND -------Fiat VW BMW Mercedes Mercedes Audi Audi VW Skoda BMW BMW Skoda Renault Mercedes Skoda Opel Audi Renault VW Audi ? ?

255

LEFT OUTER JOIN

You can LEFT OUTER JOIN a table with itself  Who is the manager of which employee?  Employees without a manager should be included.  Only Managers with employees should be included.

EMPLOYEE -------Mr A Mr B Ms C Ms D Mr E Mr F Ms G Ms H Mr I

MANAGER ------Ms D Ms D Ms D Mr I Ms H Ms H Ms H Mr I ?

SELECT e.Name AS Employee, m.Name AS Manager FROM Official e LEFT OUTER JOIN Official m ON e.Manager = m.PNr;

©

2013 SAP AG. All rights reserved.

256

RIGHT OUTER JOIN

You can RIGHT OUTER JOIN a table with itself  Who is the manager of which employee?  The MANAGER column should also include officials that are not managing employees.  The EMPLOYEE column should only include officials with a manager assigned.

SELECT e.Name AS Employee, m.Name AS Manager FROM Official e RIGHT OUTER JOIN Official m ON e.Manager = m.PNr;

©

2013 SAP AG. All rights reserved.

EMPLOYEE -------? ? ? Mr A Mr B Ms C ? ? ? Mr E Mr F Ms G Ms D Ms H

MANAGER ------Mr A Mr B Ms C Ms D Ms D Ms D Mr E Mr F Ms G Ms H Ms H Ms H Mr I Mr I

257

FULL OUTER JOIN

You can FULL OUTER JOIN a table with itself  Who is the manager of which employee?  The EMPLOYEE column should include officials without a manager.  The MANAGER column should also include officials that are not managing employees.

SELECT e.Name AS Employee, m.Name AS Manager FROM Official e FULL OUTER JOIN Official m ON e.Manager = m.PNr;

©

2013 SAP AG. All rights reserved.

EMPLOYEE -------Mr A Mr B Ms C Ms D Mr E Mr F Ms G Ms H Mr I ? ? ? ? ? ?

MANAGER ------Ms D Ms D Ms D Mr I Ms H Ms H Ms H Mr I ? Mr A Mr B Ms C Mr E Mr F Ms G

258

LEFT/RIGHT/FULL OUTER JOIN You can also …  Project to certain columns  Reference table aliases or tuple variables in the projection list.  Use table aliases or tuple variables in the JOIN condition.  Explicitly rename result columns.  Sort the query result.  Add a GROUP BY clause.  Use aggregate expressions.  eliminate duplicates by using DISTINCT.  Specify a JOIN condition on multiple columns.  Use any comparison operator in the JOIN condition.  JOIN a table with itself.  JOIN more than two tables. ©

2013 SAP AG. All rights reserved.

and:  You have to qualify column names with the table alias or with a tuple variable if the column names are not unique.  You do not need to include a column from every table involved in the JOIN into the projection list.

259

Unit 4: Reading Data From Multiple Tables Part I Summary

You should now be able to: •

Merge the result of several select statements using the UNION statement • Combine data from several tables when querying data using JOIN constructs • •

©

List the various types of Joins Explain the differences between the various types of Joins, and apply the right type of Join depending on the problem

2013 SAP AG. All rights reserved.

260

Unit 5 Reading Data From Multiple Tables Part II

261

Unit 5: Reading Data From Multiple Tables Part II Learning Objectives After completing this unit, you will be able to: • Use sub-queries to query data from multiple tables in a single select statement

• Explain the difference between uncorrelated and correlated subqueries

©

2013 SAP AG. All rights reserved.

262

Nested Queries

Nested Queries

©

2013 SAP AG. All rights reserved.

263

Nested Queries

 In addition to UNION and JOIN, Nested Queries also provide the option of reading from multiple tables and views.  Nested Queries contain a so called “Sub Query”.

©

2013 SAP AG. All rights reserved.

264

Sub Query

What is a sub query?

©

2013 SAP AG. All rights reserved.

265

Sub Query



A sub query is a query (SELECT-FROM-WHERE statement) that is used in another query (SELECT-FROM-WHERE statement). The "other Query" – containing the sub query - is called the "outer query". In this context the Sub Query is also referred to as "inner query".

 

Outer Query

©

2013 SAP AG. All rights reserved.

SELECT PlateNumber, Brand, Color Sub Query FROM Car WHERE Owner IN ( SELECT OwnerID FROM Owner WHERE City = 'Wiesloch');

266

Sub Query

When is a sub query useful?

©

2013 SAP AG. All rights reserved.

267

Sub Query

A sub query is useful if ...  It makes the SELECT statement more "readable" - for example, because the use of nested queries is the "obvious way"  The SELECT statement has a better performance – however, with a "perfect" optimizer, this should not be the case.  The formulation of the SELECT statement is not possible (or only extremely cumbersome) without a sub query - which can be particularly the case for aggregate expressions.

©

2013 SAP AG. All rights reserved.

268

Sub Query

What is the difference between an uncorrelated and a correlated sub ​query?

©

2013 SAP AG. All rights reserved.

269

Sub Query

An uncorrelated sub ​query makes no reference to the outer query.

SELECT * FROM Car WHERE Owner IN (SELECT OwnerID FROM Owner WHERE City = 'Wiesloch'); A correlated sub ​query refers to the outer query. SELECT * FROM Car c WHERE EXISTS (SELECT * FROM Owner o WHERE o.OwnerID = c.Owner AND o.City = 'Wiesloch');

©

2013 SAP AG. All rights reserved.

270

Sub Query

Uncorrelated sub queries

©

2013 SAP AG. All rights reserved.

271

Uncorrelated Sub Query

SELECT Column, Column, Column FROM Table WHERE Column IN (SELECT Column FROM Table WHERE Condition);

©

2013 SAP AG. All rights reserved.

272

Uncorrelated Sub Query

You can use IN, if the outer value should be included in the result set of the sub query.  Which cars are registered to an owner from Wiesloch?

SELECT * FROM Car WHERE Owner IN (SELECT OwnerID FROM Owner WHERE City = 'Wiesloch');

CARID ----F01 F19

©

2013 SAP AG. All rights reserved.

PLATENUMBER ----------HD-V 106 HD-VW 2012

BRAND ----Fiat VW

COLOR ----red black

HP --75 125

OWNER ----H06 H01

273

Uncorrelated Sub Query

You can use =

ANY, if the outer value should match any result value of the sub query.

 Which cars are registered to an owner from Wiesloch?

SELECT * FROM Car WHERE Owner = ANY (SELECT OwnerID FROM Owner WHERE City = 'Wiesloch');

CARID ----F01 F19

©

2013 SAP AG. All rights reserved.

PLATENUMBER ----------HD-V 106 HD-VW 2012

BRAND ----Fiat VW

COLOR ----red black

HP --75 125

OWNER ----H06 H01

274

Uncorrelated Sub Query

“= ANY” is equivalent to “IN”. So, where is the value of “= ANY” ?

©

2013 SAP AG. All rights reserved.

275

Uncorrelated Sub Query

= ANY is equivalent to IN, but you can use ANY with other comparison operators: = ANY

The external value matches any value of the sub query.

< ANY

The external value is less than any value of the sub query.

ANY

©

The external value is less or equal than any value of the sub query. The external value is greater than any value of the sub query.

>= ANY

The external value is greater or equal than any value of the sub query.

ANY

The external value is different to any value of the sub query.

2013 SAP AG. All rights reserved.

276

Uncorrelated Sub Query

You can use > ANY, if the external value should be greater than any value of the sub query. 

Which officials have more than the minimum overtime hours?

SELECT Name, Overtime FROM Official WHERE Overtime > ANY (SELECT Overtime FROM Official); NAME ---Ms C Mr F Ms G

©

2013 SAP AG. All rights reserved.

OVERTIME -------20 18 22

277

Uncorrelated Sub Query

You can use > instead of > ANY, if the sub query results in only a single value. 

Which officials have more than the minimum overtime hours?

SELECT Name, Overtime FROM Official WHERE Overtime > (SELECT MIN(Overtime) FROM Official); NAME ---Ms C Mr F Ms G

©

2013 SAP AG. All rights reserved.

OVERTIME -------20 18 22

278

Uncorrelated Sub Query

You can use < ALL, if the outer value should be less than all result values of the sub query (other comparison operators are possible) = ALL

The external value matches each result value of the sub query. (This option is quite useful, as the sub query result can contain duplicates.)

< ALL

The external value is less than all values of the sub query.

ALL

©

The external value is less or equal than all values of the sub query. The external value is greater than all values of the sub query.

>= ALL

The external value is greater or equal than all values of the sub query.

ALL

The external value is different to all values of the sub query.

2013 SAP AG. All rights reserved.

279

Uncorrelated Sub Query

You can use 100 Power DESC, CarID ASC;

CARID ----F13 F09 F12

©

2013 SAP AG. All rights reserved.

PLATENUMBER ----------HD-IK 1001 HD-UP 13 HD-XY 4711

POWER ----136 105 105

416

VIEWs

You can INSERT new rows into a view. 

The new rows are not inserted into the view, but into the underlying base table!

INSERT INTO redCars VALUES ('F77', 'red', 'HD-MT 2509', 170);

SELECT * FROM Car; CARID ----F01 F02 F03 … F18 F19 F20 F77

©

2013 SAP AG. All rights reserved.

PLATENUMBER ----------HD-V 106 HD-VW 4711 HD-JA 1972 … HD-MQ 2006 HD-VW 2012 ? HD-MT 2509

BRAND ------Fiat VW BMW … Renault VW Audi ?

COLOR ----red black blue … red black green red

HP --75 120 184 … 90 125 184 170

OWNER ----H06 H03 H03 … H03 H01 ? ? 417

VIEWs You can UPDATE rows in a view. 

The rows are not changed in the view, but in the underlying base table!

UPDATE redCars SET Power = 120 WHERE Power < 120; SELECT * FROM Car;

©

2013 SAP AG. All rights reserved.

CARID ----F01 … F07 F08 F09 F10 F11 F12 F13 … F18 …

PLATENUMBER ----------HD-V 106 … HD-ML 3206 HD-IK 1002 HD-UP 13 HD-MT 507 HD-MM 208 HD-XY 4711 HD-IK 1001 … HD-MQ 2006 …

BRAND ------Fiat … Audi VW Skoda BMW BMW Skoda Renault … Renault …

COLOR ----red … blue black red black green red red … red …

HP --120 … 116 160 120 140 184 120 136 … 120 …

OWNER ----H06 … H03 H07 H02 H04 H02 H04 H07 … H03 … 418

VIEWs You can DELETE rows from a view. 

The rows are not deleted from the view, but from the underlying base table!

DELETE FROM redCars WHERE Power < 125; SELECT * FROM Car;

©

2013 SAP AG. All rights reserved.

CARID ----F01 … F07 F08 F09 F10 F11 F12 F13 … F18 …

PLATENUMBER ----------HD-V 106 … HD-ML 3206 HD-IK 1002 HD-UP 13 HD-MT 507 HD-MM 208 HD-XY 4711 HD-IK 1001 … HD-MQ 2006 …

BRAND ------Fiat … Audi VW Skoda BMW BMW Skoda Renault … Renault …

COLOR ----red … blue black red black green red red … red …

HP --120 … 116 160 120 140 184 120 136 … 120 …

OWNER ----H06 … H03 H07 H02 H04 H02 H04 H07 … H03 … 419

Data Definition

Which SQL statements can I use to create or delete views?

©

2013 SAP AG. All rights reserved.

420

Data Definition

CREATE VIEW  Creates a new view.

DROP VIEW  Deletes an existing view.

©

2013 SAP AG. All rights reserved.

421

Data Definition

CREATE VIEW

©

2013 SAP AG. All rights reserved.

422

CREATE VIEW

CREATE VIEW SELECT FROM WHERE

©

2013 SAP AG. All rights reserved.

View AS Column, Column, Column Table Condition;

423

CREATE VIEW



You can restrict a view to specific columns of the underlying base table.

CREATE VIEW Autos AS SELECT Brand, Color, HP FROM Car;

©

2013 SAP AG. All rights reserved.

BRAND -------Fiat VW BMW Mercedes Mercedes Audi Audi VW Skoda BMW BMW Skoda Renault Mercedes Skoda Opel Audi Renault VW Audi

COLOR -----red black blue white black yellow blue black red black green red red white black green orange red black green

HP --75 120 184 136 170 260 116 160 105 140 184 105 136 170 136 120 184 90 125 184

424

CREATE VIEW



You can restrict a view to specific rows of the underlying base table.

CREATE VIEW SELECT FROM WHERE

Audis AS Brand, Color, HP Car Brand = 'Audi';

BRAND ----Audi Audi Audi Audi

©

2013 SAP AG. All rights reserved.

COLOR -----yellow blue orange green

HP --260 116 184 184

425

CREATE VIEW



You can restrict a view to a certain amount of rows:

CREATE VIEW SELECT FROM WHERE

"Top3 Audis" AS TOP 3 Brand, Color, HP Car Brand = 'Audi';

BRAND ----Audi Audi Audi

©

2013 SAP AG. All rights reserved.

COLOR -----yellow blue orange

HP --260 116 184

426

CREATE VIEW



The columns of a view can have different names than the columns of the underlying base table.

CREATE VIEW SELECT FROM WHERE

Audis (Manufacturer, Color, Power) AS Brand, Color, HP Car Brand = 'Audi';

MANUFACTURER -----------Audi Audi Audi Audi

©

2013 SAP AG. All rights reserved.

COLOR -----yellow blue orange green

POWER ----260 116 184 184

427

CREATE VIEW



You can (and should) rename the columns in the SELECT clause

CREATE VIEW SELECT FROM WHERE

Audis AS Brand AS Manufacturer, Color, HP AS Power Car Brand = 'Audi';

MANUFACTURER -----------Audi Audi Audi Audi

©

2013 SAP AG. All rights reserved.

COLOR -----yellow blue orange green

POWER ----260 116 184 184

428

CREATE VIEW

 

If you rename columns in both the CREATE VIEW clause and in the SELECT clause, the name of the CREATE VIEW clause "wins“. We recommend renaming columns only in the SELECT clause.

CREATE VIEW SELECT FROM WHERE

Audis (Manufacturer, Color, Power) AS Brand AS Description, Color, HP AS HorsePower Car Brand = 'Audi';

MANUFACTURER -----------Audi Audi Audi Audi

©

2013 SAP AG. All rights reserved.

COLOR -----yellow blue orange green

POWER ----260 116 184 184

429

CREATE VIEW



A view can contain duplicates.

CREATE VIEW Colors AS SELECT Color FROM Car;

©

2013 SAP AG. All rights reserved.

COLOR -----red black blue white black yellow blue black red black green red red white black green orange red black green

430

CREATE VIEW

 

You can use DISTINCT in the view definition. Thus the view does not contain duplicates.

CREATE VIEW Colors AS SELECT DISTINCT Color FROM Car;

©

2013 SAP AG. All rights reserved.

COLOR -----red black blue white yellow green orange

431

CREATE VIEW

   

You can use ORDER BY in the view definition. From a theoretical perspective the use of ORDER BY is highly questionable, because the rows of a view are unsorted! There is no guarantee that the specified ORDER BY sorting is taken into account when reading the view. We recommend avoiding ORDER BY in the view definition.

CREATE VIEW SELECT FROM ORDER BY

©

2013 SAP AG. All rights reserved.

Colors AS DISTINCT Color Car Color;

COLOR -----blue yellow green orange red black white 432

CREATE VIEW



You can use calculated columns in a view.

CREATE VIEW SELECT FROM WHERE

Audis AS CarID, Color, ROUND(HP / 1.35962162, 0) AS "kW" Car Brand = 'Audi';

CARID ----F06 F07 F17 F20

©

2013 SAP AG. All rights reserved.

COLOR -----yellow blue orange green

kW --191 85 135 135

433

CREATE VIEW



You can use functions in the view definition.

CREATE VIEW OwnerOverview AS SELECT Name, YEAR(Birthday) AS YearOfBirth FROM Owner; NAME -----Ms T Ms U SAP AG HDM AG Mr V Ms W IKEA Mr X Ms Y Mr Z ©

2013 SAP AG. All rights reserved.

YEAROFBIRTH ----------1934 1966 ? ? 1952 1957 ? 1986 1986 1986 434

CREATE VIEW



You can use GROUP BY and aggregate expressions in the view definition.

CREATE VIEW SELECT FROM GROUP BY HAVING

Cars AS Brand, COUNT(*) AS Quantity Car Brand COUNT(*) > 2; BRAND -------VW BMW Mercedes Audi Skoda

©

2013 SAP AG. All rights reserved.

QUANTITY -------3 3 3 4 3

435

CREATE VIEW



You can use UNION [ALL] in the view definition.

CREATE VIEW Persons AS SELECT OwnerID AS "Pers ID", Name FROM Owner WHERE Birthday >= '1977-05-21' UNION ALL SELECT PNr, Name FROM Official WHERE Salary = 'A09';

©

2013 SAP AG. All rights reserved.

Pers ID ------H08 H09 H10 P01 P03 P06

NAME ---Mr X Ms Y Mr Z Mr A Ms C Mr F

436

CREATE VIEW



You can use (any) JOIN in the view definition.

CREATE VIEW SELECT FROM WHERE

StolenCars AS c.PlateNumber, c.Brand, c.Color Car c, Stolen s c.PlateNumber = s.PlateNumber;

PLATENUMBER ----------HD-V 106 HD-VW 1999 HD-Y 333

©

2013 SAP AG. All rights reserved.

BRAND ----Fiat Audi Audi

COLOR -----red yellow orange

437

CREATE VIEW



You can use an uncorrelated sub query in the view definition.

CREATE VIEW SELECT FROM WHERE

StolenCars AS PlateNumber, Brand, Color Car PlateNumber IN (SELECT PlateNumber FROM Stolen);

PLATENUMBER ----------HD-V 106 HD-VW 1999 HD-Y 333

©

2013 SAP AG. All rights reserved.

BRAND ----Fiat Audi Audi

COLOR -----red yellow orange

438

CREATE VIEW



You can use a correlated sub query in the view definition.

CREATE VIEW SELECT FROM WHERE

StolenCars AS c.PlateNumber, Car c EXISTS (SELECT FROM WHERE

c.Brand, c.Color * Stolen s s.PlateNumber = c.PlateNumber);

PLATENUMBER ----------HD-V 106 HD-VW 1999 HD-Y 333

©

2013 SAP AG. All rights reserved.

BRAND ----Fiat Audi Audi

COLOR -----red yellow orange

439

CREATE VIEW



You can define a view based on another view.

CREATE VIEW SELECT FROM WHERE

Volkswagen AS CarID, PlateNumber, Color, HP Car Brand = 'VW';

CREATE VIEW SELECT FROM WHERE

blackVolkswagen AS CarID, PlateNumber, HP Volkswagen Color = 'black';

©

2013 SAP AG. All rights reserved.

CARID ----F02 F08 F19

PLATENUMBER ----------HD-VW 4711 HD-IK 1002 HD-VW 2012

HP --120 160 125

440

Data Definition

DROP VIEW

©

2013 SAP AG. All rights reserved.

441

DROP VIEW

DROP VIEW View;

©

2013 SAP AG. All rights reserved.

442

DROP VIEW

  

You can drop an existing view. Only the view definition is deleted. The underlying data of the view is not deleted.

DROP VIEW redCars;

©

2013 SAP AG. All rights reserved.

443

Views and Changeability

Is it always possible to change the data of the underlying table by referencing a view?

©

2013 SAP AG. All rights reserved.

444

Views and Changeability

Referencing a view, the rows of the underlying base table cannot be changed if (at minimum) any of the following statements is true:  The view definition contains a calculation in the projection list (such as HP / 1.36).  The view definition uses a function in the projection list (such as YEAR).  The view definition uses DISTINCT to eliminate duplicates.  The view definition contains the TOP n clause to restrict the number of rows to n.  The view definition uses an aggregate function in the projection list (such as MAX).  The view definition is based on a GROUP BY clause.

 The view definition uses UNION.  The view definition contains an (implicit or explicit) JOIN.  The view definition uses a sub query in the projection list.

©

2013 SAP AG. All rights reserved.

445

Unit 9: Using Views For Data Access Summary

You should now be able to: • Describe the use cases for and advantages of using database views • Define database views using SQL • Query data through views

• Delete database views using SQL

©

2013 SAP AG. All rights reserved.

446

Unit 10 Defining Data Access

447

Unit 10: Defining Data Access Learning Objectives

After completing this unit, you will be able to: • Access tables in other schemas (assuming suitable permissions) • Control how other users can access data in your own schema

• Explain when database indexes make sense even in HANA • Create and delete database indexes using SQL

© 2013

SAP AG. All rights reserved.

448

Data Definition

Why are there no naming collisions when multiple users create the same table or view?

© 2013

SAP AG. All rights reserved.

449

Schemata

Please note: The following information applies to direct (SQL-based) work on SAP HANA - but not to database access using ABAP!  User 1 creates table “Car”.  User 2 also creates table “Car”.  Why is there no naming collision?  The name of the database object (table, view etc.) implicitly contains a schema name as prefix: .  “USER1.Car” ≠ “USER2.Car”

© 2013

SAP AG. All rights reserved.

450

Schemata

 When creating a user an identically named schema is created implicitly.  By default a user works in his own schema (and namespace).  You can explicitly specify the schema name if necessary.  Which brand has (at least) one black car? SELECT FROM WHERE ORDER BY

© 2013

DISTINCT User1.Car.Brand User1.Car User1.Car.Color = 'black' User1.Car.Brand;

SAP AG. All rights reserved.

BRAND -------BMW Mercedes Skoda VW 451

Schemata

 Queries across multiple schemata are possible.  To whom is (at least) one black car registered? SELECT DISTINCT Schema1.Owner.Name FROM Schema1.Owner, Schema2.Car WHERE Schema1.Owner.OwnerID = Schema2.Car.Owner AND Schema2.Car.Color = 'black';

NAME -----SAP AG IKEA HDM AG Ms T © 2013

SAP AG. All rights reserved.

452

Access Control

How can I define who has access to which data?

© 2013

SAP AG. All rights reserved.

453

Access Control

To specify who can access which data, you can use the following two main (SQL based) options. They can be used in combination:  Create views that represent a portion of the data: – You provide a view that contains only the owners of CityA to a user for whom the owners outside of CityA are not relevant.

 Grant specific access permissions to selected users: – You grant read only permissions to a user, who should be able to read the owner data but not to change it.

© 2013

SAP AG. All rights reserved.

454

Access Control

Which SQL statements can I use for access control?

© 2013

SAP AG. All rights reserved.

455

Access Control

GRANT  You can selectively grant access permissions to a user (or role).

REVOKE  You can selectively revoke access permissions from a user (or role).

© 2013

SAP AG. All rights reserved.

456

Access Control

The SQL statement GRANT

© 2013

SAP AG. All rights reserved.

457

GRANT

GRANT Privilege, Privilege ON Database_Object TO Database_User WITH GRANT OPTION;

© 2013

SAP AG. All rights reserved.

458

GRANT



You can define which user is allowed to SELECT from which table.



By adding the WITH GRANT OPTION the recipient of the privilege (grantee) is allowed to grant this privilege to other users (without losing it).

 User1 is allowed to read (SELECT) from table Official of schema Schema2.  User1 is allowed to grant this SELECT privilege to other users.

GRANT ON TO WITH

© 2013

SELECT Schema2.Official User1 GRANT OPTION;

SAP AG. All rights reserved.

459

GRANT



You can exactly specify which user is allowed to INSERT rows into which table.



The INSERT privilege does not necessarily require the SELECT privilege.



The INSERT privilege does not automatically include the SELECT privilege.

 User1 is allowed to INSERT rows into table Owner of schema Schema2. As User 1 has no SELECT privilege, he is not allowed to read the rows he has inserted.

GRANT INSERT ON Schema2.Owner TO User1;

© 2013

SAP AG. All rights reserved.

460

GRANT



You can exactly specify which user is allowed to UPDATE rows of which table.



The UPDATE privilege does not necessarily require the SELECT privilege.



The UPDATE privilege does not automatically include the SELECT privilege.

 User1 is allowed to UPDATE table Car_EU of schema Schema2.  Because User1 has no SELECT privileges for the table Car_EU the WHERE clause of his UPDATE statement cannot contain a reference to the columns of this table.

GRANT UPDATE ON Schema2.Car_EU TO User1;

© 2013

SAP AG. All rights reserved.

461

GRANT



You can exactly specify which user is allowed to DELETE rows from which table.



The DELETE privilege does not necessarily require the SELECT privilege.



The DELETE privilege does not automatically include the SELECT privilege.

 User1 is allowed to DELETE rows from table Stolen of schema Schema2.  Because User1 has no SELECT privileges for the table Stolen the WHERE clause of his DELETE statement cannot contain a reference to the columns of this table.

GRANT DELETE ON Schema2.Stolen TO User1;

© 2013

SAP AG. All rights reserved.

462

GRANT

 You can assign multiple privileges for the same database object by using a single GRANT statement.  User1 is allowed to SELECT, INSERT, UPDATE, DELETE on table Contact of schema Schema2.  User1 is allowed to grant these privileges to other users (in whole or in part). GRANT ON TO WITH

© 2013

SELECT, INSERT, UPDATE, DELETE Schema2.Contact User1 GRANT OPTION;

SAP AG. All rights reserved.

463

GRANT

You can assign privileges for all tables and views of a schema by using a single GRANT statement.  User1 is allowed to SELECT from all tables and views of schema Schema2.  User1 is allowed to grant this privilege to other users (for all or selected tables or views). 

GRANT ON TO WITH

© 2013

SELECT SCHEMA Schema2 User1 GRANT OPTION;

SAP AG. All rights reserved.

464

GRANT

Depending on the granularity (or the type of database object) you can assign different access privileges to users.

Granularity

Access Privileges

(single) Schema

SELECT, INSERT, UPDATE, DELETE, DROP, ALTER, CREATE ANY

(single) Table

SELECT, INSERT, UPDATE, DELETE, DROP, ALTER

(single) View

SELECT, INSERT, UPDATE, DELETE, DROP

© 2013

SAP AG. All rights reserved.

465

Access Control

The SQL statement REVOKE

© 2013

SAP AG. All rights reserved.

466

REVOKE

REVOKE Privilege, Privilege, Privilege ON Database_Object FROM Database_User;

© 2013

SAP AG. All rights reserved.

467

REVOKE



Using the REVOKE statement you can selectively revoke access privileges from a user.

 User1 will no longer be allowed to read from table Official of schema Schema2 (assuming that this privilege is not granted by other privileges)

REVOKE SELECT ON Schema2.Official FROM User1;

© 2013

SAP AG. All rights reserved.

468

REVOKE



You can revoke multiple privileges for the same database object by using a single REVOKE statement

 User1 will no longer be allowed to SELECT, INSERT, UPDATE, DELETE from table Contact of schema Schema2 (assuming that these privileges are not granted by other privileges)

REVOKE SELECT, INSERT, UPDATE, DELETE ON Schema2.Contact FROM User1;

© 2013

SAP AG. All rights reserved.

469

REVOKE



Access privileges on different hierarchical levels of database objects are independent.

 Despite the REVOKE statement User1 still has read access to the table Official of schema Schema2 , because he still has a (not withdrawn) read permission on the entire schema Schema2 .

GRANT SELECT ON SCHEMA Schema2 TO User1; REVOKE SELECT ON Schema2.Official FROM User1;

© 2013

SAP AG. All rights reserved.

470

REVOKE



The independence of access privileges at various hierarchical levels is also valid in the contrary case.



Despite the REVOKE statement User1 still has read access to the table Official of schema Schema2 , because he still has a (not withdrawn) read permission on the table.

GRANT SELECT ON Schema2.Official TO User1; REVOKE SELECT ON SCHEMA Schema2 FROM User1;

© 2013

SAP AG. All rights reserved.

471

Access Paths

What is a database index?

© 2013

SAP AG. All rights reserved.

472

Access Paths

 An index (plural: indexes or indices) is an access path.  An index may speed up search and sorting. – Index access instead of "full table scan" or "full column scan" – Index usage with HANA COLUMN TABLES only in exceptional cases

 An index usually slows down inserts, update and deletion.  An index has no influence on the query result. – Effect "only" on performance

 Indexes are not covered by the SQL standard. – CREATE / DROP INDEX are strictly speaking no SQL statements.

© 2013

SAP AG. All rights reserved.

473

HANA: Why Indexes on Column Store?

– Sorted dictionary of values – (Bit-)Vector of value IDs

Are indexes necessary to speed up data access?

© 2013

SAP AG. All rights reserved.

Column „Name“ conceptual

Column “Name” – internal representation Value ID vector

Dictionary

Miller

4

0

Baker

Jones

1

1

Jones

Millman

5

2

John

Zsuwalski

772

3

Johnson

Baker

0

4

Miller

Miller

4

5

Millman

John

2

Miller

4

Johnson

3

Jones

1





sorted

 HANA stores data in columns, not rows  Columns are stored as

… 772

Zsuwalski …

474

HANA: Table Scan With Value ID

 Value ID lookup is fast

Dictionary



WHERE Name = 'Zsuwalski'

 Row ID lookup can still involve “full column scan” – No issue for most value ID vectors, even less if sorted – But may be slow for very large value ID vectors

© 2013

SAP AG. All rights reserved.

binary search on dictionary

– binary search on sorted dictionary

Value ID vector

ID

Value

Row ID

Value ID

0

Baker

0

4

1

Jones

1

1

2

John

2

5

3

Johnson

3

772

4

Miller

4

0

5

Millman

772

full column scan with value ID





254621

772

Zsuwalski







475

HANA: Inverted Index on Column Store

 An inverted index can be reasonable in exceptional cases if column scan performance is not sufficient

WHERE Name = 'Zsuwalski'

© 2013

SAP AG. All rights reserved.

binary search on dictionary

Dictionary

Inverted Index

Value ID vector

ID

Value

Value ID

Rows

Row ID

Value ID

0

Baker

0

56756

0

4

1

Jones

1

345, 76876





3

772

… 772

Zsuwalski …





772

3, 254621





… 254621

772





476

Access Paths

Which SQL statements can I use to create a database index?

© 2013

SAP AG. All rights reserved.

477

Access Paths

CREATE INDEX  A new database index is created.

DROP INDEX  An existing database index is deleted.

© 2013

SAP AG. All rights reserved.

478

Access Paths

CREATE INDEX

© 2013

SAP AG. All rights reserved.

479

Access Paths

CREATE INDEX Access_Path ON Table (Column, Column);

CREATE UNIQUE INDEX Access_Path ON Table (Column, Column);

© 2013

SAP AG. All rights reserved.

480

CREATE INDEX

 

To speed up the read access you can create an index on a table column. The respective table can be empty or contain data.

 An index on column PlateNumber of table Car will be created:

CREATE INDEX PlateNumberIndex ON Car (PlateNumber);

© 2013

SAP AG. All rights reserved.

481

CREATE INDEX



You can create a UNIQUE INDEX to ensure that the corresponding column cannot contain duplicate values.



Unlike PRIMARY KEY, UNIQUE INDEX does not prohibit NULL values.



A UNIQUE INDEX can only be created when the column contains no duplicate values.

 In table Car no duplicated plate numbers are allowed:

CREATE UNIQUE INDEX PlateNumberIndex ON Car (PlateNumber);

© 2013

SAP AG. All rights reserved.

482

CREATE INDEX

You can create multiple indexes on the same table.  A single-column index is created on column Brand of table Car.  A single-column index is created on column Color of the same table.

CREATE INDEX BrandsIndex ON Car (Brand); CREATE INDEX ColorsIndex ON Car (Color);

© 2013

SAP AG. All rights reserved.

483

CREATE INDEX

You can create a multi-column index.  Here a two-column index is created:

CREATE INDEX BrandsColorsCombinationsIndex ON Car (Brand, Color);

© 2013

SAP AG. All rights reserved.

484

CREATE INDEX



By applying a multi-column UNIQUE INDEX, the relevant combination of columns can be defined as key.



In contrast to the PRIMARY KEY, UNIQUE INDEX does not prohibit NULL values in the key columns.



You can only create a multi-column UNIQUE INDEX, if the relevant column combination does not contain duplicates. Here, the value ​uniqueness of Country and PlateNumber combinations is enforced:



CREATE UNIQUE INDEX CountryPlateNumberCombiIndex ON Car_EU (Country, PlateNumber);

© 2013

SAP AG. All rights reserved.

485

Access Paths

DROP INDEX

© 2013

SAP AG. All rights reserved.

486

Access Paths

DROP INDEX Access_Path;

© 2013

SAP AG. All rights reserved.

487

DROP INDEX

  

You can drop an existing index. Only the access path (index) is deleted. The underlying data of the index is not deleted.

 DROP INDEX does not syntactically distinguish between NON-UNIQUE and UNIQUE indexes.

DROP INDEX PlateNumberIndex;

© 2013

SAP AG. All rights reserved.

488

Unit 10: Defining Data Access Summary

You should now be able to: •

Access tables in other schemas (assuming suitable permissions) • Control how other users can access data in your own schema • Explain when database indexes make sense even in HANA • Create and delete database indexes using SQL

© 2013

SAP AG. All rights reserved.

489

Unit 11 Database Transactions

490

Unit 11: Database Transactions Learning Objectives

After completing this unit, you will be able to: • Explain what a database transaction is and why it is needed • Explain the acronym ACID

• Finish database transactions in HANA using SQL statements • Describe issues that arise if transactions are not mutually isolated • Understand how classical database systems synchronize concurrent transactions • Understand how HANA synchronizes concurrent transactions

© 2013

SAP AG. All rights reserved.

491

Database Transactions



Transaction (TA) = Sequence of associated database operations (SQL statements) for which the ACID requirements must be met.



All database operations always take place within transactions (in the extreme case, each operation has its own transaction).

• • • •

A C I D

© 2013

= = = =

Atomicity Consistency Isolation Durability

SAP AG. All rights reserved.

492

Database Transactions

• Atomicity (A): A transaction is either executed completely or not at all.  For Example: Transfer from Account1 to Account2

• Consistency (C): A transaction will bring the database from one consistent state to an(other) consistent state.  During a transaction inconsistent states are possible, for example account transfers or marriage registration.

• Isolation (I): The database changes performed within a transaction shall only be visible to the outside after the completion of the transaction Important only for multi-user operations. Problematic if changes of canceled transactions can be seen.

• Durability (D): If a transaction is successfully completed (COMMIT), all changes from the transaction must permanently stay even in case of failures, or can be restored automatically. For example: Booking a deposit

© 2013

SAP AG. All rights reserved.

493

Database Transactions •

The ACID requirements must be ensured by the DBMS (not trivial).



The DBMS must provide mechanisms/automation for:  Logging & Recovery for A + D  Synchronization for I (such as locks)  Integrity control for C



ACID requirements „cost“:  With respect to the DBMS implementation effort  With regard to performance at runtime

© 2013

SAP AG. All rights reserved.

494

Database Transactions

Which SQL statements can I use to start a transaction?

© 2013

SAP AG. All rights reserved.

495

Database Transactions

SAP HANA does not provide a SQL statement to explicitly start a transaction.

A transaction is implicitly started, if the previous transaction was canceled or successfully completed (or there is no previous transaction) AND one of the following SQL statements is executed SELECT INSERT UPDATE DELETE The transaction begins directly before the SQL statement, by which it is implicitly started.

© 2013

SAP AG. All rights reserved.

496

Database Transactions

Which SQL statements can I use to finish a transaction?

© 2013

SAP AG. All rights reserved.

497

Database Transactions

COMMIT

 The currently running transaction should be completed successfully.  The durability requirement must be ensured.

ROLLBACK

 The currently running transaction should be canceled.  The atomicity requirement must be ensured.

© 2013

SAP AG. All rights reserved.

498

Database Transactions

DELETE FROM Car; COMMIT; INSERT INTO Car(CarID) INSERT INTO Car(CarID) INSERT INTO Car(CarID) COMMIT; INSERT INTO Car(CarID) INSERT INTO Car(CarID) INSERT INTO Car(CarID) ROLLBACK; INSERT INTO Car(CarID) INSERT INTO Car(CarID) INSERT INTO Car(CarID) COMMIT; SELECT CarID FROM Car;

© 2013

SAP AG. All rights reserved.

VALUES ('F01'); VALUES ('F02'); VALUES ('F03'); VALUES ('F04'); VALUES ('F05'); VALUES ('F06'); VALUES ('F07'); VALUES ('F08'); VALUES ('F09');

CARID ----F01 F02 F03 F07 F08 F09

499

Database Transactions

DELETE FROM Car; COMMIT; INSERT INTO Car(CarID) VALUES INSERT INTO Car(CarID) VALUES INSERT INTO Car(CarID) VALUES CREATE COLUMN TABLE T(S INT); INSERT INTO Car(CarID) VALUES INSERT INTO Car(CarID) VALUES INSERT INTO Car(CarID) VALUES ROLLBACK; INSERT INTO Car(CarID) VALUES INSERT INTO Car(CarID) VALUES INSERT INTO Car(CarID) VALUES COMMIT; SELECT CarID FROM Car;

© 2013

SAP AG. All rights reserved.

Certain SQL statements cause an implicit COMMIT ('F01'); ('F02'); ('F03'); ('F04'); ('F05'); ('F06'); ('F07'); ('F08'); ('F09');

CARID ----F01 F02 F03 F07 F08 F09

500

Multi-user Mode

Multi-user operations are absolutely necessary - but not without problems

© 2013

SAP AG. All rights reserved.

501

Multi-user Mode

Multi-user mode is absolutely necessary! •

If the transactions took place strictly in sequence one after another, this would be a huge waste of resources, since waiting times could not be used. • • •

Waiting for user input Waiting for disk access (for classical DBMS products) Waiting times caused by the application program

Multiple transaction must run time-shared (“interlocked”) •

When this happens in an uncontrolled manner (for example without synchronization), many problems can occur.



The problems can be divided into 5 different error classes (see following slides)

© 2013

SAP AG. All rights reserved.

502

Uncontrolled Multi-user Mode 1/5 Lost-update Problem  The changes of a transaction are overwritten by another transaction and therefore lost.

Point in time

Transaction 1

t1

Read x

t2 t3

Read x x := x + 5,000; x := x – 100;

t4 t5 t6

© 2013

SAP AG. All rights reserved.

Transaction 2

Write x Write x

503

Uncontrolled Multi-user Mode 2/5 Inconsistent Analyses  A transaction sees an apparent inconsistency, since it refers to two different consistent database states.

Point in time

Transaction 1

t1

Read marital status of Mandy (Result: “unmarried”)

t2

Change marital status of Mandy to “married”

t3

Change marital status of Thomas to “married”

t4

© 2013

Transaction 2

SAP AG. All rights reserved.

Read marital status of Thomas (Result: “married”)

504

Uncontrolled Multi-user Mode 3/5 Phantom Problem (“malicious”, as it cannot be prevented by row-locking)  A transaction sees an apparent inconsistency, since another transaction inserted a new row in the meantime. Point in time t1

Transaction 2

Read all SAP employees

t2

Insert Mr Z as a new SAP employee

t3

Register Mr Z as course participant

t4

© 2013

Transaction 1

SAP AG. All rights reserved.

Read all course participants (Mr Z is a participant of an internal course, though he apparently seems to be no SAP employee!)

505

Uncontrolled Multi-user Mode 4/5 Non-repeatable read  During the same transaction different results are obtained for repeated reading of the same facts. Point in time

Transaction 1

t1

Read salary of Mr A

t2 t3

© 2013

SAP AG. All rights reserved.

Transaction 2

Raise salary of Mr A Read salary of Mr A

506

Uncontrolled Multi-user Mode 5/5 Dependency on uncommitted changes (Dirty reads)  A transaction sees and uses a state that officially never existed.

Point in time

Transaction 1

t1

Raise salary to € 10,000,000.-

t2

Read salary

t3

Donate € 5,000,000.-

t4

COMMIT;

t5

© 2013

Transaction 2

SAP AG. All rights reserved.

ROLLBACK; (transaction canceled)

507

Synchronisation

 To avoid the problems shown before, multi-user mode must be controlled or synrchonized – Synchronization = time based coordination of processes

 A common option for synchronization is the use of locking – Locks are the most important (but not the only) way – “Multi-version Concurrency Control" can also be used – Alternatively, there is the “Optimistic Synchronization Method“

 The goal of synchronization is the logical single-user mode with physical multi-user mode.

© 2013

SAP AG. All rights reserved.

508

Logical Single-user Mode

What does logical single-user mode with physical multi-user mode mean?

© 2013

SAP AG. All rights reserved.

509

Logical Single-user Mode

The user should have the impression of being the only active user of the database. This goal cannot be reached to 100%.  If access to a (currently locked) object takes longer, the users will suspect that they are not alone.  If the transaction is aborted by the DBMS to resolve a deadlock, the users will suspect that they are not alone.

Externally there should be the impression that the transactions are strictly executed in series (that means one after another - Serializability criterion)  In reality: time-shared processing of several transactions – But the impression of serial processing should be created

© 2013

SAP AG. All rights reserved.

510

Serializability

What is the Serializability Criterion?

© 2013

SAP AG. All rights reserved.

511

Serializability

 Serializability = There is a serial execution order of the transactions that has the same result – Result in terms of database state or database content

 Serializability is therefore a correctness criterion for the "correct" execution of the synchronization (that means for the "right" control of the multi-user mode)  Ensuring Serializability is the responsibility of the DBMS (and not of the user or of the application program)  What Serializability means, you can best understand with reference to a concrete example … (see following slides).

© 2013

SAP AG. All rights reserved.

512

Transaction 1

UPDATE Official SET Overtime = Overtime + 2 WHERE PNr = 'P07'; UPDATE Official SET Overtime = Overtime + 2 WHERE PNr = 'P07'; COMMIT;

© 2013

SAP AG. All rights reserved.

513

Transaction 2

--Rounding to full ten UPDATE Official SET Overtime = ROUND(Overtime, -1) WHERE PNr = 'P07';

SELECT * FROM Contact; COMMIT;

© 2013

SAP AG. All rights reserved.

514

Transaction 3

UPDATE Official SET Overtime = Overtime * 4 WHERE PNr = 'P07'; UPDATE Official SET Overtime = Overtime / 2 WHERE PNr = 'P07'; COMMIT;

© 2013

SAP AG. All rights reserved.

515

Effect of the 3 Transactions

TA1 increases the overtime value by 4

1a) o = o + 2; 1b) o = o + 2; TA2 rounds the overtime value to full ten

2a) o = round(o); 2b) read access; TA3 doubles the overtime value

3a) o = o * 4; 3b) o = o / 2;

© 2013

SAP AG. All rights reserved.

516

Serial Execution

  

TA1 increases the overtime value by 4 TA2 rounds the overtime value to full ten TA3 doubles the overtime value

TA1 → TA2 → TA3

22 → 26 → 30 → 60

TA1 → TA3 → TA2

22 → 26 → 52 → 50

TA2 → TA1 → TA3

22 → 20 → 24 → 48

TA2 → TA3 → TA1

22 → 20 → 40 → 44

TA3 → TA1 → TA2

22 → 44 → 48 → 50

TA3 → TA2 → TA1

22 → 44 → 40 → 44



Initial value = 22

Correct result (according to Serializability): 44, 48, 50 und 60

© 2013

SAP AG. All rights reserved.

517

Incorrect Interleaving

Initial Value

22

1.

(1a)

o = o + 2;

24

2.

(2a)

o = round(o);

20

3.

(2b)

read access;

20

4.

(3a)

o = o * 4;

80

5.

(1b)

o = o + 2;

82

6.

(3b)

o = o / 2;

41



The interleaving shown above is incorrect, because the result (41) does not correspond to any value that can occur in serial execution (44, 48, 50 and 60)

© 2013

SAP AG. All rights reserved.

518

Correct Interleaving

Initial Value

22

1.

(3a)

o = o * 4;

88

2.

(2a)

o = round(o);

90 

3.

(1a)

o = o + 2;

92

4.

(3b)

o = o / 2;

46

5.

(2b)

read access;

46

6.

(1b)

o = o + 2;

48

© 2013

SAP AG. All rights reserved.

The interleaving shown here is correct, because the result (48) corresponds to one of the values that can occur by serial execution (44, 48, 50 and 60).

519

Multi-user Mode

What are Isolation Levels?

© 2013

SAP AG. All rights reserved.

520

Isolation Levels

Isolation Levels define … •

Whether rows that are read, inserted, updated, or deleted by a transaction are available to other transactions running in parallel.



Whether read, insert, update, or delete activities of another transaction running in parallel have an impact on the current transaction.



Which problems of uncontrolled multi-user mode may occur and which problems must be prevented (by the DBMS)

© 2013

SAP AG. All rights reserved.

521

Isolation Levels

 4 isolation levels are defined by the SQL Standard in such a way that each level defines which problems may occur and which problems must be prevented by the DBMS.

Isolation Level

Uncommitted Dependency (Dirty Reads)

Non-repeatable Reads

Phantom Problem

0

READ UNCOMMITTED

possible

possible

possible

1

READ COMMITTED

impossible

possible

possible

2

REPEATABLE READ

impossible

impossible

possible

3

SERIALIZABLE

impossible

impossible

impossible

© 2013

SAP AG. All rights reserved.

522

Multi-user Mode

Which SQL statement can I use to define the isolation level?

© 2013

SAP AG. All rights reserved.

523

Multi-user Mode

SET TRANSACTION ISOLATION LEVEL    

A certain isolation level is set. You must set the isolation level before the transaction starts. The isolation level is only valid for a single (i.e. next to run) transaction. If different isolation levels are set before the transaction starts, only the last setting is decisive.  The isolation level “SERIALIZABLE” guarantees serializability.

© 2013

SAP AG. All rights reserved.

524

Multi-user Mode

SET TRANSACTION ISOLATION LEVEL

© 2013

SAP AG. All rights reserved.

525

Isolation Levels

SET TRANSACTION ISOLATION LEVEL IsolationLevel;

© 2013

SAP AG. All rights reserved.

526

Isolation Levels

 According to the SQL Standard isolation level SERIALIZABLE is the default.  In SAP HANA the isolation level READ COMITTED is the default.  It is not possible to set isolation level READ UNCOMMITED in SAP HANA.  You can set the remaining three isolation levels as follows: SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

© 2013

SAP AG. All rights reserved.

527

Synchronization

How do classical DBMS products synchronize the multi-user mode?

© 2013

SAP AG. All rights reserved.

528

Classical Synchronization

 Classical DBMS products usually use locking for multi-user mode synchronization.  Database objects (schemata, tables, rows) are locked prior to any access (and therefore cannot or only in a limited way be used by other transactions).  Locks are set and released by the DBMS.  User or applications do not need to care of the locks (automation of the DBMS).

© 2013

SAP AG. All rights reserved.

529

Synchronization

How does SAP HANA synchronize its multi-user mode?

© 2013

SAP AG. All rights reserved.

530

Synchronization in SAP HANA

The consistency of write access is ensured by X-locks  The affected rows are locked “as usual”. The consistency of read access is ensured by “Multi Version Concurrency Control“ (MVCC)  No S-locks are set when reading rows .  By default, all SELECT statements of the same transaction see the same (possibly obsolete) consistent version of the database state (≈ isolation level REPEATABLE READ).  This version contains all changes that were committed before the start of the transaction (together with all changes done by the transaction itself). This is called “transaction-level snapshot isolation”.  Write access for other transactions running in parallel creates a new version of the database state (which is not visible to the transaction mentioned above.)  Isolation level READ COMMITED corresponds to statement-level snapshot isolation

© 2013

SAP AG. All rights reserved.

531

Multi-Version Concurreny Control – An Example

Timeline of 5 transactions T1-T5 accessing same record „item D“

T2 T4

T5 starts after T3 is committed  sees V2 When T4 ends (last transaction that still sees V1), V1 becomes obsolete

© 2013

SAP AG. All rights reserved.

V2 open V1 open

committed

read

read

insert

update

T5

item D versions



T3

T1 writes V1 of item D T3 starts and writes V2. V1 still remains visible for transactions that started before T3 ends.  With „transaction-level“ snapshot isolation, T2 and T4 keep seeing V1 of item D (≈ repeatable read)



commit

Tx T1

read

 

commit

committed out-dated

532

Write Locks & Snapshot Isolation – Additional Remarks

 Snapshot Isolation can lead to updates a transaction that started earlier doesn’t see  Transaction-level snapshot isolation increases probability of conflicts on application level

© 2013

SAP AG. All rights reserved.

Transaction T1

write

write

read

re-read

Transaction T2

data record versions

 Primary key & uniqueness constraints are checked considering all existing versions  Deadlock situations can not be prevented

commit

V3 V2 V1

Committed Committed

533

Unit 11: Database Transactions Summary

You should now be able to: •

Explain what a database transaction is and why it is needed • Explain the acronym ACID • Finish database transactions in HANA using SQL statements • Describe issues that arise if transactions are not mutually isolated •

Understand how classical database systems synchronize concurrent transactions • Understand how HANA synchronizes concurrent transactions

© 2013

SAP AG. All rights reserved.

534

Summary

535

Summary

Motivation And Basic Concepts Reading Data From A Table Or View Aggregating Data

Reading Data From Multiple Tables Changing Data Stored in Tables Defining How Data Is Stored Using Views For Data Access Defining Data Access

Understanding NULL Values Database Transactions © 2013

SAP AG. All rights reserved.

536

Open Questions

© 2013

SAP AG. All rights reserved.

537

Done!

© 2013

SAP AG. All rights reserved.

538

Meta Data

How can I access meta data?

© 2013

SAP AG. All rights reserved.

539

Accessing Meta Data

 

The DBMS provides metadata views (catalog views). This is a requirement of the SQL standard. You can use SQL to read the meta data.



Which tables belong to schema Schema1?

SELECT Table_Name FROM Sys.Tables WHERE Schema_Name = 'SCHEMA1';

© 2013

SAP AG. All rights reserved.

TABLE_NAME ---------CONTACT OFFICIAL OWNER STOLEN OWNER_EU CAR CAR_EU

540

Accessing Meta Data

 Which columns are in table Car of schema Schema1?

SELECT FROM WHERE ORDER BY

Column_Name, Position, Data_Type_Name Sys.Table_Columns Schema_Name = 'SCHEMA1' AND Table_Name ='CAR' Position;

COLUMN_NAME ----------CARID PLATENUMBER BRAND COLOR HP OWNER

© 2013

SAP AG. All rights reserved.

POSITION -------1 2 3 4 5 6

DATA_TYPE_NAME -------------VARCHAR VARCHAR VARCHAR VARCHAR INTEGER VARCHAR

541

Accessing Meta Data

 How many columns do the tables of schema Schema1 have?

SELECT FROM WHERE GROUP BY ORDER BY

Table_Name, COUNT(*) AS NumColumns Sys.Table_Columns Schema_Name = 'SCHEMA1' Table_Name 2 TABLE_NAME ---------CONTACT STOLEN OWNER OWNER OWNER_EU CAR CAR_EU

© 2013

SAP AG. All rights reserved.

NUMCOLUMNS ---------2 2 4 5 5 6 7 542

Accessing Meta Data

 Which tables of schema Schema1 have the fewest columns?

SELECT FROM WHERE GROUP BY HAVING

TABLE_NAME ---------CONTACT STOLEN © 2013

Table_Name, COUNT(*) AS NumColumns Sys.Table_Columns Schema_Name = 'SCHEMA1' Table_Name COUNT(*) = (SELECT TOP 1 COUNT(*) FROM Sys.Table_Columns WHERE Schema_Name = 'SCHEMA1' GROUP BY Table_Name ORDER BY 1); NUMCOLUMNS ---------2 2

SAP AG. All rights reserved.

543

Accessing Meta Data

 Which tables of schema Schema1 have the most columns?

SELECT FROM WHERE GROUP BY HAVING

TABLE_NAME ---------CAR_EU

© 2013

Table_Name, COUNT(*) AS NumColumns Sys.Table_Columns Schema_Name = 'SCHEMA1' Table_Name COUNT(*) = (SELECT TOP 1 COUNT(*) FROM Sys.Table_Columns WHERE Schema_Name = 'SCHEMA1' GROUP BY Table_Name ORDER BY 1 DESC); NUMCOLUMNS ---------7

SAP AG. All rights reserved.

544

Meta Data

Which meta data views are available?

© 2013

SAP AG. All rights reserved.

545

Accessing Meta Data

 There are several meta data views …

Meta Data View

Information contained

Sys.Tables

Which tables are available?

Sys.Table_Columns

Which columns are in the tables?

Sys.Views

Which views are available?

Sys.View_Columns

Which columns are in the views?

Sys.Indexes

Which indexes are available?

Sys.Index_Columns

Which columns are in the indexes?

© 2013

SAP AG. All rights reserved.

546

© 2013 SAP AG. All rights reserved.

No part of this publication may be reproduced or transmitted in any form or for any purpose without the express permission of SAP AG. The information contained herein may be changed without prior notice. Some software products marketed by SAP AG and its distributors contain proprietary software components of other software vendors. National product specifications may vary. These materials are provided by SAP AG and its affiliated companies ("SAP Group") for informational purposes only, without representation or warranty of any kind, and SAP Group shall not be liable for errors or omissions with respect to the materials. The only warranties for SAP Group products and services are those that are set forth in the express warranty statements accompanying such products and services, if any. Nothing herein should be construed as constituting an additional warranty.

SAP and other SAP products and services mentioned herein as well as their respective logos are trademarks or registered trademarks of SAP AG in Germany and other countries. Please see http://www.sap.com/corporate-en/legal/copyright/index.epx#trademark for additional trademark information and notices.

© 2013

SAP AG. All rights reserved.

547

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF