0% found this document useful (0 votes)
9 views30 pages

Joins

The document provides an overview of JOIN operations in SQL, illustrating how to connect employee and department tables using common columns. It covers various types of JOINs, including INNER JOIN, OUTER JOIN, and SELF JOIN, along with examples of SQL queries. Additionally, it discusses the importance of qualifying column names to avoid ambiguity and the rules for constructing JOIN queries.

Uploaded by

blackblack907856
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views30 pages

Joins

The document provides an overview of JOIN operations in SQL, illustrating how to connect employee and department tables using common columns. It covers various types of JOINs, including INNER JOIN, OUTER JOIN, and SELF JOIN, along with examples of SQL queries. Additionally, it discusses the importance of qualifying column names to avoid ambiguity and the rules for constructing JOIN queries.

Uploaded by

blackblack907856
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 30

JOINS

Dr M AOUDE
A TYPICAL JOIN OPERATION
• Following figure displays the employee and
department tables.
• The figure illustrates the concept of a JOIN
operation by connecting columns within each table
with a line.
• One line connects the employee table's
emp_dpt_number column with the department
table's dpt_no column.
• A second line connects the employee table's
emp_ssn column to the department table's
dep_mgrssn column.

Dr M AOUDE
A TYPICAL JOIN OPERATION

Dr M AOUDE
JOINS

• We will begin our study of JOIN operations by


focusing on the relationship between the employee
and department tables represented by the
common department number values.
• Our first query lists employee names and
department numbers. This query only retrieves
data from the single employee table.

Dr M AOUDE
JOINS

SELECT emp_last_name "Last Name",


emp_first_name "First Name",
emp_dpt_number "Department"
FROM employee;
Last Name First Name Department
------------- -------------- --------------
Bordoloi Bijoy 1
Joyner Suzanne 3
Zhu Waiman 7
more rows will be displayed . . .

Dr M AOUDE
JOINS
• A large organization can have dozens or even
hundreds of departments. Thus, the numbers
displayed in the department column shown above
may not be very meaningful.
• Suppose you want the department names instead
of the department numbers to be listed.
• The department names are mentioned in the
“Department” table.
• Hence we need to join the “Employee” and the
“Department” tables to get the required results

Dr M AOUDE
JOINS
SELECT emp_last_name "Last Name",
emp_first_name "First Name",
dpt_name "Department Name"
FROM employee, department
WHERE employee.emp_dpt_number = department.dpt_no;
Last Name First Name Department Name
------------- ------------- ----------------------
Bordoloi Bijoy Headquarters
Joyner Suzanne Admin and Records
Zhu Waiman Production
more rows will be displayed . . .

Dr M AOUDE
JOINS

• Following Table shows two tables simply named Table_1 and Table_2.
• Each table has a single column named Col_1. Each table also has three rows with
simple alphabetic values stored in the Col_1 column.
Table_1 Table_2

COL_1 COL_1
a a
b b
c c
Dr M AOUDE
JOINS
SELECT *
FROM table_1, table_2;
COL_1 COL_1
-------- ---------
a a
b a
c a
a b
b b
c b
a c
b c
c c

Dr M AOUDE
JOINS
• The first row of the “table_1” table was joined with every
row in the “table_2” table.
• A Cartesian product may not be useful and could be
misleading.
• Always include a WHERE clause in your JOIN statements.
SELECT *
FROM table_1, table_2;
WHERE table_1.col_1 = table_2.col_1;
col_1 col_1
-------- --------
a a
b b
c c

Dr M AOUDE
JOIN OPERATION RULES
JOINS and the SELECT Clause

• A JOIN query always begins with a SELECT clause.


• List the columns to be displayed in the result table
after the SELECT keyword.
• The result table column order reflects the order in
which column names are listed in the SELECT
clause.
• To modify the order in which column names are
listed, simply rearrange the order of the column
listing in the SELECT clause.

