Subqueries
Subqueries enable the reuse of results of other queries.
SQreamDB supports relational (also called derived table) subqueries, which appear as SELECT queries as part of a table expression.
SQreamDB also supports Common Table Expressions, which are a form of subquery. With CTEs, a subquery can be named for reuse in a query.
Note
You may include an unlimited number of subqueries within a single SQL statement, and you can also nest subqueries to an unlimited depth
Table Subqueries
The following is an example of table named nba
with the following structure:
CREATE TABLE nba
(
"Name" TEXT,
"Team" TEXT,
"Number" TINYINT,
"Position" TEXT,
"Age" TINYINT,
"Height" TEXT,
"Weight" REAL,
"College" TEXT,
"Salary" FLOAT
);
To see the table contents, click Download nba.csv
:
Name |
Team |
Number |
Position |
Age |
Height |
Weight |
College |
Salary |
---|---|---|---|---|---|---|---|---|
Avery Bradley |
Boston Celtics |
0.0 |
PG |
25.0 |
6-2 |
180.0 |
Texas |
7730337.0 |
Jae Crowder |
Boston Celtics |
99.0 |
SF |
25.0 |
6-6 |
235.0 |
Marquette |
6796117.0 |
John Holland |
Boston Celtics |
30.0 |
SG |
27.0 |
6-5 |
205.0 |
Boston University |
|
R.J. Hunter |
Boston Celtics |
28.0 |
SG |
22.0 |
6-5 |
185.0 |
Georgia State |
1148640.0 |
Jonas Jerebko |
Boston Celtics |
8.0 |
PF |
29.0 |
6-10 |
231.0 |
5000000.0 |
|
Amir Johnson |
Boston Celtics |
90.0 |
PF |
29.0 |
6-9 |
240.0 |
12000000.0 |
|
Jordan Mickey |
Boston Celtics |
55.0 |
PF |
21.0 |
6-8 |
235.0 |
LSU |
1170960.0 |
Kelly Olynyk |
Boston Celtics |
41.0 |
C |
25.0 |
7-0 |
238.0 |
Gonzaga |
2165160.0 |
Terry Rozier |
Boston Celtics |
12.0 |
PG |
22.0 |
6-2 |
190.0 |
Louisville |
1824360.0 |
Scalar Subqueries
The following are examples of scalar subqueries.
Simple Subquery
SELECT
AVG("Age")
FROM
(
SELECT
"Name",
"Team",
"Age"
FROM
nba
WHERE
"Height" > '7-0'
);
avg
---
26
Combining a Subquery with a Join
SELECT
*
FROM
(
SELECT
"Name"
FROM
nba
WHERE
"Height" > '7-0'
) AS t(name),
nba AS n
WHERE
n."Name" = t.name;
name | Name | Team | Number | Position | Age | Height | Weight | College | Salary
-------------------+--------------------+------------------------+--------+----------+-----+--------+--------+------------+---------
Alex Len | Alex Len | Phoenix Suns | 21 | C | 22 | 7-1 | 260 | Maryland | 3807120
Alexis Ajinca | Alexis Ajinca | New Orleans Pelicans | 42 | C | 28 | 7-2 | 248 | \N | 4389607
Boban Marjanovic | Boban Marjanovic | San Antonio Spurs | 40 | C | 27 | 7-3 | 290 | \N | 1200000
Kristaps Porzingis | Kristaps Porzingis | New York Knicks | 6 | PF | 20 | 7-3 | 240 | \N | 4131720
Marc Gasol | Marc Gasol | Memphis Grizzlies | 33 | C | 31 | 7-1 | 255 | \N | 19688000
Meyers Leonard | Meyers Leonard | Portland Trail Blazers | 11 | PF | 24 | 7-1 | 245 | Illinois | 3075880
Roy Hibbert | Roy Hibbert | Los Angeles Lakers | 17 | C | 29 | 7-2 | 270 | Georgetown | 15592217
Rudy Gobert | Rudy Gobert | Utah Jazz | 27 | C | 23 | 7-1 | 245 | \N | 1175880
Salah Mejri | Salah Mejri | Dallas Mavericks | 50 | C | 29 | 7-2 | 245 | \N | 525093
Spencer Hawes | Spencer Hawes | Charlotte Hornets | 0 | PF | 28 | 7-1 | 245 | Washington | 6110034
Tibor Pleiss | Tibor Pleiss | Utah Jazz | 21 | C | 26 | 7-3 | 256 | \N | 2900000
Timofey Mozgov | Timofey Mozgov | Cleveland Cavaliers | 20 | C | 29 | 7-1 | 275 | \N | 4950000
Tyson Chandler | Tyson Chandler | Phoenix Suns | 4 | C | 33 | 7-1 | 240 | \N | 13000000
Walter Tavares | Walter Tavares | Atlanta Hawks | 22 | C | 24 | 7-3 | 260 | \N | 1000000
WITH
subqueries
See Common Table Expressions for more information.
WITH nba_ct AS (
SELECT
"Name",
"Team"
FROM
nba
WHERE
"College" = 'Connecticut'
),
nba_az AS (
SELECT
"Name",
"Team"
FROM
nba
WHERE
"College" = 'Arizona'
)
SELECT
*
FROM
nba_az
JOIN nba_ct ON nba_ct."Team" = nba_az."Team";
Name | Team | name0 | team0
----------------+-----------------+----------------+----------------
Stanley Johnson | Detroit Pistons | Andre Drummond | Detroit Pistons
Aaron Gordon | Orlando Magic | Shabazz Napier | Orlando Magic