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, bvà c 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