Ngôn ngữ Q - Truy vấn chức năng

Các truy vấn chức năng (Động) cho phép chỉ định tên cột làm ký hiệu cho các cột chọn / thực thi / xóa q-sql điển hình. Nó rất tiện dụng khi chúng ta muốn chỉ định động tên cột.

Các dạng chức năng là -

?[t;c;b;a]    / for select
![t;c;b;a]    / for update

Ở đâu

  • t là một cái bàn;

  • a là từ điển về uẩn;

  • bcụm từ; và

  • c là một danh sách các ràng buộc.

Lưu ý -

  • Tất cả q các thực thể trong a, bc phải được tham chiếu bằng tên, nghĩa là các ký hiệu chứa tên thực thể.

  • Các dạng cú pháp của select và update được phân tích thành các dạng chức năng tương đương của chúng bằng q thông dịch viên, vì vậy không có sự khác biệt về hiệu suất giữa hai hình thức.

Lựa chọn chức năng

Khối mã sau đây cho thấy cách sử dụng functional select -

q)t:([]n:`ibm`msft`samsung`apple;p:40 38 45 54)

q)t

    n       p
-------------------
   ibm     40
   msft    38
 samsung   45
  apple    54

q)select m:max p,s:sum p by name:n from t where p>36, n in `ibm`msft`apple

  name |   m   s
------ | ---------
 apple |  54  54
 ibm   |  40  40
 msft  |  38  38

ví dụ 1

Hãy bắt đầu với trường hợp đơn giản nhất, phiên bản chức năng của “select from t” sẽ giống như -

q)?[t;();0b;()]     / select from t

    n      p
-----------------
   ibm    40
   msft   38
 samsung  45
  apple   54

Ví dụ 2

Trong ví dụ sau, chúng tôi sử dụng hàm tranh thủ để tạo các thẻ đơn để đảm bảo rằng các thực thể thích hợp là danh sách.

q)wherecon: enlist (>;`p;40)

q)?[`t;wherecon;0b;()] / select from t where p > 40

    n      p
----------------
 samsung  45
  apple   54

Ví dụ 3

q)groupby: enlist[`p] ! enlist `p

q)selcols: enlist [`n]!enlist `n

q)?[ `t;(); groupby;selcols]        / select n by p from t

   p  |    n
----- | -------
  38  |  msft
  40  |  ibm
  45  | samsung
  54  | apple

Thực thi chức năng

Dạng hàm thực thi là một dạng đơn giản của select.

q)?[t;();();`n]                / exec n from t (functional form of exec)
`ibm`msft`samsung`apple

q)?[t;();`n;`p]                / exec p by n from t (functional exec)

apple   | 54
ibm     | 40
msft    | 38
samsung | 45

Cập nhật chức năng

Hình thức cập nhật chức năng hoàn toàn tương tự như select. Trong ví dụ sau, việc sử dụng tranh thủ là để tạo các thẻ đơn, để đảm bảo rằng các thực thể đầu vào là danh sách.

q)c:enlist (>;`p;0)

q)b: (enlist `n)!enlist `n

q)a: (enlist `p) ! enlist (max;`p)

q)![t;c;b;a]

   n      p
-------------
  ibm    40
  msft   38
 samsung 45
 apple   54

Chức năng xóa

Xóa chức năng là một hình thức cập nhật chức năng được đơn giản hóa. Cú pháp của nó như sau:

![t;c;0b;a]        / t is a table, c is a list of where constraints, a is a
                   / list of column names

Bây giờ chúng ta hãy lấy một ví dụ để cho thấy chức năng xóa hoạt động như thế nào -

q)![t; enlist (=;`p; 40); 0b;`symbol$()]
                                          / delete from t where p = 40
   n       p
---------------
  msft    38
 samsung  45
  apple   54