Wasabi
SELECT Statements
A SELECT statement can consist of the following basic clauses.
- SELECT 
- INTO 
- FROM 
- JOIN 
- WHERE 
- GROUP BY 
- HAVING 
- UNION 
- ORDER BY 
- LIMIT 
SELECT Syntax
The following syntax diagram outlines the syntax supported by the SQL engine of the provider:
SELECT {
[ TOP <numeric_literal> | DISTINCT ]
{
*
| {
<expression> [ [ AS ] <column_reference> ]
| { <table_name> | <correlation_name> } .*
} [ , ... ]
}
[ INTO csv:// [ filename= ] <file_path> [ ;delimiter=tab ] ]
{
FROM <table_reference> [ [ AS ] <identifier> ]
} [ , ... ]
[ [
INNER | { { LEFT | RIGHT | FULL } [ OUTER ] }
] JOIN <table_reference> [ ON <search_condition> ] [ [ AS ] <identifier> ]
] [ ... ]
[ WHERE <search_condition> ]
[ GROUP BY <column_reference> [ , ... ]
[ HAVING <search_condition> ]
[ UNION [ ALL ] <select_statement> ]
[
ORDER BY
<column_reference> [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ]
]
[
LIMIT <expression>
[
{ OFFSET | , }
<expression>
]
]
}
<expression> ::=
| <column_reference>
| @ <parameter>
| ?
| COUNT( * | { [ DISTINCT ] <expression> } )
| { AVG | MAX | MIN | SUM | COUNT } ( <expression> )
| NULLIF ( <expression> , <expression> )
| COALESCE ( <expression> , ... )
| CASE <expression>
WHEN { <expression> | <search_condition> } THEN { <expression> | NULL } [ ... ]
[ ELSE { <expression> | NULL } ]
END
| <literal>
| <sql_function>
<search_condition> ::=
{
<expression> { = | > | < | >= | <= | <> | != | LIKE | NOT LIKE | IN | NOT IN | IS NULL | IS NOT NULL | AND | OR | CONTAINS | BETWEEN } [ <expression> ]
} [ { AND | OR } ... ]
Examples
- Return all columns: - SELECT * FROM Buckets
- Rename a column: - SELECT [OwnerId] AS MY_OwnerId FROM Buckets
- Cast a column's data as a different data type: - SELECT CAST(AnnualRevenue AS VARCHAR) AS Str_AnnualRevenue FROM Buckets
- Search data: - SELECT * FROM Buckets WHERE Name = 'TestBucket';
- Return the number of items matching the query criteria: - SELECT COUNT(*) AS MyCount FROM Buckets
- Return the number of unique items matching the query criteria: - SELECT COUNT(DISTINCT OwnerId) FROM Buckets
- Return the unique items matching the query criteria: - SELECT DISTINCT OwnerId FROM Buckets
- Summarize data: - SELECT OwnerId, MAX(AnnualRevenue) FROM Buckets GROUP BY OwnerId- See Aggregate Functions below for details. 
- Retrieve data from multiple tables. - SELECT Customers.ContactName, Orders.OrderDate FROM Customers, Orders WHERE Customers.CustomerId=Orders.CustomerId- See JOIN Queries below for details. 
- Sort a result set in ascending order: - SELECT Name, OwnerId FROM Buckets ORDER BY OwnerId ASC
- Restrict a result set to the specified number of rows: - SELECT Name, OwnerId FROM Buckets LIMIT 10
- Parameterize a query to pass in inputs at execution time. This enables you to create prepared statements and mitigate SQL injection attacks. - SELECT * FROM Buckets WHERE Name = @param
Aggregate Functions
COUNT
Returns the number of rows matching the query criteria.
SELECT COUNT(*) FROM Buckets WHERE Name = 'TestBucket'
COUNT(DISTINCT)
Returns the number of distinct, non-null field values matching the query criteria.
SELECT COUNT(DISTINCT Name) AS DistinctValues FROM Buckets WHERE Name = 'TestBucket'
AVG
Returns the average of the column values.
SELECT OwnerId, AVG(AnnualRevenue) FROM Buckets WHERE Name = 'TestBucket'  GROUP BY OwnerId
MIN
Returns the minimum column value.
SELECT MIN(AnnualRevenue), OwnerId FROM Buckets WHERE Name = 'TestBucket' GROUP BY OwnerId
MAX
Returns the maximum column value.
SELECT OwnerId, MAX(AnnualRevenue) FROM Buckets WHERE Name = 'TestBucket' GROUP BY OwnerId
SUM
Returns the total sum of the column values.
SELECT SUM(AnnualRevenue) FROM Buckets WHERE Name = 'TestBucket'
JOIN Queries
The Provider for Wasabi supports standard SQL joins like the following examples.
Inner Join
An inner join selects only rows from both tables that match the join condition:
SELECT Customers.ContactName, Orders.OrderDate FROM Customers, Orders WHERE Customers.CustomerId=Orders.CustomerId
Left Join
A left join selects all rows in the FROM table and only matching rows in the JOIN table:
SELECT Customers.ContactName, Orders.OrderDate FROM Customers LEFT OUTER JOIN Orders ON Customers.CustomerId=Orders.CustomerId
Date Literal Functions
The following date literal functions can be used to filter date fields using relative intervals. Note that while the <, >, and = operators are supported for these functions, <= and >= are not.
L_TODAY()
The current day.
SELECT * FROM MyTable WHERE MyDateField = L_TODAY()
L_YESTERDAY()
The previous day.
SELECT * FROM MyTable WHERE MyDateField = L_YESTERDAY()
L_TOMORROW()
The following day.
SELECT * FROM MyTable WHERE MyDateField = L_TOMORROW()
L_LAST_WEEK()
Every day in the preceding week.
SELECT * FROM MyTable WHERE MyDateField = L_LAST_WEEK()
L_THIS_WEEK()
Every day in the current week.
SELECT * FROM MyTable WHERE MyDateField = L_THIS_WEEK()
L_NEXT_WEEK()
Every day in the following week.
SELECT * FROM MyTable WHERE MyDateField = L_NEXT_WEEK()
Also available:
- L_LAST/L_THIS/L_NEXT MONTH 
- L_LAST/L_THIS/L_NEXT QUARTER 
- L_LAST/L_THIS/L_NEXT YEAR 
L_LAST_N_DAYS(n)
The previous n days, excluding the current day.
SELECT * FROM MyTable WHERE MyDateField = L_LAST_N_DAYS(3)
L_NEXT_N_DAYS(n)
The following n days, including the current day.
SELECT * FROM MyTable WHERE MyDateField = L_NEXT_N_DAYS(3)
Also available:
- L_LAST/L_NEXT_90_DAYS 
L_LAST_N_WEEKS(n)
Every day in every week, starting n weeks before current week, and ending in the previous week.
SELECT * FROM MyTable WHERE MyDateField = L_LAST_N_WEEKS(3)
L_NEXT_N_WEEKS(n)
Every day in every week, starting the following week, and ending n weeks in the future.
SELECT * FROM MyTable WHERE MyDateField = L_NEXT_N_WEEKS(3)
Also available:
- L_LAST/L_NEXT_N_MONTHS(n) 
- L_LAST/L_NEXT_N_QUARTERS(n) 
- L_LAST/L_NEXT_N_YEARS(n) 
Last updated
