Skip to content


Q-SQL expressions have their own syntax rules, with optional dependent clauses, by, from and where. Q-SQL column lists are comma-separated lists of column names, not symbol vectors, and can include definitions of new, derived columns.

Call by value, call by reference

In q-SQL expressions, where a table is called

  • by value, the expression returns a result
  • by reference, the table is replaced as a side effect, and its name returned
q)t1:t2:([]a:1 2;b:3 4)
q)update a:neg a from t1
a  b
-1 3
-2 4
q)update a:neg a from `t1

Q for Mortals: §9.0 Queries: q-sql

keyword semantics
delete Delete rows or columns from a table
exec Return columns from a table, possibly with new columns
fby Aggregate subgroups
select Return part of a table, possibly with new columns
update Add rows or columns to a table
upsert Add new records to a table, update existing records

Functional forms

The q-SQL templates all have functional forms, which can be used without performance penalty.


Cond is not supported inside q-SQL expressions.

q)u:([]a:raze ("ref/";"kb/"),\:/:"abc"; b:til 6)
q)select from u where a like $[1b;"ref/*";"kb/*"]
  [0]  select from u where a like $[1b;"ref/*";"kb/*"]

Enclose in a lambda

q)select from u where a like {$[x;"ref/*";"kb/*"]}1b
a       b
"ref/a" 0
"ref/b" 2
"ref/c" 4

or use the Vector Conditional instead.