420 likes | 534 Views
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
E N D
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
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
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
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 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) Subquery that returns one value Note: subquery is just another sql command contained within a parenthesis
Example Nested Query WhereSubquery Returns a Single Value Find all the student that goes to Amanda class Find the class that Amanda goes to.
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) Subquery that returns multiple values
Example Nested Query WhereSubquery 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 searchvalue. 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.