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

The Language of SQL- P29 doc

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 104,32 KB

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

Nội dung

Let’s again look at the originalFROMclause from the previousSELECT: FROM Customers LEFT JOIN Orders ON Customers.CustomerID ¼ Orders.CustomerID LEFT JOIN Refunds ON Orders.OrderID ¼ Refu

Trang 1

are listed in a left or right join is significant However, there is some flexibility in

listing the tables in situations where there are three or more tables The order of the left (or right) join keywords can be switched around if desired

Let’s again look at the originalFROMclause from the previousSELECT:

FROM Customers

LEFT JOIN Orders

ON Customers.CustomerID ¼ Orders.CustomerID

LEFT JOIN Refunds

ON Orders.OrderID ¼ Refunds.OrderID

We’ve already seen that you can list the Refunds table first and the Customers table last, as long as you convert everything to right joins, as in:

FROM Refunds

RIGHT JOIN Orders

ON Orders.OrderID ¼ Refunds.OrderID

RIGHT JOIN Customers

ON Customers.CustomerID ¼ Orders.CustomerID

Is it possible to list the Customers table first and then the Refunds table, followed

by the Orders table? Yes, as long as you’re willing to mix left and right joins together and throw in some parentheses The following is equivalent to the above:

FROM Customers

LEFT JOIN (Refunds

RIGHT JOIN Orders

ON Orders.OrderID ¼ Refunds.OrderID)

ON Customers.CustomerID ¼ Orders.CustomerID

What was originally a fairly simple statement has now turned into something unnecessarily complex Our advice is to stick with theLEFT JOIN keyword and avoid parentheses when devising complexFROMclauses with multiple tables

Full Joins

The remaining outer join type is the full join You’ve seen that in left and right joins, one table is primary and the other one is secondary Alternatively, you can say that one table is required and one is optional, which means that when matching two tables, rows in the secondary (or optional) table don’t necessarily have to exist

Chapter 12 ■ Combining Tables with an Outer Join

126

Trang 2

In the inner join, both tables are primary (or required) When matching two

tables, there has to be a match between both tables for a row of data to be

selected

In the full join, both tables are secondary (or optional) In this situation, if we’re

matching rows in table A and table B, then we display 1) all rows from table A,

even if there is no matching row in table B, and also 2) all rows from table B, even

if there is no matching row in table A

D A T A B A S E D I F F E R E N C E S : M y S Q L

Unlike Microsoft SQL Server and Oracle, MySQL doesn’t provide for a full join.

Let’s look at an example involving matching rows from these two tables First,

a Movies table:

MovieID MovieTitle Rating

Second, a Ratings table:

RatingID Rating RatingDescription

3 PG-13 Parents Strongly Cautioned

5 NC-17 No One 17 and Under Admitted

The Movies table has a list of movies in the database and includes the MPAA

rating for each movie The Ratings table has a list of the ratings and their

descriptions Let’s say you want to find all matches between these two tables

You’re going to use aFULL JOINto show all rows from the Movies table, as well

Full Joins 127

Trang 3

as all rows from the Ratings table The full join will show all rows, even if a match from the other table isn’t found TheSELECTlooks like:

SELECT

MovieTitle AS 'Movie',

RatingDescription AS 'Rating Description'

FROM Movies

FULL JOIN Ratings

ON Movies.Rating ¼ Ratings.Rating

ORDER BY RatingDescription, MovieTitle

The result of this statement is:

Movie Rating Description

North by Northwest NULL

Sleepless in Seattle Parental Guidance Suggested

The Truman Show Parental Guidance Suggested

Forrest Gump Parents Strongly Cautioned

Lost in America Restricted

Notice that there are two blank cells in the data, which is a direct result of having used aFULL JOIN In the first instance, there is no rating shown for North by

Northwest because there was no matching row in the Ratings table for that

movie In the second instance, there is no movie shown for the ‘‘No One 17 and Under Admitted’’ rating description because there were no matching rows in the Movies table for that rating

The full join is seldom used in practice for the simple reason that this type of relationship between tables is relatively uncommon In essence, the full join shows data where there are nonmatches in both directions between two tables

We are normally only interested in data where there is a complete match between two tables (the inner join) or perhaps a one-sided match (the left or right join)

Looking Ahead

This chapter extended our discussion of joins to left, right, and full joins The left join enables you to join a primary and a secondary table together The left join Chapter 12 ■ Combining Tables with an Outer Join

128

Trang 4

shows all rows in the primary table, even if there is no match in the secondary

table The right join is simply the reverse of the left join, switching the order of

the primary and secondary tables Finally, the full join enables both tables to be

secondary tables It displays all rows that are in either table, even if there isn’t a

match in the other table

In our next chapter, ‘‘Self Joins and Views,’’ we’re going to take a slight detour to

two related topics First, we’re going to talk about self joins, which is a special

technique that allows us to join a table to itself In a way, this creates a virtual

view of the table, in the sense that we can now view this table from two different

perspectives The second main topic of the next chapter will extend the concept

of self joins to a more general way of creating virtual views of multiple tables

Looking Ahead 129

Trang 5

This page intentionally left blank

Ngày đăng: 05/07/2014, 05:20

TỪ KHÓA LIÊN QUAN