Lecture 21 - More on SQL
Transcription
Lecture 21 - More on SQL
Lecture 21 30/3/15 Indexes (Manual (10-31) • Indexes are special lookup tables that the database search engine can use to speed up data retrieval. • An index can be created in a table to find data more quickly and efficiently. • An index is a pointer to data in a table. • An index in a database is very similar to an index in the back of a book. • The users cannot see the indexes, they are just used to speed up searches/queries. • SQL CREATE INDEX Syntax • Creates an index on a table. Duplicate values are allowed: CREATE INDEX index_name ON table_name (column_name) • Note: Updating a table with indexes takes more time than updating a table without (because the indexes also need an update). So you should only create indexes on columns (and tables) that will be frequently searched against. CREATE INDEX emp_index ON EMPLOYEE (EMP_NO, EMP_NAME); CREATE INDEX empindex2 ON EMPLOYEE (EMP_NO, EMP_NAME, JOB,SAL); When should indexes be avoided? • Although indexes are intended to enhance a database's performance, there are times when they should be avoided. The following guidelines indicate when the use of an index should be reconsidered: • Indexes should not be used on small tables. • Tables that have frequent, large batch update or insert operations. • Indexes should not be used on columns that contain a high number of NULL values. • Columns that are frequently manipulated should not be indexed. Other SQL Statements DROP INDEX index_name • The ALTER TABLE statement is used to add, delete, or modify columns in an existing table. • ALTER TABLE table_name ADD column_name datatype • ALTER TABLE table_name DROP COLUMN column_name • ALTER TABLE table_name MODIFY column_name datatype VIEW (Manual 10-4) • Use the CREATE VIEW statement to define a view, which is a logical table based on one or more tables or views. • A view contains no data itself. • The tables upon which a view is based are called base tables. • Views are virtual tables formed by a query. • A view is a dictionary object that you can use until you drop it. Views are not updatable. More on Views Advantages • To restrict data access • To provide data independence • To make complex queries easy • To present different views of the same data Example - CREATE VIEW empview1 AS SELECT emp_no, emp_name, sal FROM EMPLOYEE WHERE DEPT_NO =3; Correlated Sub queries • As opposed to a regular subquery, where the outer query depends on values provided by the inner query • A correlated subquery is one where the inner query depends on values provided by the outer query • This means that in a correlated subquery, the inner query is executed repeatedly, once for each row that might be selected by the outer query • Correlated subqueries can produce result tables that answer complex management questions. Some notes – http://www.zentut.com/sql-tutorial/understanding-correlatedsubquery/ The Process The sequence that is followed is: • Get the first row from the outer query • Run the inner query using the value from the row from step A • Determine whether to return a result based on the outer where clause • Repeat process until all outer rows have been selected 9 EMP_NO EMP_NAME JOB DEPT_NO SAL COMM HIREDATE MANAGER_NO ---------- -------------------- -------------------- ---------- -------------------- -------------------- --------- ---------3 HEARNE ANALYST 4 800 100 07-JAN-11 4 BYRNE CLERK 3 100 20-FEB-09 6 WALSH MANAGER 4 3500 11-OCT-07 8 HARTE ACCOUNTANT 3 700 300 20-JAN-12 11 CASEY MANAGER 1 1000 150 17-OCT-08 12 MURRAY CLERK 2 360 80 27-JAN-12 9 DOHERTY CLERK 3 150 28-JUN-11 10 MARTIN MANAGER 2 900 190 07-SEP-13 Continued… FULL DATASET - No other analyst in my dataset no matching inner record EMP_NAME JOB SAL -------------------- -------------------- -------------------HEARNE ANALYST 800 BYRNE CLERK 100 WALSH MANAGER 3500 HARTE ACCOUNTANT 700 CASEY MANAGER 1000 MURRAY CLERK 360 DOHERTY CLERK 150 MARTIN MANAGER 900 select emp_name, job, sal from employee e where sal < ( select avg(sal) from employee where job=e.job ); No other accountant in my dataset no matching inner record OUTPUT - EMP_NAME JOB SAL -------------------- -------------------- -------------------BYRNE CLERK 100 CASEY MANAGER 1000 DOHERTY CLERK 150 MARTIN MANAGER 900 Example of the process • Lets look at this process for the query above. Get first row from employee table (outer query) Run the inner query. The where clause ensures that the job type matches between the two rows. Get the average salary for the job type from the outer row The outer where clause determines whether or not to return a row. In this case, is the salary less than the average salary for that employees job type. Get the next row and repeat. 12 Which is it? If you are unsure whether a sub-query is a correlated sub-query, there is a simple check. • If the inner query compares to a row from the outer query, then it is a correlated sub-query. http://www.tutorialspoint.com/sql_certificate/subqueries_to_sol ve_queries.htm 13 Creating Constraints Constraints are basically rules to stop a user doing something with a table that you don’t want to happen. • Constraints are used by Oracle to enforce rules whenever a row is added, changed, or removed. • There are two types of constraints : Table constraints; and Column Constraints. 15 Constraints continued.. • The following are the different constraints. • • • • • • NOT NULL DEFAULT UNIQUE PRIMARY KEY FOREIGN KEY CHECK 16 Not Null Columns, by default, allow NULL values. By specify NOT NULL we are saying that NULLs are not allowing in a particular column. Create table addresses ( name varchar2(30) not null, address varchar2(50) not null, phone number(10) ); • Note that the constraint can also be given a name. Create table phones (name varchar2(30) constraint namenull not null, phone number(9)); 17 Default If a value isn’t supplied for a column, then a default can be supplied. If we don’t use the default constraint, a NULL value would be entered. Create table addresses (name varchar2(30) not null, address varchar2(50) default 'None Given', phone number(10) ); • In this example, if no value is specified for address, “None Given” is inserted in the column. • The default constraint cannot be given a name 18 Unique • Unique constraints ensure that the contents of a column (or columns) are unique. • There can be no duplicate entries in a column. • Unique constraints can be applied at the column level or at the table level. At the column level we simply add the constraint after the column definition. For table level, we are putting a constraint on two or more columns, so we add the constraint after all the column definitions. 19 Unique (cont) • The following is an example of a column level unique constraint. create table phone (name char(20) constraint onename unique, phonenum number(10)); • Nulls are allowed in a column with a unique constraint. • The following is an example of a table level constraint create table phone (firstname char(10), secondname char(20), course char(15), startdate date, constraint onename unique(firstname,secondname)); 20 Primary Key There can only be one primary key per table and it is used to ensure that each row is distinctive. Each row is identified uniquely by its primary key. • A primary key, like a unique constraint, can be made up of one or more columns. The difference is that NULLs are allowed in single column unique constraints, there can be no nulls in a primary key. 21 Primary Key (cont) To create a column level constraint, we run (for example) create table phone (name char(20) constraint keyone primary key, address char(50), phone number(10)); • An example of a table level constraint is create table phone (name char(20), address char(50), phone number(10), constraint keyone primary key(name)); 22 Foreign Key • A foreign key is used to link the information in two tables 23 Foreign Key (cont) The command to create the phone table is create table phone (name char(8) primary key, areaname char(8), phone number(8), constraint fkeyarea foreign key (areaname) references area(areaname)); • This is a table level constraint, the equivalent command for a column level constraint is create table phone (name char(8) primary key, areaname char(8) constraint forkey references area(areaname),phone number(8)); 24 Composite Foreign Keys • The idea of composite foreign keys is simply referencing more than one column. • To create composite foreign key constraints (which can only be table level) for the example above, we run Create table( … … , constraint fkeyarea foreign key (division,section) references departments(division,section) ); We can combine up to 16 columns in a composite foreign key constraint. 25 Referential Integrity • This means that the foreign key ensure that references between tables (links) can not “get lost” 26 Referential Integrity (cont.) The original constraint we used in creating the phone table was Create table( … … , constraint fkeyarea foreign key (areaname) references area(areaname) ); To allow “cascading deletions” (deleting in one table cascades into tables referencing it) we change this command to Create table( … … , constraint fkeyarea foreign key (areaname) references area(areaname) on delete cascade ); 27 Check Constraints • Check constraints offer the most flexibility. Rather than Oracle defining how a constraint works, we can impose our own rules. For example create table money (name char(10), sal number(7,2) constraint mycheckcon check (sal > 4.8) ); 28 Overview SQL • Select * from table name; • Order by • Where • Group by (aggregate functions) • Having • Distinct • Comparison Operators • Wildcard like ‘%’ • • • • • • • • • • • Create table Insert Insert all Update Delete Alter Dual Sysdate Table alias Column alias Constraints 29 Overview SQL • Group functions e.g. • Upper/Lower/Initcap/Concat/ avg, max, min, count, sum lpad/rpad/instr/ltrim/ • rtrim/soundex/length/ • Joins - equijoins, inner joins, outer joins • replace • All, Any, some, Exists • Number functions • Round/trunc/sign/ceil/floor/p • Sub-queries (query ower within a query) • Date functions • Correlated sub query • Months_between/add_mont (where the outer query hs/next_day/last_day/round provides a value to the inner query) • Index • Character Functions 30