Q Language - Join

In qlinguaggio, abbiamo diversi tipi di join in base alle tabelle di input fornite e al tipo di tabelle unite che desideriamo. Un join combina i dati di due tabelle. Oltre alla ricerca di chiavi esterne, ci sono altri quattro modi per unire le tabelle:

  • Join semplice
  • Asof join
  • Unisciti a sinistra
  • Unione dell'Unione

Qui, in questo capitolo, discuteremo in dettaglio ciascuno di questi join.

Join semplice

Il join semplice è il tipo di join più semplice, eseguito con una virgola ",". In questo caso, le due tabelle devono esseretype conformant, cioè, entrambe le tabelle hanno lo stesso numero di colonne nello stesso ordine e la stessa chiave.

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

Possiamo usare virgola-each join per tabelle con la stessa lunghezza per unire lateralmente. Una delle tabelle può essere inserita qui,

Table1, `Table2

Asof Join (aj)

È il join più potente che viene utilizzato per ottenere il valore di un campo in una tabella a volte in un'altra tabella. Generalmente viene utilizzato per ottenere l'offerta prevalente e chiedere al momento di ogni scambio.

Formato generale

aj[joinColumns;tbl1;tbl2]

Per esempio,

aj[`sym`time;trade;quote]

Esempio

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

Left Join (lj)

È un caso speciale di aj dove il secondo argomento è una tabella con chiave e il primo argomento contiene le colonne della chiave dell'argomento destro.

Formato generale

table1 lj Keyed-table

Esempio

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)

Permette di creare un'unione di due tabelle con schemi distinti. È fondamentalmente un'estensione del semplice join (,)

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

Se stai usando uj su tabelle con chiave, le chiavi primarie devono corrispondere.