All relational operators need to be expressed as:
a_relation ?a_operator parameters...
The character ? is called "query".
?select and ?deselect:
The ?select operator (aka: projection or SELECT * FROM in sql), allow filtering the columns in a relation. Using the character # to indicate that is a name (like #price) or a number (like #0) of a column:
let products := sales ?select #name
print(products)
>
You can also use ?deselect to say which columns NOT pick:
let products := sales ?deselect #name
print(products) //it show the all the columns, except #name
?where:
The ?where operator (aka: selection or where... in sql), allow filtering the rows in a relation. It needs a "boolean expression", ie: expression that compares values, columns or returns true/false.
let soda := sales ?where #name == "Soda"
let soda := sales ?where #0 == "Soda"
let cheaper := sales ?where #price < 5.0
?limit:
The ?limit N operator return up to N rows from the query. If the value supplied is bigger than the total of rows, then it will return all rows.
let products := sales ?limit 1
?skip:
The ?skip N operator skip N rows from the query and return the rest. If the value supplied is smaller than the total of rows, then it will return nothing.
let products := sales ?skip 1
?distinct:
The ?distinct operator avoid duplicated values.
let products := sales ?distinct