Update SELECT wiki with set operators.
This commit is contained in:
parent
ab0f790bc3
commit
3e7277015d
2 changed files with 49 additions and 15 deletions
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue