Q Language - Tham gia

Trong qngôn ngữ, chúng tôi có các loại liên kết khác nhau dựa trên các bảng đầu vào được cung cấp và loại bảng liên kết mà chúng tôi mong muốn. Một phép nối kết hợp dữ liệu từ hai bảng. Ngoài việc theo đuổi khóa ngoại, có bốn cách khác để tham gia các bảng -

  • Tham gia đơn giản
  • Tham gia Asof
  • Chỗ nối bên trái
  • Tham gia đoàn thể

Ở đây, trong chương này, chúng ta sẽ thảo luận chi tiết về từng phép nối này.

Tham gia đơn giản

Phép nối đơn giản là kiểu phép nối cơ bản nhất, được thực hiện bằng dấu phẩy ','. Trong trường hợp này, hai bảng phảitype conformant, tức là, cả hai bảng có cùng số cột theo cùng một thứ tự và cùng một khóa.

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

Chúng ta có thể sử dụng dấu phẩy cho mỗi phép nối cho các bảng có cùng độ dài để nối ngang. Một trong các bảng có thể được đặt ở đây,

Table1, `Table2

Asof Tham gia (aj)

Đây là phép nối mạnh nhất được sử dụng để lấy giá trị của một trường trong một bảng kể cả thời gian trong một bảng khác. Nói chung nó được sử dụng để nhận giá thầu phổ biến và yêu cầu tại thời điểm mỗi giao dịch.

Định dạng chung

aj[joinColumns;tbl1;tbl2]

Ví dụ,

aj[`sym`time;trade;quote]

Thí dụ

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

Tham gia bên trái (lj)

Đó là một trường hợp đặc biệt của aj trong đó đối số thứ hai là một bảng có khóa và đối số đầu tiên chứa các cột của khóa của đối số bên phải.

Định dạng chung

table1 lj Keyed-table

Thí dụ

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

Tham gia Liên minh (uj)

Nó cho phép tạo một liên hợp hai bảng với các lược đồ riêng biệt. Về cơ bản, nó là một phần mở rộng cho phép nối đơn giản (,)

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

Nếu bạn đang sử dụng uj trên các bảng có khóa, thì các khóa chính phải khớp.