1 Advanced SQL Topics Edward Wu. 2 Lesson Objectives Learn how to create and use indexes Create,...

Preview:

Citation preview

1

Advanced SQL Topics

Edward Wu

2

Lesson ObjectivesLearn how to create and use indexes

Create, Alter, and Drop Views

Outer / Self Join

Nested Queries

Useful Function (Decode, Case, Rownum)

3

Database IndexesSimilar to an index in a book

Table with list of sorted data values and corresponding physical location

Used to speed searches

Primary key indexed automatically

Unlimited number allowed, but more indexes means more processing time for action queries (insert, update, delete)

4

Creating an IndexCreate index after table data is loadedCREATE INDEX index_name ON tablename (index_fieldname);Convention for naming index: tablename_fieldname.

5

Composite IndexContains multiple (up to 16) sorted columnsUsed for queries with multiple search conditionsCREATE INDEX index_name ON tablename(index_fieldname1, index_fieldname2, …);

6

Viewing Index InformationUse data dictionary view USER_INDEXES

7

Dropping an IndexIf an index is no longer needed or does not improve performance, delete it

DROP INDEX index_name;

8

Use an Index WhenTable contains a large number of records (a rule of thumb is that a large table contains over 100,000 records)The field contains a wide range of valuesThe field contains a large number of NULL valuesApplication queries frequently use the field in a search condition or join conditionMost queries retrieve less than 2% to 4% of the table rows

9

Do Not Use an Index WhenThe table does not contain a large number of recordsApplications do not use the proposed index field in a query search conditionMost queries retrieve more than 2% to 4% of the table recordsApplications frequently insert or modify table data

10

Logical table based on a queryDoes not physically exist in the databasePresents data in a different format from underlying tablesUses:SecuritySimplifying complex queries

Database Views

11

Creating a view:

CREATE VIEW view_name AS

SQL_command;

Views can be queried just like tables:

SELECT *

FROM view_name;

Database Views

12

Simple Views Based on SQL query that retrieves data from only one table (limit data for different user)View can support all table DML operations: INSERTUPDATEDELETE

13

Complex Views Based on query that retrieves data from multiple tables

Can only be used to support SELECT operationsNo DML operations supported

For reporting purposes. (Sales Report)

Can create index on view.

14

Join QueriesRetrieve data from multiple tables by joining tables using foreign key references

Join query types:OuterSelf Inequality

15

Inner Join with Group by Find the total inventory amount on hand for each item

Different price

16

Outer JoinsLimitation of inner joins: some records may be omitted if corresponding records don’t exist in one of the tables

Example: retrieve records for all students, along with their corresponding ENROLLMENT information

17

Outer Joins

Student 105 (Michael Connoly) does not have any ENROLLMENT records

18

Outer JoinsNo records retrieved for Michael:

19

Outer Joins To include records in first (inner)

table, even when they do not have matching records in second (outer) table, place outer join marker (+) beside outer table name in join clause

20

Outer JoinsOuter join marker

21

A B

A B

BA

A.id = B.id

(+)A.id = B.id

A.id = B.id(+)

Note: Orange is the area that is returned

22

Self JoinsUsed to join a table to itself when the table has a hierarchical relationship

23

Self JoinsTo create a self-join, you need to create a table alias, which gives an alternate name to the table so you can create a join conditionSyntax to create table alias in FROM clause:

FROM table1 alias1, table2 alias2

24

Self JoinsP_ID PROJECT_NAME CLIENT_ID MGR_ID PARENT_P_ID

1 Hardware Support Intranet 2 105

2 Hardware Support Interface 2 103 1

3 Hardware Support Database 2 102 1

4 Teller Support System 4 105

5 Internet Advertising 6 105

6 Network Design 6 104 5

7 Exploration Database 5 102

PARENT_PROJECT

P_ID PROJECT_NAME CLIENT_ID MGR_ID PARENT_P_ID

1 Hardware Support Intranet 2 105

2 Hardware Support Interface 2 103 1

3 Hardware Support Database 2 102 1

4 Teller Support System 4 105

5 Internet Advertising 6 105

6 Network Design 6 104 5

7 Exploration Database 5 102

PROJECT

P_ID PROJECT_NAME CLIENT_ID MGR_ID PARENT_P_ID

1 Hardware Support Intranet 2 105

2 Hardware Support Interface 2 103 1

3 Hardware Support Database 2 102 1

4 Teller Support System 4 105

5 Internet Advertising 6 105

6 Network Design 6 104 5

7 Exploration Database 5 102

SUB_PROJECT

25

Self Join Example

26

Inequality JoinsJoin created by placing making join condition satisfy an inequality condition

Only makes sense when primary/foreign key values are not surrogate keys

27

Inequality Joins

28

Nested QueriesCreated when a subquery is nested within a main queryMain query: first query listed in SELECT

commandSubquery: retrieves one or more values

that specify the main query’s search condition

29

Nested Query WhereSubquery Returns a Single Value

Syntax:SELECT column1, column2, …

FROM table1, table2, …

WHERE join conditions

AND search_column1 =(SELECT column1

FROM table1, table2, …

WHERE search and

join conditions)

Subquerythat returnsone value

Note: subquery is just another sql command contained within a parenthesis

30

Example Nested Query WhereSubquery Returns a Single Value

Find the class that Amanda goes to.

Find all the student that goes to Amanda class

31

Nested Query WhereSubquery Returns Multiple Values

Syntax:SELECT column1, column2, …

FROM table1, table2, …

WHERE join conditions

AND search_column1 IN (SELECT column1

FROM table1, table2, …

WHERE search and

join conditions)

Subquerythat returnsmultiple values

32

Example Nested Query WhereSubquery Returns Multiple Values

Find all the course that Amanda enrolled in. which returned

c_sec_id: 1010, 1011

Find all the students that enrolled in c_sec_id in (1010, 1011)

33

Example of nested queries (cont…)

Find the c_sec_id that use bldg_code=‘CR’ which is 1000, 1002, 1007, 1010

select c_sec_id from student s, enrollment e, course_section c where s.s_id = e.s_id and s_last = 'Mobley‘ and s_first = 'Amanda‘ and c_sec_id in (1000, 1002, 1007, 1010);

34

Remember previous example of Inner Join with Group by

Find the total inventory amount on hand for each item

Different price

35

Creating Table Alias from select statement

Add an extra column for the percentage of inventory on hand

36

Performs set operations on outputs of two unrelated queries

Both queries must have:same number of display fieldscorresponding display fields must have

same data type

Using Set Operators in Queries

37

UNION: combines results, suppresses duplicate rows

UNION ALL: combines results, displays duplicates

INTERSECT: finds matching rows

MINUS: returns the difference between returned record sets

Query Set Operators

38

Decode FunctionFacilitates conditional inquiries by doing the work of a CASE or IF-THEN-ELSE statement

SyntaxDecode(column/expression, search1, result1

[, search2, result2, …, ]

[, default ] );

39

The Decode Function

The DECODE function decodes an expression in a way similar to the IF-THEN-ELSE logic used in various languages. The DECODE function decodes expression after comparing it to each search value. If the expression is the same as search, result is returned.

Note: If the default value is omitted, a null value is returned where a search value does not match any of the result value.

40

Using the DECODE Function

41

Row Num

42

Search Result for web page

Recommended