everythingOracle.bizhat.com

 

'Everything you wanted
to know about Oracle'

Training References Syntax Tell A Friend Contact Us

 

 

SQL

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19
<< Previous

Chapter # 08

Next >>


 

Oracle9i: SQL ANSI statements

 

CONNECT command

Connect to SQLPLUS as the oracle user.
SQL> CONNECT oracle/learning
 

SET command

Let's begin by setting the linesize to 100 and the pagesize to 55.
SQL> SET LINESIZE 100 PAGESIZE 55
 

Now, let's compare the Oracle9i ANSI (American National Standards Institute) standard JOIN syntax with the original join syntax. Query the employee name, department number, and department name columns from the EMP table and DEPT table.
 

Join command using original syntax

First, let us exclude all of the sales department information by using the original Oracle join syntax.
SQL> SELECT ename, dept.deptno, dname
FROM emp, dept
WHERE emp.deptno = dept.deptno
AND dname <> 'SALES'
/
 

JOIN syntax (ANSI)

And now, use the Oracle9i ANSI standard JOIN syntax.
SQL> SELECT ename, dept.deptno, dname
FROM emp JOIN dept
ON emp.deptno = dept.deptno
AND dname <> 'SALES'
/
Notice, that you get the same result.
 

NATURAL JOIN syntax (ANSI)

Use the Oracle9i ANSI standard NATURAL JOIN syntax to join the EMP and DEPT tables where the employees' salary is greater than 3000 dollars.
SQL> SELECT ename, deptno, dname
FROM emp NATURAL JOIN dept
WHERE sal > 3000
/
Notice that in the NATURAL JOIN syntax, you don't need a WHERE clause since the department number is the same.
 

USING clause

Use the USING clause to join the EMP and DEPT tables where employees' salary is greater than 3000 dollars.
SQL> SELECT ename, deptno, dname
FROM emp JOIN dept
USING (deptno)
WHERE sal > 3000
/
Notice that in the USING clause the join column names must be the same.
 

CROSS JOIN syntax (ANSI)

Use the Oracle9i ANSI standard CROSS JOIN syntax with no WHERE clause to create a Cartesian product.

Query the department name and employee name where the department number is (10 or 30) and the employees are (SMITH, ALLEN, and WARD).
SQL> SELECT dname, ename
FROM dept d CROSS JOIN emp e
WHERE d.deptno IN (10,30) and
ename IN ('SMITH','ALLEN','WARD')
ORDER BY dname
/
This is an example of an Oracle9i ANSI standard CROSS JOIN syntax.
 

OUTER JOIN syntax (ANSI)

Using the OUTER JOIN option, not only will you query records that have matches but you also see the rows that have no matches.
 

The Oracle9i ANSI Join syntax provides three separate capabilities: RIGHT, LEFT, and FULL OUTER JOIN. The word OUTER is redundant and usually omitted.
 

RIGHT OUTER JOIN syntax (ANSI)

Let's demostrate the RIGHT OUTER JOIN syntax usage.

First, add a Finance department to the department table with no associated employees.
SQL> INSERT INTO dept
VALUES (40,'FINANCE','WASHINGTON,DC')
/
SQL> COMMIT;
 

Query all employee names with their department's name. With that in mind to:
-- Exclude all of the sales department information;
-- Include all of the departments that have no employees.

Use the original oracle join syntax to do the OUTER JOIN query.
SQL> SELECT nvl(e.ename,'No Match'), d.deptno, d.dname
FROM dept d, emp e
WHERE d.deptno = e.deptno (+)
AND dname <> 'SALES'
/
Notice that FINANCE deptartment has no match.
 

Write the same above query, using the Oracle9i ANSI standard RIGHT OUTER JOIN syntax.
SQL> SELECT nvl(e.ename,'No Match'), d.deptno, d.dname
FROM emp e RIGHT OUTER JOIN dept d
ON d.deptno = e.deptno
WHERE dname <> 'SALES'
/
 

LEFT OUTER JOIN syntax (ANSI)

Add an employee who doesn't work in any of the departments yet.

Make sure to disable the foreign key before inserting a record.
SQL> INSERT INTO emp
VALUES (9900,'KAZ','CLERK',7902,TO_DATE(sysdate),1000,NULL,NULL)
/
COMMIT
/
 

Query all of the employee names including those who don't work for any department.

Use the original Oracle syntax.
SQL> SELECT e.ename, d.deptno,

nvl(d.dname,'No Match') as department
FROM dept d, emp e

WHERE d.deptno (+) = e.deptno
/
Notice that employee KAZ does not work for any department.
 

List the same above query by using the Oracle8i ANSI standard LEFT OUTER JOIN syntax.
SQL> SELECT e.ename, d.deptno,

nvl(d.dname,'No Match') as department
FROM emp e LEFT OUTER JOIN dept d
ON d.deptno = e.deptno
/
 

FULL OUTER JOIN syntax (ANSI)

Let's perfom an excercise to use the FULL OUTER JOIN option to find all of the records that have no matches in the two joined tables.
SQL> SELECT nvl(e.ename,'No Match') as name,

d.deptno,
nvl(d.dname,'No Match') as department
FROM emp e FULL OUTER JOIN dept d

ON d.deptno = e.deptno
/
That would be difficult to do with an original Oracle syntax.
 

Delete the FINANCE department and the KAZ employee.
SQL> DELETE FROM dept
WHERE deptno = 40
/
DELETE FROM emp
WHERE empno = 9900
/
SQL> COMMIT
/
You have deleted the records so that you can repeat these steps over and over again.

 

Questions:

Q: What is the SQL ANSI statement?

Q: What is the difference between the SQL ANSI statement and Original Oracle statement?

Q: Is the SET command a SQL statement?

Q: How do you change your workstation�s page size or line size?

Q: What does the JOIN syntax in the Oracle SQL (DML) statement?

Q: What is the difference between the JOIN syntax and the NATURAL JOIN syntax?

Q: What does the USING clause in the Oracle SQL statement?

Q: When can you not use the USING clause?

Q: What is the advantage of the NATURAL JOIN syntax?

Q: What does the CROSS JOIN syntax in the Oracle SQL statement?

Q: What does the IN clause in the Oracle SQL statement?

Q: What do the OUTER JOIN, RIGHT OUTER JOIN, LEFT OUTER JOIN, and FULL OUTER JOIN syntax in the Oracle SQL statement?

Q: How can you perform the FULL OUTER JOIN syntax using the Original Oracle syntax?

     Reviews and Templates for FrontPage
     

Copyright � everythingOracle.bizhat.com 2006 All Rights Reserved.