Q语言 - 加入

q 语言中,我们根据提供的输入表和我们想要的连接表的种类有不同类型的连接.连接组合来自两个表的数据.除了外键追逐,还有其他四种方式可以加入表格和减号;

  • 简单加入

  • Asof join

  • 左加入

  • 联盟加入

在这里,在本章中,我们将详细讨论每个连接.

简单连接

简单连接是最基本的连接类型,使用逗号','.在这种情况下,两个表必须是类型符合,即两个表具有相同顺序的列数和相同的键.

table1,:table2 / table1 is assigned the value of table2

我们可以使用逗号 - 表的每个连接相同的长度加入侧面.其中一个表可以在这里键入,

 
 Table1,`Table2

Asof Join(aj)

这是最强大的连接,用于在另一个表中获取一个表中字段的值.一般来说,它用于获取每次交易时的现行买入价和卖出价.

一般格式

 
 aj [joinColumns; tbl1; tbl2]

例如,

 
 aj [`sym`time; trade; quote]

示例

 
q)tab1:([] a:(1 2 3 4); b:(2 3 4 5); d:(6 7 8 9))
q)tab2:([] a:(2 3 4); b:(3 4 5); c :( 4 5 6))
q)show aj [`a`b; tab1; tab2] 
abdc 
 ------------- 
 1 2 6 
 2 3 7 4 
 3 4 8 5 
 4 5 9 6

左连接(lj)

这是aj的一个特例,其中第二个参数是一个键控表,第一个参数包含右参数键的列.

常规格式

 
 table1 lj Keyed- table

示例

q)/Left join- syntax table1 lj table2 or lj[table1;table2]

q)tab1:([]a:(1 2 3 4);b:(2 3 4 5);d:(6 7 8 9))

q)tab2:([a:(2 3 4);b:(3 4 5)]; c:( 4 5 6))

q)show lj[tab1;tab2]

 a  b  d  c
-------------
 1  2  6
 2  3  7  4
 3  4  8  5
 4  5  9  6

Union Join (uj)

它允许创建具有不同模式的两个表的并集.它基本上是简单连接的扩展(,)

q)tab1:([]a:(1 2 3 4);b:(2 3 4 5);d:(6 7 8 9))

q)tab2:([]a:(2 3 4);b:(3 4 5); c:( 4 5 6))

q)show uj[tab1;tab2]

 a  b  d  c
------------
 1  2  6
 2  3  7
 3  4  8
 4  5  9
 2  3     4
 3  4     5
 4  5     6

如果您在键控表上使用uj,那么主键必须匹配.