1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Module 5: Joining Multiple Tables docx

34 385 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Module 5: Joining Multiple Tables
Tác giả Cheryl Hoople
Người hướng dẫn Cheryl Hoople, LeRoy Tuttle, Wendy Cleary, Lynette Skinner
Trường học Microsoft Corporation
Chuyên ngành Querying Multiple Tables
Thể loại module
Năm xuất bản 2000
Thành phố Redmond
Định dạng
Số trang 34
Dung lượng 1,02 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

Contents

Overview 1

Combining Data from Multiple Tables 3

Lab A: Querying Multiple Tables 21

Review 29

Module 5: Joining Multiple Tables

Trang 2

to 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 3

Instructor 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 4

Module 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 5

Overview

! 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 6

Using 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 8

Introduction 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 9

Queries 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 10

Using 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 11

This 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 12

This 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 13

Using 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 14

This 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 16

This 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 17

Joining 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

Ngày đăng: 11/12/2013, 14:15

TỪ KHÓA LIÊN QUAN