Dr M AOUDE
Example
SELECT dpt_name "Department Name",
emp_last_name "Last Name",
emp_first_name "First Name"
FROM employee e, department d
WHERE e.emp_dpt_number = d.dpt_no AND
e.emp_dpt_number = 7;

Department Name Last Name First Name


---------------------- -------------- ---------------
Production Zhu Waiman
Production Bock Douglas
Production Joshi Dinesh
Production Prescott Sherri
Dr M AOUDE
JOINS and the FROM Clause

• Any SELECT statement that has two or more table names


listed in a FROM clause is a JOIN query.
• By definition, a JOIN operation retrieves rows from two or
more tables.
• Always the FROM clause is used to list the tables from
which columns are to be retrieved by a JOIN query.
• The FROM clause listing has a limit of 16 table names.
• The order of table name listings is irrelevant to the
production of the result table with the one exception – that
is, if you use an asterisk (*) in the SELECT clause, then the
column order in the result table reflects the order in which
tables are listed in the FROM clause.

Dr M AOUDE
JOINS and the WHERE Clause

• The WHERE clause specifies the relationship


between tables listed in the FROM clause.
• It also restricts the rows displayed in the result
table.
• The most commonly used JOIN operator is the
"equal" (=) sign.

Dr M AOUDE
QUALIFYING COLUMN NAMES

• When column names are ambiguous (the column names


used are from more than one table) you must qualify them
SELECT *
FROM table_1, table_2
WHERE col_1 = col_1;

• This query is WRONG, Oracle Server would reject this query


and generate the error message "ambiguous object.“
Error at line 3:
ORA - 00918 : column ambiguously defined

Dr M AOUDE
QUALIFYING COLUMN NAMES
• This error message tells you that you have included a
column name somewhere in the query that exists in more
than one table listed in the FROM clause.
• Here the error is in the WHERE clause; however, it is also
possible to make a similar error in the SELECT clause.
• The SELECT statement shown below fails to qualify the
col_1 name in the SELECT clause, and Oracle again
produces the ORA-00918 error message.
SELECT col_1
FROM table_1, table_2
WHERE table_1.col_1 = table_2.col_1;
ERROR at line 1:
ORA-00918: column ambiguously defined

Dr M AOUDE
QUALIFYING COLUMN NAMES
• An ambiguous column name is qualified by using the
DOT (.) connector to connect the table name and
column name.
• Sometimes it is easier to qualify column names by
using table alias names.
• Often, a single letter is used as an identifier to reduce
keystroke requirements .
SELECT dpt_name "Department Name",
emp_last_name "Last Name",
emp_first_name "First Name"
FROM employee e, department d
WHERE e.emp_dpt_number = d.dpt_no AND e.emp_dpt_number = 7;

Dr M AOUDE
QUALIFYING COLUMN NAMES
• The use of the letters "e" and "d" is completely
arbitrary; "t1" and "t2" or any other unique aliases
could have been used.
• The important points to learn are:
• The alias must follow a table name.
• Use a space to separate a table name and its alias.
• The alias must be unique within the SELECT statement.
• If the column names are not identical you are not
required to qualify them, although you still might
want to for documentation purposes

Dr M AOUDE
Joining More Than Two Tables

• While the examples given thus far have joined rows


from two tables, you can specify up to 16 tables in
a JOIN operation.
• The more tables that are included in a JOIN
operation, the longer the query will take to
process, especially when the tables are large with
millions of rows per table.

Dr M AOUDE
Joining More Than Two Tables
• The example shown in following figure joins three tables
to produce a result table based on two different
relationships.

Dr M AOUDE
Joining More Than Two Tables
• The SELECT statement to join the tables depicted
in the figure is shown here.
SELECT emp_last_name "Last Name",
emp_first_name "First Name",
1.10*emp_salary "Raised Salary", p.pro_name "Project"
FROM employee e, assignment a, project p
WHERE e.emp_ssn = a.work_emp_ssn AND
a.work_pro_number = p.pro_number AND
p.pro_name = 'Inventory';

Last Name First Name Raised Salary Project


