要了解 SQL join 要先從 Cartesian product 來解釋

如果 A 有3筆資料 , B 有4筆資料
AXB : (a, b) a belongs to A, b belongs to B. 就有12 種可能 .
 X 稱為 cartesian product, 會產生 A, B 元素的所有組合所形成的集合.

如果用:
 left join : 至少會留下3筆. 如果可以控制條件, 讓每個 a , 符合條件的 b 只會有一種可能. 則 join 後的結果只有3筆. left join 不一樣的地方就是以left 為主, 有match 到的會output, 每個a 可以有數個 b 同時成立, 如果沒宥 match 到的, a 還是會保留下來. 在b 上的output 值就會以 . (missing value) 存在. 此例 left join 最多還是有12筆的可能.
   如果不想讓 A的資料消失不見, 可以用left join, 相同的道理, 如果不想讓B 資料消失不見, 可以用 right join,

例:left join

A: 3筆
AA  欄位名
1
2
3

B: 4筆
BB ser  欄位名
1   1
2   2
4   3
4   4
--------------------------------------
proc sql;
create table xx as
select a.*, b.*
from a as a left join b as b
on a.AA=B.BB; *用on;

output
xx
AA BB ser
1  1   1   ; 在 BB 中可以找到對的 a的 1=1
2  2   2  ; 在 BB 中可以找到對的 a的 2=2
3  .   .  ; 在 BB 無法找到 3 與其對應.

proc sql;
create table xx as
select a.*, b.*
from a as a left join b as b
on a.AA=2 & B.BB=4; *用on;

下面為 output xx
AA BB
1  .   .   ; 在 aa=2 的條件不成立, 所以b 的所有都不會成立, output為.
2  4   3  ; 在 aa=2 且 BB 中可以找到對的 4 (B 的第三筆)
2  4   4  ; 在 aa=2 且 BB 中可以找到對的 4 (B 的第三筆)
3  .   .  ; aa不等2. 條件未成立

#要小心: 如果不是唯一對應, 資料比數會變多.
 

Cartesian product :
使用 sql

SQL ..... From A,B; //不給條件會有12筆.

---------------
知道 Cartesian product 後, 還要知道 關連性資料庫, 這也是 SQL 語言的精神.

所以如果要將目前當筆資料前後的資料做計算, 或統計. 就要用 Cartesian product  將所有可能的CASE產生, 再建立條件與關係後, 將符合條件的資料留下來.

SQL ... from A, A;
SQL ... from A left join B;

有時候關係是上一筆, 或下一筆, 這如何做到, 這時候需要引進流水號的關念, 就可以比較容易設計出條件.
 

[Data Step] Cartesian product : Data step 如何做到?

data a; *10筆:X:1~10;
do x=1 to 10;
output ;
end;

data b; *4筆:Y:1~4;
do y=1 to 4;
output ;
end;

run;

data c; * Cartesian product of A and B;
  set a;
  * 對每個row of  a, 用以下的do i, 取出 b 的 4個 row -> 10 x 4;
  do i=1 to 4;
    set b point=i ;
    output;
  end;

run;

----

#如果只用 set a b; 只會有 10 筆.

# set a b; 與 set a; set b; 分開二行是一樣的.

相關文章:

   [Data Step][Sas] 徹底研究 DATA STEP 運作原理及觀念

   [Cartesian Product]

[Data Step][SAS] II. 如果要做 T, T-1 相關的計算要如何做 ?

[Data Step][SAS] 欄位的產生與消滅, 定義欄位順序

[Cartesian Product]

[Data Step][Sas] 算移動平均

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 cianfen 的頭像
    cianfen

    cianfen的部落格

    cianfen 發表在 痞客邦 留言(0) 人氣()