Q Language - Jointures

Dans qlangue, nous avons différents types de jointures en fonction des tables d'entrée fournies et du type de tables jointes que nous souhaitons. Une jointure combine les données de deux tables. Outre la recherche de clés étrangères, il existe quatre autres façons de joindre des tables -

  • Jointure simple
  • Asof rejoindre
  • Joint gauche
  • Adhésion à l'Union

Ici, dans ce chapitre, nous aborderons chacune de ces jointures en détail.

Joindre simple

La jointure simple est le type de jointure le plus basique, exécuté avec une virgule «,». Dans ce cas, les deux tables doivent êtretype conformant, c'est-à-dire que les deux tables ont le même nombre de colonnes dans le même ordre et la même clé.

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

Nous pouvons utiliser chaque jointure par virgule pour les tables de même longueur à joindre latéralement. Une des tables peut être saisie ici,

Table1, `Table2

Asof Join (aj)

C'est la jointure la plus puissante qui est utilisée pour obtenir la valeur d'un champ dans une table comme dans une autre table. Généralement, il est utilisé pour obtenir l'offre et la demande en vigueur au moment de chaque transaction.

Format général

aj[joinColumns;tbl1;tbl2]

Par exemple,

aj[`sym`time;trade;quote]

Exemple

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]

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

Jointure gauche (lj)

C'est un cas particulier de aj où le deuxième argument est une table à clé et le premier argument contient les colonnes de la clé de l'argument droit.

Format général

table1 lj Keyed-table

Exemple

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

Rejoindre l'Union (uj)

Il permet de créer une union de deux tables avec des schémas distincts. C'est essentiellement une extension de la jointure simple (,)

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

Si vous utilisez uj sur des tables à clé, les clés primaires doivent correspondre.