Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
but a mere list of tips would be of little benefit without the knowledge to make use of them, so we've expanded the list to include the explanations to increasing its usefulness and to make it a proper tutorial. One important point to remember is that Oracle caches the compiled form of SQL and is therefore able to re-use queries which are the same as previously executed queries. This saves the time and resources required to parse the statement and determine the execution plan. How can you do this ?
Use Views
Views are a good way to ensure the same query is re-used as much as possible.
Remember that even just changing the case and spacing of the words could prevent a query from being reused. A view is merely a pre-defined query, the text of which is stored in the database. Therefore by using views you are using exactly the same queries and eliminating the re-parsing overehead. As the load on the database increases this reparsing overhead becomes more and more significant. Materialised views take the concept one stage further by actually running the query and storing the results in a table
using an operator on the column (eg. <indexed_col> + 1); the use of hints, if you're running Oracle(only applies if you're using the cost based optimiser); using NULL and not equal checks. (eg. <indexed_col> <> 12345 ; or <indexed_col> IS NULL)
6. Optimise Joins
All other things being equal, the driving table is the one listed LAST in the FROM clause, when using the rule-based optimiser. Changing the order of the columns in the join condition does not change which table is used as the driving table. Choose the driving table carefully to ensure the minimum number of rows are returned. When using the cost-based optimiser, ensure that all the tables in the join have been analysed (ask your dba), if they haven't, this may well cause poor performance. The most usual way to optimise queries when using the cost-based optimiser is to use hints, which instruct the parser as to which indexes should or should not be used, or which tables should be scanned in full. You can also experiment with the order of the tables in the join.
Indexes - these can still be used even if the where clause contains a "like" condition but not if there is a "not like" condition. Outer joins - the correct syntax for outer joins using Oracle syntax is: tab1.col1(+)= tab2.col1 or tab1.col1 = tab2.col1(+) The bracketed plus sign follows the column of the table which has/may have the missing row. An alternative is to use the ANSI standard outer join format which has the advantge that it enables you to perform a full outer join in one statement:
tab1.col1 left outer join tab2.col1 (return all rows from tab1) tab1.col1 right outer join tab2.col1 (return all rows from tab2) tab1.col1 full outer join tab2.col1 (return all rows from tab1 and tab2) The final tip for this short tutorial is:
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. UNIX is a registered trademark of The Open Group in the United States and other countries.
Search for:
Training Overview Oracle Training UNIX Training Oracle Financials Solaris Red Hat Linux AIX HP-UX MySQL & PHP Introduction to Oracle Introduction to SQL Advanced SQL Oracle 8 Oracle 9i Oracle 10g Oracle Performance Tuning PL/SQL More free guides and tutorials Oracle UNIX Linux
Part 1 of this advanced SQL tutorial (this article) introduces sub-queries and looks
at non-correlated sub-queries. Part 2 looks at the use of sub-queries. Part 3 looks at nested sub queries, sub-queries in the from clause and sub-queries that return no rows. Part 4 of this tutorial covers correlated sub-queries.
Sub Queries
Sub queries are also known as nested queries and are used to answer multi-part questions. Sub queries and joins are often interchangeable and in fact the Oracle optimiser may well treat a query containing a sub-query exactly as if it were a join. Let's use a trivial example of finding the names of everybody who works in the same department as a person called Jones to illustrate this point. The SQL could be written using a sub query as follows: SELECT name FROM emp WHERE dept_no = (SELECT dept_no FROM emp WHERE name = 'JONES') or as a join statement, like this:SELECT e1.name FROM emp e1,emp e2 WHERE e1.dept_no = e2.dept_no AND e2name = 'JONES' With a trivial example like this there would probably be very little difference in terms of performance of the SQL for such a simple query, but with more complex queries there could well be performance implications. For this reason it is always worth trying a few variations of the SQL for a query and examining the execution plans before deciding on a particular approach, unless they're very simple queries.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. UNIX is a registered trademark of The Open Group in the United States and other countries.
Copyright Smartsoft Computing Ltd 2001-2009. All rights reserved. Search for:
Training Overview Oracle Training UNIX Training Oracle Financials Solaris Red Hat Linux AIX HP-UX MySQL & PHP Introduction to Oracle Introduction to SQL Advanced SQL Oracle 8 Oracle 9i Oracle 10g Oracle Performance Tuning PL/SQL More free guides and tutorials Oracle UNIX Linux
on Oracle performance tuning. See also our beginner's SQL tutorial, the PL/SQL tutorials and the other Oracle tutorials
to define the limiting conditions for SELECT, UPDATE and DELETE statements in the following clauses:o WHERE o HAVING o START WITH Instead of a table name in o INSERT statements o UPDATE statements o DELETE statements
o
To define the set of rows to be created in the target table of a CREATE TABLE AS or INSERT INTO sql statement. To define the set of rows to be included by a view or a snapshot in a CREATE VIEW or CREATE SNAPSHOT statement. To provide the new values for the specified columns in an UPDATE statement
The first example of sub query in SQL shown above, used a simple equality expression as we were interested in only one row, but we can also use the sub query to provide a set of rows. For example, to find the names of all employees in the same departments as Smith and Jones, we could use the following SQL statement :SELECT name FROM emp WHERE dept_no IN (SELECT dept_no FROM emp WHERE name = 'JONES' OR name = 'SMITH') In fact, the original example could also return more than one row from the sub query if there were two or more people that were called Jones working in different departments. In the first example a run-time SQL error would be generated in that case, because the
first example, by using '=', specified that the sub query should produce no more than one row (it is perfectly legitimate for a sub query to return no rows). We can reverse the question to ask for the names of all the employees that are NOT in the same department as Jones, To do this, the sense of the sub query just has to be reversed by prefixing it with 'NOT' or '!'. Again depending on whether there might be more than one Jones, we would either use 'IN' or '=' SELECT name FROM emp WHERE dept_no NOT IN ( SELECT dept_no FROM emp WHERE name = 'JONES') Or SELECT name FROM emp WHERE dept_no != ( SELECT dept_no FROM emp WHERE name = 'JONES') Click on the link to continue this advanced SQL tutorial and learn about nested sub queries. --------------------------------------Want a short cut to learning SQL? Simple - just subscribe to our ezine. It's jam-packed full of tips and tricks to help you make your Oracle applications better, faster and smarter. Sign up today and your first issue will soon be winging its way to your mailbox. Return from advanced sql tutorial to Oracle tips and tricks
Smartsoft Computing Ltd Bristol, England Tel: 0845 0031320 Contact Us
Click here to view our privacy policy . This site uses woopra.com to gather statistical information about our visitors. View woopra privacy policy .
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. UNIX is a registered trademark of The Open Group in the United States and other countries.
Copyright Smartsoft Computing Ltd 2001-2009. All rights reserved. Search for:
Training Overview Oracle Training UNIX Training Oracle Financials Solaris Red Hat Linux AIX HP-UX MySQL & PHP Introduction to Oracle Introduction to SQL Advanced SQL Oracle 8 Oracle 9i Oracle 10g Oracle Performance Tuning PL/SQL More free guides and tutorials Oracle UNIX Linux
nested sub queries, sub-queries in the from clause and sub-queries that return no rows. The final part of our tutorial examines the use of correlated sub-queries. Performance issues are only briefly mentioned as we have a whole series of articles on that topic (see Oracle Performance Tuning).
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. UNIX is a registered trademark of The Open Group in the United States and other countries.
Copyright Smartsoft Computing Ltd 2001-2009. All rights reserved. Search for:
Training Overview Oracle Training UNIX Training Oracle Financials Solaris Red Hat Linux AIX HP-UX MySQL & PHP
Introduction to Oracle Introduction to SQL Advanced SQL Oracle 8 Oracle 9i Oracle 10g Oracle Performance Tuning PL/SQL More free guides and tutorials Oracle UNIX Linux
nested sub queries, sub-queries in the from clause and sub-queries that return no rows and part 4 covers correlated sub-queries. Performance issues are not thoroughly explored even though this is an advanced sql tutorial as that subject is covered by another series of articles - Oracle Performance Tuning.
Nested Sub-Queries
The SQL syntax allows queries to be nested, meaning that a sub query itself can contain a sub query, enabling very complex queries to be built as there is no syntacttical limit to the level of besting. However, very complex queries should be avoided as they are difficult to understand and to maintain and may not perform that well either. For example, the SQL statement to find the departments that have employees with a salary higher than the average employee salary could be written as: SELECT name FROM dept WHERE id IN ( SELECT dept_id FROM emp WHERE sal > (SELECT avg(sal)FROM emp) ) Any of the other comparison operators instead of '=' or 'IN' such as '>', or '<' can also be used with a sub query.
For fast, high quality technical support, call 0845 0031320, fill in the form to have one of our consultants call you or go to our Oracle support page for more info.
Smartsoft Computing Ltd Bristol, England Tel: 0845 0031320 Contact Us
Click here to view our privacy policy . This site uses woopra.com to gather statistical information about our visitors. View woopra privacy policy .
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. UNIX is a registered trademark of The Open Group in the United States and other countries.
Copyright Smartsoft Computing Ltd 2001-2009. All rights reserved. Search for:
Training Overview Oracle Training UNIX Training Oracle Financials Solaris Red Hat Linux AIX HP-UX MySQL & PHP Introduction to Oracle Introduction to SQL Advanced SQL Oracle 8 Oracle 9i Oracle 10g Oracle Performance Tuning PL/SQL More free guides and tutorials Oracle UNIX Linux
Introduction
This is just a brief Oracle tutorial for beginners, to provide a short history of databases and Oracle's role in them, explain relational theory and give you an idea on how relational databases work with a few examples. There is also a very brief discussion of object-oriented design as it applies to databases.
discussion of all the features available in Oracle, but if you would like to learn more just contact us and ask for our free Oracle tutorial mini-course.
IBM's research into relational databases had also come to the attention of a group of engineers in California who were so convinced of the potential that they formed a company called Relational Software, Inc. in 1977 to build such a database. Their product was called Oracle and the first version for VAX/VMS was released in 1979, thereby becoming the first commercial rdbms, beating IBM to market by 2 years. In the 1980s the company was renamed to Oracle Corporation. Throughout the 1980s, new features were added and performance improved as the price of hardware came down and Oracle became the largest independent rdbms vendors. By 1985 they boasted of having more than 1000 installations. As relational databases became accepted, companies wanted to expand their use to store images, spreadsheets, etc. which can't be described in 2-dimensional terms. This led to the Oracle database becoming an object-relational hybrid in version 8.0, i.e. a relational database with object extensions, enabling you to have the best of both worlds. This Oracle tutorial continues in part 2 with an explanation of relational databses including a few examples. Oracle tutorial part 2 --------------------------------------Looking for more Oracle tutorials? Suggestions for further reading, book reviews and links to other resources for information about Oracle are available from the resources section. For links to other articles and tutorials on SQL, PL/SQL and Oracle go to Oracle Tips & Tricks. Looking to sky-rocket productivity, save time and reduce costs? Training is a highly cost-effective, proven method of boosting productivity. Click here for details of our scheduled Oracle training courses or let us know your requirements. Oracle secrets revealed! Subscribe to our ezine, jam-packed full of tips and tricks to help you slash costs, sky-rocket productivity and incrase your return on investment. So Subscribe today and your first issue will soon be winging its way to your mailbox. Return from Oracle tutorial to home page
Smartsoft Computing Ltd Bristol Tel: 0845 0031320 Contact Us
Click here to view our privacy policy . This site uses woopra.com to gather statistical information about our visitors. View woopra privacy policy .
Search
Training Overview Oracle Training UNIX Training Oracle Financials Solaris Red Hat Linux AIX HP-UX MySQL & PHP Introduction to Oracle Introduction to SQL Advanced SQL Oracle 8 Oracle 9i Oracle 10g Oracle Performance Tuning PL/SQL More free guides and tutorials Oracle UNIX Linux
As mentioned before, a relational database is based on the separation and independence of the the logical and physical representations of the data. This provides enormous flexibility and means you can store the data physically in any way without affecting how the data is presented to the end user. The separation
of physical and logical layers means that you can change either layer without affecting the other. A relational database can be regarded as a set of 2-dimensional tables which are known as "relations" in relational database theory. Each table has rows ("tuples") and columns ("domains"). The relationships between the tables is defined by one table having a column with the same meaning (but not necessarily value) as a column in another table. For example consider a database with just 2 tables : emp(id ,name ,job_title ,dept_id number varchar2(30) varchar2(20) number)
holding employee information and dept(id number ,name varchar2(30)) holding department information. There is an implied relationship between these tables because emp has a column called dept_id which is the same as the id column in dept. In Oracle this is usually implemented by what's called a foreign-key relationship which prevents values being stored that are not present in the referenced table. Relational databases obtain their flexibility from being based on set theory (also known as relational calculus) which enables sets or relations to be combined in various ways, including:
join/intersection union (i.e. the sum of 2 sets); exclusive "OR" (i.e. the difference between 2 sets) and outer-join which is a combination of intersecting and exclusive or ing.
The intersection or join between 2 sets (in this case, tables) produces only those elements that exist in both sets. Therefore, if we join Emp and Dept on department id, we will be left with only those employees who work for a department that is in the dept table and only those departments which have employees who are in the emp table. The union produces the sum of the tables - meaning all records in Emp and all records in Dept. and this may be with or without duplicates. Let's use the following data to provide specific examples: Emp Id 1 2 3 4 5 6 Name Dept Id Bill Smith 3 Mike Lewis 2 Ray Charles 3 Andy Mallory 4 Mandy Randall 6 Allison White 1
The join of Emp and Dept. on the department id would produce the following result: Emp.Id Emp.Name 1 Bill Smith 2 Mike Lewis 3 Ray Charles 4 Andy Mallory 6 Allison White Dept.Id Dept.Name 3 Marketing 2 IT 3 Marketing 4 Sales 1 HR
The union of Emp and Dept. would produce the following results Id 1 2 3 4 5 1 2 3 4 5 Name Bill Smith Mike Lewis Ray Charles Andy Mallory Mandy Randall HR IT Marketing Sales Finance
The union operator is only allowed when the number and data types of the columns in the 2 sets are the same. It is not normally be used to combine sub sections from one or more tables rather than entire tables. There are other operators and variations but there isn't the space or the time to provide full details in this short Oracle tutorial. The later versions of Oracle (Oracle 8 onwards) support both relational and objectoriented features. The relational features are more prominent at the moment, but this is beginning to change. In this context an object has both attributes and methods (programs
stored with the object that performs a certain action or task) and in a true object-oriented database would belong to a class and would allow multilevel inheritance. Click here for more Oracle Tutorials Oracle tutorial part1
Training Overview Oracle Training UNIX Training Oracle Financials Solaris Red Hat Linux AIX HP-UX MySQL & PHP Introduction to Oracle Introduction to SQL Advanced SQL Oracle 8 Oracle 9i Oracle 10g Oracle Performance Tuning PL/SQL More free guides and tutorials Oracle UNIX Linux
--------------------------------------Looking to sky-rocket productivity, save time and reduce costs? Training is a highly cost-effective, proven method of boosting productivity. Click here for details of our scheduled Oracle training courses or let us know your requirements. Oracle secrets revealed! Subscribe to our ezine, jam-packed full of tips and tricks to help you slash costs, sky-rocket productivity and incrase your return on investment. Subscribe today and your first issue will soon be winging its way to your mailbox.
Smartsoft Computing Ltd Bristol Tel: 0845 0031320 Contact Us
Click here to view our privacy policy . This site uses woopra.com to gather statistical information about our visitors. View woopra privacy policy .
Search
2. Oracle Questions
From: V.Mahesh - please send me details about constraints in oracle ( table level and column level ) There are 5 different types of constraints available in Oracle NOT NULL, CHECK, UNIQUE, PRIMARY KEY and FOREIGN KEY. All but NOT NULL can be defined at either the table level or the column level. NOT NULL constraints prevent column values being left undefined and so can only be defined at the column level. Example: CREATE TABLE emp(
id NUMBER NOT NULL, dept_id NUMBER, salary NUMBER) The other constraints must be defined at the table level if they apply to more than one column. CHECK constraints can be applied to one or more columns and are used to restrict the range of allowable values for those columns. For example suppose we define an employee table EMP and want to ensure that the id is always positive, we could define it as follows: Learn how to develop your Oracle systems better, faster and smarter with high quality Oracle training from our top consultants . See the Oracle training page for more info or click here for details of our scheduled Oracle courses . CREATE TABLE emp( id NUMBER CONSTRAINT emp_id_non_zero CHECK (id > 0), dept_id NUMBER, salary NUMBER) UNIQUE and PRIMARY KEY constraints are very similar except that a table can have only one primary key (but many unique columns are allowed) and all columns in the primary key must also be NOT NULL. Example: CREATE TABLE sales( invoice_no NUMBER UNIQUE, .. cust_id NUMBER) CREATE TABLE sales( invoice_no NUMBER PRIMARY KEY, .. cust_id NUMBER) FOREIGN KEY constraints are used to define the relationship between one table and another and to prevent orphaned records, thereby ensuring for example that all employees belong to an existing department. Example: CREATE TABLE emp( emp_id NUMBER , dept_id NUMBER, salary NUMBER, CONSTRAINT fk_emp_dept FOREIGN KEY (dept_id) REFERENCES dept(id));
From: Nath, Vivek - I have been doing large inserts in my database and on couple of tables and the system has been degrading by the minute.Can i know some tips and tricks how to manage this and improve the system performance??? There's no a lot of information to go on there, but there are some general things that can be done. If a lot of large inserts have been made, it is possible that the index has become skewed or fragmented and may need rebuilding, but a better solution would be to drop the indexes all together whilst the loading is taking place and re-create them once the load has finished. The same applies to constraints if they are enforced by indexes. You might also want to check the size of the extents that are created to make sure they are the optimal size for the type of application and the operating system you're using. One final check would be to look at the queries that acccess the particular tables - are they using full-table scans when an index read followed by table access by row id would be better or vice versa. For more Oracle performance tuning tips see: http://www.smart-soft.co.uk/Oracle/oracle-tips-and-tricks.htm --------From: shiva shankar - What is the exact definition of normalisation.How many types are there please explain them in detail Normalization is the process of decomposing objects into their constituent parts, removing repeating groups and any items not functionaly dependent on the key. The process was defined by Dr. E.F. Codd in 1970 when he defined the relational (database) model. There are 6 levels of normalization called normal forms (abbreviated NF): 1st normal form (1NF); 2nd normal form 2NF; 3rd normal form (3NF); Boyce-Codd normal form (BCNF); 4th normal form (4NF); and 5th normal form (5NF). Each is a refinement of the previous normal form, although it is very rare to progress beyond 3NF. It should be stressed that normalization is an analysis tool, not a programming tool, so in practice most databases will be denormalized to a certain extent to improve performance. The trade off is redundant storage of information. --------From: "Manish" - how to see all the indexes created on a particular table? how to view all the indexes in a tablespace? To see all the indexes created on a particular table you need to query all_indexes specifying the name of the table of interest as follows: SELECT index_name FROM all_indexes WHERE table_name = 'EMP';
To see all the indexes in a particular tablespace you just have to query all_indexes specifying the name of the tablespace of interest as follows: SELECT index_name FROM all_indexes WHERE tablespace_name = 'USERS'; ---------
From: Bill Rowe - I read your articles on optimizing views and wondered what the differences between cursors in packages and views might be. I've been reading Feuerstein's O'Reilly books on PL/SQL and wonder if a cursor would work as well as a view, if the cursor were in a package specification. This is an interesting question. On one level, views and cursors are completely different: cursors are defined in PL/SQL and views are defined in the database, but a more fundamental level they are very similar - they are both pre-compiled queries so they could be used in similar ways. However using views would provide more flexibility, they can be combined into other queries which you could not do with cursors, they can also be used for database updates which again you could not do with a cursor. The answer, therfore, is that a cursor would work as well as a view if you only need to use it for querying the database and you don't want to combine the view with other queries. --------From: Hrishikesh Srivatsa - I have a question regarding a SQL query. There is an employee table emp which has 3 fields namely EmpNo (Employee number) EmpName (Employee name) MgrEmpNo (Employee's manager No). The CEO's Employee Manager No can be assumed to be null or a special value. A query has to be written to display the organization's heirarchy. The answer to this is to use the hierarchical query clause of the select statement - i.e. use the connect by prior keyword to indicate the relationship between the parent and child columns and the start with keywords to indicate the root of the tree. In this example, the query would be : SELECT EmpName FROM emp CONNECT BY PRIOR EmpNo = MgrEmpNo START WITH MgrEmpNo IS NULL;
--------------------------------------Looking for more Oracle tips and tricks ? If you're looking for no frills, no fluff, just solid, reliable technical information, take a short cut now and subscribe to our ezine. Published monthly, it's jam-packed full of tips and tricks to help you make more of your Oracle systems and save you hours of blood, sweat and tears searching for information. Subscribe today - there's no charge - and your first issue will soon be winging its way to your mailbox. Send us your questions and we'll answer them in the next newsletter.
Smartsoft Computing Ltd Bristol, England Tel: 0845 0031320 Contact Us
Click here to view our privacy policy . This site uses woopra.com to gather statistical information about our visitors. View woopra privacy policy .
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. UNIX is a registered trademark of The Open Group in the United States and other countries.
Copyright Smartsoft Computing Ltd 2001-2009. All rights reserved. Search for: