43
Database Server Using Oracle Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey [email protected]

Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey [email protected]

Embed Size (px)

Citation preview

Page 1: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Database Server Using Oracle

Chapter 4

JOINING TABLES & FUNCTION

Lecture by Ty [email protected]

Page 2: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Outline

JOINING TABLES NUMERIC, CHARACTER AND DATE

FUNCTIONS CONVERSION AND MISCELLANEOUS

FUNCTIONS

Page 3: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Overview of Join

A join is a query that combines rows from two or more tables, views, or materialized views.

Oracle Database performs a join whenever multiple tables appear in the FROM clause of the query.

The select list of the query can select any columns from any of these tables.

If any two of these tables have a column name in common, then you must qualify all references to these columns throughout the query with table names to avoid ambiguity.

Page 4: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Obtaining Data from Multiple Tables

EMPNO DEPTNO LOC----- ------- -------- 7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO 7499 30 CHICAGO...14 rows selected.

EMPNO DEPTNO LOC----- ------- -------- 7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO 7499 30 CHICAGO...14 rows selected.

EMP DEPT EMPNO ENAME ... DEPTNO------ ----- ... ------ 7839 KING ... 10 7698 BLAKE ... 30 ... 7934 MILLER ... 10

DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

Page 5: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Join Conditions Use a join to query data from more

than one table.

Write the join condition in the WHERE clause.

Prefix the column name with the table name when the same column name appears in more than one table.

SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column1 = table2.column2;

SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column1 = table2.column2;

Page 6: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Types of Joins

1. Equijoins 2. Self Joins 3. Cartesian Products 4. Inner Joins 5. Outer Joins 6. Antijoins 7. Semijoins

Page 7: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Types of Joins

1. Equijoin

Page 8: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

1. Equijoins

An equijoin is a join with a join condition containing an equality operator.

An equijoin combines rows that have equivalent values for the specified columns.

Page 9: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

1. Equijoins(cont.)

EMP DEPT EMPNO ENAME DEPTNO------ ------- ------- 7839 KING 10 7698 BLAKE 30 7782 CLARK 10 7566 JONES 20 7654 MARTIN 30 7499 ALLEN 30 7844 TURNER 30 7900 JAMES 30 7521 WARD 30 7902 FORD 20 7369 SMITH 20...14 rows selected.

DEPTNO DNAME LOC ------- ---------- -------- 10 ACCOUNTING NEW YORK 30 SALES CHICAGO 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 20 RESEARCH DALLAS 20 RESEARCH DALLAS...14 rows selected.

Foreign key Primary key

Page 10: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

1. Retrieving Records with Equijoins

SQL> SELECT emp.empno, emp.ename, emp.deptno, 2 dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE emp.deptno=dept.deptno;

EMPNO ENAME DEPTNO DEPTNO LOC----- ------ ------ ------ --------- 7839 KING 10 10 NEW YORK 7698 BLAKE 30 30 CHICAGO 7782 CLARK 10 10 NEW YORK 7566 JONES 20 20 DALLAS...14 rows selected.

Page 11: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

1. Another Example of Equijoins

SQL> SELECT last_name, job_id, departments.department_id, department_name FROM employees, departments WHERE employees.department_id = departments.department_id ORDER BY last_name, job_id;

LAST_NAME JOB_ID DEPARTMENT_ID DEPARTMENT_NAME------------------- ---------- ------------- ----------------Abel SA_REP 80 Sales Ande SA_REP 80 Sales Atkinson ST_CLERK 50 Shipping Austin IT_PROG 60 IT . . .

Page 12: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

1. Exercise

Write equijoin to returns the name, job, department number, and department name of all sales managers that have job_id = ‘SA_MAN’ and sort by mane;

Page 13: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Qualifying Ambiguous Column Names

Use table prefixes to qualify column names that are in multiple tables.

Improve performance by using table prefixes.

Distinguish columns that have identical names but reside in different tables by using column aliases.

Page 14: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Using Table Aliases

Simplify queries by using table aliases.

SQL> SELECT emp.empno, emp.ename, emp.deptno, 2 dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE emp.deptno=dept.deptno;

SQL> SELECT e.empno, e.ename, e.deptno, 2 d.deptno, d.loc 3 FROM emp e, dept d 4 WHERE e.deptno= d.deptno;

Page 15: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

2. Joining More Than Two Tables

NAME CUSTID----------- ------JOCKSPORTS 100TKB SPORT SHOP 101VOLLYRITE 102JUST TENNIS 103K+T SPORTS 105SHAPE UP 106WOMENS SPORTS 107... ...9 rows selected.

NAME CUSTID----------- ------JOCKSPORTS 100TKB SPORT SHOP 101VOLLYRITE 102JUST TENNIS 103K+T SPORTS 105SHAPE UP 106WOMENS SPORTS 107... ...9 rows selected.

CUSTOMER

CUSTID ORDID------- ------- 101 610 102 611 104 612 106 601 102 602 106 604 106 605... 21 rows selected.

CUSTID ORDID------- ------- 101 610 102 611 104 612 106 601 102 602 106 604 106 605... 21 rows selected.

ORD

ORDID ITEMID------ ------- 610 3 611 1 612 1 601 1 602 1...64 rows selected.

ORDID ITEMID------ ------- 610 3 611 1 612 1 601 1 602 1...64 rows selected.

ITEM

Page 16: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Types of Joins

2. Self Join

Page 17: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

2. Self Join

A self join is a join of a table to itself. This table appears twice in the FROM clause and is followed by table aliases that qualify column names in the join condition.

To perform a self join, Oracle Database combines and returns rows of the table that satisfy the join condition.

Page 18: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

2. Self JoinEMP (WORKER) EMP (MANAGER)

“MGR in the WORKER table is equal to EMPNO in the MANAGER table”

EMPNO ENAME MGR----- ------ ---- 7839 KING 7698 BLAKE 7839 7782 CLARK 7839 7566 JONES 7839 7654 MARTIN 7698 7499 ALLEN 7698

EMPNO ENAME----- --------

7839 KING 7839 KING 7839 KING 7698 BLAKE 7698 BLAKE

Page 19: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

2. Joining a Table to Itself

WORKER.ENAME||'WORKSFOR'||MANAG-------------------------------BLAKE works for KINGCLARK works for KINGJONES works for KINGMARTIN works for BLAKE...13 rows selected.

WORKER.ENAME||'WORKSFOR'||MANAG-------------------------------BLAKE works for KINGCLARK works for KINGJONES works for KINGMARTIN works for BLAKE...13 rows selected.

SQL> SELECT worker.ename||' works for '||manager.ename 2 FROM emp worker, emp manager 3 WHERE worker.mgr = manager.empno;

Page 20: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Types of Joins

3.Cartesian Products

Page 21: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

3.Cartesian Products

If two tables in a join query have no join condition, then Oracle Database returns their Cartesian product.

Oracle combines each row of one table with each row of the other.

A Cartesian product always generates many rows and is rarely useful

Page 22: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

3.Cartesian Products (cont.)

For example, the Cartesian product of two tables, each with 100 rows, has 10,000 rows.

Always include a join condition unless you specifically need a Cartesian product.

If a query joins three or more tables and you do not specify a join condition for a specific pair, then the optimizer may choose a join order that avoids producing an intermediate Cartesian product.

Page 23: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Generating a Cartesian Product

ENAME DNAME------ ----------KING ACCOUNTINGBLAKE ACCOUNTING ...KING RESEARCHBLAKE RESEARCH...56 rows selected.

ENAME DNAME------ ----------KING ACCOUNTINGBLAKE ACCOUNTING ...KING RESEARCHBLAKE RESEARCH...56 rows selected.

EMP (14 rows) DEPT (4 rows)

EMPNO ENAME ... DEPTNO------ ----- ... ------ 7839 KING ... 10 7698 BLAKE ... 30 ... 7934 MILLER ... 10

EMPNO ENAME ... DEPTNO------ ----- ... ------ 7839 KING ... 10 7698 BLAKE ... 30 ... 7934 MILLER ... 10

DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

“Cartesianproduct:

14*4=56 rows”

Page 24: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Type of Join

4. Inner Join

Page 25: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Inner Join

An inner join (sometimes called a simple join) is a join of two or more tables that returns only those rows that satisfy the join condition

Page 26: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Type of Join

5. Outer Join

Page 27: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Outer Join

An outer join returns all rows that satisfy the join condition and also returns some or all of those rows from one table for which no rows from the other satisfy the join condition. To write a query that performs an outer join of tables

A and B and returns all rows from A (a left outer join), use the LEFT [OUTER] JOIN syntax in the FROM clause, or apply the outer join operator (+) to all columns of B in the join condition in the WHERE clause. For all rows in A that have no matching rows in B, Oracle Database returns null for any select list expressions containing columns of B.

Page 28: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Outer join

To write a query that performs an outer join of tables A and B and returns all rows from B (a right outer join), use the RIGHT [OUTER] JOIN syntax in the FROM clause, or apply the outer join operator (+) to all columns of A in the join condition in the WHERE clause. For all rows in B that have no matching rows in A, Oracle returns null for any select list expressions containing columns of A.

To write a query that performs an outer join and returns all rows from A and B, extended with nulls if they do not satisfy the join condition (a full outer join), use the FULL [OUTER] JOIN syntax in the FROM clause.

Page 29: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Outer Join You cannot compare a column with a subquery in the

WHERE clause of any outer join, regardless which form you specify.

You can use outer joins to fill gaps in sparse data. Such a join is called a partitioned outer join and is formed using the query_partition_clause of the join_clause syntax. Sparse data is data that does not have rows for all possible

values of a dimension such as time or department. For example, tables of sales data typically do not have rows for products that had no sales on a given date. Filling data gaps is useful in situations where data sparsity complicates analytic computation or where some data might be missed if the sparse data is queried directly.

