を始めたばかりの頃SQL
、私は について真剣に考えていましたunderstand how SQL joins work
。ある時点で、私は何年にもprior experience with -or say, exposure to, MS Excel's
vlookup
わたる 、私の考えと理解が間違った方法で得られたことに気付きました. ネット上には良い参考文献がたくさんありますが、私には届きませんでした. またVenn diagrams
、最初は私を助けませんでした。この質問を投稿して、他の人が私と同じメンタルトラップに陥らないことを願っています. 私も答えを出します。もちろん、他の提案も大歓迎です。これを書くのに時間がかかりましたが、これを投稿しなければ、私は自分自身をむき出しにすることができませんでした...
1 に答える
SQL と結合を使い始めたとき、たとえば SQL の左結合が、vlookup を実行したときの予想よりも多くの結果をもたらした理由を理解できませんでした。ベン図は役に立ちませんでしたが、今では非常に明確になっています。
1 週間の非常に強烈な思考の後で、私は以前の経験が私のパラダイムであることに突然気付きましbasic formula of vlookup
たonly one result is given back
。でbasic expression of a left join
、zero or more results are given back
。
私は明確にしようとします。たとえば、Excel シートの下のデータと数式 (列 D) があります。列ヘッダーは最初の行にあるため、数式で A2 などと表示されます。簡単にするために、B と C の近くの列 A にデータがあります。実際には、別の場所にデータを配置する方がよいでしょう。データセットを、すべての行がレコードであるテーブルとして解釈できます。この例ではそうではありません。つまり、セル A3 (2) は B3 ~ C3 (1、青) と同じレコードではありません。この記事を読んだ人は、式と「false」節を理解していると思います。そうでない場合は、ここから始めてください。
A B C D (result in D)
1 1 Green =vlookup(A2,B:C;2;false) (result=Green)
2 1 Blue =vlookup(A3,B:C;2;false) (result=Orange)
3 2 Orange =vlookup(A4,B:C;2;false) (result=Yellow)
4 3 Yellow =vlookup(A5,B:C;2;false) (result=#n/a)
列 D2 では、結果として「緑」のみが与えられていることがわかります。結合すると、'Green' AND 'Blue' が返されます。
SQL クエリ (方言は t-sql) と結果の下を参照してください。
select A as AFromTableA
,B as BFromTableBC
,C as CFromTableBC
from tableBC left outer join tableA
on B=A;
結果:
AFromTableA BFromTableBC CFromTableBC
1 1 Green
1 1 Blue
2 2 Orange
3 3 Yellow
緑と青の両方が結果に返されることがわかります。これは、join がすべての結果を検索するためです。また、B=4 が返されないことも確認してください。これは、TableBC から始まる左結合であるためです。実際にテーブル内に 4 がある TableA から開始した場合、null の結果が返されます。このような:
AFromTableA BFromTableBC CFromTableBC
1 1 Green
1 1 Blue
2 2 Orange
3 3 Yellow
4 NULL NULL
これを自分で行うためのスクリプトを次に示します。
create table tableA (A int)
create table tableBC (B int, C nvarchar(10))
insert into tableA
values (1),(2),(3),(4);
insert into tableBC (B,C)
values (1, 'Green')
,(1, 'Blue')
,(2,'Orange')
,(3, 'Yellow');
ですから、うまくいけば、この答えがあなたの思考に役立つことを願っています。次に、結合に関するさらに明確な情報をお読みください。