inner join

Syntax

select column_name(s) from leftTable inner join rightTable on leftTable.matchingCol=rightTable.rightMatchingCol

or

select column_name(s)
from table1 inner join table2
on table1.column_name=table2.column_name and [filter]

Arguments

filter is condition expression(s) used as filter condition(s) for the join. Use "and" or "or" to join multiple conditions.

Details

Return only the rows that have equivalent values for the matching columns. This function returns the same result as equi join.

Note:

  1. You can use and to combine multiple conditions for a table join.

  2. It cannot be used with the keyword update.

  3. If the left table is not a DFS table, its right table cannot be a DFS table either.

Examples

Example 1. Inner join two tables with no common column names except the matching column(s)

t1= table(1 2 3 3 as id, 7.8 4.6 5.1 0.1 as value)
t2 = table(5 3 1 as id, 300 500 800 as qty);
select id, value, qty from t1 inner join t2 on t1.id=t2.id
id value qty
1 7.8 800
3 5.1 500
3 0.1 500
select id, value, qty from t1 inner join t2 on t1.id=t2.id where id=3
id value qty
3 5.1 500
3 0.1 500

Example 2. Inner join two tables with common variables that are not the matching column(s)

t3 = table(1 2 3 3 as id, 7.8 4.6 5.1 0.1 as value, 64 73 52 66 as x);
t4 = table(5 3 1 as id,  300 500 800 as qty, 44 66 88 as x) ;
select id, value, qty, x from t3 inner join t4 on t3.id=t4.id
id value qty x
1 7.8 800 64
3 5.1 500 52
3 0.1 500 66

If you do not specify which table the columns "value" and "qty" come from, the system will first locate a column in the left table. If it is not in the left table, then the system will locate it in the right table.

select id, value, qty, t4.x from t3 inner join t4 on t3.id=t4.id
id value qty x
1 7.8 800 88
3 5.1 500 52
3 0.1 500 66

Example 3. Multiple join columns:

select id, value, qty, x from t3 inner join t4 on t3.id=t4.id and t3.x=t4.x
id value qty x
3 0.1 500 66

Example 4. Inner join DFS tables:

dbName1="dfs://sql_inner_join"
if(existsDatabase(dbName1)){
  dropDatabase(dbName1)
}
db1=database(dbName1, RANGE, 1 30 70 101)
t1=table("A"+string(1..100) as sym, 1..100 as val)
pt1=db1.createPartitionedTable(t1, `pt1, `val).append!(t1)
t2=table("A"+string(1..20) as sym, 1..20 as val)
pt2=db1.createPartitionedTable(t2, `pt2, `val).append!(t2)

select * from pt1 inner join pt2 on pt1.val=pt2.val
sym val pt2_sym
A1 1 A1
A2 2 A2
A3 3 A3
A4 4 A4
A5 5 A5
A6 6 A6
A7 7 A7
A8 8 A8
A9 9 A9
A10 10 A10
A11 11 A11
A12 12 A12
A13 13 A13
A14 14 A14
A15 15 A15
A16 16 A16
A17 17 A17
A18 18 A18
A19 19 A19
A20 20 A20

Example 5. Specify filter conditions

t1= table(1 2 3 3 6 8 as id, 7.8 4.6 5.1 0.1 0.5 1.2 as value)
t2 = table(5 3 1 2 6 8 as id, 300 500 800 400 600 700 as qty);
select * from t1 inner join t2 on t1.id=t2.id and t1.id>=3
id value qty
3 5.1 500
3 0.1 500
6 0.5 600
8 1.2 700