Advanced SQL Topics Edward Wu
Lesson Objectives Learn how to create and use indexes Create, Alter, and Drop Views Outer / Self Join Nested Queries Useful Function (Decode, Case, Rownum)
Database Indexes Similar 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)
Creating an Index Create index after table data is loaded CREATE INDEX index_name ON tablename (index_fieldname); Convention for naming index: tablename_fieldname.
Composite Index Contains multiple (up to 16) sorted columns Used for queries with multiple search conditions CREATE INDEX index_name ON tablename(index_fieldname1, index_fieldname2, …);
Viewing Index Information Use data dictionary view USER_INDEXES
Dropping an Index If an index is no longer needed or does not improve performance, delete it DROP INDEX index_name;
Use an Index When Table 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 values The field contains a large number of NULL values Application queries frequently use the field in a search condition or join condition Most queries retrieve less than 2% to 4% of the table rows
Do Not Use an Index When The table does not contain a large number of records Applications do not use the proposed index field in a query search condition Most queries retrieve more than 2% to 4% of the table records Applications frequently insert or modify table data
Database Views Logical table based on a query Does not physically exist in the database Presents data in a different format from underlying tables Uses: Security Simplifying complex queries
Database Views Creating a view: CREATE VIEW view_name AS SQL_command; Views can be queried just like tables: SELECT * FROM view_name;
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: INSERT UPDATE DELETE
Complex Views Based on query that retrieves data from multiple tables Can only be used to support SELECT operations No DML operations supported For reporting purposes. (Sales Report) Can create index on view.
Join Queries Retrieve data from multiple tables by joining tables using foreign key references Join query types: Outer Self Inequality
Inner Join with Group by Find the total inventory amount on hand for each item Different price
Outer Joins Limitation 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
Outer Joins Student 105 (Michael Connoly) does not have any ENROLLMENT records
Outer Joins No records retrieved for Michael:
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
Outer Joins Outer join marker
A B A.id = B.id A B (+)A.id = B.id A B A.id = B.id(+) Note: Orange is the area that is returned A B A.id = B.id A B (+)A.id = B.id A B A.id = B.id(+)
Self Joins Used to join a table to itself when the table has a hierarchical relationship
Self Joins To 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 condition Syntax to create table alias in FROM clause: FROM table1 alias1, table2 alias2
PARENT_PROJECT Self Joins SUB_PROJECT PROJECT
Self Join Example
Inequality Joins Join created by placing making join condition satisfy an inequality condition Only makes sense when primary/foreign key values are not surrogate keys
Inequality Joins
Nested Queries Created when a subquery is nested within a main query Main query: first query listed in SELECT command Subquery: retrieves one or more values that specify the main query’s search condition
Nested Query Where Subquery 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) Subquery that returns one value Note: subquery is just another sql command contained within a parenthesis
Example Nested Query Where Subquery Returns a Single Value Find all the student that goes to Amanda class Find the class that Amanda goes to.
Nested Query Where Subquery 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) Subquery that returns multiple values
Example Nested Query Where Subquery Returns Multiple Values Find all the students that enrolled in c_sec_id in (1010, 1011) Find all the course that Amanda enrolled in. which returned c_sec_id: 1010, 1011
Example of nested queries (cont…) 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); Find the c_sec_id that use bldg_code=‘CR’ which is 1000, 1002, 1007, 1010
Remember previous example of Inner Join with Group by Find the total inventory amount on hand for each item Different price
Creating Table Alias from select statement Add an extra column for the percentage of inventory on hand
Using Set Operators in Queries Performs set operations on outputs of two unrelated queries Both queries must have: same number of display fields corresponding display fields must have same data type
Query Set Operators UNION: combines results, suppresses duplicate rows UNION ALL: combines results, displays duplicates INTERSECT: finds matching rows MINUS: returns the difference between returned record sets
Decode Function Facilitates conditional inquiries by doing the work of a CASE or IF-THEN-ELSE statement Syntax Decode(column/expression, search1, result1 [, search2, result2, …, ] [, default ] );
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.
Using the DECODE Function
Row Num
Search Result for web page