From e1fd1f7ddf26cc8d04d69e9a7ff91375b4164498 Mon Sep 17 00:00:00 2001 From: Dino Lozina Date: Wed, 21 Dec 2022 15:05:59 +0100 Subject: [PATCH 1/2] Added new SQL querries --- docs/queryworkers/sql/advanced-commands.md | 120 +++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 docs/queryworkers/sql/advanced-commands.md diff --git a/docs/queryworkers/sql/advanced-commands.md b/docs/queryworkers/sql/advanced-commands.md new file mode 100644 index 0000000000..eb29e68a62 --- /dev/null +++ b/docs/queryworkers/sql/advanced-commands.md @@ -0,0 +1,120 @@ +--- +sidebar_position: 10 +title: Advanced SQL Queries +--- + +Case-sensitivity is supported for attribute names using `""`. +Case-sensitive collections names can be used as well. + +Example: + +```sql +SELECT "CaseSens" FROM case_sens; +``` + +Macrometa SQL has full support for `left outer join`. + +Example: + +```sql +SELECT category.name, avg(film.length) +FROM film +LEFT OUTER JOIN film_category ON (film.film_id= film_category.film_id) +LEFT OUTER JOIN category ON (film_category.category_id = category.category_id) +GROUP BY category.name +ORDER BY avg(film.length) DESC +``` + +`WHERE...EXISTS` operators also supported. It has two variants: +- `WHERE EXISTS` +- `WHERE NOT EXISTS` +Both variants can be used to check subquery result. + +Example: + +```sql +SELECT inventory.inventory_id +FROM inventory JOIN store ON (inventory.store_id = store.store_id) +JOIN film ON (inventory.film_id = film.film_id) +JOIN rental ON (inventory.inventory_id = rental.inventory_id) +WHERE film.title = 'Academy Dinosaur' +AND store.store_id = 1 +AND NOT EXISTS ( +SELECT * +FROM rental +WHERE rental.inventory_id = inventory.inventory_id +AND rental.return_date IS NULL) +``` + +`HAVING` clause is supported. + +Example: + +```sql +SELECT inventory.inventory_id +FROM inventory JOIN store ON (inventory.store_id = store.store_id) +JOIN film ON (inventory.film_id = film.film_id) +JOIN rental ON (inventory.inventory_id = rental.inventory_id) +WHERE film.title = 'Academy Dinosaur' +AND store.store_id = 1 +AND NOT EXISTS ( +SELECT * +FROM rental +WHERE rental.inventory_id = inventory.inventory_id +AND rental.return_date IS NULL) +``` + +:::note +Users can't use `HAVING` clause with subqueries. +::: + +Macrometa SQL supports following functions: +- STDDEV +- STDDEV_POP +- STDDEV_SAMP +- VAR_POP +- VAR_SAMP +- MEDIAN +- PERCENTILE +- PERCENTILE_CONT + +:::note +Users can use mathematical functions such as degrees and logarithm with arbitrary base. +::: + +Examples: + +```sql +SELECT fl.title, FLOOR(fl.length/2.34) fl, fl.length/2.34 nfl, fl.length +FROM film AS fl; +``` + +```sql +SELECT fl.title, FLOOR(fl.length/2.34) fl, ROUND(fl.length/2.34) rnd, +fl.length/2.34 nfl, fl.length, LOG(fl.length, 2) lg2, DEGREES(pi()) pi, +DEGREES(pi()/4) deg45 +FROM film AS fl; +``` + +```sql +SELECT STDDEV(fl.length) div, VAR_POP(fl.length) var +FROM film AS fl; +``` + +:::note +Percentile function is no **aggregation function**. We can't use it in groupings in the similar manner `STDDEV` and `VAR_POP`. +::: + +Example on how to use percentile function: + +```sql +select PERCENTILE((select fl.length from film as fl), 0.5) med; +``` + +Absolute value operator is supported. + +Example: + +```sql +SELECT @ -123.45; +``` \ No newline at end of file From 7c643a5013fea6d6b9707c3e210c916c10d2e16d Mon Sep 17 00:00:00 2001 From: Dino Lozina Date: Fri, 23 Dec 2022 17:01:48 +0100 Subject: [PATCH 2/2] Added headings --- docs/queryworkers/sql/advanced-commands.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/queryworkers/sql/advanced-commands.md b/docs/queryworkers/sql/advanced-commands.md index eb29e68a62..4a1d4ffbdf 100644 --- a/docs/queryworkers/sql/advanced-commands.md +++ b/docs/queryworkers/sql/advanced-commands.md @@ -3,6 +3,7 @@ sidebar_position: 10 title: Advanced SQL Queries --- +## Case Sensitivity Case-sensitivity is supported for attribute names using `""`. Case-sensitive collections names can be used as well. @@ -12,6 +13,7 @@ Example: SELECT "CaseSens" FROM case_sens; ``` +## Join Support Macrometa SQL has full support for `left outer join`. Example: @@ -25,6 +27,7 @@ GROUP BY category.name ORDER BY avg(film.length) DESC ``` +## WHERE and EXISTS operators `WHERE...EXISTS` operators also supported. It has two variants: - `WHERE EXISTS` - `WHERE NOT EXISTS` @@ -46,6 +49,7 @@ WHERE rental.inventory_id = inventory.inventory_id AND rental.return_date IS NULL) ``` +## HAVING clause `HAVING` clause is supported. Example: @@ -68,6 +72,7 @@ AND rental.return_date IS NULL) Users can't use `HAVING` clause with subqueries. ::: +## SQL Functions Macrometa SQL supports following functions: - STDDEV - STDDEV_POP