Update SELECT wiki with set operators.

This commit is contained in:
go-jet 2019-07-02 10:31:52 +02:00
parent ab0f790bc3
commit 3e7277015d
2 changed files with 49 additions and 15 deletions

View file

@ -14,6 +14,7 @@ Jet enables writing type safe SQL queries in Go, and has ability to convert data
- [Lets write some SQL queries in Go](#lets-write-some-sql-queries-in-go) - [Lets write some SQL queries in Go](#lets-write-some-sql-queries-in-go)
- [Benefits](#benefits) - [Benefits](#benefits)
- [Versioning](#versioning) - [Versioning](#versioning)
## Features ## Features
* TODO * TODO

View file

@ -2,12 +2,35 @@
SELECT statement is used to retrieve records from one or more tables in PostgreSQL. SELECT statement is used to retrieve records from one or more tables in PostgreSQL.
More about SELECT statement in postgres can be found at: https://www.postgresql.org/docs/11/sql-select.html More about SELECT statement in postgres can be found at: https://www.postgresql.org/docs/11/sql-select.html
Following clauses are supported:
- SELECT(expressions...) - expressions to form output rows of the SELECT statement.
- DISTINCT() - remove all duplicate rows from result set
- FROM(tableSource...) - specifies one or more source tables for the SELECT.
- WHERE(condition) - only rows for which condition returns true will be selected.
- GROUP BY(groupingElement, ...) - will condense into a single row all selected rows that share the same values for the grouped expressions.
- HAVING(condition) - eliminates group rows that do not satisfy the condition
- ORDER BY(orderBy, ...) - causes the result rows to be sorted according to the specified expression(s)
- LIMIT(count) - specifies the maximum number of rows to return
- OFFSET(start) - specifies the number of rows to skip before starting to return rows
- FOR(lockMode) - how SELECT will lock rows as they are obtained from the table
Lock mode can be:
- jet.UPDATE()
- jet.NO_KEY_UPDATE()
- jet.SHARE()
- jet.KEY_SHARE()
## SELECT statement clauses Lock mode can be extended with following clauses:
- NOWAIT()
- SKIP_LOCKED()
- UNION(select) / UNION_ALL(select) - computes the set union of the rows returned by the involved SELECT statements
- INTERSECT(select) / INTERSECT_ALL(select) - computes the set intersection of the rows returned by the involved SELECT statements
- EXCEPT(select) / EXCEPT_ALL(select) - computes the set of rows that are in the result of the left SELECT statement but not in the result of the right one
Following clauses are supported - SELECT, DISTINCT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, OFFSET and FOR.
_This list might be extended with feature Jet releases._ _This list might be extended with feature Jet releases._
### Examples per clause
##### 1. SELECT clause ##### 1. SELECT clause
Sample SELECT clause written in Go: Sample SELECT clause written in Go:
@ -125,16 +148,6 @@ OFFSET 11
##### 9. FOR clause ##### 9. FOR clause
Lock mode can be:
- jet.UPDATE()
- jet.NO_KEY_UPDATE()
- jet.SHARE()
- jet.KEY_SHARE()
Lock mode has following clauses:
- NOWAIT()
- SKIP_LOCKED()
``` ```
Go: Go:
.FOR(jet.NO_KEY_UPDATE().SKIP_LOCKED()) .FOR(jet.NO_KEY_UPDATE().SKIP_LOCKED())
@ -143,11 +156,31 @@ SQL:
FOR NO KEY UPDATE SKIP LOCKED FOR NO KEY UPDATE SKIP LOCKED
``` ```
##### 10. Set clauses (UNION, UNION_ALL, INTERSECT, INTERSECT_ALL, EXCEPT, EXCEPT_ALL)
```
Go:
SELECT(Payment.Amount).FROM(Payment)
UNION_ALL(SELECT(Payment.Amount).FROM(Payment))
Sql:
(
(
SELECT payment.amount AS "payment.amount"
FROM dvds.payment
)
UNION
(
SELECT payment.amount AS "payment.amount"
FROM dvds.payment
)
);
```
### Two forms of select statements in Jet ### Two forms of select statements in Jet
#### 1. Classical select statement #### 1. Classical select statement
Columns selected are before tables selected Columns selected are before table source selected
``` ```
SELECT( SELECT(
Payment.AllColumns, Payment.AllColumns,
@ -160,7 +193,7 @@ LIMIT(30)
``` ```
#### 2. Jet select statement #### 2. Jet select statement
Joined tables(or just one) are before columns selected. There is no FROM. Table sources are before columns selected. There is no FROM.
``` ```
Payment. Payment.
INNER_JOIN(Customer, Payment.CustomerID.EQ(Customer.CustomerID)) INNER_JOIN(Customer, Payment.CustomerID.EQ(Customer.CustomerID))