Page 30: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Outer Join

Oracle recommends that you use the FROM clause OUTER JOIN syntax rather than the Oracle join operator. Outer join queries that use the Oracle join operator (+) are subject to the following rules and restrictions, which do not apply to the FROM clause OUTER JOIN syntax: You cannot specify the (+) operator in a

query block that also contains FROM clause join syntax.

Page 31: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Outer Join

The (+) operator can appear only in the WHERE clause or, in the context of left-correlation (when specifying the TABLE clause) in the FROM clause, and can be applied only to a column of a table or view.

If A and B are joined by multiple join conditions, then you must use the (+) operator in all of these conditions. If you do not, then Oracle Database will return only the rows resulting from a simple join, but without a warning or error to advise you that you do not have the results of an outer join.

The (+) operator does not produce an outer join if you specify one table in the outer query and the other table in an inner query.

You cannot use the (+) operator to outer-join a table to itself, although self joins are valid.

Page 32: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Outer Join

For example, the following statement is not valid:

However, the following self join is valid:

SELECT employee_id, manager_id FROM employees WHERE employees.manager_id(+) = employees.employee_id;

SELECT employee_id, manager_id FROM employees WHERE employees.manager_id(+) = employees.employee_id;

SELECT e1.employee_id, e1.manager_id, e2.employee_id FROM employees e1, employees e2 WHERE e1.manager_id(+) = e2.employee_id ORDER BY e1.employee_id, e1.manager_id, e2.employee_id;

SELECT e1.employee_id, e1.manager_id, e2.employee_id FROM employees e1, employees e2 WHERE e1.manager_id(+) = e2.employee_id ORDER BY e1.employee_id, e1.manager_id, e2.employee_id;

Page 33: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Outer Join

The (+) operator can be applied only to a column, not to an arbitrary expression. However, an arbitrary expression can contain one or more columns marked with the (+) operator.

A WHERE condition containing the (+) operator cannot be combined with another condition using the OR logical operator.

A WHERE condition cannot use the IN comparison condition to compare a column marked with the (+) operator with an expression.

Page 34: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Outer Join In previous releases of Oracle Database, in a query

that performed outer joins of more than two pairs of tables, a single table could be the null-generated table for only one other table. Beginning with Oracle Database 12c, a single table can be the null-generated table for multiple tables. For example, the following statement is allowed in Oracle Database 12c:

In this example, B, the null-generated table, is outer-joined to two tables, A and D. Refer to SELECT on page 19-4 for the syntax for an outer join.

SELECT * FROM A, B, D WHERE A.c1 = B.c2(+) and D.c3 = B.c4(+);

SELECT * FROM A, B, D WHERE A.c1 = B.c2(+) and D.c3 = B.c4(+);

Page 35: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Outer Join

SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column(+) = table2.column;

SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column(+) = table2.column;

SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column = table2.column(+);

SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column = table2.column(+);

Page 36: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Outer Join(cont.)

SELECT e.ename, d.deptno, d.dname FROM emp e, dept d WHERE e.deptno(+) = d.deptno ORDER BY e.deptno;

ENAME DEPTNO DNAME---------- --------- -------------KING 10 ACCOUNTINGCLARK 10 ACCOUNTING... 40 OPERATIONS15 rows selected.

Page 37: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Type of Join

6. Antijoins

Page 38: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Antijoins

An antijoin returns rows from the left side of the predicate for which there are no corresponding rows on the right side of the predicate.

It returns rows that fail to match (NOT IN) the subquery on the right side

Page 39: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Example of Antijoins

The following example selects a list of employees who are not in a particular set of departments:

SELECT * FROM emp WHERE deptnoNOT IN (SELECT deptno FROM dept WHERE loc = ‘CHICAGO’) ORDER BY ename;

SELECT * FROM emp WHERE deptnoNOT IN (SELECT deptno FROM dept WHERE loc = ‘CHICAGO’) ORDER BY ename;

Page 40: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Type of Join

7. Semijoins

Page 41: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Semijoins

A semijoin returns rows that match an EXISTS subquery without duplicating rows from the left side of the predicate when multiple rows on the right side satisfy the criteria of the subquery.

Semijoin and antijoin transformation cannot be done if the subquery is on an OR branch of the WHERE clause.

Page 42: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Example of Semijoins

In the following example, only one row needs to be returned from the departments table, even though many rows in the employees table might match the subquery. If no index has been defined on the salary column in employees, then a semijoin can be used to improve query performance.

Page 43: Chapter 4 JOINING TABLES & FUNCTION Lecture by Ty Rasmey rasmeyt2@gmail.com

Example of Semijoins

SELECT * FROM dept WHERE EXISTS (SELECT * FROM emp WHERE dept.deptno = emp.deptno AND emp.sal > 2500) ORDER BY department_name;

SELECT * FROM dept WHERE EXISTS (SELECT * FROM emp WHERE dept.deptno = emp.deptno AND emp.sal > 2500) ORDER BY department_name;