7

インタビューで「SQLの外部結合とは」という質問をよく受けます。

答えることはできますが、(左)外部結合が使用されている古典的で優れた実際の例は何でしょうか?

4

7 に答える 7

7

顧客および注文テーブルのNorthwindデータベース。

内部結合を行うと、注文した顧客のみが提供されます。

外部結合を行うと、すべての顧客と、注文した顧客の注文が取得されます。

于 2010-04-23T12:11:00.343 に答える
6

Robin Dayの回答に追加するために、Left Outer Joinを使用して、NULLをチェックすることにより、注文を行っていない顧客のみを取得することもできます。


SELECT *
FROM  Customer
  LEFT OUTER JOIN Order 
    ON Customer.CustomerId = Order.CustomerId
WHERE Order.CustomerId IS NULL
于 2010-04-23T12:15:16.217 に答える
5

以下は、左外側の結合の視覚的表現です

SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key

代替テキスト

結合の詳細については、以下の記事 http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspxを参照してください(最高の記事の1つを読む必要があります)

于 2010-04-23T12:17:03.333 に答える
4

ALEFT OUTER JOINは、あるテーブルのすべてのレコードと、別のテーブルのレコード(存在する場合)が必要な場合に使用できます。

たとえば、与えられたテーブルUserAddress、ここでAddressFKがUserあり、ユーザーごとに0個以上のアドレスが存在する可能性があります。

select *
from User u
left outer join Address a on u.UserID = a.UserID

Userこれにより、対応するレコードがあったかどうかに関係なく、すべてのレコードを確実に取得できますAddress

アドレスを持たないすべてのユーザーを表示する場合は、次のようにします。

select *
from User u
left outer join Address a on u.UserID = a.UserID
where a.UserID is null
于 2010-04-23T12:09:55.100 に答える
3

古典的な例は、cutomersとordersです。注文がある顧客とない顧客がいます。総売上高のある顧客のリストを表示したいとします。したがって、顧客から注文への左外部結合を実行して、次のようにします。

顧客A:$ 100; 顧客B:$ 0; 顧客C:500ドル

それ以外の:

顧客A:$ 100; 顧客C:500ドル

于 2010-04-23T12:11:57.803 に答える
2

次に例を示します。

バウチャーを含むすべての顧客のリストが必要です。また、バウチャーを使用したことがない顧客も必要です。

SELECT *
FROM Customer
LEFT OUTER JOIN Voucher
 ON Customer.CustomerId = Voucher.CustomerId
于 2010-04-23T12:12:17.670 に答える
1

注文の詳細を含むすべての顧客のリストを取得します。一部の顧客は注文をしていない可能性があるため、INNERJOINはそれらをこのリストから除外します。

SELECT
    *
FROM
    Customer
LEFT OUTER JOIN
    Order
ON
    Customer.CustomerId = Order.CustomerId
于 2010-04-23T12:12:06.147 に答える