Example 2 with an alias name USE joindb SELECT buyer_name, s.buyer_id, qty FROM buyers AS b INNER JOIN sales AS s ON b.buyer_id = s.buyer_id GO USE joindb SELECT buyer_name, s.buyer_id,
Trang 1Contents
Overview 1
Combining Data from Multiple Tables 3
Lab A: Querying Multiple Tables 21
Review 29
Module 5: Joining Multiple Tables
Trang 2to represent any real individual, company, product, or event, unless otherwise noted Complying with all applicable copyright laws is the responsibility of the user No part of this document may
be reproduced or transmitted in any form or by any means, electronic or mechanical, for any purpose, without the express written permission of Microsoft Corporation If, however, your only means of access is electronic, permission to print one copy is hereby granted
Microsoft may have patents, patent applications, trademarks, copyrights, or other intellectual property rights covering subject matter in this document Except as expressly provided in any written license agreement from Microsoft, the furnishing of this document does not give you any license to these patents, trademarks, copyrights, or other intellectual property
2000 Microsoft Corporation All rights reserved
Microsoft, BackOffice, MS-DOS, PowerPoint, Visual Studio, Windows, Windows Media, and Windows NT are either registered trademarks or trademarks of Microsoft Corporation in the U.S.A and/or other countries
The names of companies, products, people, characters, and/or data mentioned herein are fictitious and are in no way intended to represent any real individual, company, product, or event, unless otherwise noted
Other product and company names mentioned herein may be the trademarks of their respective owners
Project Lead: Cheryl Hoople
Instructional Designer: Cheryl Hoople
Technical Lead: LeRoy Tuttle
Program Manager: LeRoy Tuttle
Graphic Artist: Kimberly Jackson (Independent Contractor)
Editing Manager: Lynette Skinner
Editor: Wendy Cleary
Editorial Contributor: Elizabeth Reese
Copy Editor: Bill Jones (S&T Consulting)
Production Manager: Miracle Davis
Production Coordinator: Jenny Boe
Production Tools Specialist: Julie Challenger
Production Support: Lori Walker (S&T Consulting)
Test Manager: Sid Benavente
Courseware Testing: Testing Testing 123
Classroom Automation: Lorrin Smith-Bates
Creative Director, Media/Sim Services: David Mahlmann
Web Development Lead: Lisa Pease
CD Build Specialist: Julie Challenger
Online Support: David Myka (S&T Consulting)
Localization Manager: Rick Terek
Operations Coordinator: John Williams
Manufacturing Support: Laura King; Kathy Hershey
Lead Product Manager, Release Management: Bo Galford
Lead Product Manager: Margo Crandall
Group Manager, Courseware Infrastructure: David Bramble
Group Product Manager, Content Development: Dean Murray
General Manager: Robert Stewart
Trang 3Instructor Notes
This module provides students with an overview of querying multiple tables by using different types of joins, combining result sets by using the UNION operator, and creating tables by using the SELECT INTO statement
At the end of this module, students will be able to:
! Use aliases for table names
! Combine data from two or more tables by using joins
! Combine multiple result sets into one result set by using the UNION operator
Materials and Preparation
Required Materials
To teach this course, you need the following materials:
! Microsoft® PowerPoint® file 2071A_05.ppt
! The C:\Moc\2071A\Demo\Ex_05.sql example, which contains all of the example scripts from the module, unless otherwise noted in the module
Preparation Tasks
To prepare for this module, you should:
! Read all of the materials
! Complete the lab
Presentation:
60 Minutes
Lab:
45 Minutes
Trang 4Module Strategy
Use the following strategy to present this module:
! Using Aliases for Table Names Point out that users can assign aliases for table names within the scope of a Transact-SQL statement Note that using aliases for table names helps script readability and facilitates complex join logic
! Combining Data from Multiple Tables Introduce the join operation and discuss in detail inner, outer, and cross joins The examples only focus on joining two tables by using a simplified
database, joindb, to teach these concepts
Explain how to join multiple tables and a table to itself Demonstrate
multiple and self-joins against the northwind database by using the
provided script
! Combining Multiple Result Sets Describe combining multiple result sets into one result set by using the UNION operator
Customization Information
This section identifies the lab setup requirements for a module and the configuration changes that occur on student computers during the labs This information is provided to assist you in replicating or customizing
Microsoft Official Curriculum (MOC) courseware
The lab in this module is dependent on the classroom configuration that is specified in the Customization Information section at the end of the
Classroom Setup Guide for course 2071A, Querying Microsoft SQL Server
2000 with Transact-SQL
Module Setup
The C:\Moc\2071A\Batches\2071A_JoinDB.sql script, which adds the joindb
database, is normally executed as part of the Classroom Setup When you customize the course, you must ensure that this script is executed so that the examples in the module function correctly
Trang 5Overview
! Using Aliases for Table Names
! Combining Data from Multiple Tables
! Combining Multiple Result Sets
This module provides students with an overview of querying multiple tables by using different types of joins, combining result sets by using the UNION operator, and creating tables by using the SELECT INTO statement
After completing this module, you will be able to:
! Use aliases for table names
! Combine data from two or more tables by using joins
! Combine multiple result sets into one result set by using the UNION operator
Topic Objective
To introduce the topics that
this module covers
Lead-in
In this module, you will learn
about joining multiple tables
Trang 6Using Aliases for Table Names
! Example 1 (without an alias name)
! Example 2 (with an alias name)
USE joindb SELECT buyer_name, s.buyer_id, qty FROM buyers AS b INNER JOIN sales AS s
ON b.buyer_id = s.buyer_id GO
USE joindb SELECT buyer_name, s.buyer_id, qty FROM buyers AS b INNER JOIN sales AS s
ON b.buyer_id = s.buyer_id GO
USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers INNER JOIN sales
ON buyers.buyer_id = sales.buyer_id GO
USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers INNER JOIN sales
ON buyers.buyer_id = sales.buyer_id GO
Using aliases for table names improves script readability, facilitates writing complex joins, and simplifies the maintenance of Transact-SQL
You can replace a long and complex fully qualified table name with a simple, abbreviated alias name when writing scripts You use an alias name in place of the full table name
SELECT * FROM server.database.schema.table AS table_alias This example displays the names of buyers, buyer ID, and the quantity sold
from the buyers and sales tables This query does not use alias names for the
tables in the JOIN syntax
USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers
INNER JOIN sales
ON buyers.buyer_id = sales.buyer_id
GO This example displays the names of buyers, buyer ID, and the quantity sold
from the buyers and sales tables This query uses alias names for the tables in
the JOIN syntax
USE joindb SELECT buyer_name, s.buyer_id, qty FROM buyers AS b
INNER JOIN sales AS s
To describe how to use
aliases for table names
Lead-in
Using aliases for table
names improves script
readability, facilitates writing
complex joins, and simplifies
Trang 7# Combining Data from Multiple Tables
! Introduction to Joins
! Using Inner Joins
! Using Outer Joins
! Using Cross Joins
! Joining More Than Two Tables
! Joining a Table to Itself
A join is an operation that allows you to query two or more tables to produce a result set that incorporates rows and columns from each table You join tables
on columns that are common to both tables
When you join tables, Microsoft® SQL Server™ 2000 compares the values of the specified columns row by row and then uses the comparison results to combine the qualifying values into new rows
There are three types of joins: inner joins, outer joins, and cross joins
Additionally, you can join more than two tables by using a series of joins within
a SELECT statement, or you can join a table to itself by using a self-join
Topic Objective
To explain the different
ways that you can combine
data from two or more
tables or result sets
Lead-in
It is possible to combine
data from two or more
tables, even if the
tables reside in
different databases
Trang 8Introduction to Joins
! Selects Specific Columns from Multiple Tables
$ JOIN keyword specifies that tables are joined and how to join them
$ ON keyword specifies join condition
! Queries Two or More Tables to Produce a Result Set
$ Use primary and foreign keys as join conditions
$ Use columns common to specified tables to join tables
You join tables to produce a single result set that incorporates rows and columns from two or more tables
SELECT column_name [, column_name …]
<table_source> <join_type> <table_source> ON <search_condition>
| <table_source> CROSS JOIN <table_source>
| <joined_table>
Selects Specific Columns from Multiple Tables
A join allows you to select columns from multiple tables by expanding on the FROM clause of the SELECT statement Two additional keywords are included
in the FROM clause—JOIN and ON:
! The JOIN keyword specifies which tables are to be joined and how to join them
! The ON keyword specifies which columns the tables have in common
Topic Objective
To explain how joins
are implemented
Lead-in
You join tables to produce a
single result set that
incorporates elements from
two or more tables
Partial Syntax
Delivery Tip
Reference SQL Server
Books Online to show the
full SELECT statement and
to highlight the joins
Trang 9Queries Two or More Tables to Produce a Result Set
A join allows you to query two or more tables to produce a single result set When you implement joins, consider the following facts and guidelines:
! Specify the join condition based on the primary and foreign keys
! If a table has a composite primary key, you must reference the entire key in the ON clause when you join tables
! Use columns common to the specified tables to join the tables These columns should have the same or similar data types
! Reference a table name if the column names of the joined tables are the
same Qualify each column name by using the table_name.column_name
Trang 10Using Inner Joins
USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers INNER JOIN sales
ON buyers.buyer_id = sales.buyer_id GO
USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers INNER JOIN sales
ON buyers.buyer_id = sales.buyer_id GO
sales
buyer_id prod_id qty
1 1 4 3
2 3 1 5
15 5 37 11
4 2 1003
buyers
buyer_name
Adam Barr Sean Chai Eva Corets Erin O’Melia
buyer_id
1 2 3 4
Result
buyer_name
Adam Barr Adam Barr Erin O’Melia Eva Corets
buyer_id qty
1 1 4 3
15 5 37 11 Erin O’Melia 4 1003
database is included on the Student Materials compact disc
Why to Use Inner Joins
Use inner joins to obtain information from two separate tables and combine that information in one result set When you use inner joins, consider the following facts and guidelines:
! Inner joins are the SQL Server default You can abbreviate the INNER JOIN clause to JOIN
! Specify the columns that you want to display in your result set by including the qualified column names in the select list
! Include a WHERE clause to restrict the rows that are returned in the result set
! Do not use a null value as a join condition because null values do not evaluate equally with one another
SQL Server does not guarantee an order in the result set unless one is specified with an ORDER BY clause
Topic Objective
To define and demonstrate
inner joins
Lead-in
Use inner joins to combine
tables in which values in
compared columns
are equal
Note
Delivery Tip
The examples on the slides
in this module are from the
joindb database—a
database created
specifically for teaching the
different types of joins The
joindb database is included
on the Student Materials
compact disc
Point out that SQL Server
does not guarantee an order
in the result set unless it is
specified with an ORDER
BY clause
Note
Trang 11This example returns the buyer_name, buyer_id, and qty values for the buyers
who purchased products Buyers who did not purchase any products are not included in the result set Buyers who bought more than one product are listed for each purchase
The buyer_id column from either table can be specified in the select list
USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers
INNER JOIN sales
USE northwind SELECT productname, companyname FROM products
INNER JOIN suppliers
ON products.supplierid = suppliers.supplierid
GO
productname companyname
Chef Anton's Cajun Seasoning New Orleans Cajun Delights (77 row(s) affected)
This example returns the names of customers who placed orders after 1/1/98
Notice that a WHERE clause is used to restrict the rows that are returned in the result set
USE northwind SELECT DISTINCT companyname, orderdate FROM orders INNER JOIN customers
ON orders.customerid = customers.customerid WHERE orderdate > '1/1/98'
GO
Example 1
Delivery Tip
Point out that the buyer_id
column from either table
can be referenced in the
Trang 12This example returns the title number of all books currently checked out and the
member number of the borrower from the copy and loan tables in the library database Both the copy and loan tables have a composite primary key consisting of the isbn and copy_no columns When joining these tables, you
must specify both columns as join conditions because they uniquely identify a particular copy of a book
USE library SELECT copy.title_no, loan.member_no FROM copy
INNER JOIN loan
ON copy.isbn = loan.isbn AND copy.copy_no = loan.copy_no WHERE copy.on_loan = 'Y'
Result
Example 4
Delivery Tip
This example uses the
library database, because
the northwind database
does not have two tables
with composite primary keys
that relate to one another
Result
Trang 13Using Outer Joins
USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers LEFT OUTER JOIN sales
ON buyers.buyer_id = sales.buyer_id GO
USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers LEFT OUTER JOIN sales
ON buyers.buyer_id = sales.buyer_id GO
sales
buyer_id prod_id qty
1 1 4 3
2 3 1 5
15 5 37 11
4 2 1003
buyers
buyer_name
Adam Barr Sean Chai Eva Corets Erin O’Melia
buyer_id
1 2 3
buyer_name
Adam Barr Adam Barr Erin O’Melia Eva Corets
buyer_id qty
1 1 4 3
15 5 37 11 Erin O’Melia 4 1003 Sean Chai NULL NULL
Why to Use Left or Right Outer Joins
Use left or right outer joins when you require a complete list of data that is stored in one of the joined tables in addition to the information that matches the join condition When you use left or right outer joins, consider the following facts and guidelines:
! SQL Server returns only unique rows when you use left or right outer joins
! Use a left outer join to display all rows from the first-named table (the table
on the left of the expression) If you reverse the order in which the tables are listed in the FROM clause, the statement yields the same result as a right outer join
! Use a right outer join to display all rows from the second-named table (the table on the right of the expression) If you reverse the order in which the tables are listed in the FROM clause, the statement yields the same result as
a left outer join
! You can abbreviate the LEFT OUTER JOIN or RIGHT OUTER JOIN clause as LEFT JOIN or RIGHT JOIN
! You can use outer joins between two tables only
Topic Objective
To define outer joins and
describe the three types
Lead-in
By using left, right, or full
outer joins, you can include
rows that do not match your
join condition in a result set
Delivery Tip
Point out the null values on
the slide for Sean Chai
Rows that do not match the
join condition display NULL
in the result set
Delivery Tip
Ask: What would you
change in the slide example
query to yield the same
result with a RIGHT OUTER
JOIN clause?
Answer: Reverse the order
of the tables in the FROM
clause and use the RIGHT
OUTER JOIN clause
Delivery Tip
Always use the ANSI
SQL-92 join syntax, with
ANSI_NULLS set to ON
Trang 14This example returns the buyer_name, buyer_id, and qty values for all
buyers and their purchases Notice that the buyers who did not purchase any
products are listed in the result set, but null values appear in the buyer_id and
qty columns
USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers
LEFT OUTER JOIN sales
This example displays all customers with order dates By using a left outer join, you retrieve one row for each customer and additional rows if the customer has
placed multiple orders NULL in the orderdate column is returned in the result
set for customers who have not placed an order Notice the NULL entries for
customers FISSA and Paris Spécialités
USE northwind SELECT companyname, customers.customerid, orderdate FROM customers
LEFT OUTER JOIN orders
ON customers.customerid = orders.customerid
GO
companyname customerid orderdate
Trang 15
Using Cross Joins
USE joindb SELECT buyer_name, qty FROM buyers
CROSS JOIN sales GO
USE joindb SELECT buyer_name, qty FROM buyers
CROSS JOIN sales GO
Result
buyer_name
Adam Barr Adam Barr Adam Barr Adam Barr
qty
15 5 37 11 Adam Barr 1003 Sean Chai 15 Sean Chai 5 Sean Chai 37 Sean Chai 11 Sean Chai 1003 Eva Corets 15
sales
buyer_id prod_id qty
1 1 4 3
2 3 1 5
15 5 37 11
4 2 1003
buyers
buyer_id
1 2 3 4
buyer_name
Adam Barr Sean Chai Eva Corets Erin O’Melia
Example 1
Cross joins display every combination of all rows in the joined tables A
common column is not required to use cross joins
Why to Use Cross Joins
While cross joins are rarely used on a normalized database, you can use them to generate test data for a database or lists of all possible combinations for
checklists or business templates
When you use cross joins, SQL Server produces a Cartesian product in which the number of rows in the result set is equal to the number of rows in the first table, multiplied by the number of rows in the second table For example, if there are 8 rows in one table and 9 rows in the other table, SQL Server returns a total of 72 rows
This example lists all possible combinations of the values in the
buyers.buyer_name and sales.qty columns
USE joindb SELECT buyer_name, qty FROM buyers
CROSS JOIN sales
GO
Topic Objective
To show how cross joins
work and describe the
result set
Lead-in
Use cross joins to display all
possible row combinations
of the selected columns in
the joined tables
Delivery Tip
Point out that the ON
keyword and associated
column list is not used in the
SELECT statement because
cross joins return all
possible row combinations
from each specified table
A common column is not
required to use cross joins
Example 1
Trang 16This example displays a cross join between the shippers and suppliers
tables that is useful for listing all of the possible ways that suppliers can ship their products
The use of a cross join displays all possible row combinations between these
two tables The shippers table has 3 rows, and the suppliers table has 29 rows
The result set contains 87 rows
USE northwind SELECT suppliers.companyname, shippers.companyname FROM suppliers
CROSS JOIN shippers
GO
companyname companyname
Cooperativa de Quesos 'Las Cabras' Speedy Express
Cooperativa de Quesos 'Las Cabras' United Package
Cooperativa de Quesos 'Las Cabras' Federal Shipping
(87 row(s) affected)
Result
Example 2
Delivery Tip
Execute this query and
explain that this example is
useful for listing all of the
possible ways that suppliers
can ship their products
Result
Trang 17Joining More Than Two Tables
SELECT buyer_name, prod_name, qty FROM buyers
INNER JOIN sales
ON buyers.buyer_id = sales.buyer_id INNER JOIN produce
ON sales.prod_id = produce.prod_id GO
SELECT buyer_name, prod_name, qty FROM buyers
INNER JOIN sales
ON buyers.buyer_id = sales.buyer_id INNER JOIN produce
ON sales.prod_id = produce.prod_id GO
produce
prod_id prod_name
1 2 3 4
Apples Pears Oranges Bananas
5 Peaches
buyers
buyer_id
1 2 3 4
buyer_name
Adam Barr Sean Chai Eva Corets Erin O’Melia
sales
buyer_id
1 1 3 4
prod_id
2 3 1 5
2 2
qty
15 5 37 11 1003
Result
buyer_name
Erin O’Melia Adam Barr Erin O’Melia Adam Barr Eva Corets
prod_name
Apples Pears Pears Oranges Peaches
qty
37 15 1003
1003
5 11
Example 1
It is possible to join any number of tables Any table that is referenced in a join operation can be joined to another table by a common column
Why to Join More Than Two Tables
Use multiple joins to obtain related information from multiple tables When you join more than two tables, consider the following facts and guidelines:
! You must have one or more tables with foreign key relationships to each of the tables that you want to join
! You must have a JOIN clause for each column that is part of a composite key
! Include a WHERE clause to limit the number of rows that are returned
This example returns the buyer_name, prod_name, and qty columns from the buyers, sales and produce tables The buyer_id column is common to both the buyers and sales tables and is used to join these two tables The
prod_id column is common to both the sales and produce tables and is used to
join the produce table to the result of the join between buyers and sales
USE joindb SELECT buyer_name, prod_name, qty FROM buyers
INNER JOIN sales
ON buyers.buyer_id = sales.buyer_id INNER JOIN produce
ON sales.prod_id = produce.prod_id
GO
Topic Objective
To explain how to join more
than two tables
Lead-in
Until now, we’ve looked at
joining only two tables It is
possible, however, to join
more than two tables
Delivery Tip
The first join is between the
buyers and sales tables
The second join is
between the sales and