190 likes | 319 Views
SQL's Data Definition Language (DDL) – View, Sequence, Index. DDL: View, Index, Sequence, Synonym . Objects are defined using the CREATE statement Some objects can be modified using the ALTER statement Some objects can be modified using the ALTER statement
E N D
SQL's Data Definition Language (DDL) – View, Sequence, Index
DDL: View, Index, Sequence, Synonym • Objects are defined using the CREATE statement • Some objects can be modified using the ALTER statement • Some objects can be modified using the ALTER statement • Some objects cannot be modified - they must be dropped and then re-created • Objects are removed using the DROP statement
View • A view is a virtual table – no data is actually maintained for a view • A view is defined based on existing tables by using a SELECT statement: CREATE VIEW viewname AS SELECT … • When a view is referenced the view's defining query is executed and data is retrieved from tables referenced by the defining query • The defining query for a view is stored in the data dictionary
View Example CREATE VIEW management AS SELECT Emp_no, ename FROM employees WHERE emp_no IN (SELECT mgr FROM employees WHERE mgr IS NOT NULL); • Using a view in a query causes the SELECT statement that defines the view to be executed and data values retrieved eg SELECT ename FROM management;
View Example 2 • Views are often used to simplify writing of complex queries which involve multiple tables or group functions Eg:CREATE VIEW deptsummary AS SELECT d.deptno, dept_name, sum(sal) Salaries FROM departments d, employees e WHERE d.dept_no = e.dept_no(+) GROUP BY d.dept_no, dept_name; SELECT * FROM deptsummary WHERE Salaries > 5000;
View Example 3 • Views are also used to permit access to only certain rows and/or columns in a table to some user(s) and not permit access to the remaining columns and/or rows Eg: CREATE VIEW emplist AS SELECT emp_no, ename, fname, job FROM employees WHERE LOWER(job)!='president' ORDER BY ename, fname; SELECT * FROM emplist;
Simple and Complex Views • A simple view is based upon a query that involves only a single table and uses no grouping; any other view is referred to a complex view • Data can be modified using INSERT, UPDATE and DELETE statements applied to a simple view but not to a complex view eg: UPDATE emplist SET job = 'Assistant' WHERE job = 'Clerk';
Modifying Data using a View • Data can be modified using INSERT, UPDATE and DELETE statements on a simple view but this is not normally done • A simple view defined using a WITH READ ONLY clause will not permit data to be modified eg CREATE VIEW emplist2 AS SELECT emp_no, ename, fname, job FROM employees WHERE LOWER(job)!='president' ORDER BY ename, fname WITH READ ONLY;
Change View • Change definition of a view by using the OR REPLACE clause in the CREATE VIEW statement eg CREATE OR REPLACE VIEW emplist AS SELECT emp_no, ename, fname, job FROM employees ORDER BY ename, fname;
Indexes • Indexes store the value of a column(s) being indexed as well as pointer(s) to the physical location of the row(s) having this value • Most are implemented using a B*Tree • Indexes are used for 2 purposes: improving performance of queries and enforcing uniqueness of column values • CREATE INDEX indexname ON tablename(col1name,col2name,…)
Indexing and Performance • Indexes are often created to improve performance of queries • However indexes slow performance of INSERT, UPDATE and DELETE operations because the index must be updated also • Be aware of trade-off between overhead involved and usefulness of index • DBMS decides when an index should be used to retrieve data – programmer cannot reference an index in a query
Indexes • Index can be used to enforce uniqueness on column(s) in a table • PRIMARY KEY and UNIQUE constraints are actually implemented by Oracle DBMS defining a UNIQUE index • CREATE UNIQUE INDEX indexname ON tablename(col1name,…) eg CREATE UNIQUE INDEX SINIndex ON STUDENT(SIN)
Composite Indexes • If defining an index on a composite field, the order of the columns is significant : list the most commonly queried column first so that the index can be used for this single column or for the combined columns eg CREATE INDEX SectionIndex ON SECTION (subjcode,sectcode) • SectionIndex can be used to search on subjcode alone or subjcode and sectcode combined – but is not used to search on sectcode alone
Common Reasons to Define an Index on Large Tables • Column(s) used frequently in joins – therefore index defined on most foreign key fields • Column(s) used frequently in clauses (WHERE, GROUP BY, ORDER BY) • Columns with a wide distribution of values so index entries correspond to a limited number of rows • Column with large occurrence of NULL values since NULL values are not indexed
Sequence • A sequence is an object which is used to generate sequential values which are often assigned to primary keys • A sequence is not physically linked with a table or column • It is the responsibility of the developer to only use a sequence with the primary key or column that it was defined for • CREATE SEQUENCE seqname INCREMENT BY n START WITH n
Sequence(ctd) • Eg CREATE SEQUENCE emp_no_seq START AT 1000 INCREMENT BY 1 • A sequence has two pseudo-columns: - NEXTVAL : gets the next sequential value of the sequence - CURRVAL : gets the current value of the sequence Eg INSERT INTO employees VALUES(emp_no_seq.nextval, …) Eg SELECT emp_no_seq.currval FROM dual
Synonym • A synonym allows you to associate an alternate name with an object such as a table or view • Eg CREATE SYNONYM emp FOR employees; SELECT * FROM emp;
Remove Object from Data Dictionary • Remove object from data dictionary DROP VIEW viewname DROP SEQUENCE sequencename DROP INDEX indexname DROP SYNONYM synonymname