--------------- --------------- ---------------- -----------
Zhu Waiman $47,300 Inventory
Markis Marcia $27,500 Inventory
Amin Hyder $27,500 Inventory

Dr M AOUDE
Joining Tables by Using Two Columns

• The diagram depicts the relationship at a


university where students enroll in course
sections.

Dr M AOUDE
Joining Tables by Using Two Columns

• The SELECT statement that accomplishes the


JOIN based on two columns is shown below.
• This situation arises when the related tables have
composite primary key columns.

SELECT s.course_title "Course Title",


e.student_ssn "Student SSN"
FROM enrollment e, section s
WHERE e.course_number = s.course_number AND
e.section_number = s.section_number;

Dr M AOUDE
OUTER JOIN Operations

• Oracle also supports what is called an outer-join.


This means that a row will appear in the joined
table even though there is no matching value in
the table to be joined.
• Suppose you want to know the names of the
employees regardless of whether they have
dependents or not. You can use the outer join as
follows

Dr M AOUDE
OUTER JOIN Operations

• The plus sign in parentheses (+) tells Oracle to


execute an OUTER JOIN operation.
• Further, it is the dependent table that is being
outer-joined to the employee table because
some employees will not have dependents.

SELECT emp_last_name "Last Name", emp_first_name


"First Name",
dep_name "Dependent",
dep_relationship "Relationship"
FROM employee e, dependent d
WHERE e.emp_ssn = d.dep_emp_ssn(+);
Dr M AOUDE
SELECT emp_last_name "Last Name",
emp_first_name "First Name",
dep_name "Dependent",
dep_relationship "Relationship"
FROM employee e, dependent d
WHERE e.emp_ssn = d.dep_emp_ssn(+);

Last Name First Name Dependent Relationship


--------------- --------------- -------------- ------------
Bordoloi Bijoy
Joyner Suzanne Allen SPOUSE
Zhu Waiman Andrew SON
Zhu Waiman Jo Ellen DAUGHTER
Zhu Waiman Susan SPOUSE
Markis Marcia
Amin Hyder
Bock Douglas Deanna DAUGHTER
Bock Douglas Jeffery SON
Bock Douglas Mary Ellen SPOUSE
Joshi Dinesh
Prescott Sherri
12 rows selected.
Dr M AOUDE
OUTER JOINS and NULL values

• Management might desire a listing of employees


with no dependents in order to satisfy some
governmental reporting requirement.
• We can take advantage of the fact that the
dep_name column will be NULL for employees
with no dependents, and simply add a criteria to
the WHERE clause to include employees where
the dep_name column is NULL.

Dr M AOUDE
OUTER JOINS and NULL values
SELECT emp_last_name "Last Name", emp_first_name "First
Name"
FROM employee e, dependent d
WHERE e.emp_ssn = d.dep_emp_ssn(+) AND
d.dep_name IS NULL;

Last Name First Name


--------------- ---------------
Bordoloi Bijoy
Markis Marcia
Amin Hyder
Joshi Dinesh
Prescott Sherri

Dr M AOUDE
SELF-JOIN Operations
• A SELF JOIN operation is used to produce a result table when the
relationship of interest exists among rows that are stored within a single
table.

Dr M AOUDE
SELF-JOIN Operations
SELECT e1.emp_last_name || ', ' || e1.emp_first_name
"Supervisor",
e2.emp_last_name || ', ' || e2.emp_first_name "Employee"
FROM employee e1, employee e2
WHERE e1.emp_ssn = e2.emp_superssn;

Supervisor Employee
---------------------------- -------------------
Bordoloi, Bijoy Joyner, Suzanne
Bordoloi, Bijoy Zhu, Waiman
Joyner, Suzanne Markis, Marcia
Joyner, Suzanne Amin, Hyder
Zhu, Waiman Bock, Douglas
Zhu, Waiman Joshi, Dinesh
Zhu, Waiman Prescott, Sherri

Dr M AOUDE

You might also like