You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2020/10/26 03:56:07 UTC

[shardingsphere] branch master updated: add table UT (#7872)

This is an automated email from the ASF dual-hosted git repository.

panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 49a6ca0  add table UT (#7872)
49a6ca0 is described below

commit 49a6ca05757603395b842050df1063e4d4fe0d4a
Author: JingShang Lu <lu...@apache.org>
AuthorDate: Mon Oct 26 11:55:39 2020 +0800

    add table UT (#7872)
    
    * add table UT
    
    * delete commont
    
    * fix
    
    * delete redundant blank line
---
 .../asserts/segment/table/TableAssert.java         |   98 +-
 .../statement/dml/impl/SelectStatementAssert.java  |   10 +
 .../segment/impl/ExpectedTableReference.java       |   41 -
 .../segment/impl/table/ExpectedJoinTable.java      |    7 +-
 .../{ExpectedTables.java => ExpectedTable.java}    |   11 +-
 .../segment/impl/table/ExpectedTableFactor.java    |   43 -
 .../ddl/CreateIndexStatementTestCase.java          |    4 +-
 .../statement/dml/SelectStatementTestCase.java     |   13 +-
 .../src/main/resources/case/ddl/create-index.xml   |   76 +-
 .../src/main/resources/case/dml/insert.xml         |   88 +-
 .../src/main/resources/case/dml/replace.xml        |   37 +-
 .../main/resources/case/dml/select-aggregate.xml   |  100 +-
 .../main/resources/case/dml/select-expression.xml  |   40 +-
 .../main/resources/case/dml/select-group-by.xml    |  112 +-
 .../src/main/resources/case/dml/select-join.xml    |   49 +-
 .../src/main/resources/case/dml/select-or.xml      |  124 +-
 .../main/resources/case/dml/select-order-by.xml    |  128 +-
 .../dml/select-pagination-group-by-order-by.xml    | 1852 ++++++++++----------
 .../main/resources/case/dml/select-pagination.xml  | 1711 +++++++++---------
 .../main/resources/case/dml/select-sub-query.xml   |  129 +-
 .../src/main/resources/case/dml/select.xml         |  794 ++++-----
 21 files changed, 2573 insertions(+), 2894 deletions(-)

diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/table/TableAssert.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/table/TableAssert.java
index 56ea5a8..08ba69e 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/table/TableAssert.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/table/TableAssert.java
@@ -21,6 +21,8 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.DeleteMultiTableSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.JoinTableSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SubqueryTableSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableSegment;
@@ -28,18 +30,19 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAs
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.SQLSegmentAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.schema.SchemaAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.dml.impl.SelectStatementAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedTable;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSimpleTable;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSimpleTableOwner;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedJoinTable;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSubqueryTable;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedTables;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSimpleTableOwner;
 
 import java.util.Collection;
 import java.util.List;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
 
 /**
  * Table assert.
@@ -54,28 +57,20 @@ public final class TableAssert {
      * @param actual actual tables
      * @param expected expected tables
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, final Collection<TableSegment> actual, final ExpectedTables expected) {
-        assertThat(assertContext.getText("Tables size assertion error: "), actual.size(), is(expected.getSimpleTables().size() + expected.getSubqueryTables().size()));
-        assertSimpleTableSegment(assertContext, actual, expected);
-        assertSubqueryTableSegment(assertContext, actual, expected);
-    }
-    
-    /**
-     * Assert actual table segments is correct with expected tables.
-     * 
-     * @param assertContext assert context
-     * @param actual actual tables
-     * @param expected expected tables
-     */
-    public static void assertIs(final SQLCaseAssertContext assertContext, final Collection<SimpleTableSegment> actual, final List<ExpectedSimpleTable> expected) {
-        assertThat(assertContext.getText("Tables size assertion error: "), actual.size(), is(expected.size()));
-        int count = 0;
-        for (SimpleTableSegment each : actual) {
-            assertIs(assertContext, each, expected.get(count));
-            count++;
+    public static void assertIs(final SQLCaseAssertContext assertContext, final TableSegment actual, final ExpectedTable expected) {
+        if (actual instanceof JoinTableSegment) {
+            assertIs(assertContext, (JoinTableSegment) actual, expected.getJoinTable());
+        } else if (actual instanceof SimpleTableSegment) {
+            assertIs(assertContext, (SimpleTableSegment) actual, expected.getSimpleTable());
+        } else if (actual instanceof SubqueryTableSegment) {
+            assertIs(assertContext, (SubqueryTableSegment) actual, expected.getSubqueryTable());
+        } else if (actual instanceof DeleteMultiTableSegment) {
+            return;
+        } else {
+            return;
         }
     }
-    
+
     /**
      * Assert actual table segment is correct with expected table.
      *
@@ -98,7 +93,7 @@ public final class TableAssert {
         assertThat(assertContext.getText("Table end delimiter assertion error: "), actual.getTableName().getIdentifier().getQuoteCharacter().getEndDelimiter(), is(expected.getEndDelimiter()));
         SQLSegmentAssert.assertIs(assertContext, actual, expected);
     }
-    
+
     /**
      * Assert subquery expression.
      *
@@ -109,10 +104,36 @@ public final class TableAssert {
     public static void assertIs(final SQLCaseAssertContext assertContext, final SubqueryTableSegment actual, final ExpectedSubqueryTable expected) {
         SelectStatementAssert.assertIs(assertContext, actual.getSubquery().getSelect(), expected.getSubquery().getSelectTestCases());
         assertThat(assertContext.getText("Table alias assertion error: "), actual.getAlias().orElse(null), is(expected.getAlias()));
-        // TODO assert start index, stop index and sub select statement.
-        //        SQLSegmentAssert.assertIs(assertContext, actual, expected);
     }
-    
+
+    /**
+     * Assert join table.
+     *
+     * @param assertContext assert context
+     * @param actual actual JoinTableSegment
+     * @param expected expected ExpectedJoinTable
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final JoinTableSegment actual, final ExpectedJoinTable expected) {
+        TableAssert.assertIs(assertContext, actual.getLeft(), expected.getLeft());
+        TableAssert.assertIs(assertContext, actual.getRight(), expected.getRight());
+    }
+
+    /**
+     * Assert actual table segments is correct with expected tables.
+     *
+     * @param assertContext assert context
+     * @param actual actual tables
+     * @param expected expected tables
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final Collection<SimpleTableSegment> actual, final List<ExpectedSimpleTable> expected) {
+        assertThat(assertContext.getText("Tables size assertion error: "), actual.size(), is(expected.size()));
+        int count = 0;
+        for (SimpleTableSegment each : actual) {
+            assertIs(assertContext, each, expected.get(count));
+            count++;
+        }
+    }
+
     /**
      * Assert actual table segment is correct with expected table owner.
      *
@@ -122,29 +143,10 @@ public final class TableAssert {
      */
     public static void assertOwner(final SQLCaseAssertContext assertContext, final SimpleTableSegment actual, final ExpectedSimpleTableOwner expected) {
         assertThat(assertContext.getText("Owner name assertion error: "), actual.getTableName().getIdentifier().getValue(), is(expected.getName()));
-        assertThat(assertContext.getText("Owner name start delimiter assertion error: "), 
+        assertThat(assertContext.getText("Owner name start delimiter assertion error: "),
                 actual.getTableName().getIdentifier().getQuoteCharacter().getStartDelimiter(), is(expected.getStartDelimiter()));
         assertThat(assertContext.getText("Owner name end delimiter assertion error: "), actual.getTableName().getIdentifier().getQuoteCharacter().getEndDelimiter(), is(expected.getEndDelimiter()));
         SQLSegmentAssert.assertIs(assertContext, actual, expected);
     }
-    
-    private static void assertSimpleTableSegment(final SQLCaseAssertContext assertContext, final Collection<TableSegment> actual, final ExpectedTables expected) {
-        int count = 0;
-        for (TableSegment each : actual) {
-            if (each instanceof SimpleTableSegment) {
-                assertIs(assertContext, (SimpleTableSegment) each, expected.getSimpleTables().get(count));
-            }
-            count++;
-        }
-    }
-    
-    private static void assertSubqueryTableSegment(final SQLCaseAssertContext assertContext, final Collection<TableSegment> actual, final ExpectedTables expected) {
-        int count = 0;
-        for (TableSegment each : actual) {
-            if (each instanceof SubqueryTableSegment) {
-                assertIs(assertContext, (SubqueryTableSegment) each, expected.getSubqueryTables().get(count));
-            }
-            count++;
-        }
-    }
+
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dml/impl/SelectStatementAssert.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dml/impl/SelectStatementAssert.java
index 5404f3b..fb75b8e 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dml/impl/SelectStatementAssert.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dml/impl/SelectStatementAssert.java
@@ -28,6 +28,7 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.g
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.limit.LimitClauseAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.orderby.OrderByClauseAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.projection.ProjectionAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.table.TableAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.where.WhereClauseAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.dml.SelectStatementTestCase;
 
@@ -55,12 +56,21 @@ public final class SelectStatementAssert {
         assertGroupByClause(assertContext, actual, expected);
         assertOrderByClause(assertContext, actual, expected);
         assertLimitClause(assertContext, actual, expected);
+        assertTable(assertContext, actual, expected);
 //        TODO support table assert
     }
     
     private static void assertProjection(final SQLCaseAssertContext assertContext, final SelectStatement actual, final SelectStatementTestCase expected) {
         ProjectionAssert.assertIs(assertContext, actual.getProjections(), expected.getProjections());
     }
+
+    private static void assertTable(final SQLCaseAssertContext assertContext, final SelectStatement actual, final SelectStatementTestCase expected) {
+        if (null != expected.getFrom()) {
+            TableAssert.assertIs(assertContext, actual.getFrom(), expected.getFrom());
+        } else {
+            assertFalse(assertContext.getText("Actual from should not exist."), null != actual.getFrom());
+        }
+    }
     
     private static void assertWhereClause(final SQLCaseAssertContext assertContext, final SelectStatement actual, final SelectStatementTestCase expected) {
         if (null != expected.getWhereClause()) {
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/ExpectedTableReference.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/ExpectedTableReference.java
deleted file mode 100644
index c47d0df..0000000
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/ExpectedTableReference.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl;
-
-import lombok.Getter;
-import lombok.Setter;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedDelimiterSQLSegment;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedJoinTable;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedTableFactor;
-
-import javax.xml.bind.annotation.XmlElement;
-import java.util.Collection;
-
-/**
- * Expected TableReference.
- */
-@Getter
-@Setter
-public final class ExpectedTableReference extends AbstractExpectedDelimiterSQLSegment {
-    
-    @XmlElement(name = "table-factor")
-    private ExpectedTableFactor tableFactor;
-    
-    @XmlElement(name = "join-table")
-    private Collection<ExpectedJoinTable> joinTables;
-}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedJoinTable.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedJoinTable.java
index b3b80ce..761cce4 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedJoinTable.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedJoinTable.java
@@ -31,8 +31,11 @@ import javax.xml.bind.annotation.XmlElement;
 @Setter
 public final class ExpectedJoinTable extends AbstractExpectedDelimiterSQLSegment {
     
-    @XmlElement(name = "table-factor")
-    private ExpectedTableFactor tableFactor;
+    @XmlElement(name = "left")
+    private ExpectedTable left;
+
+    @XmlElement(name = "right")
+    private ExpectedTable right;
     
     @XmlElement
     private ExpectedJoinSpecification joinSpecification;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedTables.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedTable.java
similarity index 81%
rename from shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedTables.java
rename to shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedTable.java
index 5f4d4e5..6b7c93f 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedTables.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedTable.java
@@ -22,19 +22,20 @@ import lombok.Setter;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedDelimiterSQLSegment;
 
 import javax.xml.bind.annotation.XmlElement;
-import java.util.LinkedList;
-import java.util.List;
 
 /**
  * Expected tables.
  */
 @Getter
 @Setter
-public final class ExpectedTables extends AbstractExpectedDelimiterSQLSegment {
+public final class ExpectedTable extends AbstractExpectedDelimiterSQLSegment {
     
     @XmlElement(name = "simple-table")
-    private final List<ExpectedSimpleTable> simpleTables = new LinkedList<>();
+    private ExpectedSimpleTable simpleTable;
     
     @XmlElement(name = "subquery-table")
-    private final List<ExpectedSubqueryTable> subqueryTables = new LinkedList<>();
+    private ExpectedSubqueryTable subqueryTable;
+
+    @XmlElement(name = "join-table")
+    private ExpectedJoinTable joinTable;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedTableFactor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedTableFactor.java
deleted file mode 100644
index cecc170..0000000
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedTableFactor.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table;
-
-import lombok.Getter;
-import lombok.Setter;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedDelimiterSQLSegment;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.ExpectedTableReference;
-
-import javax.xml.bind.annotation.XmlElement;
-import java.util.Collection;
-
-/**
- * Expected TableFactor.
- */
-@Getter
-@Setter
-public final class ExpectedTableFactor extends AbstractExpectedDelimiterSQLSegment {
-    
-    @XmlElement
-    private ExpectedSimpleTable table;
-    
-    @XmlElement
-    private ExpectedSubqueryTable subqueryTable;
-    
-    @XmlElement(name = "table-reference")
-    private Collection<ExpectedTableReference> expectedTableReferences;
-}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/ddl/CreateIndexStatementTestCase.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/ddl/CreateIndexStatementTestCase.java
index 4db247b..ed08842 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/ddl/CreateIndexStatementTestCase.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/ddl/CreateIndexStatementTestCase.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domai
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.index.ExpectedIndex;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSimpleTable;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedTable;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
 
 import javax.xml.bind.annotation.XmlElement;
@@ -36,5 +36,5 @@ public final class CreateIndexStatementTestCase extends SQLParserTestCase {
     private ExpectedIndex index;
     
     @XmlElement
-    private ExpectedSimpleTable table;
+    private ExpectedTable table;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dml/SelectStatementTestCase.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dml/SelectStatementTestCase.java
index 26c3e51..cc5822a 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dml/SelectStatementTestCase.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dml/SelectStatementTestCase.java
@@ -19,17 +19,15 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domai
 
 import lombok.Getter;
 import lombok.Setter;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.ExpectedTableReference;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.limit.ExpectedLimitClause;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.orderby.ExpectedOrderByClause;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.predicate.ExpectedWhereClause;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.projection.ExpectedProjections;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedTables;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedTable;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
 
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
-import java.util.List;
 
 /**
  * Select statement test case.
@@ -41,12 +39,9 @@ public final class SelectStatementTestCase extends SQLParserTestCase {
     @XmlAttribute(name = "lock-clause")
     private boolean lockClause;
     
-    @XmlElement(name = "table-reference")
-    private List<ExpectedTableReference> tableReferences;
-    
-    @XmlElement(name = "tables")
-    private final ExpectedTables tables = new ExpectedTables();
-    
+    @XmlElement(name = "from")
+    private ExpectedTable from;
+
     @XmlElement(name = "projections")
     private final ExpectedProjections projections = new ExpectedProjections();
     
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/ddl/create-index.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/ddl/create-index.xml
index 66c932a..005f1db 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/ddl/create-index.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/ddl/create-index.xml
@@ -18,79 +18,117 @@
 
 <sql-parser-test-cases>
     <create-index sql-case-id="create_index">
-        <table name="t_log" start-index="28" stop-index="32" />
+        <table>
+            <simple-table name="t_log" start-index="28" stop-index="32" />
+        </table>
     </create-index>
     
     <create-index sql-case-id="create_unique_index">
-        <table name="t_log" start-index="35" stop-index="39" />
+        <table>
+            <simple-table name="t_log" start-index="35" stop-index="39" />
+        </table>
     </create-index>
     
     <create-index sql-case-id="create_index_with_space">
-        <table name="t_order" start-index="52" stop-index="58" />
+        <table>
+            <simple-table name="t_order" start-index="52" stop-index="58" />
+        </table>
     </create-index>
     
     <create-index sql-case-id="create_index_with_back_quota">
-        <table name="t_order" start-delimiter="`" end-delimiter="`" start-index="30" stop-index="38" />
+        <table>
+            <simple-table name="t_order" start-delimiter="`" end-delimiter="`" start-index="30" stop-index="38" />
+        </table>
     </create-index>
     
     <create-index sql-case-id="create_composite_index">
-        <table name="t_order" start-index="28" stop-index="34" />
+        <table>
+            <simple-table name="t_order" start-index="28" stop-index="34" />
+        </table>
     </create-index>
     
     <create-index sql-case-id="create_btree_index">
-        <table name="t_order" start-index="28" stop-index="34" />
+        <table>
+            <simple-table name="t_order" start-index="28" stop-index="34" />
+        </table>
     </create-index>
     
     <create-index sql-case-id="create_index_with_quota">
-        <table name="t_order" start-delimiter="&quot;" end-delimiter="&quot;" start-index="30" stop-index="38" />
+        <table>
+            <simple-table name="t_order" start-delimiter="&quot;" end-delimiter="&quot;" start-index="30" stop-index="38" />
+        </table>
     </create-index>
     
     <create-index sql-case-id="create_index_with_function">
-        <table name="t_order" start-index="33" stop-index="39" />
+        <table>
+            <simple-table name="t_order" start-index="33" stop-index="39" />
+        </table>
     </create-index>
     
     <create-index sql-case-id="create_index_with_double_quota">
-        <table name="t_order" start-delimiter="&quot;" end-delimiter="&quot;" start-index="30" stop-index="38" />
+        <table>
+            <simple-table name="t_order" start-delimiter="&quot;" end-delimiter="&quot;" start-index="30" stop-index="38" />
+        </table>
     </create-index>
     
     <create-index sql-case-id="create_index_with_double_quota_and_uescape">
         <!-- FIXME table index error -->
-        <table name="u&amp;t_order" start-index="58" stop-index="68" />
+        <table>
+            <simple-table name="u&amp;t_order" start-index="58" stop-index="68" />
+        </table>
     </create-index>
     
     <create-index sql-case-id="create_index_concurrently">
-        <table name="t_order" start-index="41" stop-index="47" />
+        <table>
+            <simple-table name="t_order" start-index="41" stop-index="47" />
+        </table>
     </create-index>
     
     <create-index sql-case-id="create_index_if_not_exists">
-        <table name="t_order" start-index="42" stop-index="48" />
+        <table>
+            <simple-table name="t_order" start-index="42" stop-index="48" />
+        </table>
     </create-index>
     
     <create-index sql-case-id="create_index_using_btree">
-        <table name="t_order" start-index="28" stop-index="34" />
+        <table>
+            <simple-table name="t_order" start-index="28" stop-index="34" />
+        </table>
     </create-index>
     
     <create-index sql-case-id="create_index_with_bracket">
-        <table name="t_order" start-delimiter="[" end-delimiter="]" start-index="30" stop-index="38" />
+        <table>
+            <simple-table name="t_order" start-delimiter="[" end-delimiter="]" start-index="30" stop-index="38" />
+        </table>
     </create-index>
 
     <create-index sql-case-id="create_index_with_no_default_fill_factor">
-        <table name="t_order" start-index="35" stop-index="41" />
+        <table>
+            <simple-table name="t_order" start-index="35" stop-index="41" />
+        </table>
     </create-index>
 
     <create-index sql-case-id="create_index_with_tablespace">
-        <table name="t_order" start-index="25" stop-index="31" />
+        <table>
+            <simple-table name="t_order" start-index="25" stop-index="31" />
+        </table>
     </create-index>
 
     <create-index sql-case-id="create_index_using_gist">
-        <table name="t_order" start-index="25" stop-index="31" />
+        <table>
+            <simple-table name="t_order" start-index="25" stop-index="31" />
+        </table>
     </create-index>
 
     <create-index sql-case-id="create_index_with_concurrently">
-        <table name="t_order" start-index="50" stop-index="56" />
+        <table>
+            <simple-table name="t_order" start-index="50" stop-index="56" />
+        </table>
     </create-index>
 
     <create-index sql-case-id="create_gin_index">
-        <table name="t_order" start-index="24" stop-index="30" />
+        <table>
+            <simple-table name="t_order" start-index="24" stop-index="30" />
+        </table>
     </create-index>
 </sql-parser-test-cases>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/insert.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/insert.xml
index 664392a..318bbc3 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/insert.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/insert.xml
@@ -1157,11 +1157,9 @@
             <column name="status" start-index="40" stop-index="45" />
         </columns>
         <select>
-            <table-reference>
-                <table-factor>
-                    <table name="t_order" start-index="86" stop-index="92" />
-                </table-factor>
-            </table-reference>
+            <from>
+                <simple-table name="t_order" start-index="86" stop-index="92" />
+            </from>
             <projections start-index="55" stop-index="79">
                 <column-projection name="order_id" start-index="55" stop-index="62" />
                 <column-projection name="user_id" start-index="65" stop-index="71" />
@@ -1186,11 +1184,9 @@
         <table name="t_order" start-index="12" stop-index="18" />
         <columns start-index="19" stop-index="19" />
         <select>
-            <table-reference>
-                <table-factor>
-                    <table name="t_order" start-index="58" stop-index="64" />
-                </table-factor>
-            </table-reference>
+            <from>
+                <simple-table name="t_order" start-index="58" stop-index="64" />
+            </from>
             <projections start-index="27" stop-index="51">
                 <column-projection name="order_id" start-index="27" stop-index="34" />
                 <column-projection name="user_id" start-index="37" stop-index="43" />
@@ -1221,11 +1217,9 @@
             <column name="creation_date" start-index="61" stop-index="73" />
         </columns>
         <select>
-            <table-reference>
-                <table-factor>
-                    <table name="t_order_item" start-index="139" stop-index="150" />
-                </table-factor>
-            </table-reference>
+            <from>
+                <simple-table name="t_order_item" start-index="139" stop-index="150" />
+            </from>
             <projections start-index="83" stop-index="132">
                 <column-projection name="item_id" start-index="83" stop-index="89" />
                 <column-projection name="order_id" start-index="92" stop-index="99" />
@@ -1257,11 +1251,9 @@
             <column name="creation_date" start-index="52" stop-index="64" />
         </columns>
         <select>
-            <table-reference>
-                <table-factor>
-                    <table name="t_order_item" start-index="121" stop-index="132" />
-                </table-factor>
-            </table-reference>
+            <from>
+                <simple-table name="t_order_item" start-index="121" stop-index="132" />
+            </from>
             <projections start-index="74" stop-index="114">
                 <column-projection name="order_id" start-index="74" stop-index="81" />
                 <column-projection name="user_id" start-index="84" stop-index="90" />
@@ -1291,11 +1283,9 @@
             <column name="status" start-index="39" stop-index="44" />
         </columns>
         <select>
-            <table-reference>
-                <table-factor>
-                    <table name="t_order" start-index="85" stop-index="91" />
-                </table-factor>
-            </table-reference>
+            <from>
+                <simple-table name="t_order" start-index="85" stop-index="91" />
+            </from>
             <projections start-index="54" stop-index="78">
                 <column-projection name="order_id" start-index="54" stop-index="61" />
                 <column-projection name="user_id" start-index="64" stop-index="70" />
@@ -1362,11 +1352,9 @@
                 </columns>
                 <subquery-expression>
                     <select>
-                        <table-reference>
-                            <table-factor>
-                                <table name="t_order" start-index="63" stop-index="69" />
-                            </table-factor>
-                        </table-reference>
+                        <from>
+                            <simple-table name="t_order" start-index="63" stop-index="69" />
+                        </from>
                         <projections start-index="40" stop-index="56">
                             <column-projection name="order_id" start-index="40" stop-index="47" />
                             <column-projection name="user_id" start-index="50" stop-index="56" />
@@ -1381,11 +1369,9 @@
             <column name="user_id" start-index="103" stop-index="109"/>
         </columns>
         <select>
-            <table-reference>
-                <table-factor>
-                    <table name="cte" start-index="142" stop-index="144" />
-                </table-factor>
-            </table-reference>
+            <from>
+                <simple-table name="cte" start-index="142" stop-index="144" />
+            </from>
             <projections start-index="119" stop-index="135">
                 <column-projection name="order_id" start-index="119" stop-index="126" />
                 <column-projection name="user_id" start-index="129" stop-index="135" />
@@ -1398,11 +1384,9 @@
             <common-table-expression name="cte" start-index="5" stop-index="50">
                 <subquery-expression>
                     <select>
-                        <table-reference>
-                            <table-factor>
-                                <table name="t_order" start-index="43" stop-index="49" />
-                            </table-factor>
-                        </table-reference>
+                        <from>
+                            <simple-table name="t_order" start-index="43" stop-index="49" />
+                        </from>
                         <projections start-index="20" stop-index="36">
                             <column-projection name="order_id" start-index="20" stop-index="27" />
                             <column-projection name="user_id" start-index="30" stop-index="36" />
@@ -1417,11 +1401,9 @@
             <column name="user_id" start-index="83" stop-index="89"/>
         </columns>
         <select>
-            <table-reference>
-                <table-factor>
-                    <table name="cte" start-index="122" stop-index="124" />
-                </table-factor>
-            </table-reference>
+            <from>
+                <simple-table name="cte" start-index="122" stop-index="124" />
+            </from>
             <projections start-index="99" stop-index="115">
                 <column-projection name="order_id" start-index="99" stop-index="106" />
                 <column-projection name="user_id" start-index="109" stop-index="115" />
@@ -1475,11 +1457,9 @@
             <column name="user_id" start-index="34" stop-index="40" />
         </columns>
         <select>
-            <table-reference>
-                <table-factor>
-                    <table name="t_order" start-index="73" stop-index="79" />
-                </table-factor>
-            </table-reference>
+            <from>
+                <simple-table name="t_order" start-index="73" stop-index="79" />
+            </from>
             <projections start-index="50" stop-index="66">
                 <column-projection name="order_id" start-index="50" stop-index="57" />
                 <column-projection name="user_id" start-index="60" stop-index="66" />
@@ -1494,11 +1474,9 @@
             <column name="user_id" start-index="42" stop-index="48" />
         </columns>
         <select>
-            <table-reference>
-                <table-factor>
-                    <table name="t_order" start-index="81" stop-index="87" />
-                </table-factor>
-            </table-reference>
+            <from>
+                <simple-table name="t_order" start-index="81" stop-index="87" />
+            </from>
             <projections start-index="58" stop-index="74">
                 <column-projection name="order_id" start-index="58" stop-index="65" />
                 <column-projection name="user_id" start-index="68" stop-index="74" />
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/replace.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/replace.xml
index b872312..3e5904e 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/replace.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/replace.xml
@@ -841,11 +841,9 @@
             <column name="status" start-index="41" stop-index="46" />
         </columns>
         <select>
-            <table-reference>
-                <table-factor>
-                    <table name="t_order" start-index="87" stop-index="93" />
-                </table-factor>
-            </table-reference>
+            <from>
+                <simple-table name="t_order" start-index="87" stop-index="93" />
+            </from>
             <projections start-index="56" stop-index="80">
                 <column-projection name="order_id" start-index="56" stop-index="63" />
                 <column-projection name="user_id" start-index="66" stop-index="72" />
@@ -870,11 +868,9 @@
         <table name="t_order" start-index="13" stop-index="19" />
         <columns start-index="20" stop-index="20" />
         <select>
-            <table-reference>
-                <table-factor>
-                    <table name="t_order" start-index="59" stop-index="65" />
-                </table-factor>
-            </table-reference>
+            <from>
+                <simple-table name="t_order" start-index="59" stop-index="65" />
+            </from>
             <projections start-index="28" stop-index="52">
                 <column-projection name="order_id" start-index="28" stop-index="35" />
                 <column-projection name="user_id" start-index="38" stop-index="44" />
@@ -905,11 +901,14 @@
             <column name="creation_date" start-index="62" stop-index="74" />
         </columns>
         <select>
-            <table-reference>
-                <table-factor>
-                    <table name="t_order_item" start-index="140" stop-index="151" />
-                </table-factor>
-            </table-reference>
+<!--            <table-reference>-->
+<!--                <table-factor>-->
+<!--                    <table name="t_order_item" start-index="140" stop-index="151" />-->
+<!--                </table-factor>-->
+<!--            </table-reference>-->
+            <from>
+                <simple-table name="t_order_item" start-index="140" stop-index="151" />
+            </from>
             <projections start-index="84" stop-index="133">
                 <column-projection name="item_id" start-index="84" stop-index="90" />
                 <column-projection name="order_id" start-index="93" stop-index="100" />
@@ -941,11 +940,9 @@
             <column name="creation_date" start-index="53" stop-index="65" />
         </columns>
         <select>
-            <table-reference>
-                <table-factor>
-                    <table name="t_order_item" start-index="122" stop-index="133" />
-                </table-factor>
-            </table-reference>
+            <from>
+                <simple-table name="t_order_item" start-index="122" stop-index="133" />
+            </from>
             <projections start-index="75" stop-index="115">
                 <column-projection name="order_id" start-index="75" stop-index="82" />
                 <column-projection name="user_id" start-index="85" stop-index="91" />
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-aggregate.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-aggregate.xml
index a64249a..0a2beb2 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-aggregate.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-aggregate.xml
@@ -18,33 +18,27 @@
 
 <sql-parser-test-cases>
     <select sql-case-id="select_sum">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="40" stop-index="46" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="40" stop-index="46" />
+        </from>
         <projections start-index="7" stop-index="33">
             <aggregation-projection type="SUM" inner-expression="(user_id)" alias="user_id_sum" start-index="7" stop-index="18" />
         </projections>
     </select>
 
     <select sql-case-id="select_count">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="37" stop-index="43" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="37" stop-index="43" />
+        </from>
         <projections start-index="7" stop-index="30">
             <aggregation-projection type="COUNT" alias="orders_count" inner-expression="(*)" start-index="7" stop-index="14" />
         </projections>
     </select>
 
     <select sql-case-id="select_count_with_sub">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="37" stop-index="43" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="37" stop-index="43" />
+        </from>
         <projections start-index="7" stop-index="30">
             <aggregation-projection type="COUNT" alias="orders_count" inner-expression="(*)" start-index="7" stop-index="14" />
         </projections>
@@ -62,11 +56,9 @@
     </select>
 
     <select sql-case-id="select_count_with_sub_with_whitespace">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="37" stop-index="43" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="37" stop-index="43" />
+        </from>
         <projections start-index="7" stop-index="30">
             <aggregation-projection type="COUNT" alias="orders_count" inner-expression="(*)" start-index="7" stop-index="14" />
         </projections>
@@ -84,49 +76,43 @@
     </select>
 
     <select sql-case-id="select_max">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="40" stop-index="46" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="40" stop-index="46" />
+        </from>
         <projections start-index="7" stop-index="33">
             <aggregation-projection type="MAX" inner-expression="(user_id)" alias="max_user_id" start-index="7" stop-index="18" />
         </projections>
     </select>
 
     <select sql-case-id="select_min">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="40" stop-index="46" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="40" stop-index="46" />
+        </from>
         <projections start-index="7" stop-index="33">
             <aggregation-projection type="MIN" inner-expression="(user_id)" alias="min_user_id" start-index="7" stop-index="18" />
         </projections>
     </select>
 
     <select sql-case-id="select_avg">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="40" stop-index="46" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="40" stop-index="46" />
+        </from>
         <projections start-index="7" stop-index="33">
             <aggregation-projection type="AVG" inner-expression="(user_id)" alias="user_id_avg" start-index="7" stop-index="18" />
         </projections>
     </select>
 
     <select sql-case-id="select_count_with_binding_tables_without_join" parameters="1, 2, 9, 10">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="36" stop-index="44" />
-            </table-factor>
-        </table-reference>
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" alias="i" start-index="47" stop-index="60" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <join-table>
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="36" stop-index="44" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="47" stop-index="60" />
+                </right>
+            </join-table>
+        </from>
         <projections start-index="7" stop-index="29">
             <aggregation-projection type="COUNT" inner-expression="(*)" alias="items_count" start-index="7" stop-index="14" />
         </projections>
@@ -175,14 +161,14 @@
     </select>
 
     <select sql-case-id="select_count_with_binding_tables_with_join" parameters="1, 2, 9, 10">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="36" stop-index="44" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="51" stop-index="64" />
-                </table-factor>
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="36" stop-index="44" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="51" stop-index="64" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="69" stop-index="89">
@@ -204,7 +190,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="29">
             <aggregation-projection type="COUNT" inner-expression="(*)" alias="items_count" start-index="7" stop-index="14" />
         </projections>
@@ -237,11 +223,9 @@
     </select>
 
     <select sql-case-id="select_count_with_escape_character">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="46" stop-index="52" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="46" stop-index="52" />
+        </from>
         <projections start-index="7" stop-index="39">
             <aggregation-projection type="COUNT" inner-expression="(`order_id`)" alias="orders_count" start-index="7" stop-index="23" />
         </projections>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-expression.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-expression.xml
index 02ec64e..a6e596d 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-expression.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-expression.xml
@@ -18,11 +18,9 @@
 
 <sql-parser-test-cases>
     <select sql-case-id="select_with_expression">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="38" stop-index="49" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" alias="o" start-index="38" stop-index="49" />
+        </from>
         <projections start-index="7" stop-index="31">
             <!-- TODO check expression-projection's stop-index whether include alias -->
             <expression-projection alias="exp" start-index="7" stop-index="31" />
@@ -35,11 +33,9 @@
     </select>
 
     <select sql-case-id="select_with_date_function">
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" alias="i" start-delimiter="`" end-delimiter="`" start-index="51" stop-index="69" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order_item" alias="i" start-delimiter="`" end-delimiter="`" start-index="51" stop-index="69" />
+        </from>
         <projections start-index="7" stop-index="44">
             <expression-projection alias="creation_date" start-index="7" stop-index="44" />
         </projections>
@@ -49,11 +45,9 @@
     </select>
 
     <select sql-case-id="select_with_regexp" parameters="'init', 1, 2">
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" alias="t" start-index="14" stop-index="27" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order_item" alias="t" start-index="14" stop-index="27" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -90,14 +84,14 @@
             </column-projection>
             <expression-projection start-index="33" stop-index="124" alias="stateName" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <table start-index="135" stop-index="143" name="t_order" alias="t" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table start-index="155" stop-index="171" name="t_order_item" alias="o" />
-                </table-factor>
+                <left>
+                    <simple-table start-index="135" stop-index="143" name="t_order" alias="t" />
+                </left>
+                <right>
+                    <simple-table start-index="155" stop-index="171" name="t_order_item" alias="o" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="176" stop-index="197">
@@ -111,7 +105,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <where start-index="198" stop-index="219">
             <and-predicate>
                 <predicate start-index="205" stop-index="219" >
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-group-by.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-group-by.xml
index a974e7e..9fb6899 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-group-by.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-group-by.xml
@@ -18,11 +18,9 @@
 
 <sql-parser-test-cases>
     <select sql-case-id="select_group_by_with_sum">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="49" stop-index="55" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="49" stop-index="55" />
+        </from>
         <projections start-index="7" stop-index="42">
             <aggregation-projection type="SUM" alias="orders_sum" inner-expression="(order_id)" start-index="7" stop-index="19" />
             <column-projection name="user_id" start-index="36" stop-index="42" />
@@ -36,11 +34,9 @@
     </select>
 
     <select sql-case-id="select_group_by_with_count">
-        <table-reference>
-            <table-factor>
-                <table  name="t_order" start-index="53" stop-index="59" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="53" stop-index="59" />
+        </from>
         <projections start-index="7" stop-index="46">
             <aggregation-projection type="COUNT" alias="orders_count" inner-expression="(order_id)" start-index="7" stop-index="21" />
             <column-projection name="user_id" start-index="40" stop-index="46" />
@@ -54,11 +50,9 @@
     </select>
 
     <select sql-case-id="select_group_by_with_max">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="51" stop-index="57" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="51" stop-index="57" />
+        </from>
         <projections start-index="7" stop-index="44">
             <aggregation-projection type="MAX" alias="max_order_id" inner-expression="(order_id)" start-index="7" stop-index="19" />
             <column-projection name="user_id" start-index="38" stop-index="44" />
@@ -72,11 +66,9 @@
     </select>
 
     <select sql-case-id="select_group_by_with_min">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="51" stop-index="57" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="51" stop-index="57" />
+        </from>
         <projections start-index="7" stop-index="44">
             <aggregation-projection type="MIN" alias="min_order_id" inner-expression="(order_id)" start-index="7" stop-index="19" />
             <column-projection name="user_id" start-index="38" stop-index="44" />
@@ -90,11 +82,9 @@
     </select>
 
     <select sql-case-id="select_group_by_with_avg">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="49" stop-index="55" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="49" stop-index="55" />
+        </from>
         <projections start-index="7" stop-index="42">
             <aggregation-projection type="AVG" alias="orders_avg" inner-expression="(order_id)" start-index="7" stop-index="19" />
             <column-projection name="user_id" start-index="36" stop-index="42" />
@@ -108,11 +98,9 @@
     </select>
 
     <select sql-case-id="select_group_by_with_order_by_desc">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="49" stop-index="55" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="49" stop-index="55" />
+        </from>
         <projections start-index="7" stop-index="42">
             <aggregation-projection type="SUM" inner-expression="(order_id)" alias="orders_sum" start-index="7" stop-index="19" />
             <column-projection name="user_id" start-index="36" stop-index="42" />
@@ -126,14 +114,14 @@
     </select>
 
     <select sql-case-id="select_group_by_without_grouped_column" parameters="1, 2, 9, 10">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="36" stop-index="44" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="51" stop-index="64"/>
-                </table-factor>
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="36" stop-index="44" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="51" stop-index="64"/>
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="69" stop-index="89">
@@ -155,7 +143,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="29">
             <aggregation-projection type="COUNT" inner-expression="(*)" alias="items_count" start-index="7" stop-index="14" />
         </projections>
@@ -193,11 +181,9 @@
     </select>
 
     <select sql-case-id="select_group_by_with_limit" parameters="5">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="20" stop-index="26" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="20" stop-index="26" />
+        </from>
         <projections start-index="7" stop-index="13">
             <column-projection name="user_id" start-index="7" stop-index="13" />
         </projections>
@@ -213,11 +199,9 @@
     </select>
 
     <select sql-case-id="select_group_by_with_order_by_and_limit" parameters="5">
-        <table-reference>
-            <table-factor>
-                <table  name="t_order" start-index="49" stop-index="55" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="49" stop-index="55" />
+        </from>
         <projections start-index="7" stop-index="42">
             <column-projection name="user_id" start-index="7" stop-index="13" />
             <aggregation-projection type="SUM"  inner-expression="(order_id)" alias="orders_sum" start-index="16" stop-index="28" />
@@ -234,11 +218,9 @@
     </select>
 
     <select sql-case-id="select_with_item_alias_match_order_by_and_group_by_items">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="26" stop-index="34" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" alias="o" start-index="26" stop-index="34" />
+        </from>
         <projections start-index="7" stop-index="19">
             <column-projection name="user_id" alias="uid" start-index="7" stop-index="15">
                 <owner name="o" start-index="7" stop-index="7" />
@@ -257,11 +239,9 @@
     </select>
 
     <select sql-case-id="select_group_by_with_date_function" parameters="1000, 1100">
-        <table-reference>
-            <table-factor>
-                <table  name="t_order_item" start-delimiter="`" end-delimiter="`" start-index="91" stop-index="104" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table  name="t_order_item" start-delimiter="`" end-delimiter="`" start-index="91" stop-index="104" />
+        </from>
         <projections start-index="7" stop-index="84">
             <expression-projection alias="creation_date" start-index="7" stop-index="62" />
             <aggregation-projection type="COUNT" inner-expression="(*)" alias="c_number" start-index="65" stop-index="72" />
@@ -285,11 +265,9 @@
     </select>
 
     <select sql-case-id="select_group_by_with_keyword_alias">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="58" stop-index="64" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="58" stop-index="64" />
+        </from>
         <projections start-index="7" stop-index="51">
             <aggregation-projection type="SUM" inner-expression="(order_id)" alias="orders_sum" start-index="7" stop-index="19" />
             <column-projection name="user_id" alias="key" start-index="36" stop-index="42" />
@@ -300,11 +278,9 @@
     </select>
 
     <select sql-case-id="select_group_by_with_count_without_column_name">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="53" stop-index="59" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="53" stop-index="59" />
+        </from>
         <projections start-index="7" stop-index="46">
             <aggregation-projection inner-expression="(order_id)" type="COUNT" alias="orders_count" start-index="7" stop-index="21" />
             <column-projection name="user_id" start-index="40" stop-index="46" />
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-join.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-join.xml
index 879829c..ca7e641 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-join.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-join.xml
@@ -18,14 +18,14 @@
 
 <sql-parser-test-cases>
     <select sql-case-id="select_inner_join_related_with_alias" parameters="1000">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="37" stop-index="50" />
-                </table-factor>
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="37" stop-index="50" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="55" stop-index="77">
@@ -39,7 +39,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
@@ -62,14 +62,14 @@
     </select>
 
     <select sql-case-id="select_inner_join_related_with_name" parameters="1000">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="27" stop-index="33" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" start-index="40" stop-index="51" />
-                </table-factor>
+                <left>
+                    <simple-table name="t_order" start-index="27" stop-index="33" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" start-index="40" stop-index="51" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="56" stop-index="95">
@@ -83,7 +83,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="20">
             <shorthand-projection start-index="7" stop-index="20">
                 <owner name="t_order_item" start-index="7" stop-index="18" />
@@ -106,17 +106,16 @@
     </select>
 
     <select sql-case-id="select_join_using" parameters="1000">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="31" stop-index="44" />
-                </table-factor>
-                <joinSpecification />
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="31" stop-index="44" />
+                </right>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-or.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-or.xml
index 9c34067..1a7454e 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-or.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-or.xml
@@ -18,11 +18,9 @@
 
 <sql-parser-test-cases>
     <select sql-case-id="select_or_with_same_sharding_columns" parameters="1, 2">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -51,11 +49,9 @@
     </select>
 
     <select sql-case-id="select_or_with_different_sharding_columns" parameters="1, 2">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -84,11 +80,9 @@
     </select>
 
     <select sql-case-id="select_or_with_none_sharding_columns" parameters="1, 'init'">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -117,11 +111,9 @@
     </select>
 
     <select sql-case-id="select_or_mix_and_for_simple_pattern" parameters="1, 'init', 3">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -166,11 +158,9 @@
     </select>
 
     <select sql-case-id="select_or_mix_and_for_complex_pattern" parameters="'init', 1, 2, 3, 4">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -283,14 +273,14 @@
     </select>
 
     <select sql-case-id="select_or_mix_and_with_binding_tables" parameters="1, 2, 3">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="31" stop-index="44" />
-                </table-factor>
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="31" stop-index="44" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="49" stop-index="69">
@@ -312,7 +302,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
@@ -367,39 +357,41 @@
     </select>
 
     <select sql-case-id="select_or_mix_and_with_binding_and_broadcast_tables" parameters="1, 2, 3, 'init'">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="31" stop-index="44" />
-                </table-factor>
-                <joinSpecification>
-                    <and-predicate>
-                        <predicate start-index="49" stop-index="69">
-                            <column-left-value name="user_id" start-index="49" stop-index="57">
-                                <owner name="o" start-index="49" stop-index="49" />
-                            </column-left-value>
-                            <column-right-value name="user_id" start-index="61" stop-index="69">
-                                <owner name="i" start-index="61" stop-index="61" />
-                            </column-right-value>
-                        </predicate>
-                        <predicate start-index="75" stop-index="97">
-                            <column-left-value name="order_id" start-index="75" stop-index="84">
-                                <owner name="o" start-index="75" stop-index="75" />
-                            </column-left-value>
-                            <column-right-value name="order_id" start-index="88" stop-index="97">
-                                <owner name="i" start-index="88" stop-index="88" />
-                            </column-right-value>
-                        </predicate>
-                    </and-predicate>
-                </joinSpecification>
-            </join-table>
-            <join-table>
-                <table-factor>
-                    <table name="t_broadcast_table" alias="c" start-index="104" stop-index="122" />
-                </table-factor>
+                <left>
+                    <join-table>
+                        <left>
+                            <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+                        </left>
+                        <right>
+                            <simple-table name="t_order_item" alias="i" start-index="31" stop-index="44" />
+                        </right>
+                        <joinSpecification>
+                            <and-predicate>
+                                <predicate start-index="49" stop-index="69">
+                                    <column-left-value name="user_id" start-index="49" stop-index="57">
+                                        <owner name="o" start-index="49" stop-index="49" />
+                                    </column-left-value>
+                                    <column-right-value name="user_id" start-index="61" stop-index="69">
+                                        <owner name="i" start-index="61" stop-index="61" />
+                                    </column-right-value>
+                                </predicate>
+                                <predicate start-index="75" stop-index="97">
+                                    <column-left-value name="order_id" start-index="75" stop-index="84">
+                                        <owner name="o" start-index="75" stop-index="75" />
+                                    </column-left-value>
+                                    <column-right-value name="order_id" start-index="88" stop-index="97">
+                                        <owner name="i" start-index="88" stop-index="88" />
+                                    </column-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </joinSpecification>
+                    </join-table>
+                </left>
+                <right>
+                    <simple-table name="t_broadcast_table" alias="c" start-index="104" stop-index="122" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="127" stop-index="145">
@@ -413,7 +405,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-order-by.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-order-by.xml
index 25e6994..e7ef615 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-order-by.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-order-by.xml
@@ -18,11 +18,9 @@
 
 <sql-parser-test-cases>
     <select sql-case-id="select_order_by_asc_and_index_desc">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="14" stop-index="22" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" alias="o" start-index="14" stop-index="22" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -35,16 +33,16 @@
     </select>
 
     <select sql-case-id="select_order_by_desc_and_index_asc">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
-        </table-reference>
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" alias="i" start-index="27" stop-index="40" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <join-table>
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="27" stop-index="40" />
+                </right>
+            </join-table>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
@@ -82,11 +80,9 @@
     </select>
 
     <select sql-case-id="select_order_by_with_ordered_column">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="40" stop-index="48" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" alias="o" start-index="40" stop-index="48" />
+        </from>
         <projections start-index="7" stop-index="33">
             <column-projection name="order_id" alias="gen_order_id_" start-index="7" stop-index="16">
                 <owner name="o" start-index="7" stop-index="7" />
@@ -100,16 +96,16 @@
     </select>
 
     <select sql-case-id="select_order_by_with_date">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
-        </table-reference>
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" alias="i" start-index="27" stop-index="40" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <join-table>
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="27" stop-index="40" />
+                </right>
+            </join-table>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
@@ -152,11 +148,9 @@
 
     <!-- //TODO add order-by-null-type -->
     <select sql-case-id="select_order_by_for_nulls_first">
-        <table-reference>
-            <table-factor>
-                <table  name="t_order" alias="o" start-index="40" stop-index="48" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" alias="o" start-index="40" stop-index="48" />
+        </from>
         <projections start-index="7" stop-index="33">
             <column-projection name="order_id" alias="gen_order_id_" start-index="7" stop-index="16">
                 <owner name="o" start-index="7" stop-index="7" />
@@ -171,11 +165,9 @@
 
     <!-- //TODO add order-by-null-type -->
     <select sql-case-id="select_order_by_for_nulls_last">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="40" stop-index="48" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" alias="o" start-index="40" stop-index="48" />
+        </from>
         <projections start-index="7" stop-index="33">
             <column-projection name="order_id" alias="gen_order_id_" start-index="7" stop-index="16">
                 <owner name="o" start-index="7" stop-index="7" />
@@ -189,11 +181,9 @@
     </select>
 
     <select sql-case-id="select_order_by_with_multiple_stars">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="29" stop-index="37" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" alias="o" start-index="29" stop-index="37" />
+        </from>
         <projections start-index="7" stop-index="22">
             <shorthand-projection start-index="7" stop-index="7" />
             <shorthand-projection start-index="20" stop-index="22">
@@ -209,11 +199,9 @@
     </select>
 
     <select sql-case-id="select_order_by_with_alias_star_alias_name">
-        <table-reference>
-            <table-factor>
-                <table  name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="o" start-index="7" stop-index="7" />
@@ -227,11 +215,9 @@
     </select>
 
     <select sql-case-id="select_order_by_with_star_table_alias">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="14" stop-index="22" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" alias="o" start-index="14" stop-index="22" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -241,11 +227,9 @@
     </select>
 
     <select sql-case-id="select_order_by_with_table_star_table_name">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="22" stop-index="28" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="22" stop-index="28" />
+        </from>
         <projections start-index="7" stop-index="15">
             <shorthand-projection start-index="7" stop-index="15">
                 <owner name="t_order" start-index="7" stop-index="13" />
@@ -259,11 +243,9 @@
     </select>
 
     <select sql-case-id="select_order_by_with_star_no_table_alias">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -273,14 +255,14 @@
     </select>
 
     <select sql-case-id="select_order_by_with_table_star_without_table_name">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="21" stop-index="29" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="36" stop-index="49" />
-                </table-factor>
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="21" stop-index="29" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="36" stop-index="49" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="54" stop-index="74">
@@ -302,7 +284,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="14">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination-group-by-order-by.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination-group-by-order-by.xml
index 5a0f10d..55efd35 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination-group-by-order-by.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination-group-by-order-by.xml
@@ -18,14 +18,14 @@
 
 <sql-parser-test-cases>
     <select sql-case-id="select_pagination_with_group_by_and_order_by" parameters="1, 2, 9, 10, 5, 3">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="22" stop-index="30" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="37" stop-index="50" />
-                </table-factor>
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="22" stop-index="30" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="37" stop-index="50" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="55" stop-index="75">
@@ -47,7 +47,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="15">
             <column-projection name="user_id" start-index="7" stop-index="15">
                 <owner name="i" start-index="7" stop-index="7" />
@@ -96,14 +96,14 @@
     </select>
 
     <select sql-case-id="select_pagination_with_diff_group_by_and_order_by" parameters="1, 2, 9, 10, 5, 3">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="22" stop-index="30" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="37" stop-index="50" />
-                </table-factor>
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="22" stop-index="30" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="37" stop-index="50" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="55" stop-index="75">
@@ -125,7 +125,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="15">
             <column-projection name="user_id" start-index="7" stop-index="15">
                 <owner name="i" start-index="7" stop-index="7" />
@@ -177,94 +177,92 @@
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable alias="row_">
-                    <subquery>
-                        <select>
-                            <projections start-index="22" stop-index="158">
-                                <top-projection alias="rownum_" start-index="22" stop-index="70">
-                                    <top-value value="3" parameter-index="0" start-index="26" stop-index="26" />
-                                </top-projection>
-                                <column-projection name="item_id" start-index="84" stop-index="92">
-                                    <owner name="i" start-index="84" stop-index="84" />
-                                </column-projection>
-                                <column-projection name="order_id" alias="order_id" start-index="95" stop-index="104">
-                                    <owner name="o" start-index="95" stop-index="95" />
-                                </column-projection>
-                                <column-projection name="status" alias="status" start-index="119" stop-index="126">
-                                    <owner name="o" start-index="119" stop-index="119" />
-                                </column-projection>
-                                <column-projection name="user_id" alias="user_id" start-index="139" stop-index="147">
-                                    <owner name="o" start-index="139" stop-index="139" />
-                                </column-projection>
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <table start-index="165" stop-index="173" name="t_order" alias="o" />
-                                </table-factor>
-                                <join-table>
-                                    <table-factor>
-                                        <table start-index="180" stop-index="193" name="t_order_item" alias="i" />
-                                    </table-factor>
-                                    <joinSpecification>
-                                        <and-predicate>
-                                            <predicate start-index="198" stop-index="218">
-                                                <column-left-value name="user_id" start-index="198" stop-index="206">
-                                                    <owner name="o" start-index="198" stop-index="198" />
-                                                </column-left-value>
-                                                <column-right-value name="user_id" start-index="210" stop-index="218">
-                                                    <owner name="i" start-index="210" stop-index="210" />
-                                                </column-right-value>
-                                            </predicate>
-                                            <predicate start-index="224" stop-index="246">
-                                                <column-left-value name="order_id" start-index="224" stop-index="233">
-                                                    <owner name="o" start-index="224" stop-index="224" />
-                                                </column-left-value>
-                                                <column-right-value name="order_id" start-index="237" stop-index="246">
-                                                    <owner name="i" start-index="237" stop-index="237" />
-                                                </column-right-value>
-                                            </predicate>
-                                        </and-predicate>
-                                    </joinSpecification>
-                                </join-table>
-                            </table-reference>
-                            <where start-index="248" stop-index="303" literal-stop-index="304">
-                                <and-predicate>
-                                    <predicate start-index="254" stop-index="272">
-                                        <column-left-value name="user_id" start-index="254" stop-index="262">
-                                            <owner name="o" start-index="254" stop-index="254" />
-                                        </column-left-value>
-                                        <in-right-value>
-                                            <parameter-marker-expression value="1" start-index="268" stop-index="268" />
-                                            <parameter-marker-expression value="2" start-index="271" stop-index="271" />
-                                            <literal-expression value="1" start-index="268" stop-index="268" />
-                                            <literal-expression value="2" start-index="271" stop-index="271" />
-                                        </in-right-value>
-                                    </predicate>
-                                    <predicate start-index="278" stop-index="303" literal-stop-index="304">
-                                        <column-left-value name="order_id" start-index="278" stop-index="287">
-                                            <owner name="o" start-index="278" stop-index="278" />
-                                        </column-left-value>
-                                        <between-right-value>
-                                            <between-parameter-marker-expression value="3" start-index="297" stop-index="297" />
-                                            <and-parameter-marker-expression value="4" start-index="303" stop-index="303" />
-                                            <between-literal-expression value="9" start-index="297" stop-index="297" />
-                                            <and-literal-expression value="10" start-index="303" stop-index="304" />
-                                        </between-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                            <group-by>
-                                <column-item name="item_id" start-index="314" stop-index="322" literal-start-index="315" literal-stop-index="323">
-                                    <owner name="i" start-index="314" stop-index="314" literal-start-index="315" literal-stop-index="315" />
-                                </column-item>
-                            </group-by>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+        <from>
+            <subquery-table alias="row_">
+                <subquery>
+                    <select>
+                        <projections start-index="22" stop-index="158">
+                            <top-projection alias="rownum_" start-index="22" stop-index="70">
+                                <top-value value="3" parameter-index="0" start-index="26" stop-index="26" />
+                            </top-projection>
+                            <column-projection name="item_id" start-index="84" stop-index="92">
+                                <owner name="i" start-index="84" stop-index="84" />
+                            </column-projection>
+                            <column-projection name="order_id" alias="order_id" start-index="95" stop-index="104">
+                                <owner name="o" start-index="95" stop-index="95" />
+                            </column-projection>
+                            <column-projection name="status" alias="status" start-index="119" stop-index="126">
+                                <owner name="o" start-index="119" stop-index="119" />
+                            </column-projection>
+                            <column-projection name="user_id" alias="user_id" start-index="139" stop-index="147">
+                                <owner name="o" start-index="139" stop-index="139" />
+                            </column-projection>
+                        </projections>
+                        <from>
+                            <join-table>
+                                <left>
+                                    <simple-table start-index="165" stop-index="173" name="t_order" alias="o" />
+                                </left>
+                                <right>
+                                    <simple-table start-index="180" stop-index="193" name="t_order_item" alias="i" />
+                                </right>
+                                <joinSpecification>
+                                    <and-predicate>
+                                        <predicate start-index="198" stop-index="218">
+                                            <column-left-value name="user_id" start-index="198" stop-index="206">
+                                                <owner name="o" start-index="198" stop-index="198" />
+                                            </column-left-value>
+                                            <column-right-value name="user_id" start-index="210" stop-index="218">
+                                                <owner name="i" start-index="210" stop-index="210" />
+                                            </column-right-value>
+                                        </predicate>
+                                        <predicate start-index="224" stop-index="246">
+                                            <column-left-value name="order_id" start-index="224" stop-index="233">
+                                                <owner name="o" start-index="224" stop-index="224" />
+                                            </column-left-value>
+                                            <column-right-value name="order_id" start-index="237" stop-index="246">
+                                                <owner name="i" start-index="237" stop-index="237" />
+                                            </column-right-value>
+                                        </predicate>
+                                    </and-predicate>
+                                </joinSpecification>
+                            </join-table>
+                        </from>
+                        <where start-index="248" stop-index="303" literal-stop-index="304">
+                            <and-predicate>
+                                <predicate start-index="254" stop-index="272">
+                                    <column-left-value name="user_id" start-index="254" stop-index="262">
+                                        <owner name="o" start-index="254" stop-index="254" />
+                                    </column-left-value>
+                                    <in-right-value>
+                                        <parameter-marker-expression value="1" start-index="268" stop-index="268" />
+                                        <parameter-marker-expression value="2" start-index="271" stop-index="271" />
+                                        <literal-expression value="1" start-index="268" stop-index="268" />
+                                        <literal-expression value="2" start-index="271" stop-index="271" />
+                                    </in-right-value>
+                                </predicate>
+                                <predicate start-index="278" stop-index="303" literal-stop-index="304">
+                                    <column-left-value name="order_id" start-index="278" stop-index="287">
+                                        <owner name="o" start-index="278" stop-index="278" />
+                                    </column-left-value>
+                                    <between-right-value>
+                                        <between-parameter-marker-expression value="3" start-index="297" stop-index="297" />
+                                        <and-parameter-marker-expression value="4" start-index="303" stop-index="303" />
+                                        <between-literal-expression value="9" start-index="297" stop-index="297" />
+                                        <and-literal-expression value="10" start-index="303" stop-index="304" />
+                                    </between-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                        <group-by>
+                            <column-item name="item_id" start-index="314" stop-index="322" literal-start-index="315" literal-stop-index="323">
+                                <owner name="i" start-index="314" stop-index="314" literal-start-index="315" literal-stop-index="315" />
+                            </column-item>
+                        </group-by>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
         <where start-index="333" stop-index="354" literal-start-index="334" literal-stop-index="355">
             <and-predicate>
                 <predicate start-index="339" stop-index="354" literal-start-index="340" literal-stop-index="355">
@@ -285,94 +283,92 @@
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable alias="row_">
-                    <subquery>
-                        <select>
-                            <projections start-index="22" stop-index="176">
-                                <top-projection alias="rownum_" start-index="22" stop-index="88">
-                                    <top-value value="3" parameter-index="0" start-index="26" stop-index="26" />
-                                </top-projection>
-                                <column-projection name="item_id" start-index="102" stop-index="110">
-                                    <owner name="i" start-index="102" stop-index="102" />
-                                </column-projection>
-                                <column-projection name="order_id" alias="order_id" start-index="113" stop-index="122">
-                                    <owner name="o" start-index="113" stop-index="113" />
-                                </column-projection>
-                                <column-projection name="status" alias="status" start-index="137" stop-index="144">
-                                    <owner name="o" start-index="137" stop-index="137" />
-                                </column-projection>
-                                <column-projection name="user_id" alias="user_id" start-index="157" stop-index="165">
-                                    <owner name="o" start-index="157" stop-index="157" />
-                                </column-projection>
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <table start-index="183" stop-index="191" name="t_order" alias="o" />
-                                </table-factor>
-                                <join-table>
-                                    <table-factor>
-                                        <table start-index="198" stop-index="211" name="t_order_item" alias="i" />
-                                    </table-factor>
-                                    <joinSpecification>
-                                        <and-predicate>
-                                            <predicate start-index="216" stop-index="236">
-                                                <column-left-value name="user_id" start-index="216" stop-index="224">
-                                                    <owner name="o" start-index="216" stop-index="216" />
-                                                </column-left-value>
-                                                <column-right-value name="user_id" start-index="228" stop-index="236">
-                                                    <owner name="i" start-index="228" stop-index="228" />
-                                                </column-right-value>
-                                            </predicate>
-                                            <predicate start-index="242" stop-index="264">
-                                                <column-left-value name="order_id" start-index="242" stop-index="251">
-                                                    <owner name="o" start-index="242" stop-index="242" />
-                                                </column-left-value>
-                                                <column-right-value name="order_id" start-index="255" stop-index="264">
-                                                    <owner name="i" start-index="255" stop-index="255" />
-                                                </column-right-value>
-                                            </predicate>
-                                        </and-predicate>
-                                    </joinSpecification>
-                                </join-table>
-                            </table-reference>
-                            <where start-index="266" stop-index="321" literal-stop-index="322">
-                                <and-predicate>
-                                    <predicate start-index="272" stop-index="290">
-                                        <column-left-value name="user_id" start-index="272" stop-index="280">
-                                            <owner name="o" start-index="272" stop-index="272" />
-                                        </column-left-value>
-                                        <in-right-value>
-                                            <parameter-marker-expression value="1" start-index="286" stop-index="286" />
-                                            <parameter-marker-expression value="2" start-index="289" stop-index="289" />
-                                            <literal-expression value="1" start-index="286" stop-index="286" />
-                                            <literal-expression value="2" start-index="289" stop-index="289" />
-                                        </in-right-value>
-                                    </predicate>
-                                    <predicate start-index="296" stop-index="321" literal-stop-index="322">
-                                        <column-left-value name="order_id" start-index="296" stop-index="305">
-                                            <owner name="o" start-index="296" stop-index="296" />
-                                        </column-left-value>
-                                        <between-right-value>
-                                            <between-parameter-marker-expression value="3" start-index="315" stop-index="315" />
-                                            <and-parameter-marker-expression value="4" start-index="321" stop-index="321" />
-                                            <between-literal-expression value="9" start-index="315" stop-index="315" />
-                                            <and-literal-expression value="10" start-index="321" stop-index="322" />
-                                        </between-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                            <group-by>
-                                <column-item name="item_id" start-index="332" stop-index="340" literal-start-index="333" literal-stop-index="341">
-                                    <owner name="i" start-index="332" stop-index="332" literal-start-index="333" literal-stop-index="333" />
-                                </column-item>
-                            </group-by>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+        <from>
+            <subquery-table alias="row_">
+                <subquery>
+                    <select>
+                        <projections start-index="22" stop-index="176">
+                            <top-projection alias="rownum_" start-index="22" stop-index="88">
+                                <top-value value="3" parameter-index="0" start-index="26" stop-index="26" />
+                            </top-projection>
+                            <column-projection name="item_id" start-index="102" stop-index="110">
+                                <owner name="i" start-index="102" stop-index="102" />
+                            </column-projection>
+                            <column-projection name="order_id" alias="order_id" start-index="113" stop-index="122">
+                                <owner name="o" start-index="113" stop-index="113" />
+                            </column-projection>
+                            <column-projection name="status" alias="status" start-index="137" stop-index="144">
+                                <owner name="o" start-index="137" stop-index="137" />
+                            </column-projection>
+                            <column-projection name="user_id" alias="user_id" start-index="157" stop-index="165">
+                                <owner name="o" start-index="157" stop-index="157" />
+                            </column-projection>
+                        </projections>
+                        <from>
+                            <join-table>
+                                <left>
+                                    <simple-table start-index="183" stop-index="191" name="t_order" alias="o" />
+                                </left>
+                                <right>
+                                    <simple-table start-index="198" stop-index="211" name="t_order_item" alias="i" />
+                                </right>
+                                <joinSpecification>
+                                    <and-predicate>
+                                        <predicate start-index="216" stop-index="236">
+                                            <column-left-value name="user_id" start-index="216" stop-index="224">
+                                                <owner name="o" start-index="216" stop-index="216" />
+                                            </column-left-value>
+                                            <column-right-value name="user_id" start-index="228" stop-index="236">
+                                                <owner name="i" start-index="228" stop-index="228" />
+                                            </column-right-value>
+                                        </predicate>
+                                        <predicate start-index="242" stop-index="264">
+                                            <column-left-value name="order_id" start-index="242" stop-index="251">
+                                                <owner name="o" start-index="242" stop-index="242" />
+                                            </column-left-value>
+                                            <column-right-value name="order_id" start-index="255" stop-index="264">
+                                                <owner name="i" start-index="255" stop-index="255" />
+                                            </column-right-value>
+                                        </predicate>
+                                    </and-predicate>
+                                </joinSpecification>
+                            </join-table>
+                        </from>
+                        <where start-index="266" stop-index="321" literal-stop-index="322">
+                            <and-predicate>
+                                <predicate start-index="272" stop-index="290">
+                                    <column-left-value name="user_id" start-index="272" stop-index="280">
+                                        <owner name="o" start-index="272" stop-index="272" />
+                                    </column-left-value>
+                                    <in-right-value>
+                                        <parameter-marker-expression value="1" start-index="286" stop-index="286" />
+                                        <parameter-marker-expression value="2" start-index="289" stop-index="289" />
+                                        <literal-expression value="1" start-index="286" stop-index="286" />
+                                        <literal-expression value="2" start-index="289" stop-index="289" />
+                                    </in-right-value>
+                                </predicate>
+                                <predicate start-index="296" stop-index="321" literal-stop-index="322">
+                                    <column-left-value name="order_id" start-index="296" stop-index="305">
+                                        <owner name="o" start-index="296" stop-index="296" />
+                                    </column-left-value>
+                                    <between-right-value>
+                                        <between-parameter-marker-expression value="3" start-index="315" stop-index="315" />
+                                        <and-parameter-marker-expression value="4" start-index="321" stop-index="321" />
+                                        <between-literal-expression value="9" start-index="315" stop-index="315" />
+                                        <and-literal-expression value="10" start-index="321" stop-index="322" />
+                                    </between-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                        <group-by>
+                            <column-item name="item_id" start-index="332" stop-index="340" literal-start-index="333" literal-stop-index="341">
+                                <owner name="i" start-index="332" stop-index="332" literal-start-index="333" literal-stop-index="333" />
+                            </column-item>
+                        </group-by>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
         <where start-index="351" stop-index="372" literal-start-index="352" literal-stop-index="373">
             <and-predicate>
                 <predicate start-index="357" stop-index="372" literal-start-index="358" literal-stop-index="373">
@@ -393,94 +389,92 @@
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable alias="row_">
-                    <subquery>
-                        <select>
-                            <projections start-index="22" stop-index="160">
-                                <top-projection alias="rownum_" start-index="22" stop-index="72">
-                                    <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
-                                </top-projection>
-                                <column-projection name="item_id" start-index="86" stop-index="94">
-                                    <owner name="i" start-index="86" stop-index="86" />
-                                </column-projection>
-                                <column-projection name="order_id" alias="order_id" start-index="97" stop-index="106">
-                                    <owner name="o" start-index="97" stop-index="97" />
-                                </column-projection>
-                                <column-projection name="status" alias="status" start-index="121" stop-index="128">
-                                    <owner name="o" start-index="121" stop-index="121" />
-                                </column-projection>
-                                <column-projection name="user_id" alias="user_id" start-index="141" stop-index="149">
-                                    <owner name="o" start-index="141" stop-index="141" />
-                                </column-projection>
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <table start-index="167" stop-index="175" name="t_order" alias="o" />
-                                </table-factor>
-                                <join-table>
-                                    <table-factor>
-                                        <table start-index="182" stop-index="195" name="t_order_item" alias="i" />
-                                    </table-factor>
-                                    <joinSpecification>
-                                        <and-predicate>
-                                            <predicate start-index="200" stop-index="220">
-                                                <column-left-value name="user_id" start-index="200" stop-index="208">
-                                                    <owner name="o" start-index="200" stop-index="200" />
-                                                </column-left-value>
-                                                <column-right-value name="user_id" start-index="212" stop-index="220">
-                                                    <owner name="i" start-index="212" stop-index="212" />
-                                                </column-right-value>
-                                            </predicate>
-                                            <predicate start-index="226" stop-index="248">
-                                                <column-left-value name="order_id" start-index="226" stop-index="235">
-                                                    <owner name="o" start-index="226" stop-index="226" />
-                                                </column-left-value>
-                                                <column-right-value name="order_id" start-index="239" stop-index="248">
-                                                    <owner name="i" start-index="239" stop-index="239" />
-                                                </column-right-value>
-                                            </predicate>
-                                        </and-predicate>
-                                    </joinSpecification>
-                                </join-table>
-                            </table-reference>
-                            <where start-index="250" stop-index="305" literal-stop-index="306">
-                                <and-predicate>
-                                    <predicate start-index="256" stop-index="274">
-                                        <column-left-value name="user_id" start-index="256" stop-index="264">
-                                            <owner name="o" start-index="256" stop-index="256" />
-                                        </column-left-value>
-                                        <in-right-value>
-                                            <parameter-marker-expression value="1" start-index="270" stop-index="270" />
-                                            <parameter-marker-expression value="2" start-index="273" stop-index="273" />
-                                            <literal-expression value="1" start-index="270" stop-index="270" />
-                                            <literal-expression value="2" start-index="273" stop-index="273" />
-                                        </in-right-value>
-                                    </predicate>
-                                    <predicate start-index="280" stop-index="305" literal-stop-index="306">
-                                        <column-left-value name="order_id" start-index="280" stop-index="289">
-                                            <owner name="o" start-index="280" stop-index="280" />
-                                        </column-left-value>
-                                        <between-right-value>
-                                            <between-parameter-marker-expression value="3" start-index="299" stop-index="299" />
-                                            <and-parameter-marker-expression value="4" start-index="305" stop-index="305" />
-                                            <between-literal-expression value="9" start-index="299" stop-index="299" />
-                                            <and-literal-expression value="10" start-index="305" stop-index="306" />
-                                        </between-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                            <group-by>
-                                <column-item name="item_id" start-index="316" stop-index="324" literal-start-index="317" literal-stop-index="325">
-                                    <owner name="i" start-index="316" stop-index="316" literal-start-index="317" literal-stop-index="317" />
-                                </column-item>
-                            </group-by>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+        <from>
+            <subquery-table alias="row_">
+                <subquery>
+                    <select>
+                        <projections start-index="22" stop-index="160">
+                            <top-projection alias="rownum_" start-index="22" stop-index="72">
+                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
+                            </top-projection>
+                            <column-projection name="item_id" start-index="86" stop-index="94">
+                                <owner name="i" start-index="86" stop-index="86" />
+                            </column-projection>
+                            <column-projection name="order_id" alias="order_id" start-index="97" stop-index="106">
+                                <owner name="o" start-index="97" stop-index="97" />
+                            </column-projection>
+                            <column-projection name="status" alias="status" start-index="121" stop-index="128">
+                                <owner name="o" start-index="121" stop-index="121" />
+                            </column-projection>
+                            <column-projection name="user_id" alias="user_id" start-index="141" stop-index="149">
+                                <owner name="o" start-index="141" stop-index="141" />
+                            </column-projection>
+                        </projections>
+                        <from>
+                            <join-table>
+                                <left>
+                                    <simple-table start-index="167" stop-index="175" name="t_order" alias="o" />
+                                </left>
+                                <right>
+                                    <simple-table start-index="182" stop-index="195" name="t_order_item" alias="i" />
+                                </right>
+                                <joinSpecification>
+                                    <and-predicate>
+                                        <predicate start-index="200" stop-index="220">
+                                            <column-left-value name="user_id" start-index="200" stop-index="208">
+                                                <owner name="o" start-index="200" stop-index="200" />
+                                            </column-left-value>
+                                            <column-right-value name="user_id" start-index="212" stop-index="220">
+                                                <owner name="i" start-index="212" stop-index="212" />
+                                            </column-right-value>
+                                        </predicate>
+                                        <predicate start-index="226" stop-index="248">
+                                            <column-left-value name="order_id" start-index="226" stop-index="235">
+                                                <owner name="o" start-index="226" stop-index="226" />
+                                            </column-left-value>
+                                            <column-right-value name="order_id" start-index="239" stop-index="248">
+                                                <owner name="i" start-index="239" stop-index="239" />
+                                            </column-right-value>
+                                        </predicate>
+                                    </and-predicate>
+                                </joinSpecification>
+                            </join-table>
+                        </from>
+                        <where start-index="250" stop-index="305" literal-stop-index="306">
+                            <and-predicate>
+                                <predicate start-index="256" stop-index="274">
+                                    <column-left-value name="user_id" start-index="256" stop-index="264">
+                                        <owner name="o" start-index="256" stop-index="256" />
+                                    </column-left-value>
+                                    <in-right-value>
+                                        <parameter-marker-expression value="1" start-index="270" stop-index="270" />
+                                        <parameter-marker-expression value="2" start-index="273" stop-index="273" />
+                                        <literal-expression value="1" start-index="270" stop-index="270" />
+                                        <literal-expression value="2" start-index="273" stop-index="273" />
+                                    </in-right-value>
+                                </predicate>
+                                <predicate start-index="280" stop-index="305" literal-stop-index="306">
+                                    <column-left-value name="order_id" start-index="280" stop-index="289">
+                                        <owner name="o" start-index="280" stop-index="280" />
+                                    </column-left-value>
+                                    <between-right-value>
+                                        <between-parameter-marker-expression value="3" start-index="299" stop-index="299" />
+                                        <and-parameter-marker-expression value="4" start-index="305" stop-index="305" />
+                                        <between-literal-expression value="9" start-index="299" stop-index="299" />
+                                        <and-literal-expression value="10" start-index="305" stop-index="306" />
+                                    </between-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                        <group-by>
+                            <column-item name="item_id" start-index="316" stop-index="324" literal-start-index="317" literal-stop-index="325">
+                                <owner name="i" start-index="316" stop-index="316" literal-start-index="317" literal-stop-index="317" />
+                            </column-item>
+                        </group-by>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
         <where start-index="335" stop-index="356" literal-start-index="336" literal-stop-index="357">
             <and-predicate>
                 <predicate start-index="341" stop-index="356" literal-start-index="342" literal-stop-index="357">
@@ -501,94 +495,92 @@
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable alias="row_">
-                    <subquery>
-                        <select>
-                            <projections start-index="22" stop-index="178">
-                                <top-projection alias="rownum_" start-index="22" stop-index="90">
-                                    <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
-                                </top-projection>
-                                <column-projection name="item_id" start-index="104" stop-index="112">
-                                    <owner name="i" start-index="104" stop-index="104" />
-                                </column-projection>
-                                <column-projection name="order_id" alias="order_id" start-index="115" stop-index="124">
-                                    <owner name="o" start-index="115" stop-index="115" />
-                                </column-projection>
-                                <column-projection name="status" alias="status" start-index="139" stop-index="146">
-                                    <owner name="o" start-index="139" stop-index="139" />
-                                </column-projection>
-                                <column-projection name="user_id" alias="user_id" start-index="159" stop-index="167">
-                                    <owner name="o" start-index="159" stop-index="159" />
-                                </column-projection>
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <table start-index="185" stop-index="193" name="t_order" alias="o" />
-                                </table-factor>
-                                <join-table>
-                                    <table-factor>
-                                        <table start-index="200" stop-index="213" name="t_order_item" alias="i" />
-                                    </table-factor>
-                                    <joinSpecification>
-                                        <and-predicate>
-                                            <predicate start-index="218" stop-index="238">
-                                                <column-left-value name="user_id" start-index="218" stop-index="226">
-                                                    <owner name="o" start-index="218" stop-index="218" />
-                                                </column-left-value>
-                                                <column-right-value name="user_id" start-index="230" stop-index="238">
-                                                    <owner name="i" start-index="230" stop-index="230" />
-                                                </column-right-value>
-                                            </predicate>
-                                            <predicate start-index="244" stop-index="266">
-                                                <column-left-value name="order_id" start-index="244" stop-index="253">
-                                                    <owner name="o" start-index="244" stop-index="244" />
-                                                </column-left-value>
-                                                <column-right-value name="order_id" start-index="257" stop-index="266">
-                                                    <owner name="i" start-index="257" stop-index="257" />
-                                                </column-right-value>
-                                            </predicate>
-                                        </and-predicate>
-                                    </joinSpecification>
-                                </join-table>
-                            </table-reference>
-                            <where start-index="268" stop-index="323" literal-stop-index="324">
-                                <and-predicate>
-                                    <predicate start-index="274" stop-index="292">
-                                        <column-left-value name="user_id" start-index="274" stop-index="282">
-                                            <owner name="o" start-index="274" stop-index="274" />
-                                        </column-left-value>
-                                        <in-right-value>
-                                            <parameter-marker-expression value="1" start-index="288" stop-index="288" />
-                                            <parameter-marker-expression value="2" start-index="291" stop-index="291" />
-                                            <literal-expression value="1" start-index="288" stop-index="288" />
-                                            <literal-expression value="2" start-index="291" stop-index="291" />
-                                        </in-right-value>
-                                    </predicate>
-                                    <predicate start-index="298" stop-index="323" literal-stop-index="324">
-                                        <column-left-value name="order_id" start-index="298" stop-index="307">
-                                            <owner name="o" start-index="298" stop-index="298" />
-                                        </column-left-value>
-                                        <between-right-value>
-                                            <between-parameter-marker-expression value="3" start-index="317" stop-index="317" />
-                                            <and-parameter-marker-expression value="4" start-index="323" stop-index="323" />
-                                            <between-literal-expression value="9" start-index="317" stop-index="317" />
-                                            <and-literal-expression value="10" start-index="323" stop-index="324" />
-                                        </between-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                            <group-by>
-                                <column-item name="item_id" start-index="334" stop-index="342" literal-start-index="335" literal-stop-index="343">
-                                    <owner name="i" start-index="334" stop-index="334" literal-start-index="335" literal-stop-index="335" />
-                                </column-item>
-                            </group-by>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+        <from>
+            <subquery-table alias="row_">
+                <subquery>
+                    <select>
+                        <projections start-index="22" stop-index="178">
+                            <top-projection alias="rownum_" start-index="22" stop-index="90">
+                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
+                            </top-projection>
+                            <column-projection name="item_id" start-index="104" stop-index="112">
+                                <owner name="i" start-index="104" stop-index="104" />
+                            </column-projection>
+                            <column-projection name="order_id" alias="order_id" start-index="115" stop-index="124">
+                                <owner name="o" start-index="115" stop-index="115" />
+                            </column-projection>
+                            <column-projection name="status" alias="status" start-index="139" stop-index="146">
+                                <owner name="o" start-index="139" stop-index="139" />
+                            </column-projection>
+                            <column-projection name="user_id" alias="user_id" start-index="159" stop-index="167">
+                                <owner name="o" start-index="159" stop-index="159" />
+                            </column-projection>
+                        </projections>
+                        <from>
+                            <join-table>
+                                <left>
+                                    <simple-table start-index="185" stop-index="193" name="t_order" alias="o" />
+                                </left>
+                                <right>
+                                    <simple-table start-index="200" stop-index="213" name="t_order_item" alias="i" />
+                                </right>
+                                <joinSpecification>
+                                    <and-predicate>
+                                        <predicate start-index="218" stop-index="238">
+                                            <column-left-value name="user_id" start-index="218" stop-index="226">
+                                                <owner name="o" start-index="218" stop-index="218" />
+                                            </column-left-value>
+                                            <column-right-value name="user_id" start-index="230" stop-index="238">
+                                                <owner name="i" start-index="230" stop-index="230" />
+                                            </column-right-value>
+                                        </predicate>
+                                        <predicate start-index="244" stop-index="266">
+                                            <column-left-value name="order_id" start-index="244" stop-index="253">
+                                                <owner name="o" start-index="244" stop-index="244" />
+                                            </column-left-value>
+                                            <column-right-value name="order_id" start-index="257" stop-index="266">
+                                                <owner name="i" start-index="257" stop-index="257" />
+                                            </column-right-value>
+                                        </predicate>
+                                    </and-predicate>
+                                </joinSpecification>
+                            </join-table>
+                        </from>
+                        <where start-index="268" stop-index="323" literal-stop-index="324">
+                            <and-predicate>
+                                <predicate start-index="274" stop-index="292">
+                                    <column-left-value name="user_id" start-index="274" stop-index="282">
+                                        <owner name="o" start-index="274" stop-index="274" />
+                                    </column-left-value>
+                                    <in-right-value>
+                                        <parameter-marker-expression value="1" start-index="288" stop-index="288" />
+                                        <parameter-marker-expression value="2" start-index="291" stop-index="291" />
+                                        <literal-expression value="1" start-index="288" stop-index="288" />
+                                        <literal-expression value="2" start-index="291" stop-index="291" />
+                                    </in-right-value>
+                                </predicate>
+                                <predicate start-index="298" stop-index="323" literal-stop-index="324">
+                                    <column-left-value name="order_id" start-index="298" stop-index="307">
+                                        <owner name="o" start-index="298" stop-index="298" />
+                                    </column-left-value>
+                                    <between-right-value>
+                                        <between-parameter-marker-expression value="3" start-index="317" stop-index="317" />
+                                        <and-parameter-marker-expression value="4" start-index="323" stop-index="323" />
+                                        <between-literal-expression value="9" start-index="317" stop-index="317" />
+                                        <and-literal-expression value="10" start-index="323" stop-index="324" />
+                                    </between-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                        <group-by>
+                            <column-item name="item_id" start-index="334" stop-index="342" literal-start-index="335" literal-stop-index="343">
+                                <owner name="i" start-index="334" stop-index="334" literal-start-index="335" literal-stop-index="335" />
+                            </column-item>
+                        </group-by>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
         <where start-index="353" stop-index="374" literal-start-index="354" literal-stop-index="375">
             <and-predicate>
                 <predicate start-index="359" stop-index="374" literal-start-index="360" literal-stop-index="375">
@@ -609,94 +601,92 @@
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable alias="row_">
-                    <subquery>
-                        <select>
-                            <projections start-index="22" stop-index="158">
-                                <top-projection alias="rownum_" start-index="22" stop-index="70">
-                                    <top-value value="3" parameter-index="0" start-index="26" stop-index="26" />
-                                </top-projection>
-                                <column-projection name="item_id" start-index="84" stop-index="92">
-                                    <owner name="i" start-index="84" stop-index="84" />
-                                </column-projection>
-                                <column-projection name="order_id" alias="order_id" start-index="95" stop-index="104">
-                                    <owner name="o" start-index="95" stop-index="95" />
-                                </column-projection>
-                                <column-projection name="status" alias="status" start-index="119" stop-index="126">
-                                    <owner name="o" start-index="119" stop-index="119" />
-                                </column-projection>
-                                <column-projection name="user_id" alias="user_id" start-index="139" stop-index="147">
-                                    <owner name="o" start-index="139" stop-index="139" />
-                                </column-projection>
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <table start-index="165" stop-index="173" name="t_order" alias="o" />
-                                </table-factor>
-                                <join-table>
-                                    <table-factor>
-                                        <table start-index="180" stop-index="193" name="t_order_item" alias="i" />
-                                    </table-factor>
-                                    <joinSpecification>
-                                        <and-predicate>
-                                            <predicate start-index="198" stop-index="218">
-                                                <column-left-value name="user_id" start-index="198" stop-index="206">
-                                                    <owner name="o" start-index="198" stop-index="198" />
-                                                </column-left-value>
-                                                <column-right-value name="user_id" start-index="210" stop-index="218">
-                                                    <owner name="i" start-index="210" stop-index="210" />
-                                                </column-right-value>
-                                            </predicate>
-                                            <predicate start-index="224" stop-index="246">
-                                                <column-left-value name="order_id" start-index="224" stop-index="233">
-                                                    <owner name="o" start-index="224" stop-index="224" />
-                                                </column-left-value>
-                                                <column-right-value name="order_id" start-index="237" stop-index="246">
-                                                    <owner name="i" start-index="237" stop-index="237" />
-                                                </column-right-value>
-                                            </predicate>
-                                        </and-predicate>
-                                    </joinSpecification>
-                                </join-table>
-                            </table-reference>
-                            <where start-index="248" stop-index="303" literal-stop-index="304">
-                                <and-predicate>
-                                    <predicate start-index="254" stop-index="272">
-                                        <column-left-value name="user_id" start-index="254" stop-index="262">
-                                            <owner name="o" start-index="254" stop-index="254" />
-                                        </column-left-value>
-                                        <in-right-value>
-                                            <parameter-marker-expression value="1" start-index="268" stop-index="268" />
-                                            <parameter-marker-expression value="2" start-index="271" stop-index="271" />
-                                            <literal-expression value="1" start-index="268" stop-index="268" />
-                                            <literal-expression value="2" start-index="271" stop-index="271" />
-                                        </in-right-value>
-                                    </predicate>
-                                    <predicate start-index="278" stop-index="303" literal-stop-index="304">
-                                        <column-left-value name="order_id" start-index="278" stop-index="287">
-                                            <owner name="o" start-index="278" stop-index="278" />
-                                        </column-left-value>
-                                        <between-right-value>
-                                            <between-parameter-marker-expression value="3" start-index="297" stop-index="297" />
-                                            <and-parameter-marker-expression value="4" start-index="303" stop-index="303" />
-                                            <between-literal-expression value="9" start-index="297" stop-index="297" />
-                                            <and-literal-expression value="10" start-index="303" stop-index="304" />
-                                        </between-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                            <group-by>
-                                <column-item name="user_id" start-index="314" stop-index="322" literal-start-index="315" literal-stop-index="323">
-                                    <owner name="i" start-index="314" stop-index="314" literal-start-index="315" literal-stop-index="315" />
-                                </column-item>
-                            </group-by>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+        <from>
+            <subquery-table alias="row_">
+                <subquery>
+                    <select>
+                        <projections start-index="22" stop-index="158">
+                            <top-projection alias="rownum_" start-index="22" stop-index="70">
+                                <top-value value="3" parameter-index="0" start-index="26" stop-index="26" />
+                            </top-projection>
+                            <column-projection name="item_id" start-index="84" stop-index="92">
+                                <owner name="i" start-index="84" stop-index="84" />
+                            </column-projection>
+                            <column-projection name="order_id" alias="order_id" start-index="95" stop-index="104">
+                                <owner name="o" start-index="95" stop-index="95" />
+                            </column-projection>
+                            <column-projection name="status" alias="status" start-index="119" stop-index="126">
+                                <owner name="o" start-index="119" stop-index="119" />
+                            </column-projection>
+                            <column-projection name="user_id" alias="user_id" start-index="139" stop-index="147">
+                                <owner name="o" start-index="139" stop-index="139" />
+                            </column-projection>
+                        </projections>
+                        <from>
+                            <join-table>
+                                <left>
+                                    <simple-table start-index="165" stop-index="173" name="t_order" alias="o" />
+                                </left>
+                                <right>
+                                    <simple-table start-index="180" stop-index="193" name="t_order_item" alias="i" />
+                                </right>
+                                <joinSpecification>
+                                    <and-predicate>
+                                        <predicate start-index="198" stop-index="218">
+                                            <column-left-value name="user_id" start-index="198" stop-index="206">
+                                                <owner name="o" start-index="198" stop-index="198" />
+                                            </column-left-value>
+                                            <column-right-value name="user_id" start-index="210" stop-index="218">
+                                                <owner name="i" start-index="210" stop-index="210" />
+                                            </column-right-value>
+                                        </predicate>
+                                        <predicate start-index="224" stop-index="246">
+                                            <column-left-value name="order_id" start-index="224" stop-index="233">
+                                                <owner name="o" start-index="224" stop-index="224" />
+                                            </column-left-value>
+                                            <column-right-value name="order_id" start-index="237" stop-index="246">
+                                                <owner name="i" start-index="237" stop-index="237" />
+                                            </column-right-value>
+                                        </predicate>
+                                    </and-predicate>
+                                </joinSpecification>
+                            </join-table>
+                        </from>
+                        <where start-index="248" stop-index="303" literal-stop-index="304">
+                            <and-predicate>
+                                <predicate start-index="254" stop-index="272">
+                                    <column-left-value name="user_id" start-index="254" stop-index="262">
+                                        <owner name="o" start-index="254" stop-index="254" />
+                                    </column-left-value>
+                                    <in-right-value>
+                                        <parameter-marker-expression value="1" start-index="268" stop-index="268" />
+                                        <parameter-marker-expression value="2" start-index="271" stop-index="271" />
+                                        <literal-expression value="1" start-index="268" stop-index="268" />
+                                        <literal-expression value="2" start-index="271" stop-index="271" />
+                                    </in-right-value>
+                                </predicate>
+                                <predicate start-index="278" stop-index="303" literal-stop-index="304">
+                                    <column-left-value name="order_id" start-index="278" stop-index="287">
+                                        <owner name="o" start-index="278" stop-index="278" />
+                                    </column-left-value>
+                                    <between-right-value>
+                                        <between-parameter-marker-expression value="3" start-index="297" stop-index="297" />
+                                        <and-parameter-marker-expression value="4" start-index="303" stop-index="303" />
+                                        <between-literal-expression value="9" start-index="297" stop-index="297" />
+                                        <and-literal-expression value="10" start-index="303" stop-index="304" />
+                                    </between-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                        <group-by>
+                            <column-item name="user_id" start-index="314" stop-index="322" literal-start-index="315" literal-stop-index="323">
+                                <owner name="i" start-index="314" stop-index="314" literal-start-index="315" literal-stop-index="315" />
+                            </column-item>
+                        </group-by>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
         <where start-index="333" stop-index="354" literal-start-index="334" literal-stop-index="355">
             <and-predicate>
                 <predicate start-index="339" stop-index="354" literal-start-index="340" literal-stop-index="355">
@@ -717,94 +707,92 @@
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable alias="row_">
-                    <subquery>
-                        <select>
-                            <projections start-index="22" stop-index="176">
-                                <top-projection alias="rownum_" start-index="22" stop-index="88">
-                                    <top-value value="3" parameter-index="0" start-index="26" stop-index="26" />
-                                </top-projection>
-                                <column-projection name="item_id" start-index="102" stop-index="110">
-                                    <owner name="i" start-index="102" stop-index="102" />
-                                </column-projection>
-                                <column-projection name="order_id" alias="order_id" start-index="113" stop-index="122">
-                                    <owner name="o" start-index="113" stop-index="113" />
-                                </column-projection>
-                                <column-projection name="status" alias="status" start-index="137" stop-index="144">
-                                    <owner name="o" start-index="137" stop-index="137" />
-                                </column-projection>
-                                <column-projection name="user_id" alias="user_id" start-index="157" stop-index="165">
-                                    <owner name="o" start-index="157" stop-index="157" />
-                                </column-projection>
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <table start-index="183" stop-index="191" name="t_order" alias="o" />
-                                </table-factor>
-                                <join-table>
-                                    <table-factor>
-                                        <table start-index="198" stop-index="211" name="t_order_item" alias="i" />
-                                    </table-factor>
-                                    <joinSpecification>
-                                        <and-predicate>
-                                            <predicate start-index="216" stop-index="236">
-                                                <column-left-value name="user_id" start-index="216" stop-index="224">
-                                                    <owner name="o" start-index="216" stop-index="216" />
-                                                </column-left-value>
-                                                <column-right-value name="user_id" start-index="228" stop-index="236">
-                                                    <owner name="i" start-index="228" stop-index="228" />
-                                                </column-right-value>
-                                            </predicate>
-                                            <predicate start-index="242" stop-index="264">
-                                                <column-left-value name="order_id" start-index="242" stop-index="251">
-                                                    <owner name="o" start-index="242" stop-index="242" />
-                                                </column-left-value>
-                                                <column-right-value name="order_id" start-index="255" stop-index="264">
-                                                    <owner name="i" start-index="255" stop-index="255" />
-                                                </column-right-value>
-                                            </predicate>
-                                        </and-predicate>
-                                    </joinSpecification>
-                                </join-table>
-                            </table-reference>
-                            <where start-index="266" stop-index="321" literal-stop-index="322">
-                                <and-predicate>
-                                    <predicate start-index="272" stop-index="290">
-                                        <column-left-value name="user_id" start-index="272" stop-index="280">
-                                            <owner name="o" start-index="272" stop-index="272" />
-                                        </column-left-value>
-                                        <in-right-value>
-                                            <parameter-marker-expression value="1" start-index="286" stop-index="286" />
-                                            <parameter-marker-expression value="2" start-index="289" stop-index="289" />
-                                            <literal-expression value="1" start-index="286" stop-index="286" />
-                                            <literal-expression value="2" start-index="289" stop-index="289" />
-                                        </in-right-value>
-                                    </predicate>
-                                    <predicate start-index="296" stop-index="321" literal-stop-index="322">
-                                        <column-left-value name="order_id" start-index="296" stop-index="305">
-                                            <owner name="o" start-index="296" stop-index="296" />
-                                        </column-left-value>
-                                        <between-right-value>
-                                            <between-parameter-marker-expression value="3" start-index="315" stop-index="315" />
-                                            <and-parameter-marker-expression value="4" start-index="321" stop-index="321" />
-                                            <between-literal-expression value="9" start-index="315" stop-index="315" />
-                                            <and-literal-expression value="10" start-index="321" stop-index="322" />
-                                        </between-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                            <group-by>
-                                <column-item name="user_id" start-index="332" stop-index="340" literal-start-index="333" literal-stop-index="341">
-                                    <owner name="i" start-index="332" stop-index="332" literal-start-index="333" literal-stop-index="333" />
-                                </column-item>
-                            </group-by>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+        <from>
+            <subquery-table alias="row_">
+                <subquery>
+                    <select>
+                        <projections start-index="22" stop-index="176">
+                            <top-projection alias="rownum_" start-index="22" stop-index="88">
+                                <top-value value="3" parameter-index="0" start-index="26" stop-index="26" />
+                            </top-projection>
+                            <column-projection name="item_id" start-index="102" stop-index="110">
+                                <owner name="i" start-index="102" stop-index="102" />
+                            </column-projection>
+                            <column-projection name="order_id" alias="order_id" start-index="113" stop-index="122">
+                                <owner name="o" start-index="113" stop-index="113" />
+                            </column-projection>
+                            <column-projection name="status" alias="status" start-index="137" stop-index="144">
+                                <owner name="o" start-index="137" stop-index="137" />
+                            </column-projection>
+                            <column-projection name="user_id" alias="user_id" start-index="157" stop-index="165">
+                                <owner name="o" start-index="157" stop-index="157" />
+                            </column-projection>
+                        </projections>
+                        <from>
+                            <join-table>
+                                <left>
+                                    <simple-table start-index="183" stop-index="191" name="t_order" alias="o" />
+                                </left>
+                                <right>
+                                    <simple-table start-index="198" stop-index="211" name="t_order_item" alias="i" />
+                                </right>
+                                <joinSpecification>
+                                    <and-predicate>
+                                        <predicate start-index="216" stop-index="236">
+                                            <column-left-value name="user_id" start-index="216" stop-index="224">
+                                                <owner name="o" start-index="216" stop-index="216" />
+                                            </column-left-value>
+                                            <column-right-value name="user_id" start-index="228" stop-index="236">
+                                                <owner name="i" start-index="228" stop-index="228" />
+                                            </column-right-value>
+                                        </predicate>
+                                        <predicate start-index="242" stop-index="264">
+                                            <column-left-value name="order_id" start-index="242" stop-index="251">
+                                                <owner name="o" start-index="242" stop-index="242" />
+                                            </column-left-value>
+                                            <column-right-value name="order_id" start-index="255" stop-index="264">
+                                                <owner name="i" start-index="255" stop-index="255" />
+                                            </column-right-value>
+                                        </predicate>
+                                    </and-predicate>
+                                </joinSpecification>
+                            </join-table>
+                        </from>
+                        <where start-index="266" stop-index="321" literal-stop-index="322">
+                            <and-predicate>
+                                <predicate start-index="272" stop-index="290">
+                                    <column-left-value name="user_id" start-index="272" stop-index="280">
+                                        <owner name="o" start-index="272" stop-index="272" />
+                                    </column-left-value>
+                                    <in-right-value>
+                                        <parameter-marker-expression value="1" start-index="286" stop-index="286" />
+                                        <parameter-marker-expression value="2" start-index="289" stop-index="289" />
+                                        <literal-expression value="1" start-index="286" stop-index="286" />
+                                        <literal-expression value="2" start-index="289" stop-index="289" />
+                                    </in-right-value>
+                                </predicate>
+                                <predicate start-index="296" stop-index="321" literal-stop-index="322">
+                                    <column-left-value name="order_id" start-index="296" stop-index="305">
+                                        <owner name="o" start-index="296" stop-index="296" />
+                                    </column-left-value>
+                                    <between-right-value>
+                                        <between-parameter-marker-expression value="3" start-index="315" stop-index="315" />
+                                        <and-parameter-marker-expression value="4" start-index="321" stop-index="321" />
+                                        <between-literal-expression value="9" start-index="315" stop-index="315" />
+                                        <and-literal-expression value="10" start-index="321" stop-index="322" />
+                                    </between-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                        <group-by>
+                            <column-item name="user_id" start-index="332" stop-index="340" literal-start-index="333" literal-stop-index="341">
+                                <owner name="i" start-index="332" stop-index="332" literal-start-index="333" literal-stop-index="333" />
+                            </column-item>
+                        </group-by>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
         <where start-index="351" stop-index="372" literal-start-index="352" literal-stop-index="373">
             <and-predicate>
                 <predicate start-index="357" stop-index="372" literal-start-index="358" literal-stop-index="373">
@@ -825,94 +813,92 @@
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable alias="row_">
-                    <subquery>
-                        <select>
-                            <projections start-index="22" stop-index="160">
-                                <top-projection alias="rownum_" start-index="22" stop-index="72">
-                                    <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
-                                </top-projection>
-                                <column-projection name="item_id" start-index="86" stop-index="94">
-                                    <owner name="i" start-index="86" stop-index="86" />
-                                </column-projection>
-                                <column-projection name="order_id" alias="order_id" start-index="97" stop-index="106">
-                                    <owner name="o" start-index="97" stop-index="97" />
-                                </column-projection>
-                                <column-projection name="status" alias="status" start-index="121" stop-index="128">
-                                    <owner name="o" start-index="121" stop-index="121" />
-                                </column-projection>
-                                <column-projection name="user_id" alias="user_id" start-index="141" stop-index="149">
-                                    <owner name="o" start-index="141" stop-index="141" />
-                                </column-projection>
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <table start-index="167" stop-index="175" name="t_order" alias="o" />
-                                </table-factor>
-                                <join-table>
-                                    <table-factor>
-                                        <table start-index="182" stop-index="195" name="t_order_item" alias="i" />
-                                    </table-factor>
-                                    <joinSpecification>
-                                        <and-predicate>
-                                            <predicate start-index="200" stop-index="220">
-                                                <column-left-value name="user_id" start-index="200" stop-index="208">
-                                                    <owner name="o" start-index="200" stop-index="200" />
-                                                </column-left-value>
-                                                <column-right-value name="user_id" start-index="212" stop-index="220">
-                                                    <owner name="i" start-index="212" stop-index="212" />
-                                                </column-right-value>
-                                            </predicate>
-                                            <predicate start-index="226" stop-index="248">
-                                                <column-left-value name="order_id" start-index="226" stop-index="235">
-                                                    <owner name="o" start-index="226" stop-index="226" />
-                                                </column-left-value>
-                                                <column-right-value name="order_id" start-index="239" stop-index="248">
-                                                    <owner name="i" start-index="239" stop-index="239" />
-                                                </column-right-value>
-                                            </predicate>
-                                        </and-predicate>
-                                    </joinSpecification>
-                                </join-table>
-                            </table-reference>
-                            <where start-index="250" stop-index="305" literal-stop-index="306">
-                                <and-predicate>
-                                    <predicate start-index="256" stop-index="274">
-                                        <column-left-value name="user_id" start-index="256" stop-index="264">
-                                            <owner name="o" start-index="256" stop-index="256" />
-                                        </column-left-value>
-                                        <in-right-value>
-                                            <parameter-marker-expression value="1" start-index="270" stop-index="270" />
-                                            <parameter-marker-expression value="2" start-index="273" stop-index="273" />
-                                            <literal-expression value="1" start-index="270" stop-index="270" />
-                                            <literal-expression value="2" start-index="273" stop-index="273" />
-                                        </in-right-value>
-                                    </predicate>
-                                    <predicate start-index="280" stop-index="305" literal-stop-index="306">
-                                        <column-left-value name="order_id" start-index="280" stop-index="289">
-                                            <owner name="o" start-index="280" stop-index="280" />
-                                        </column-left-value>
-                                        <between-right-value>
-                                            <between-parameter-marker-expression value="3" start-index="299" stop-index="299" />
-                                            <and-parameter-marker-expression value="4" start-index="305" stop-index="305" />
-                                            <between-literal-expression value="9" start-index="299" stop-index="299" />
-                                            <and-literal-expression value="10" start-index="305" stop-index="306" />
-                                        </between-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                            <group-by>
-                                <column-item name="user_id" start-index="316" stop-index="324" literal-start-index="317" literal-stop-index="325">
-                                    <owner name="i" start-index="316" stop-index="316" literal-start-index="317" literal-stop-index="317" />
-                                </column-item>
-                            </group-by>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+        <from>
+            <subquery-table alias="row_">
+                <subquery>
+                    <select>
+                        <projections start-index="22" stop-index="160">
+                            <top-projection alias="rownum_" start-index="22" stop-index="72">
+                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
+                            </top-projection>
+                            <column-projection name="item_id" start-index="86" stop-index="94">
+                                <owner name="i" start-index="86" stop-index="86" />
+                            </column-projection>
+                            <column-projection name="order_id" alias="order_id" start-index="97" stop-index="106">
+                                <owner name="o" start-index="97" stop-index="97" />
+                            </column-projection>
+                            <column-projection name="status" alias="status" start-index="121" stop-index="128">
+                                <owner name="o" start-index="121" stop-index="121" />
+                            </column-projection>
+                            <column-projection name="user_id" alias="user_id" start-index="141" stop-index="149">
+                                <owner name="o" start-index="141" stop-index="141" />
+                            </column-projection>
+                        </projections>
+                        <from>
+                            <join-table>
+                                <left>
+                                    <simple-table start-index="167" stop-index="175" name="t_order" alias="o" />
+                                </left>
+                                <right>
+                                    <simple-table start-index="182" stop-index="195" name="t_order_item" alias="i" />
+                                </right>
+                                <joinSpecification>
+                                    <and-predicate>
+                                        <predicate start-index="200" stop-index="220">
+                                            <column-left-value name="user_id" start-index="200" stop-index="208">
+                                                <owner name="o" start-index="200" stop-index="200" />
+                                            </column-left-value>
+                                            <column-right-value name="user_id" start-index="212" stop-index="220">
+                                                <owner name="i" start-index="212" stop-index="212" />
+                                            </column-right-value>
+                                        </predicate>
+                                        <predicate start-index="226" stop-index="248">
+                                            <column-left-value name="order_id" start-index="226" stop-index="235">
+                                                <owner name="o" start-index="226" stop-index="226" />
+                                            </column-left-value>
+                                            <column-right-value name="order_id" start-index="239" stop-index="248">
+                                                <owner name="i" start-index="239" stop-index="239" />
+                                            </column-right-value>
+                                        </predicate>
+                                    </and-predicate>
+                                </joinSpecification>
+                            </join-table>
+                        </from>
+                        <where start-index="250" stop-index="305" literal-stop-index="306">
+                            <and-predicate>
+                                <predicate start-index="256" stop-index="274">
+                                    <column-left-value name="user_id" start-index="256" stop-index="264">
+                                        <owner name="o" start-index="256" stop-index="256" />
+                                    </column-left-value>
+                                    <in-right-value>
+                                        <parameter-marker-expression value="1" start-index="270" stop-index="270" />
+                                        <parameter-marker-expression value="2" start-index="273" stop-index="273" />
+                                        <literal-expression value="1" start-index="270" stop-index="270" />
+                                        <literal-expression value="2" start-index="273" stop-index="273" />
+                                    </in-right-value>
+                                </predicate>
+                                <predicate start-index="280" stop-index="305" literal-stop-index="306">
+                                    <column-left-value name="order_id" start-index="280" stop-index="289">
+                                        <owner name="o" start-index="280" stop-index="280" />
+                                    </column-left-value>
+                                    <between-right-value>
+                                        <between-parameter-marker-expression value="3" start-index="299" stop-index="299" />
+                                        <and-parameter-marker-expression value="4" start-index="305" stop-index="305" />
+                                        <between-literal-expression value="9" start-index="299" stop-index="299" />
+                                        <and-literal-expression value="10" start-index="305" stop-index="306" />
+                                    </between-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                        <group-by>
+                            <column-item name="user_id" start-index="316" stop-index="324" literal-start-index="317" literal-stop-index="325">
+                                <owner name="i" start-index="316" stop-index="316" literal-start-index="317" literal-stop-index="317" />
+                            </column-item>
+                        </group-by>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
         <where start-index="335" stop-index="356" literal-start-index="336" literal-stop-index="357">
             <and-predicate>
                 <predicate start-index="341" stop-index="356" literal-start-index="342" literal-stop-index="357">
@@ -933,94 +919,92 @@
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable alias="row_">
-                    <subquery>
-                        <select>
-                            <projections start-index="22" stop-index="178">
-                                <top-projection alias="rownum_" start-index="22" stop-index="90">
-                                    <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
-                                </top-projection>
-                                <column-projection name="item_id" start-index="104" stop-index="112">
-                                    <owner name="i" start-index="104" stop-index="104" />
-                                </column-projection>
-                                <column-projection name="order_id" alias="order_id" start-index="115" stop-index="124">
-                                    <owner name="o" start-index="115" stop-index="115" />
-                                </column-projection>
-                                <column-projection name="status" alias="status" start-index="139" stop-index="146">
-                                    <owner name="o" start-index="139" stop-index="139" />
-                                </column-projection>
-                                <column-projection name="user_id" alias="user_id" start-index="159" stop-index="167">
-                                    <owner name="o" start-index="159" stop-index="159" />
-                                </column-projection>
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <table start-index="185" stop-index="193" name="t_order" alias="o" />
-                                </table-factor>
-                                <join-table>
-                                    <table-factor>
-                                        <table start-index="200" stop-index="213" name="t_order_item" alias="i" />
-                                    </table-factor>
-                                    <joinSpecification>
-                                        <and-predicate>
-                                            <predicate start-index="218" stop-index="238">
-                                                <column-left-value name="user_id" start-index="218" stop-index="226">
-                                                    <owner name="o" start-index="218" stop-index="218" />
-                                                </column-left-value>
-                                                <column-right-value name="user_id" start-index="230" stop-index="238">
-                                                    <owner name="i" start-index="230" stop-index="230" />
-                                                </column-right-value>
-                                            </predicate>
-                                            <predicate start-index="244" stop-index="266">
-                                                <column-left-value name="order_id" start-index="244" stop-index="253">
-                                                    <owner name="o" start-index="244" stop-index="244" />
-                                                </column-left-value>
-                                                <column-right-value name="order_id" start-index="257" stop-index="266">
-                                                    <owner name="i" start-index="257" stop-index="257" />
-                                                </column-right-value>
-                                            </predicate>
-                                        </and-predicate>
-                                    </joinSpecification>
-                                </join-table>
-                            </table-reference>
-                            <where start-index="268" stop-index="323" literal-stop-index="324">
-                                <and-predicate>
-                                    <predicate start-index="274" stop-index="292">
-                                        <column-left-value name="user_id" start-index="274" stop-index="282">
-                                            <owner name="o" start-index="274" stop-index="274" />
-                                        </column-left-value>
-                                        <in-right-value>
-                                            <parameter-marker-expression value="1" start-index="288" stop-index="288" />
-                                            <parameter-marker-expression value="2" start-index="291" stop-index="291" />
-                                            <literal-expression value="1" start-index="288" stop-index="288" />
-                                            <literal-expression value="2" start-index="291" stop-index="291" />
-                                        </in-right-value>
-                                    </predicate>
-                                    <predicate start-index="298" stop-index="323" literal-stop-index="324">
-                                        <column-left-value name="order_id" start-index="298" stop-index="307">
-                                            <owner name="o" start-index="298" stop-index="298" />
-                                        </column-left-value>
-                                        <between-right-value>
-                                            <between-parameter-marker-expression value="3" start-index="317" stop-index="317" />
-                                            <and-parameter-marker-expression value="4" start-index="323" stop-index="323" />
-                                            <between-literal-expression value="9" start-index="317" stop-index="317" />
-                                            <and-literal-expression value="10" start-index="323" stop-index="324" />
-                                        </between-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                            <group-by>
-                                <column-item name="user_id" start-index="334" stop-index="342" literal-start-index="335" literal-stop-index="343">
-                                    <owner name="i" start-index="334" stop-index="334" literal-start-index="335" literal-stop-index="335" />
-                                </column-item>
-                            </group-by>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+        <from>
+            <subquery-table alias="row_">
+                <subquery>
+                    <select>
+                        <projections start-index="22" stop-index="178">
+                            <top-projection alias="rownum_" start-index="22" stop-index="90">
+                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
+                            </top-projection>
+                            <column-projection name="item_id" start-index="104" stop-index="112">
+                                <owner name="i" start-index="104" stop-index="104" />
+                            </column-projection>
+                            <column-projection name="order_id" alias="order_id" start-index="115" stop-index="124">
+                                <owner name="o" start-index="115" stop-index="115" />
+                            </column-projection>
+                            <column-projection name="status" alias="status" start-index="139" stop-index="146">
+                                <owner name="o" start-index="139" stop-index="139" />
+                            </column-projection>
+                            <column-projection name="user_id" alias="user_id" start-index="159" stop-index="167">
+                                <owner name="o" start-index="159" stop-index="159" />
+                            </column-projection>
+                        </projections>
+                        <from>
+                            <join-table>
+                                <left>
+                                    <simple-table start-index="185" stop-index="193" name="t_order" alias="o" />
+                                </left>
+                                <right>
+                                    <simple-table start-index="200" stop-index="213" name="t_order_item" alias="i" />
+                                </right>
+                                <joinSpecification>
+                                    <and-predicate>
+                                        <predicate start-index="218" stop-index="238">
+                                            <column-left-value name="user_id" start-index="218" stop-index="226">
+                                                <owner name="o" start-index="218" stop-index="218" />
+                                            </column-left-value>
+                                            <column-right-value name="user_id" start-index="230" stop-index="238">
+                                                <owner name="i" start-index="230" stop-index="230" />
+                                            </column-right-value>
+                                        </predicate>
+                                        <predicate start-index="244" stop-index="266">
+                                            <column-left-value name="order_id" start-index="244" stop-index="253">
+                                                <owner name="o" start-index="244" stop-index="244" />
+                                            </column-left-value>
+                                            <column-right-value name="order_id" start-index="257" stop-index="266">
+                                                <owner name="i" start-index="257" stop-index="257" />
+                                            </column-right-value>
+                                        </predicate>
+                                    </and-predicate>
+                                </joinSpecification>
+                            </join-table>
+                        </from>
+                        <where start-index="268" stop-index="323" literal-stop-index="324">
+                            <and-predicate>
+                                <predicate start-index="274" stop-index="292">
+                                    <column-left-value name="user_id" start-index="274" stop-index="282">
+                                        <owner name="o" start-index="274" stop-index="274" />
+                                    </column-left-value>
+                                    <in-right-value>
+                                        <parameter-marker-expression value="1" start-index="288" stop-index="288" />
+                                        <parameter-marker-expression value="2" start-index="291" stop-index="291" />
+                                        <literal-expression value="1" start-index="288" stop-index="288" />
+                                        <literal-expression value="2" start-index="291" stop-index="291" />
+                                    </in-right-value>
+                                </predicate>
+                                <predicate start-index="298" stop-index="323" literal-stop-index="324">
+                                    <column-left-value name="order_id" start-index="298" stop-index="307">
+                                        <owner name="o" start-index="298" stop-index="298" />
+                                    </column-left-value>
+                                    <between-right-value>
+                                        <between-parameter-marker-expression value="3" start-index="317" stop-index="317" />
+                                        <and-parameter-marker-expression value="4" start-index="323" stop-index="323" />
+                                        <between-literal-expression value="9" start-index="317" stop-index="317" />
+                                        <and-literal-expression value="10" start-index="323" stop-index="324" />
+                                    </between-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                        <group-by>
+                            <column-item name="user_id" start-index="334" stop-index="342" literal-start-index="335" literal-stop-index="343">
+                                <owner name="i" start-index="334" stop-index="334" literal-start-index="335" literal-stop-index="335" />
+                            </column-item>
+                        </group-by>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
         <where start-index="353" stop-index="374" literal-start-index="354" literal-stop-index="375">
             <and-predicate>
                 <predicate start-index="359" stop-index="374" literal-start-index="360" literal-stop-index="375">
@@ -1041,121 +1025,117 @@
         <projections start-index="7" stop-index="7">
             <shorthand-projection  start-index="7" stop-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable start-index="14" stop-index="382" alias="t">
-                    <subquery>
-                        <select>
-                            <projections start-index="22" stop-index="43">
-                                <shorthand-projection start-index="22" stop-index="27" >
-                                    <owner start-index="22" stop-index="25" name="row_"/>
-                                </shorthand-projection>
-                                <column-projection start-index="30" stop-index="35" name="rownum"  alias="rownum_"/>
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <subqueryTable alias="row_">
-                                        <subquery>
-                                            <select>
-                                                <projections start-index="58" stop-index="139">
-                                                    <column-projection start-index="58" stop-index="73" name="order_id" alias="order_id">
-                                                        <owner start-index="58" stop-index="64" name="order0_"/>
-                                                    </column-projection>
-                                                    <column-projection start-index="88" stop-index="101" name="status" alias="status">
-                                                        <owner start-index="88" stop-index="94" name="order0_"/>
-                                                    </column-projection>
-                                                    <column-projection start-index="114" stop-index="128" name="user_id" alias="user_id">
-                                                        <owner start-index="114" stop-index="120" name="order0_"/>
-                                                    </column-projection>
-                                                </projections>
-                                                <table-reference>
-                                                    <table-factor>
-                                                        <table start-index="146" stop-index="160" name="t_order" alias="order0_"/>
-                                                    </table-factor>
-                                                    <join-table>
-                                                        <table-factor>
-                                                            <table start-index="167" stop-index="180" name="t_order_item" alias="i"/>
-                                                        </table-factor>
-                                                        <joinSpecification>
-                                                            <and-predicate>
-                                                                <predicate start-index="185" stop-index="211">
-                                                                    <column-left-value start-index="185" stop-index="199" name="user_id">
-                                                                        <owner start-index="185" stop-index="191" name="order0_"/>
-                                                                    </column-left-value>
-                                                                    <column-right-value start-index="203" stop-index="211" name="user_id">
-                                                                        <owner start-index="203" stop-index="203" name="i"/>
-                                                                    </column-right-value>
-                                                                </predicate>
-                                                                <predicate start-index="217" stop-index="245">
-                                                                    <column-left-value start-index="217" stop-index="232" name="order_id">
-                                                                        <owner start-index="217" stop-index="223" name="order0_"/>
-                                                                    </column-left-value>
-                                                                    <column-right-value start-index="236" stop-index="245" name="order_id">
-                                                                        <owner start-index="236" stop-index="236" name="i"/>
-                                                                    </column-right-value>
-                                                                </predicate>
-                                                            </and-predicate>
-                                                        </joinSpecification>
-                                                    </join-table>
-                                                </table-reference>
-                                                <where start-index="247" stop-index="314">
+        <from>
+            <subquery-table start-index="14" stop-index="382" alias="t">
+                <subquery>
+                    <select>
+                        <projections start-index="22" stop-index="43">
+                            <shorthand-projection start-index="22" stop-index="27" >
+                                <owner start-index="22" stop-index="25" name="row_"/>
+                            </shorthand-projection>
+                            <column-projection start-index="30" stop-index="35" name="rownum"  alias="rownum_"/>
+                        </projections>
+                        <from>
+                            <subquery-table alias="row_">
+                                <subquery>
+                                    <select>
+                                        <projections start-index="58" stop-index="139">
+                                            <column-projection start-index="58" stop-index="73" name="order_id" alias="order_id">
+                                                <owner start-index="58" stop-index="64" name="order0_"/>
+                                            </column-projection>
+                                            <column-projection start-index="88" stop-index="101" name="status" alias="status">
+                                                <owner start-index="88" stop-index="94" name="order0_"/>
+                                            </column-projection>
+                                            <column-projection start-index="114" stop-index="128" name="user_id" alias="user_id">
+                                                <owner start-index="114" stop-index="120" name="order0_"/>
+                                            </column-projection>
+                                        </projections>
+                                        <from>
+                                            <join-table>
+                                                <left>
+                                                    <simple-table start-index="146" stop-index="160" name="t_order" alias="order0_"/>
+                                                </left>
+                                                <right>
+                                                    <simple-table start-index="167" stop-index="180" name="t_order_item" alias="i"/>
+                                                </right>
+                                                <joinSpecification>
                                                     <and-predicate>
-                                                        <predicate start-index="253" stop-index="277">
-                                                            <column-left-value start-index="253" stop-index="267" name="user_id">
-                                                                <owner start-index="253" stop-index="259" name="order0_" />
+                                                        <predicate start-index="185" stop-index="211">
+                                                            <column-left-value start-index="185" stop-index="199" name="user_id">
+                                                                <owner start-index="185" stop-index="191" name="order0_"/>
                                                             </column-left-value>
-                                                            <in-right-value>
-                                                                <literal-expression start-index="273" stop-index="273" value="1" />
-                                                                <parameter-marker-expression start-index="273" stop-index="273" value="0"/>
-                                                                <literal-expression start-index="276" stop-index="276" value="2"/>
-                                                                <parameter-marker-expression start-index="276" stop-index="276" value="1" />
-                                                            </in-right-value>
+                                                            <column-right-value start-index="203" stop-index="211" name="user_id">
+                                                                <owner start-index="203" stop-index="203" name="i"/>
+                                                            </column-right-value>
                                                         </predicate>
-                                                        <predicate start-index="283" stop-index="314">
-                                                            <column-left-value start-index="283" stop-index="298" name="order_id">
-                                                                <owner start-index="283" stop-index="289" name="order0_"/>
+                                                        <predicate start-index="217" stop-index="245">
+                                                            <column-left-value start-index="217" stop-index="232" name="order_id">
+                                                                <owner start-index="217" stop-index="223" name="order0_"/>
                                                             </column-left-value>
-                                                            <between-right-value>
-                                                                <between-literal-expression start-index="308" stop-index="308" value="9" />
-                                                                <between-parameter-marker-expression start-index="308" stop-index="308" value="2"/>
-                                                                <and-literal-expression start-index="314" stop-index="314" value="7" />
-                                                                <and-parameter-marker-expression start-index="314" stop-index="314" value="3" />
-                                                            </between-right-value>
+                                                            <column-right-value start-index="236" stop-index="245" name="order_id">
+                                                                <owner start-index="236" stop-index="236" name="i"/>
+                                                            </column-right-value>
                                                         </predicate>
                                                     </and-predicate>
-                                                </where>
-                                                <group-by>
-                                                    <column-item start-index="325" stop-index="333" name="item_id">
-                                                        <owner start-index="325" stop-index="325" name="i"/>
-                                                    </column-item>
-                                                </group-by>
-                                                <order-by>
-                                                    <column-item start-index="344" stop-index="352" name="item_id" order-direction="DESC">
-                                                        <owner start-index="344" stop-index="344" name="i"/>
-                                                    </column-item>
-                                                </order-by>
-                                            </select>
-                                        </subquery>
-                                    </subqueryTable>
-                                </table-factor>
-                            </table-reference>
-                            <where start-index="365" stop-index="381">
-                                <and-predicate>
-                                    <predicate start-index="371" stop-index="381">
-                                        <column-left-value start-index="371" stop-index="376" name="rownum" />
-                                        <operator type="&lt;="/>
-                                        <compare-right-value>
-                                            <literal-expression start-index="381" stop-index="381" value="5"/>
-                                            <parameter-marker-expression start-index="381" stop-index="381" value="4"/>
-                                        </compare-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+                                                </joinSpecification>
+                                            </join-table>
+                                        </from>
+                                        <where start-index="247" stop-index="314">
+                                            <and-predicate>
+                                                <predicate start-index="253" stop-index="277">
+                                                    <column-left-value start-index="253" stop-index="267" name="user_id">
+                                                        <owner start-index="253" stop-index="259" name="order0_" />
+                                                    </column-left-value>
+                                                    <in-right-value>
+                                                        <literal-expression start-index="273" stop-index="273" value="1" />
+                                                        <parameter-marker-expression start-index="273" stop-index="273" value="0"/>
+                                                        <literal-expression start-index="276" stop-index="276" value="2"/>
+                                                        <parameter-marker-expression start-index="276" stop-index="276" value="1" />
+                                                    </in-right-value>
+                                                </predicate>
+                                                <predicate start-index="283" stop-index="314">
+                                                    <column-left-value start-index="283" stop-index="298" name="order_id">
+                                                        <owner start-index="283" stop-index="289" name="order0_"/>
+                                                    </column-left-value>
+                                                    <between-right-value>
+                                                        <between-literal-expression start-index="308" stop-index="308" value="9" />
+                                                        <between-parameter-marker-expression start-index="308" stop-index="308" value="2"/>
+                                                        <and-literal-expression start-index="314" stop-index="314" value="7" />
+                                                        <and-parameter-marker-expression start-index="314" stop-index="314" value="3" />
+                                                    </between-right-value>
+                                                </predicate>
+                                            </and-predicate>
+                                        </where>
+                                        <group-by>
+                                            <column-item start-index="325" stop-index="333" name="item_id">
+                                                <owner start-index="325" stop-index="325" name="i"/>
+                                            </column-item>
+                                        </group-by>
+                                        <order-by>
+                                            <column-item start-index="344" stop-index="352" name="item_id" order-direction="DESC">
+                                                <owner start-index="344" stop-index="344" name="i"/>
+                                            </column-item>
+                                        </order-by>
+                                    </select>
+                                </subquery>
+                            </subquery-table>
+                        </from>
+                        <where start-index="365" stop-index="381">
+                            <and-predicate>
+                                <predicate start-index="371" stop-index="381">
+                                    <column-left-value start-index="371" stop-index="376" name="rownum" />
+                                    <operator type="&lt;="/>
+                                    <compare-right-value>
+                                        <literal-expression start-index="381" stop-index="381" value="5"/>
+                                        <parameter-marker-expression start-index="381" stop-index="381" value="4"/>
+                                    </compare-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
         <where start-index="386" stop-index="404">
             <and-predicate>
                 <predicate start-index="392" stop-index="404">
@@ -1176,121 +1156,117 @@
         <projections start-index="7" stop-index="7">
             <shorthand-projection  start-index="7" stop-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable start-index="14" stop-index="382" alias="t">
-                    <subquery>
-                        <select>
-                            <projections start-index="22" stop-index="43">
-                                <shorthand-projection start-index="22" stop-index="27" >
-                                    <owner start-index="22" stop-index="25" name="row_"/>
-                                </shorthand-projection>
-                                <column-projection start-index="30" stop-index="35" name="rownum"  alias="rownum_"/>
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <subqueryTable alias="row_">
-                                        <subquery>
-                                            <select>
-                                                <projections start-index="58" stop-index="139">
-                                                    <column-projection start-index="58" stop-index="73" name="order_id" alias="order_id">
-                                                        <owner start-index="58" stop-index="64" name="order0_"/>
-                                                    </column-projection>
-                                                    <column-projection start-index="88" stop-index="101" name="status" alias="status">
-                                                        <owner start-index="88" stop-index="94" name="order0_"/>
-                                                    </column-projection>
-                                                    <column-projection start-index="114" stop-index="128" name="user_id" alias="user_id">
-                                                        <owner start-index="114" stop-index="120" name="order0_"/>
-                                                    </column-projection>
-                                                </projections>
-                                                <table-reference>
-                                                    <table-factor>
-                                                        <table start-index="146" stop-index="160" name="t_order" alias="order0_"/>
-                                                    </table-factor>
-                                                    <join-table>
-                                                        <table-factor>
-                                                            <table start-index="167" stop-index="180" name="t_order_item" alias="i"/>
-                                                        </table-factor>
-                                                        <joinSpecification>
-                                                            <and-predicate>
-                                                                <predicate start-index="185" stop-index="211">
-                                                                    <column-left-value start-index="185" stop-index="199" name="user_id">
-                                                                        <owner start-index="185" stop-index="191" name="order0_"/>
-                                                                    </column-left-value>
-                                                                    <column-right-value start-index="203" stop-index="211" name="user_id">
-                                                                        <owner start-index="203" stop-index="203" name="i"/>
-                                                                    </column-right-value>
-                                                                </predicate>
-                                                                <predicate start-index="217" stop-index="245">
-                                                                    <column-left-value start-index="217" stop-index="232" name="order_id">
-                                                                        <owner start-index="217" stop-index="223" name="order0_"/>
-                                                                    </column-left-value>
-                                                                    <column-right-value start-index="236" stop-index="245" name="order_id">
-                                                                        <owner start-index="236" stop-index="236" name="i"/>
-                                                                    </column-right-value>
-                                                                </predicate>
-                                                            </and-predicate>
-                                                        </joinSpecification>
-                                                    </join-table>
-                                                </table-reference>
-                                                <where start-index="247" stop-index="314">
+        <from>
+            <subquery-table start-index="14" stop-index="382" alias="t">
+                <subquery>
+                    <select>
+                        <projections start-index="22" stop-index="43">
+                            <shorthand-projection start-index="22" stop-index="27" >
+                                <owner start-index="22" stop-index="25" name="row_"/>
+                            </shorthand-projection>
+                            <column-projection start-index="30" stop-index="35" name="rownum"  alias="rownum_"/>
+                        </projections>
+                        <from>
+                            <subquery-table alias="row_">
+                                <subquery>
+                                    <select>
+                                        <projections start-index="58" stop-index="139">
+                                            <column-projection start-index="58" stop-index="73" name="order_id" alias="order_id">
+                                                <owner start-index="58" stop-index="64" name="order0_"/>
+                                            </column-projection>
+                                            <column-projection start-index="88" stop-index="101" name="status" alias="status">
+                                                <owner start-index="88" stop-index="94" name="order0_"/>
+                                            </column-projection>
+                                            <column-projection start-index="114" stop-index="128" name="user_id" alias="user_id">
+                                                <owner start-index="114" stop-index="120" name="order0_"/>
+                                            </column-projection>
+                                        </projections>
+                                        <from>
+                                            <join-table>
+                                                <left>
+                                                    <simple-table start-index="146" stop-index="160" name="t_order" alias="order0_"/>
+                                                </left>
+                                                <right>
+                                                    <simple-table start-index="167" stop-index="180" name="t_order_item" alias="i"/>
+                                                </right>
+                                                <joinSpecification>
                                                     <and-predicate>
-                                                        <predicate start-index="253" stop-index="277">
-                                                            <column-left-value start-index="253" stop-index="267" name="user_id">
-                                                                <owner start-index="253" stop-index="259" name="order0_" />
+                                                        <predicate start-index="185" stop-index="211">
+                                                            <column-left-value start-index="185" stop-index="199" name="user_id">
+                                                                <owner start-index="185" stop-index="191" name="order0_"/>
                                                             </column-left-value>
-                                                            <in-right-value>
-                                                                <literal-expression start-index="273" stop-index="273" value="1" />
-                                                                <parameter-marker-expression start-index="273" stop-index="273" value="0"/>
-                                                                <literal-expression start-index="276" stop-index="276" value="2"/>
-                                                                <parameter-marker-expression start-index="276" stop-index="276" value="1" />
-                                                            </in-right-value>
+                                                            <column-right-value start-index="203" stop-index="211" name="user_id">
+                                                                <owner start-index="203" stop-index="203" name="i"/>
+                                                            </column-right-value>
                                                         </predicate>
-                                                        <predicate start-index="283" stop-index="314">
-                                                            <column-left-value start-index="283" stop-index="298" name="order_id">
-                                                                <owner start-index="283" stop-index="289" name="order0_"/>
+                                                        <predicate start-index="217" stop-index="245">
+                                                            <column-left-value start-index="217" stop-index="232" name="order_id">
+                                                                <owner start-index="217" stop-index="223" name="order0_"/>
                                                             </column-left-value>
-                                                            <between-right-value>
-                                                                <between-literal-expression start-index="308" stop-index="308" value="9" />
-                                                                <between-parameter-marker-expression start-index="308" stop-index="308" value="2"/>
-                                                                <and-literal-expression start-index="314" stop-index="314" value="7" />
-                                                                <and-parameter-marker-expression start-index="314" stop-index="314" value="3" />
-                                                            </between-right-value>
+                                                            <column-right-value start-index="236" stop-index="245" name="order_id">
+                                                                <owner start-index="236" stop-index="236" name="i"/>
+                                                            </column-right-value>
                                                         </predicate>
                                                     </and-predicate>
-                                                </where>
-                                                <group-by>
-                                                    <column-item start-index="325" stop-index="333" name="user_id">
-                                                        <owner start-index="325" stop-index="325" name="i"/>
-                                                    </column-item>
-                                                </group-by>
-                                                <order-by>
-                                                    <column-item start-index="344" stop-index="352" name="item_id" order-direction="DESC">
-                                                        <owner start-index="344" stop-index="344" name="i"/>
-                                                    </column-item>
-                                                </order-by>
-                                            </select>
-                                        </subquery>
-                                    </subqueryTable>
-                                </table-factor>
-                            </table-reference>
-                            <where start-index="365" stop-index="381">
-                                <and-predicate>
-                                    <predicate start-index="371" stop-index="381">
-                                        <column-left-value start-index="371" stop-index="376" name="rownum" />
-                                        <operator type="&lt;="/>
-                                        <compare-right-value>
-                                            <literal-expression start-index="381" stop-index="381" value="5"/>
-                                            <parameter-marker-expression start-index="381" stop-index="381" value="4"/>
-                                        </compare-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+                                                </joinSpecification>
+                                            </join-table>
+                                        </from>
+                                        <where start-index="247" stop-index="314">
+                                            <and-predicate>
+                                                <predicate start-index="253" stop-index="277">
+                                                    <column-left-value start-index="253" stop-index="267" name="user_id">
+                                                        <owner start-index="253" stop-index="259" name="order0_" />
+                                                    </column-left-value>
+                                                    <in-right-value>
+                                                        <literal-expression start-index="273" stop-index="273" value="1" />
+                                                        <parameter-marker-expression start-index="273" stop-index="273" value="0"/>
+                                                        <literal-expression start-index="276" stop-index="276" value="2"/>
+                                                        <parameter-marker-expression start-index="276" stop-index="276" value="1" />
+                                                    </in-right-value>
+                                                </predicate>
+                                                <predicate start-index="283" stop-index="314">
+                                                    <column-left-value start-index="283" stop-index="298" name="order_id">
+                                                        <owner start-index="283" stop-index="289" name="order0_"/>
+                                                    </column-left-value>
+                                                    <between-right-value>
+                                                        <between-literal-expression start-index="308" stop-index="308" value="9" />
+                                                        <between-parameter-marker-expression start-index="308" stop-index="308" value="2"/>
+                                                        <and-literal-expression start-index="314" stop-index="314" value="7" />
+                                                        <and-parameter-marker-expression start-index="314" stop-index="314" value="3" />
+                                                    </between-right-value>
+                                                </predicate>
+                                            </and-predicate>
+                                        </where>
+                                        <group-by>
+                                            <column-item start-index="325" stop-index="333" name="user_id">
+                                                <owner start-index="325" stop-index="325" name="i"/>
+                                            </column-item>
+                                        </group-by>
+                                        <order-by>
+                                            <column-item start-index="344" stop-index="352" name="item_id" order-direction="DESC">
+                                                <owner start-index="344" stop-index="344" name="i"/>
+                                            </column-item>
+                                        </order-by>
+                                    </select>
+                                </subquery>
+                            </subquery-table>
+                        </from>
+                        <where start-index="365" stop-index="381">
+                            <and-predicate>
+                                <predicate start-index="371" stop-index="381">
+                                    <column-left-value start-index="371" stop-index="376" name="rownum" />
+                                    <operator type="&lt;="/>
+                                    <compare-right-value>
+                                        <literal-expression start-index="381" stop-index="381" value="5"/>
+                                        <parameter-marker-expression start-index="381" stop-index="381" value="4"/>
+                                    </compare-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
         <where start-index="386" stop-index="404">
             <and-predicate>
                 <predicate start-index="392" stop-index="404">
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination.xml
index 8475528..0785b3e 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination.xml
@@ -18,14 +18,14 @@
 
 <sql-parser-test-cases>
     <select sql-case-id="select_pagination_with_offset" parameters="1, 2, 9, 10, 5">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="31" stop-index="44" />
-                </table-factor>
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="31" stop-index="44" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="49" stop-index="69">
@@ -47,7 +47,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
@@ -91,14 +91,14 @@
     </select>
 
     <select sql-case-id="select_pagination_with_row_count" parameters="1, 2, 9, 10, 5">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="31" stop-index="44" />
-                </table-factor>
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="31" stop-index="44" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="49" stop-index="69">
@@ -120,7 +120,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
 
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
@@ -164,14 +164,14 @@
     </select>
 
     <select sql-case-id="select_pagination_with_limit_with_back_quotes" parameters="1, 2, 9, 10, 5, 3">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-delimiter="`" end-delimiter="`" start-index="16" stop-index="26" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-delimiter="`" end-delimiter="`" start-index="33" stop-index="48" />
-                </table-factor>
+                <left>
+                    <simple-table name="t_order" alias="o" start-delimiter="`" end-delimiter="`" start-index="16" stop-index="26" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-delimiter="`" end-delimiter="`" start-index="33" stop-index="48" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="53" stop-index="73">
@@ -193,7 +193,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
@@ -237,14 +237,14 @@
     </select>
 
     <select sql-case-id="select_pagination_with_limit_and_offset_keyword" parameters="1, 2, 9, 10, 3, 5">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-delimiter="`" end-delimiter="`" start-index="16" stop-index="26" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-delimiter="`" end-delimiter="`" start-index="33" stop-index="48" />
-                </table-factor>
+                <left>
+                    <simple-table name="t_order" alias="o" start-delimiter="`" end-delimiter="`" start-index="16" stop-index="26" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-delimiter="`" end-delimiter="`" start-index="33" stop-index="48" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="53" stop-index="73">
@@ -266,7 +266,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
@@ -313,189 +313,185 @@
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable alias="row_">
-                    <subquery>
-                        <select>
-                            <projections start-index="22" stop-index="160">
-                                <top-projection alias="rownum_" start-index="22" stop-index="72">
-                                    <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
-                                </top-projection>
-                                <column-projection name="item_id" start-index="86" stop-index="94">
-                                    <owner name="i" start-index="86" stop-index="86" />
-                                </column-projection>
-                                <column-projection name="order_id" alias="order_id" start-index="97" stop-index="106">
-                                    <owner name="o" start-index="97" stop-index="97" />
-                                </column-projection>
-                                <column-projection name="status" alias="status" start-index="121" stop-index="128">
-                                    <owner name="o" start-index="121" stop-index="121" />
-                                </column-projection>
-                                <column-projection name="user_id" alias="user_id" start-index="141" stop-index="149">
-                                    <owner name="o" start-index="141" stop-index="141" />
-                                </column-projection>
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <table start-index="167" stop-index="175" name="t_order" alias="o" />
-                                </table-factor>
-                                <join-table>
-                                    <table-factor>
-                                        <table start-index="182" stop-index="195" name="t_order_item" alias="i" />
-                                    </table-factor>
-                                    <joinSpecification>
-                                        <and-predicate>
-                                            <predicate start-index="200" stop-index="220">
-                                                <column-left-value name="user_id" start-index="200" stop-index="208">
-                                                    <owner name="o" start-index="200" stop-index="200" />
-                                                </column-left-value>
-                                                <column-right-value name="user_id" start-index="212" stop-index="220">
-                                                    <owner name="i" start-index="212" stop-index="212" />
-                                                </column-right-value>
-                                            </predicate>
-                                            <predicate start-index="226" stop-index="248">
-                                                <column-left-value name="order_id" start-index="226" stop-index="235">
-                                                    <owner name="o" start-index="226" stop-index="226" />
-                                                </column-left-value>
-                                                <column-right-value name="order_id" start-index="239" stop-index="248">
-                                                    <owner name="i" start-index="239" stop-index="239" />
-                                                </column-right-value>
-                                            </predicate>
-                                        </and-predicate>
-                                    </joinSpecification>
-                                </join-table>
-                            </table-reference>
-                            <where start-index="250" stop-index="305" literal-stop-index="306">
-                                <and-predicate>
-                                    <predicate start-index="256" stop-index="274">
-                                        <column-left-value name="user_id" start-index="256" stop-index="264">
-                                            <owner name="o" start-index="256" stop-index="256" />
-                                        </column-left-value>
-                                        <in-right-value>
-                                            <parameter-marker-expression value="1" start-index="270" stop-index="270" />
-                                            <parameter-marker-expression value="2" start-index="273" stop-index="273" />
-                                            <literal-expression value="1" start-index="270" stop-index="270" />
-                                            <literal-expression value="2" start-index="273" stop-index="273" />
-                                        </in-right-value>
-                                    </predicate>
-                                    <predicate start-index="280" stop-index="305" literal-stop-index="306">
-                                        <column-left-value name="order_id" start-index="280" stop-index="289">
-                                            <owner name="o" start-index="280" stop-index="280" />
-                                        </column-left-value>
-                                        <between-right-value>
-                                            <between-parameter-marker-expression value="3" start-index="299" stop-index="299" />
-                                            <and-parameter-marker-expression value="4" start-index="305" stop-index="305" />
-                                            <between-literal-expression value="9" start-index="299" stop-index="299" />
-                                            <and-literal-expression value="10" start-index="305" stop-index="306" />
-                                        </between-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+        <from>
+            <subquery-table alias="row_">
+                <subquery>
+                    <select>
+                        <projections start-index="22" stop-index="160">
+                            <top-projection alias="rownum_" start-index="22" stop-index="72">
+                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
+                            </top-projection>
+                            <column-projection name="item_id" start-index="86" stop-index="94">
+                                <owner name="i" start-index="86" stop-index="86" />
+                            </column-projection>
+                            <column-projection name="order_id" alias="order_id" start-index="97" stop-index="106">
+                                <owner name="o" start-index="97" stop-index="97" />
+                            </column-projection>
+                            <column-projection name="status" alias="status" start-index="121" stop-index="128">
+                                <owner name="o" start-index="121" stop-index="121" />
+                            </column-projection>
+                            <column-projection name="user_id" alias="user_id" start-index="141" stop-index="149">
+                                <owner name="o" start-index="141" stop-index="141" />
+                            </column-projection>
+                        </projections>
+                        <from>
+                            <join-table>
+                                <left>
+                                    <simple-table start-index="167" stop-index="175" name="t_order" alias="o" />
+                                </left>
+                                <right>
+                                    <simple-table start-index="182" stop-index="195" name="t_order_item" alias="i" />
+                                </right>
+                                <joinSpecification>
+                                    <and-predicate>
+                                        <predicate start-index="200" stop-index="220">
+                                            <column-left-value name="user_id" start-index="200" stop-index="208">
+                                                <owner name="o" start-index="200" stop-index="200" />
+                                            </column-left-value>
+                                            <column-right-value name="user_id" start-index="212" stop-index="220">
+                                                <owner name="i" start-index="212" stop-index="212" />
+                                            </column-right-value>
+                                        </predicate>
+                                        <predicate start-index="226" stop-index="248">
+                                            <column-left-value name="order_id" start-index="226" stop-index="235">
+                                                <owner name="o" start-index="226" stop-index="226" />
+                                            </column-left-value>
+                                            <column-right-value name="order_id" start-index="239" stop-index="248">
+                                                <owner name="i" start-index="239" stop-index="239" />
+                                            </column-right-value>
+                                        </predicate>
+                                    </and-predicate>
+                                </joinSpecification>
+                            </join-table>
+                        </from>
+                        <where start-index="250" stop-index="305" literal-stop-index="306">
+                            <and-predicate>
+                                <predicate start-index="256" stop-index="274">
+                                    <column-left-value name="user_id" start-index="256" stop-index="264">
+                                        <owner name="o" start-index="256" stop-index="256" />
+                                    </column-left-value>
+                                    <in-right-value>
+                                        <parameter-marker-expression value="1" start-index="270" stop-index="270" />
+                                        <parameter-marker-expression value="2" start-index="273" stop-index="273" />
+                                        <literal-expression value="1" start-index="270" stop-index="270" />
+                                        <literal-expression value="2" start-index="273" stop-index="273" />
+                                    </in-right-value>
+                                </predicate>
+                                <predicate start-index="280" stop-index="305" literal-stop-index="306">
+                                    <column-left-value name="order_id" start-index="280" stop-index="289">
+                                        <owner name="o" start-index="280" stop-index="280" />
+                                    </column-left-value>
+                                    <between-right-value>
+                                        <between-parameter-marker-expression value="3" start-index="299" stop-index="299" />
+                                        <and-parameter-marker-expression value="4" start-index="305" stop-index="305" />
+                                        <between-literal-expression value="9" start-index="299" stop-index="299" />
+                                        <and-literal-expression value="10" start-index="305" stop-index="306" />
+                                    </between-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
     </select>
 
     <select sql-case-id="select_pagination_with_top_percent_with_ties" parameters="3, 1, 2, 9, 10">
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable alias="row_">
-                    <subquery>
-                        <select>
-                            <projections start-index="22" stop-index="178">
-                                <top-projection alias="rownum_" start-index="22" stop-index="90">
-                                    <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
-                                </top-projection>
-                                <column-projection name="item_id" start-index="104" stop-index="112">
-                                    <owner name="i" start-index="104" stop-index="104" />
-                                </column-projection>
-                                <column-projection name="order_id" alias="order_id" start-index="115" stop-index="124">
-                                    <owner name="o" start-index="115" stop-index="115" />
-                                </column-projection>
-                                <column-projection name="status" alias="status" start-index="139" stop-index="146">
-                                    <owner name="o" start-index="139" stop-index="139" />
-                                </column-projection>
-                                <column-projection name="user_id" alias="user_id" start-index="159" stop-index="167">
-                                    <owner name="o" start-index="159" stop-index="159" />
-                                </column-projection>
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <table start-index="185" stop-index="193" name="t_order" alias="o" />
-                                </table-factor>
-                                <join-table>
-                                    <table-factor>
-                                        <table start-index="200" stop-index="213" name="t_order_item" alias="i" />
-                                    </table-factor>
-                                    <joinSpecification>
-                                        <and-predicate>
-                                            <predicate start-index="218" stop-index="238">
-                                                <column-left-value name="user_id" start-index="218" stop-index="226">
-                                                    <owner name="o" start-index="218" stop-index="218" />
-                                                </column-left-value>
-                                                <column-right-value name="user_id" start-index="230" stop-index="238">
-                                                    <owner name="i" start-index="230" stop-index="230" />
-                                                </column-right-value>
-                                            </predicate>
-                                            <predicate start-index="244" stop-index="266">
-                                                <column-left-value name="order_id" start-index="244" stop-index="253">
-                                                    <owner name="o" start-index="244" stop-index="244" />
-                                                </column-left-value>
-                                                <column-right-value name="order_id" start-index="257" stop-index="266">
-                                                    <owner name="i" start-index="257" stop-index="257" />
-                                                </column-right-value>
-                                            </predicate>
-                                        </and-predicate>
-                                    </joinSpecification>
-                                </join-table>
-                            </table-reference>
-                            <where start-index="268" stop-index="323" literal-stop-index="324">
-                                <and-predicate>
-                                    <predicate start-index="274" stop-index="292">
-                                        <column-left-value name="user_id" start-index="274" stop-index="282">
-                                            <owner name="o" start-index="274" stop-index="274" />
-                                        </column-left-value>
-                                        <in-right-value>
-                                            <parameter-marker-expression value="1" start-index="288" stop-index="288" />
-                                            <parameter-marker-expression value="2" start-index="291" stop-index="291" />
-                                            <literal-expression value="1" start-index="288" stop-index="288" />
-                                            <literal-expression value="2" start-index="291" stop-index="291" />
-                                        </in-right-value>
-                                    </predicate>
-                                    <predicate start-index="298" stop-index="323" literal-stop-index="324">
-                                        <column-left-value name="order_id" start-index="298" stop-index="307">
-                                            <owner name="o" start-index="298" stop-index="298" />
-                                        </column-left-value>
-                                        <between-right-value>
-                                            <between-parameter-marker-expression value="3" start-index="317" stop-index="317" />
-                                            <and-parameter-marker-expression value="4" start-index="323" stop-index="323" />
-                                            <between-literal-expression value="9" start-index="317" stop-index="317" />
-                                            <and-literal-expression value="10" start-index="323" stop-index="324" />
-                                        </between-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+        <from>
+            <subquery-table alias="row_">
+                <subquery>
+                    <select>
+                        <projections start-index="22" stop-index="178">
+                            <top-projection alias="rownum_" start-index="22" stop-index="90">
+                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
+                            </top-projection>
+                            <column-projection name="item_id" start-index="104" stop-index="112">
+                                <owner name="i" start-index="104" stop-index="104" />
+                            </column-projection>
+                            <column-projection name="order_id" alias="order_id" start-index="115" stop-index="124">
+                                <owner name="o" start-index="115" stop-index="115" />
+                            </column-projection>
+                            <column-projection name="status" alias="status" start-index="139" stop-index="146">
+                                <owner name="o" start-index="139" stop-index="139" />
+                            </column-projection>
+                            <column-projection name="user_id" alias="user_id" start-index="159" stop-index="167">
+                                <owner name="o" start-index="159" stop-index="159" />
+                            </column-projection>
+                        </projections>
+                        <from>
+                            <join-table>
+                                <left>
+                                    <simple-table start-index="185" stop-index="193" name="t_order" alias="o" />
+                                </left>
+                                <right>
+                                    <simple-table start-index="200" stop-index="213" name="t_order_item" alias="i" />
+                                </right>
+                                <joinSpecification>
+                                    <and-predicate>
+                                        <predicate start-index="218" stop-index="238">
+                                            <column-left-value name="user_id" start-index="218" stop-index="226">
+                                                <owner name="o" start-index="218" stop-index="218" />
+                                            </column-left-value>
+                                            <column-right-value name="user_id" start-index="230" stop-index="238">
+                                                <owner name="i" start-index="230" stop-index="230" />
+                                            </column-right-value>
+                                        </predicate>
+                                        <predicate start-index="244" stop-index="266">
+                                            <column-left-value name="order_id" start-index="244" stop-index="253">
+                                                <owner name="o" start-index="244" stop-index="244" />
+                                            </column-left-value>
+                                            <column-right-value name="order_id" start-index="257" stop-index="266">
+                                                <owner name="i" start-index="257" stop-index="257" />
+                                            </column-right-value>
+                                        </predicate>
+                                    </and-predicate>
+                                </joinSpecification>
+                            </join-table>
+                        </from>
+                        <where start-index="268" stop-index="323" literal-stop-index="324">
+                            <and-predicate>
+                                <predicate start-index="274" stop-index="292">
+                                    <column-left-value name="user_id" start-index="274" stop-index="282">
+                                        <owner name="o" start-index="274" stop-index="274" />
+                                    </column-left-value>
+                                    <in-right-value>
+                                        <parameter-marker-expression value="1" start-index="288" stop-index="288" />
+                                        <parameter-marker-expression value="2" start-index="291" stop-index="291" />
+                                        <literal-expression value="1" start-index="288" stop-index="288" />
+                                        <literal-expression value="2" start-index="291" stop-index="291" />
+                                    </in-right-value>
+                                </predicate>
+                                <predicate start-index="298" stop-index="323" literal-stop-index="324">
+                                    <column-left-value name="order_id" start-index="298" stop-index="307">
+                                        <owner name="o" start-index="298" stop-index="298" />
+                                    </column-left-value>
+                                    <between-right-value>
+                                        <between-parameter-marker-expression value="3" start-index="317" stop-index="317" />
+                                        <and-parameter-marker-expression value="4" start-index="323" stop-index="323" />
+                                        <between-literal-expression value="9" start-index="317" stop-index="317" />
+                                        <and-literal-expression value="10" start-index="323" stop-index="324" />
+                                    </between-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
     </select>
 
     <select sql-case-id="select_pagination_with_offset_and_limit" parameters="1, 2, 9, 10, 5, 3">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="31" stop-index="44" />
-                </table-factor>
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="31" stop-index="44" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="49" stop-index="69">
@@ -517,7 +513,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
@@ -562,14 +558,14 @@
     </select>
 
     <select sql-case-id="select_pagination_with_offset_and_limit_all" parameters="1, 2, 9, 10, 5">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="31" stop-index="44" />
-                </table-factor>
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="31" stop-index="44" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="49" stop-index="69">
@@ -591,7 +587,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
@@ -637,89 +633,87 @@
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable alias="row_">
-                    <subquery>
-                        <select>
-                            <projections start-index="22" stop-index="160">
-                                <top-projection alias="rownum_" start-index="22" stop-index="72">
-                                    <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
-                                </top-projection>
-                                <column-projection name="item_id" start-index="86" stop-index="94">
-                                    <owner name="i" start-index="86" stop-index="86" />
-                                </column-projection>
-                                <column-projection name="order_id" alias="order_id" start-index="97" stop-index="106">
-                                    <owner name="o" start-index="97" stop-index="97" />
-                                </column-projection>
-                                <column-projection name="status" alias="status" start-index="121" stop-index="128">
-                                    <owner name="o" start-index="121" stop-index="121" />
-                                </column-projection>
-                                <column-projection name="user_id" alias="user_id" start-index="141" stop-index="149">
-                                    <owner name="o" start-index="141" stop-index="141" />
-                                </column-projection>
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <table start-index="167" stop-index="175" name="t_order" alias="o" />
-                                </table-factor>
-                                <join-table>
-                                    <table-factor>
-                                        <table start-index="182" stop-index="195" name="t_order_item" alias="i" />
-                                    </table-factor>
-                                    <joinSpecification>
-                                        <and-predicate>
-                                            <predicate start-index="200" stop-index="220">
-                                                <column-left-value name="user_id" start-index="200" stop-index="208">
-                                                    <owner name="o" start-index="200" stop-index="200" />
-                                                </column-left-value>
-                                                <column-right-value name="user_id" start-index="212" stop-index="220">
-                                                    <owner name="i" start-index="212" stop-index="212" />
-                                                </column-right-value>
-                                            </predicate>
-                                            <predicate start-index="226" stop-index="248">
-                                                <column-left-value name="order_id" start-index="226" stop-index="235">
-                                                    <owner name="o" start-index="226" stop-index="226" />
-                                                </column-left-value>
-                                                <column-right-value name="order_id" start-index="239" stop-index="248">
-                                                    <owner name="i" start-index="239" stop-index="239" />
-                                                </column-right-value>
-                                            </predicate>
-                                        </and-predicate>
-                                    </joinSpecification>
-                                </join-table>
-                            </table-reference>
-                            <where start-index="250" stop-index="305" literal-stop-index="306">
-                                <and-predicate>
-                                    <predicate start-index="256" stop-index="274">
-                                        <column-left-value name="user_id" start-index="256" stop-index="264">
-                                            <owner name="o" start-index="256" stop-index="256" />
-                                        </column-left-value>
-                                        <in-right-value>
-                                            <parameter-marker-expression value="1" start-index="270" stop-index="270" />
-                                            <parameter-marker-expression value="2" start-index="273" stop-index="273" />
-                                            <literal-expression value="1" start-index="270" stop-index="270" />
-                                            <literal-expression value="2" start-index="273" stop-index="273" />
-                                        </in-right-value>
-                                    </predicate>
-                                    <predicate start-index="280" stop-index="305" literal-stop-index="306">
-                                        <column-left-value name="order_id" start-index="280" stop-index="289">
-                                            <owner name="o" start-index="280" stop-index="280" />
-                                        </column-left-value>
-                                        <between-right-value>
-                                            <between-parameter-marker-expression value="3" start-index="299" stop-index="299" />
-                                            <and-parameter-marker-expression value="4" start-index="305" stop-index="305" />
-                                            <between-literal-expression value="9" start-index="299" stop-index="299" />
-                                            <and-literal-expression value="10" start-index="305" stop-index="306" />
-                                        </between-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+        <from>
+            <subquery-table alias="row_">
+                <subquery>
+                    <select>
+                        <projections start-index="22" stop-index="160">
+                            <top-projection alias="rownum_" start-index="22" stop-index="72">
+                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
+                            </top-projection>
+                            <column-projection name="item_id" start-index="86" stop-index="94">
+                                <owner name="i" start-index="86" stop-index="86" />
+                            </column-projection>
+                            <column-projection name="order_id" alias="order_id" start-index="97" stop-index="106">
+                                <owner name="o" start-index="97" stop-index="97" />
+                            </column-projection>
+                            <column-projection name="status" alias="status" start-index="121" stop-index="128">
+                                <owner name="o" start-index="121" stop-index="121" />
+                            </column-projection>
+                            <column-projection name="user_id" alias="user_id" start-index="141" stop-index="149">
+                                <owner name="o" start-index="141" stop-index="141" />
+                            </column-projection>
+                        </projections>
+                        <from>
+                            <join-table>
+                                <left>
+                                    <simple-table start-index="167" stop-index="175" name="t_order" alias="o" />
+                                </left>
+                                <right>
+                                    <simple-table start-index="182" stop-index="195" name="t_order_item" alias="i" />
+                                </right>
+                                <joinSpecification>
+                                    <and-predicate>
+                                        <predicate start-index="200" stop-index="220">
+                                            <column-left-value name="user_id" start-index="200" stop-index="208">
+                                                <owner name="o" start-index="200" stop-index="200" />
+                                            </column-left-value>
+                                            <column-right-value name="user_id" start-index="212" stop-index="220">
+                                                <owner name="i" start-index="212" stop-index="212" />
+                                            </column-right-value>
+                                        </predicate>
+                                        <predicate start-index="226" stop-index="248">
+                                            <column-left-value name="order_id" start-index="226" stop-index="235">
+                                                <owner name="o" start-index="226" stop-index="226" />
+                                            </column-left-value>
+                                            <column-right-value name="order_id" start-index="239" stop-index="248">
+                                                <owner name="i" start-index="239" stop-index="239" />
+                                            </column-right-value>
+                                        </predicate>
+                                    </and-predicate>
+                                </joinSpecification>
+                            </join-table>
+                        </from>
+                        <where start-index="250" stop-index="305" literal-stop-index="306">
+                            <and-predicate>
+                                <predicate start-index="256" stop-index="274">
+                                    <column-left-value name="user_id" start-index="256" stop-index="264">
+                                        <owner name="o" start-index="256" stop-index="256" />
+                                    </column-left-value>
+                                    <in-right-value>
+                                        <parameter-marker-expression value="1" start-index="270" stop-index="270" />
+                                        <parameter-marker-expression value="2" start-index="273" stop-index="273" />
+                                        <literal-expression value="1" start-index="270" stop-index="270" />
+                                        <literal-expression value="2" start-index="273" stop-index="273" />
+                                    </in-right-value>
+                                </predicate>
+                                <predicate start-index="280" stop-index="305" literal-stop-index="306">
+                                    <column-left-value name="order_id" start-index="280" stop-index="289">
+                                        <owner name="o" start-index="280" stop-index="280" />
+                                    </column-left-value>
+                                    <between-right-value>
+                                        <between-parameter-marker-expression value="3" start-index="299" stop-index="299" />
+                                        <and-parameter-marker-expression value="4" start-index="305" stop-index="305" />
+                                        <between-literal-expression value="9" start-index="299" stop-index="299" />
+                                        <and-literal-expression value="10" start-index="305" stop-index="306" />
+                                    </between-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
         <where start-index="316" stop-index="337" literal-start-index="317" literal-stop-index="338">
             <and-predicate>
                 <predicate start-index="322" stop-index="337" literal-start-index="323" literal-stop-index="338">
@@ -740,89 +734,87 @@
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable alias="row_">
-                    <subquery>
-                        <select>
-                            <projections start-index="22" stop-index="178">
-                                <top-projection alias="rownum_" start-index="22" stop-index="90">
-                                    <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
-                                </top-projection>
-                                <column-projection name="item_id" start-index="104" stop-index="112">
-                                    <owner name="i" start-index="104" stop-index="104" />
-                                </column-projection>
-                                <column-projection name="order_id" alias="order_id" start-index="115" stop-index="124">
-                                    <owner name="o" start-index="115" stop-index="115" />
-                                </column-projection>
-                                <column-projection name="status" alias="status" start-index="139" stop-index="146">
-                                    <owner name="o" start-index="139" stop-index="139" />
-                                </column-projection>
-                                <column-projection name="user_id" alias="user_id" start-index="159" stop-index="167">
-                                    <owner name="o" start-index="159" stop-index="159" />
-                                </column-projection>
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <table start-index="185" stop-index="193" name="t_order" alias="o" />
-                                </table-factor>
-                                <join-table>
-                                    <table-factor>
-                                        <table start-index="200" stop-index="213" name="t_order_item" alias="i" />
-                                    </table-factor>
-                                    <joinSpecification>
-                                        <and-predicate>
-                                            <predicate start-index="218" stop-index="238">
-                                                <column-left-value name="user_id" start-index="218" stop-index="226">
-                                                    <owner name="o" start-index="218" stop-index="218" />
-                                                </column-left-value>
-                                                <column-right-value name="user_id" start-index="230" stop-index="238">
-                                                    <owner name="i" start-index="230" stop-index="230" />
-                                                </column-right-value>
-                                            </predicate>
-                                            <predicate start-index="244" stop-index="266">
-                                                <column-left-value name="order_id" start-index="244" stop-index="253">
-                                                    <owner name="o" start-index="244" stop-index="244" />
-                                                </column-left-value>
-                                                <column-right-value name="order_id" start-index="257" stop-index="266">
-                                                    <owner name="i" start-index="257" stop-index="257" />
-                                                </column-right-value>
-                                            </predicate>
-                                        </and-predicate>
-                                    </joinSpecification>
-                                </join-table>
-                            </table-reference>
-                            <where start-index="268" stop-index="323" literal-stop-index="324">
-                                <and-predicate>
-                                    <predicate start-index="274" stop-index="292">
-                                        <column-left-value name="user_id" start-index="274" stop-index="282">
-                                            <owner name="o" start-index="274" stop-index="274" />
-                                        </column-left-value>
-                                        <in-right-value>
-                                            <parameter-marker-expression value="1" start-index="288" stop-index="288" />
-                                            <parameter-marker-expression value="2" start-index="291" stop-index="291" />
-                                            <literal-expression value="1" start-index="288" stop-index="288" />
-                                            <literal-expression value="2" start-index="291" stop-index="291" />
-                                        </in-right-value>
-                                    </predicate>
-                                    <predicate start-index="298" stop-index="323" literal-stop-index="324">
-                                        <column-left-value name="order_id" start-index="298" stop-index="307">
-                                            <owner name="o" start-index="298" stop-index="298" />
-                                        </column-left-value>
-                                        <between-right-value>
-                                            <between-parameter-marker-expression value="3" start-index="317" stop-index="317" />
-                                            <and-parameter-marker-expression value="4" start-index="323" stop-index="323" />
-                                            <between-literal-expression value="9" start-index="317" stop-index="317" />
-                                            <and-literal-expression value="10" start-index="323" stop-index="324" />
-                                        </between-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+        <from>
+            <subquery-table alias="row_">
+                <subquery>
+                    <select>
+                        <projections start-index="22" stop-index="178">
+                            <top-projection alias="rownum_" start-index="22" stop-index="90">
+                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
+                            </top-projection>
+                            <column-projection name="item_id" start-index="104" stop-index="112">
+                                <owner name="i" start-index="104" stop-index="104" />
+                            </column-projection>
+                            <column-projection name="order_id" alias="order_id" start-index="115" stop-index="124">
+                                <owner name="o" start-index="115" stop-index="115" />
+                            </column-projection>
+                            <column-projection name="status" alias="status" start-index="139" stop-index="146">
+                                <owner name="o" start-index="139" stop-index="139" />
+                            </column-projection>
+                            <column-projection name="user_id" alias="user_id" start-index="159" stop-index="167">
+                                <owner name="o" start-index="159" stop-index="159" />
+                            </column-projection>
+                        </projections>
+                        <from>
+                            <join-table>
+                                <left>
+                                    <simple-table start-index="185" stop-index="193" name="t_order" alias="o" />
+                                </left>
+                                <right>
+                                    <simple-table start-index="200" stop-index="213" name="t_order_item" alias="i" />
+                                </right>
+                                <joinSpecification>
+                                    <and-predicate>
+                                        <predicate start-index="218" stop-index="238">
+                                            <column-left-value name="user_id" start-index="218" stop-index="226">
+                                                <owner name="o" start-index="218" stop-index="218" />
+                                            </column-left-value>
+                                            <column-right-value name="user_id" start-index="230" stop-index="238">
+                                                <owner name="i" start-index="230" stop-index="230" />
+                                            </column-right-value>
+                                        </predicate>
+                                        <predicate start-index="244" stop-index="266">
+                                            <column-left-value name="order_id" start-index="244" stop-index="253">
+                                                <owner name="o" start-index="244" stop-index="244" />
+                                            </column-left-value>
+                                            <column-right-value name="order_id" start-index="257" stop-index="266">
+                                                <owner name="i" start-index="257" stop-index="257" />
+                                            </column-right-value>
+                                        </predicate>
+                                    </and-predicate>
+                                </joinSpecification>
+                            </join-table>
+                        </from>
+                        <where start-index="268" stop-index="323" literal-stop-index="324">
+                            <and-predicate>
+                                <predicate start-index="274" stop-index="292">
+                                    <column-left-value name="user_id" start-index="274" stop-index="282">
+                                        <owner name="o" start-index="274" stop-index="274" />
+                                    </column-left-value>
+                                    <in-right-value>
+                                        <parameter-marker-expression value="1" start-index="288" stop-index="288" />
+                                        <parameter-marker-expression value="2" start-index="291" stop-index="291" />
+                                        <literal-expression value="1" start-index="288" stop-index="288" />
+                                        <literal-expression value="2" start-index="291" stop-index="291" />
+                                    </in-right-value>
+                                </predicate>
+                                <predicate start-index="298" stop-index="323" literal-stop-index="324">
+                                    <column-left-value name="order_id" start-index="298" stop-index="307">
+                                        <owner name="o" start-index="298" stop-index="298" />
+                                    </column-left-value>
+                                    <between-right-value>
+                                        <between-parameter-marker-expression value="3" start-index="317" stop-index="317" />
+                                        <and-parameter-marker-expression value="4" start-index="323" stop-index="323" />
+                                        <between-literal-expression value="9" start-index="317" stop-index="317" />
+                                        <and-literal-expression value="10" start-index="323" stop-index="324" />
+                                    </between-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
         <where start-index="334" stop-index="355" literal-start-index="335" literal-stop-index="356">
             <and-predicate>
                 <predicate start-index="340" stop-index="355" literal-start-index="341" literal-stop-index="356">
@@ -843,89 +835,87 @@
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable alias="row_">
-                    <subquery>
-                        <select>
-                            <projections start-index="22" stop-index="160">
-                                <top-projection alias="rownum_" start-index="22" stop-index="72">
-                                    <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
-                                </top-projection>
-                                <column-projection name="item_id" start-index="86" stop-index="94">
-                                    <owner name="i" start-index="86" stop-index="86" />
-                                </column-projection>
-                                <column-projection name="order_id" alias="order_id" start-index="97" stop-index="106">
-                                    <owner name="o" start-index="97" stop-index="97" />
-                                </column-projection>
-                                <column-projection name="status" alias="status" start-index="121" stop-index="128">
-                                    <owner name="o" start-index="121" stop-index="121" />
-                                </column-projection>
-                                <column-projection name="user_id" alias="user_id" start-index="141" stop-index="149">
-                                    <owner name="o" start-index="141" stop-index="141" />
-                                </column-projection>
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <table start-index="167" stop-index="175" name="t_order" alias="o" />
-                                </table-factor>
-                                <join-table>
-                                    <table-factor>
-                                        <table start-index="182" stop-index="195" name="t_order_item" alias="i" />
-                                    </table-factor>
-                                    <joinSpecification>
-                                        <and-predicate>
-                                            <predicate start-index="200" stop-index="220">
-                                                <column-left-value name="user_id" start-index="200" stop-index="208">
-                                                    <owner name="o" start-index="200" stop-index="200" />
-                                                </column-left-value>
-                                                <column-right-value name="user_id" start-index="212" stop-index="220">
-                                                    <owner name="i" start-index="212" stop-index="212" />
-                                                </column-right-value>
-                                            </predicate>
-                                            <predicate start-index="226" stop-index="248">
-                                                <column-left-value name="order_id" start-index="226" stop-index="235">
-                                                    <owner name="o" start-index="226" stop-index="226" />
-                                                </column-left-value>
-                                                <column-right-value name="order_id" start-index="239" stop-index="248">
-                                                    <owner name="i" start-index="239" stop-index="239" />
-                                                </column-right-value>
-                                            </predicate>
-                                        </and-predicate>
-                                    </joinSpecification>
-                                </join-table>
-                            </table-reference>
-                            <where start-index="250" stop-index="305" literal-stop-index="306">
-                                <and-predicate>
-                                    <predicate start-index="256" stop-index="274">
-                                        <column-left-value name="user_id" start-index="256" stop-index="264">
-                                            <owner name="o" start-index="256" stop-index="256" />
-                                        </column-left-value>
-                                        <in-right-value>
-                                            <parameter-marker-expression value="1" start-index="270" stop-index="270" />
-                                            <parameter-marker-expression value="2" start-index="273" stop-index="273" />
-                                            <literal-expression value="1" start-index="270" stop-index="270" />
-                                            <literal-expression value="2" start-index="273" stop-index="273" />
-                                        </in-right-value>
-                                    </predicate>
-                                    <predicate start-index="280" stop-index="305" literal-stop-index="306">
-                                        <column-left-value name="order_id" start-index="280" stop-index="289">
-                                            <owner name="o" start-index="280" stop-index="280" />
-                                        </column-left-value>
-                                        <between-right-value>
-                                            <between-parameter-marker-expression value="3" start-index="299" stop-index="299" />
-                                            <and-parameter-marker-expression value="4" start-index="305" stop-index="305" />
-                                            <between-literal-expression value="9" start-index="299" stop-index="299" />
-                                            <and-literal-expression value="10" start-index="305" stop-index="306" />
-                                        </between-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+        <from>
+            <subquery-table alias="row_">
+                <subquery>
+                    <select>
+                        <projections start-index="22" stop-index="160">
+                            <top-projection alias="rownum_" start-index="22" stop-index="72">
+                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
+                            </top-projection>
+                            <column-projection name="item_id" start-index="86" stop-index="94">
+                                <owner name="i" start-index="86" stop-index="86" />
+                            </column-projection>
+                            <column-projection name="order_id" alias="order_id" start-index="97" stop-index="106">
+                                <owner name="o" start-index="97" stop-index="97" />
+                            </column-projection>
+                            <column-projection name="status" alias="status" start-index="121" stop-index="128">
+                                <owner name="o" start-index="121" stop-index="121" />
+                            </column-projection>
+                            <column-projection name="user_id" alias="user_id" start-index="141" stop-index="149">
+                                <owner name="o" start-index="141" stop-index="141" />
+                            </column-projection>
+                        </projections>
+                        <from>
+                            <join-table>
+                                <left>
+                                    <simple-table start-index="167" stop-index="175" name="t_order" alias="o" />
+                                </left>
+                                <right>
+                                    <simple-table start-index="182" stop-index="195" name="t_order_item" alias="i" />
+                                </right>
+                                <joinSpecification>
+                                    <and-predicate>
+                                        <predicate start-index="200" stop-index="220">
+                                            <column-left-value name="user_id" start-index="200" stop-index="208">
+                                                <owner name="o" start-index="200" stop-index="200" />
+                                            </column-left-value>
+                                            <column-right-value name="user_id" start-index="212" stop-index="220">
+                                                <owner name="i" start-index="212" stop-index="212" />
+                                            </column-right-value>
+                                        </predicate>
+                                        <predicate start-index="226" stop-index="248">
+                                            <column-left-value name="order_id" start-index="226" stop-index="235">
+                                                <owner name="o" start-index="226" stop-index="226" />
+                                            </column-left-value>
+                                            <column-right-value name="order_id" start-index="239" stop-index="248">
+                                                <owner name="i" start-index="239" stop-index="239" />
+                                            </column-right-value>
+                                        </predicate>
+                                    </and-predicate>
+                                </joinSpecification>
+                            </join-table>
+                        </from>
+                        <where start-index="250" stop-index="305" literal-stop-index="306">
+                            <and-predicate>
+                                <predicate start-index="256" stop-index="274">
+                                    <column-left-value name="user_id" start-index="256" stop-index="264">
+                                        <owner name="o" start-index="256" stop-index="256" />
+                                    </column-left-value>
+                                    <in-right-value>
+                                        <parameter-marker-expression value="1" start-index="270" stop-index="270" />
+                                        <parameter-marker-expression value="2" start-index="273" stop-index="273" />
+                                        <literal-expression value="1" start-index="270" stop-index="270" />
+                                        <literal-expression value="2" start-index="273" stop-index="273" />
+                                    </in-right-value>
+                                </predicate>
+                                <predicate start-index="280" stop-index="305" literal-stop-index="306">
+                                    <column-left-value name="order_id" start-index="280" stop-index="289">
+                                        <owner name="o" start-index="280" stop-index="280" />
+                                    </column-left-value>
+                                    <between-right-value>
+                                        <between-parameter-marker-expression value="3" start-index="299" stop-index="299" />
+                                        <and-parameter-marker-expression value="4" start-index="305" stop-index="305" />
+                                        <between-literal-expression value="9" start-index="299" stop-index="299" />
+                                        <and-literal-expression value="10" start-index="305" stop-index="306" />
+                                    </between-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
         <where start-index="316" stop-index="337" literal-start-index="317" literal-stop-index="338">
             <and-predicate>
                 <predicate start-index="322" stop-index="338" literal-start-index="323" literal-stop-index="339">
@@ -946,89 +936,87 @@
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable alias="row_">
-                    <subquery>
-                        <select>
-                            <projections start-index="22" stop-index="178">
-                                <top-projection alias="rownum_" start-index="22" stop-index="90">
-                                    <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
-                                </top-projection>
-                                <column-projection name="item_id" start-index="104" stop-index="112">
-                                    <owner name="i" start-index="104" stop-index="104" />
-                                </column-projection>
-                                <column-projection name="order_id" alias="order_id" start-index="115" stop-index="124">
-                                    <owner name="o" start-index="115" stop-index="115" />
-                                </column-projection>
-                                <column-projection name="status" alias="status" start-index="139" stop-index="146">
-                                    <owner name="o" start-index="139" stop-index="139" />
-                                </column-projection>
-                                <column-projection name="user_id" alias="user_id" start-index="159" stop-index="167">
-                                    <owner name="o" start-index="159" stop-index="159" />
-                                </column-projection>
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <table start-index="185" stop-index="193" name="t_order" alias="o" />
-                                </table-factor>
-                                <join-table>
-                                    <table-factor>
-                                        <table start-index="200" stop-index="213" name="t_order_item" alias="i" />
-                                    </table-factor>
-                                    <joinSpecification>
-                                        <and-predicate>
-                                            <predicate start-index="218" stop-index="238">
-                                                <column-left-value name="user_id" start-index="218" stop-index="226">
-                                                    <owner name="o" start-index="218" stop-index="218" />
-                                                </column-left-value>
-                                                <column-right-value name="user_id" start-index="230" stop-index="238">
-                                                    <owner name="i" start-index="230" stop-index="230" />
-                                                </column-right-value>
-                                            </predicate>
-                                            <predicate start-index="244" stop-index="266">
-                                                <column-left-value name="order_id" start-index="244" stop-index="253">
-                                                    <owner name="o" start-index="244" stop-index="244" />
-                                                </column-left-value>
-                                                <column-right-value name="order_id" start-index="257" stop-index="266">
-                                                    <owner name="i" start-index="257" stop-index="257" />
-                                                </column-right-value>
-                                            </predicate>
-                                        </and-predicate>
-                                    </joinSpecification>
-                                </join-table>
-                            </table-reference>
-                            <where start-index="268" stop-index="323" literal-stop-index="324">
-                                <and-predicate>
-                                    <predicate start-index="274" stop-index="292">
-                                        <column-left-value name="user_id" start-index="274" stop-index="282">
-                                            <owner name="o" start-index="274" stop-index="274" />
-                                        </column-left-value>
-                                        <in-right-value>
-                                            <parameter-marker-expression value="1" start-index="288" stop-index="288" />
-                                            <parameter-marker-expression value="2" start-index="291" stop-index="291" />
-                                            <literal-expression value="1" start-index="288" stop-index="288" />
-                                            <literal-expression value="2" start-index="291" stop-index="291" />
-                                        </in-right-value>
-                                    </predicate>
-                                    <predicate start-index="298" stop-index="323" literal-stop-index="324">
-                                        <column-left-value name="order_id" start-index="298" stop-index="307">
-                                            <owner name="o" start-index="298" stop-index="298" />
-                                        </column-left-value>
-                                        <between-right-value>
-                                            <between-parameter-marker-expression value="3" start-index="317" stop-index="317" />
-                                            <and-parameter-marker-expression value="4" start-index="323" stop-index="323" />
-                                            <between-literal-expression value="9" start-index="317" stop-index="317" />
-                                            <and-literal-expression value="10" start-index="323" stop-index="324" />
-                                        </between-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+        <from>
+            <subquery-table alias="row_">
+                <subquery>
+                    <select>
+                        <projections start-index="22" stop-index="178">
+                            <top-projection alias="rownum_" start-index="22" stop-index="90">
+                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
+                            </top-projection>
+                            <column-projection name="item_id" start-index="104" stop-index="112">
+                                <owner name="i" start-index="104" stop-index="104" />
+                            </column-projection>
+                            <column-projection name="order_id" alias="order_id" start-index="115" stop-index="124">
+                                <owner name="o" start-index="115" stop-index="115" />
+                            </column-projection>
+                            <column-projection name="status" alias="status" start-index="139" stop-index="146">
+                                <owner name="o" start-index="139" stop-index="139" />
+                            </column-projection>
+                            <column-projection name="user_id" alias="user_id" start-index="159" stop-index="167">
+                                <owner name="o" start-index="159" stop-index="159" />
+                            </column-projection>
+                        </projections>
+                        <from>
+                            <join-table>
+                                <left>
+                                    <simple-table start-index="185" stop-index="193" name="t_order" alias="o" />
+                                </left>
+                                <right>
+                                    <simple-table start-index="200" stop-index="213" name="t_order_item" alias="i" />
+                                </right>
+                                <joinSpecification>
+                                    <and-predicate>
+                                        <predicate start-index="218" stop-index="238">
+                                            <column-left-value name="user_id" start-index="218" stop-index="226">
+                                                <owner name="o" start-index="218" stop-index="218" />
+                                            </column-left-value>
+                                            <column-right-value name="user_id" start-index="230" stop-index="238">
+                                                <owner name="i" start-index="230" stop-index="230" />
+                                            </column-right-value>
+                                        </predicate>
+                                        <predicate start-index="244" stop-index="266">
+                                            <column-left-value name="order_id" start-index="244" stop-index="253">
+                                                <owner name="o" start-index="244" stop-index="244" />
+                                            </column-left-value>
+                                            <column-right-value name="order_id" start-index="257" stop-index="266">
+                                                <owner name="i" start-index="257" stop-index="257" />
+                                            </column-right-value>
+                                        </predicate>
+                                    </and-predicate>
+                                </joinSpecification>
+                            </join-table>
+                        </from>
+                        <where start-index="268" stop-index="323" literal-stop-index="324">
+                            <and-predicate>
+                                <predicate start-index="274" stop-index="292">
+                                    <column-left-value name="user_id" start-index="274" stop-index="282">
+                                        <owner name="o" start-index="274" stop-index="274" />
+                                    </column-left-value>
+                                    <in-right-value>
+                                        <parameter-marker-expression value="1" start-index="288" stop-index="288" />
+                                        <parameter-marker-expression value="2" start-index="291" stop-index="291" />
+                                        <literal-expression value="1" start-index="288" stop-index="288" />
+                                        <literal-expression value="2" start-index="291" stop-index="291" />
+                                    </in-right-value>
+                                </predicate>
+                                <predicate start-index="298" stop-index="323" literal-stop-index="324">
+                                    <column-left-value name="order_id" start-index="298" stop-index="307">
+                                        <owner name="o" start-index="298" stop-index="298" />
+                                    </column-left-value>
+                                    <between-right-value>
+                                        <between-parameter-marker-expression value="3" start-index="317" stop-index="317" />
+                                        <and-parameter-marker-expression value="4" start-index="323" stop-index="323" />
+                                        <between-literal-expression value="9" start-index="317" stop-index="317" />
+                                        <and-literal-expression value="10" start-index="323" stop-index="324" />
+                                    </between-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
         <where start-index="334" stop-index="355" literal-start-index="335" literal-stop-index="356">
             <and-predicate>
                 <predicate start-index="340" stop-index="356" literal-start-index="341" literal-stop-index="357">
@@ -1049,236 +1037,226 @@
         <projections start-index="7" stop-index="7" >
             <shorthand-projection stop-index="7" start-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable>
-                    <subquery start-index="14" stop_index="363">
-                        <select>
-                            <projections start-index="22" stop-index="43">
-                                <shorthand-projection start-index="22" stop-index="27">
-                                    <owner start-index="22" stop-index="25" name="row_" />
-                                </shorthand-projection>
-                                <column-projection start-index="30" stop-index="35" name="rownum" alias="rownum_" />
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <subqueryTable start-index="50" stop-index="339" alias="row_">
-                                        <subquery>
-                                            <select>
-                                                <projections start-index="58" stop-index="139" >
-                                                    <column-projection start-index="58" stop-index="73" name="order_id" alias="order_id">
-                                                        <owner start-index="58" stop-index="64" name="order0_" />
-                                                    </column-projection>
-                                                    <column-projection start-index="88" stop-index="101" name="status" alias="status">
-                                                        <owner start-index="88" stop-index="94" name="order0_" />
-                                                    </column-projection>
-                                                    <column-projection start-index="114" stop-index="128" name="user_id" alias="user_id">
-                                                        <owner start-index="114" stop-index="120" name="order0_" />
-                                                    </column-projection>
-                                                </projections>
-                                                <table-reference>
-                                                    <table-factor>
-                                                        <table start-index="146" stop-index="160" name="t_order" alias="order0_" />
-                                                    </table-factor>
-                                                    <join-table>
-                                                        <table-factor>
-                                                            <table start-index="167" stop-index="180" name="t_order_item" alias="i" />
-                                                        </table-factor>
-                                                        <joinSpecification>
-                                                            <and-predicate>
-                                                                <predicate start-index="185" stop-index="211">
-                                                                    <column-left-value start-index="185" stop-index="199" name="user_id">
-                                                                        <owner start-index="185" stop-index="191" name="order0_" />
-                                                                    </column-left-value>
-                                                                    <column-right-value start-index="203" stop-index="211" name="user_id">
-                                                                        <owner start-index="203" stop-index="203" name="i" />
-                                                                    </column-right-value>
-                                                                </predicate>
-                                                                <predicate start-index="217" stop-index="245">
-                                                                    <column-left-value start-index="217" stop-index="232" name="order_id">
-                                                                        <owner start-index="217" stop-index="223" name="order0_" />
-                                                                    </column-left-value>
-                                                                    <column-right-value start-index="236" stop-index="245" name="order_id">
-                                                                        <owner start-index="236" stop-index="236" name="i" />
-                                                                    </column-right-value>
-                                                                </predicate>
-                                                            </and-predicate>
-                                                        </joinSpecification>
-                                                    </join-table>
-                                                </table-reference>
-                                                <where start-index="247" stop-index="314">
+        <from>
+            <subquery-table>
+                <subquery start-index="14" stop_index="363">
+                    <select>
+                        <projections start-index="22" stop-index="43">
+                            <shorthand-projection start-index="22" stop-index="27">
+                                <owner start-index="22" stop-index="25" name="row_" />
+                            </shorthand-projection>
+                            <column-projection start-index="30" stop-index="35" name="rownum" alias="rownum_" />
+                        </projections>
+                        <from>
+                            <subquery-table start-index="50" stop-index="339" alias="row_">
+                                <subquery>
+                                    <select>
+                                        <projections start-index="58" stop-index="139" >
+                                            <column-projection start-index="58" stop-index="73" name="order_id" alias="order_id">
+                                                <owner start-index="58" stop-index="64" name="order0_" />
+                                            </column-projection>
+                                            <column-projection start-index="88" stop-index="101" name="status" alias="status">
+                                                <owner start-index="88" stop-index="94" name="order0_" />
+                                            </column-projection>
+                                            <column-projection start-index="114" stop-index="128" name="user_id" alias="user_id">
+                                                <owner start-index="114" stop-index="120" name="order0_" />
+                                            </column-projection>
+                                        </projections>
+                                        <from>
+                                            <join-table>
+                                                <left>
+                                                    <simple-table start-index="146" stop-index="160" name="t_order" alias="order0_" />
+                                                </left>
+                                                <right>
+                                                    <simple-table start-index="167" stop-index="180" name="t_order_item" alias="i" />
+                                                </right>
+                                                <joinSpecification>
                                                     <and-predicate>
-                                                        <predicate start-index="253" stop-index="277">
-                                                            <column-left-value start-index="253" stop-index="267" name="user_id">
-                                                                <owner start-index="253" stop-index="259" name="order0_" />
+                                                        <predicate start-index="185" stop-index="211">
+                                                            <column-left-value start-index="185" stop-index="199" name="user_id">
+                                                                <owner start-index="185" stop-index="191" name="order0_" />
                                                             </column-left-value>
-                                                            <in-right-value>
-                                                                <literal-expression start-index="273" stop-index="273" value="1" />
-                                                                <literal-expression start-index="276" stop-index="276" value="2" />
-                                                                <parameter-marker-expression start-index="273" stop-index="273" value="0" />
-                                                                <parameter-marker-expression start-index="276" stop-index="276" value="1" />
-                                                            </in-right-value>
+                                                            <column-right-value start-index="203" stop-index="211" name="user_id">
+                                                                <owner start-index="203" stop-index="203" name="i" />
+                                                            </column-right-value>
                                                         </predicate>
-                                                        <predicate start-index="283" stop-index="314">
-                                                            <column-left-value start-index="283" stop-index="298" name="order_id">
-                                                                <owner start-index="283" stop-index="289" name="order0_" />
+                                                        <predicate start-index="217" stop-index="245">
+                                                            <column-left-value start-index="217" stop-index="232" name="order_id">
+                                                                <owner start-index="217" stop-index="223" name="order0_" />
                                                             </column-left-value>
-                                                            <between-right-value>
-                                                                <between-literal-expression start-index="308" stop-index="308" value="9" />
-                                                                <between-parameter-marker-expression start-index="308" stop-index="308" value="2" />
-                                                                <and-literal-expression start-index="314" stop-index="314" value="7" />
-                                                                <and-parameter-marker-expression start-index="314" stop-index="314" value="3" />
-                                                            </between-right-value>
+                                                            <column-right-value start-index="236" stop-index="245" name="order_id">
+                                                                <owner start-index="236" stop-index="236" name="i" />
+                                                            </column-right-value>
                                                         </predicate>
                                                     </and-predicate>
-                                                </where>
-                                                <order-by>
-                                                    <column-item start-index="325" stop-index="333" name="item_id" order-direction="DESC">
-                                                        <owner start-index="325" stop-index="325" name="i" />
-                                                    </column-item>
-                                                </order-by>
-                                            </select>
-                                        </subquery>
-                                    </subqueryTable>
-                                </table-factor>
+                                                </joinSpecification>
+                                            </join-table>
+                                        </from>
+                                        <where start-index="247" stop-index="314">
+                                            <and-predicate>
+                                                <predicate start-index="253" stop-index="277">
+                                                    <column-left-value start-index="253" stop-index="267" name="user_id">
+                                                        <owner start-index="253" stop-index="259" name="order0_" />
+                                                    </column-left-value>
+                                                    <in-right-value>
+                                                        <literal-expression start-index="273" stop-index="273" value="1" />
+                                                        <literal-expression start-index="276" stop-index="276" value="2" />
+                                                        <parameter-marker-expression start-index="273" stop-index="273" value="0" />
+                                                        <parameter-marker-expression start-index="276" stop-index="276" value="1" />
+                                                    </in-right-value>
+                                                </predicate>
+                                                <predicate start-index="283" stop-index="314">
+                                                    <column-left-value start-index="283" stop-index="298" name="order_id">
+                                                        <owner start-index="283" stop-index="289" name="order0_" />
+                                                    </column-left-value>
+                                                    <between-right-value>
+                                                        <between-literal-expression start-index="308" stop-index="308" value="9" />
+                                                        <between-parameter-marker-expression start-index="308" stop-index="308" value="2" />
+                                                        <and-literal-expression start-index="314" stop-index="314" value="7" />
+                                                        <and-parameter-marker-expression start-index="314" stop-index="314" value="3" />
+                                                    </between-right-value>
+                                                </predicate>
+                                            </and-predicate>
+                                        </where>
+                                        <order-by>
+                                            <column-item start-index="325" stop-index="333" name="item_id" order-direction="DESC">
+                                                <owner start-index="325" stop-index="325" name="i" />
+                                            </column-item>
+                                        </order-by>
+                                    </select>
+                                </subquery>
+                            </subquery-table>
+                        </from>
+                        <where start-index="346" stop-index="362">
+                            <and-predicate>
+                                <predicate start-index="352" stop-index="362">
+                                    <column-left-value start-index="352" stop-index="357" name="rownum" />
+                                    <operator type="&lt;=" />
+                                    <compare-right-value>
+                                        <literal-expression start-index="362" stop-index="362" value="3" />
+                                        <parameter-marker-expression start-index="362" stop-index="362" value="4" />
+                                    </compare-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
 
-                            </table-reference>
-                            <where start-index="346" stop-index="362">
-                                <and-predicate>
-                                    <predicate start-index="352" stop-index="362">
-                                        <column-left-value start-index="352" stop-index="357" name="rownum" />
-                                        <operator type="&lt;=" />
-                                        <compare-right-value>
-                                            <literal-expression start-index="362" stop-index="362" value="3" />
-                                            <parameter-marker-expression start-index="362" stop-index="362" value="4" />
-                                        </compare-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
 
-
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
     </select>
 
     <select sql-case-id="select_pagination_with_row_number_for_greater_than" parameters="1, 2, 9, 7, 5, 3">
         <projections start-index="7" stop-index="7" >
             <shorthand-projection stop-index="7" start-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable>
-                    <subquery start-index="14" stop_index="363">
-                        <select>
-                            <projections start-index="22" stop-index="43">
-                                <shorthand-projection start-index="22" stop-index="27">
-                                    <owner start-index="22" stop-index="25" name="row_" />
-                                </shorthand-projection>
-                                <column-projection start-index="30" stop-index="35" name="rownum" alias="rownum_" />
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <subqueryTable start-index="50" stop-index="339" alias="row_">
-                                        <subquery>
-                                            <select>
-                                                <projections start-index="58" stop-index="139" >
-                                                    <column-projection start-index="58" stop-index="73" name="order_id" alias="order_id">
-                                                        <owner start-index="58" stop-index="64" name="order0_" />
-                                                    </column-projection>
-                                                    <column-projection start-index="88" stop-index="101" name="status" alias="status">
-                                                        <owner start-index="88" stop-index="94" name="order0_" />
-                                                    </column-projection>
-                                                    <column-projection start-index="114" stop-index="128" name="user_id" alias="user_id">
-                                                        <owner start-index="114" stop-index="120" name="order0_" />
-                                                    </column-projection>
-                                                </projections>
-                                                <table-reference>
-                                                    <table-factor>
-                                                        <table start-index="146" stop-index="160" name="t_order" alias="order0_" />
-                                                    </table-factor>
-                                                    <join-table>
-                                                        <table-factor>
-                                                            <table start-index="167" stop-index="180" name="t_order_item" alias="i" />
-                                                        </table-factor>
-                                                        <joinSpecification>
-                                                            <and-predicate>
-                                                                <predicate start-index="185" stop-index="211">
-                                                                    <column-left-value start-index="185" stop-index="199" name="user_id">
-                                                                        <owner start-index="185" stop-index="191" name="order0_" />
-                                                                    </column-left-value>
-                                                                    <column-right-value start-index="203" stop-index="211" name="user_id">
-                                                                        <owner start-index="203" stop-index="203" name="i" />
-                                                                    </column-right-value>
-                                                                </predicate>
-                                                                <predicate start-index="217" stop-index="245">
-                                                                    <column-left-value start-index="217" stop-index="232" name="order_id">
-                                                                        <owner start-index="217" stop-index="223" name="order0_" />
-                                                                    </column-left-value>
-                                                                    <column-right-value start-index="236" stop-index="245" name="order_id">
-                                                                        <owner start-index="236" stop-index="236" name="i" />
-                                                                    </column-right-value>
-                                                                </predicate>
-                                                            </and-predicate>
-                                                        </joinSpecification>
-                                                    </join-table>
-                                                </table-reference>
-                                                <where start-index="247" stop-index="314">
+        <from>
+            <subquery-table alias="t">
+                <subquery start-index="14" stop_index="363">
+                    <select>
+                        <projections start-index="22" stop-index="43">
+                            <shorthand-projection start-index="22" stop-index="27">
+                                <owner start-index="22" stop-index="25" name="row_" />
+                            </shorthand-projection>
+                            <column-projection start-index="30" stop-index="35" name="rownum" alias="rownum_" />
+                        </projections>
+                        <from>
+                            <subquery-table start-index="50" stop-index="339" alias="row_">
+                                <subquery>
+                                    <select>
+                                        <projections start-index="58" stop-index="139" >
+                                            <column-projection start-index="58" stop-index="73" name="order_id" alias="order_id">
+                                                <owner start-index="58" stop-index="64" name="order0_" />
+                                            </column-projection>
+                                            <column-projection start-index="88" stop-index="101" name="status" alias="status">
+                                                <owner start-index="88" stop-index="94" name="order0_" />
+                                            </column-projection>
+                                            <column-projection start-index="114" stop-index="128" name="user_id" alias="user_id">
+                                                <owner start-index="114" stop-index="120" name="order0_" />
+                                            </column-projection>
+                                        </projections>
+                                        <from>
+                                            <join-table>
+                                                <left>
+                                                    <simple-table start-index="146" stop-index="160" name="t_order" alias="order0_" />
+                                                </left>
+                                                <right>
+                                                    <simple-table start-index="167" stop-index="180" name="t_order_item" alias="i" />
+                                                </right>
+                                                <joinSpecification>
                                                     <and-predicate>
-                                                        <predicate start-index="253" stop-index="277">
-                                                            <column-left-value start-index="253" stop-index="267" name="user_id">
-                                                                <owner start-index="253" stop-index="259" name="order0_" />
+                                                        <predicate start-index="185" stop-index="211">
+                                                            <column-left-value start-index="185" stop-index="199" name="user_id">
+                                                                <owner start-index="185" stop-index="191" name="order0_" />
                                                             </column-left-value>
-                                                            <in-right-value>
-                                                                <literal-expression start-index="273" stop-index="273" value="1" />
-                                                                <literal-expression start-index="276" stop-index="276" value="2" />
-                                                                <parameter-marker-expression start-index="273" stop-index="273" value="0" />
-                                                                <parameter-marker-expression start-index="276" stop-index="276" value="1" />
-                                                            </in-right-value>
+                                                            <column-right-value start-index="203" stop-index="211" name="user_id">
+                                                                <owner start-index="203" stop-index="203" name="i" />
+                                                            </column-right-value>
                                                         </predicate>
-                                                        <predicate start-index="283" stop-index="314">
-                                                            <column-left-value start-index="283" stop-index="298" name="order_id">
-                                                                <owner start-index="283" stop-index="289" name="order0_" />
+                                                        <predicate start-index="217" stop-index="245">
+                                                            <column-left-value start-index="217" stop-index="232" name="order_id">
+                                                                <owner start-index="217" stop-index="223" name="order0_" />
                                                             </column-left-value>
-                                                            <between-right-value>
-                                                                <between-literal-expression start-index="308" stop-index="308" value="9" />
-                                                                <between-parameter-marker-expression start-index="308" stop-index="308" value="2" />
-                                                                <and-literal-expression start-index="314" stop-index="314" value="7" />
-                                                                <and-parameter-marker-expression start-index="314" stop-index="314" value="3" />
-                                                            </between-right-value>
+                                                            <column-right-value start-index="236" stop-index="245" name="order_id">
+                                                                <owner start-index="236" stop-index="236" name="i" />
+                                                            </column-right-value>
                                                         </predicate>
                                                     </and-predicate>
-                                                </where>
-                                                <order-by>
-                                                    <column-item start-index="325" stop-index="333" name="item_id" order-direction="DESC">
-                                                        <owner start-index="325" stop-index="325" name="i" />
-                                                    </column-item>
-                                                </order-by>
-                                            </select>
-                                        </subquery>
-                                    </subqueryTable>
-                                </table-factor>
-
-                            </table-reference>
-                            <where start-index="346" stop-index="362">
-                                <and-predicate>
-                                    <predicate start-index="352" stop-index="362">
-                                        <column-left-value start-index="352" stop-index="357" name="rownum" />
-                                        <operator type="&lt;=" />
-                                        <compare-right-value>
-                                            <literal-expression start-index="362" stop-index="362" value="5" />
-                                            <parameter-marker-expression start-index="362" stop-index="362" value="4" />
-                                        </compare-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+                                                </joinSpecification>
+                                            </join-table>
+                                        </from>
+                                        <where start-index="247" stop-index="314">
+                                            <and-predicate>
+                                                <predicate start-index="253" stop-index="277">
+                                                    <column-left-value start-index="253" stop-index="267" name="user_id">
+                                                        <owner start-index="253" stop-index="259" name="order0_" />
+                                                    </column-left-value>
+                                                    <in-right-value>
+                                                        <literal-expression start-index="273" stop-index="273" value="1" />
+                                                        <literal-expression start-index="276" stop-index="276" value="2" />
+                                                        <parameter-marker-expression start-index="273" stop-index="273" value="0" />
+                                                        <parameter-marker-expression start-index="276" stop-index="276" value="1" />
+                                                    </in-right-value>
+                                                </predicate>
+                                                <predicate start-index="283" stop-index="314">
+                                                    <column-left-value start-index="283" stop-index="298" name="order_id">
+                                                        <owner start-index="283" stop-index="289" name="order0_" />
+                                                    </column-left-value>
+                                                    <between-right-value>
+                                                        <between-literal-expression start-index="308" stop-index="308" value="9" />
+                                                        <between-parameter-marker-expression start-index="308" stop-index="308" value="2" />
+                                                        <and-literal-expression start-index="314" stop-index="314" value="7" />
+                                                        <and-parameter-marker-expression start-index="314" stop-index="314" value="3" />
+                                                    </between-right-value>
+                                                </predicate>
+                                            </and-predicate>
+                                        </where>
+                                        <order-by>
+                                            <column-item start-index="325" stop-index="333" name="item_id" order-direction="DESC">
+                                                <owner start-index="325" stop-index="325" name="i" />
+                                            </column-item>
+                                        </order-by>
+                                    </select>
+                                </subquery>
+                            </subquery-table>
+                        </from>
+                        <where start-index="346" stop-index="362">
+                            <and-predicate>
+                                <predicate start-index="352" stop-index="362">
+                                    <column-left-value start-index="352" stop-index="357" name="rownum" />
+                                    <operator type="&lt;=" />
+                                    <compare-right-value>
+                                        <literal-expression start-index="362" stop-index="362" value="5" />
+                                        <parameter-marker-expression start-index="362" stop-index="362" value="4" />
+                                    </compare-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
         <where start-index="367" stop-index="385">
             <and-predicate>
                 <predicate start-index="373" stop-index="385">
@@ -1299,117 +1277,112 @@
         <projections start-index="7" stop-index="7" >
             <shorthand-projection stop-index="7" start-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable>
-                    <subquery start-index="14" stop_index="363">
-                        <select>
-                            <projections start-index="22" stop-index="43">
-                                <shorthand-projection start-index="22" stop-index="27">
-                                    <owner start-index="22" stop-index="25" name="row_" />
-                                </shorthand-projection>
-                                <column-projection start-index="30" stop-index="35" name="rownum" alias="rownum_" />
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <subqueryTable start-index="50" stop-index="339" alias="row_">
-                                        <subquery>
-                                            <select>
-                                                <projections start-index="58" stop-index="139" >
-                                                    <column-projection start-index="58" stop-index="73" name="order_id" alias="order_id">
-                                                        <owner start-index="58" stop-index="64" name="order0_" />
-                                                    </column-projection>
-                                                    <column-projection start-index="88" stop-index="101" name="status" alias="status">
-                                                        <owner start-index="88" stop-index="94" name="order0_" />
-                                                    </column-projection>
-                                                    <column-projection start-index="114" stop-index="128" name="user_id" alias="user_id">
-                                                        <owner start-index="114" stop-index="120" name="order0_" />
-                                                    </column-projection>
-                                                </projections>
-                                                <table-reference>
-                                                    <table-factor>
-                                                        <table start-index="146" stop-index="160" name="t_order" alias="order0_" />
-                                                    </table-factor>
-                                                    <join-table>
-                                                        <table-factor>
-                                                            <table start-index="167" stop-index="180" name="t_order_item" alias="i" />
-                                                        </table-factor>
-                                                        <joinSpecification>
-                                                            <and-predicate>
-                                                                <predicate start-index="185" stop-index="211">
-                                                                    <column-left-value start-index="185" stop-index="199" name="user_id">
-                                                                        <owner start-index="185" stop-index="191" name="order0_" />
-                                                                    </column-left-value>
-                                                                    <column-right-value start-index="203" stop-index="211" name="user_id">
-                                                                        <owner start-index="203" stop-index="203" name="i" />
-                                                                    </column-right-value>
-                                                                </predicate>
-                                                                <predicate start-index="217" stop-index="245">
-                                                                    <column-left-value start-index="217" stop-index="232" name="order_id">
-                                                                        <owner start-index="217" stop-index="223" name="order0_" />
-                                                                    </column-left-value>
-                                                                    <column-right-value start-index="236" stop-index="245" name="order_id">
-                                                                        <owner start-index="236" stop-index="236" name="i" />
-                                                                    </column-right-value>
-                                                                </predicate>
-                                                            </and-predicate>
-                                                        </joinSpecification>
-                                                    </join-table>
-                                                </table-reference>
-                                                <where start-index="247" stop-index="314">
+        <from>
+            <subquery-table alias="t">
+                <subquery start-index="14" stop_index="363">
+                    <select>
+                        <projections start-index="22" stop-index="43">
+                            <shorthand-projection start-index="22" stop-index="27">
+                                <owner start-index="22" stop-index="25" name="row_" />
+                            </shorthand-projection>
+                            <column-projection start-index="30" stop-index="35" name="rownum" alias="rownum_" />
+                        </projections>
+                        <from>
+                            <subquery-table start-index="50" stop-index="339" alias="row_">
+                                <subquery>
+                                    <select>
+                                        <projections start-index="58" stop-index="139" >
+                                            <column-projection start-index="58" stop-index="73" name="order_id" alias="order_id">
+                                                <owner start-index="58" stop-index="64" name="order0_" />
+                                            </column-projection>
+                                            <column-projection start-index="88" stop-index="101" name="status" alias="status">
+                                                <owner start-index="88" stop-index="94" name="order0_" />
+                                            </column-projection>
+                                            <column-projection start-index="114" stop-index="128" name="user_id" alias="user_id">
+                                                <owner start-index="114" stop-index="120" name="order0_" />
+                                            </column-projection>
+                                        </projections>
+                                        <from>
+                                            <join-table>
+                                                <left>
+                                                    <simple-table start-index="146" stop-index="160" name="t_order" alias="order0_" />
+                                                </left>
+                                                <right>
+                                                    <simple-table start-index="167" stop-index="180" name="t_order_item" alias="i" />
+                                                </right>
+                                                <joinSpecification>
                                                     <and-predicate>
-                                                        <predicate start-index="253" stop-index="277">
-                                                            <column-left-value start-index="253" stop-index="267" name="user_id">
-                                                                <owner start-index="253" stop-index="259" name="order0_" />
+                                                        <predicate start-index="185" stop-index="211">
+                                                            <column-left-value start-index="185" stop-index="199" name="user_id">
+                                                                <owner start-index="185" stop-index="191" name="order0_" />
                                                             </column-left-value>
-                                                            <in-right-value>
-                                                                <literal-expression start-index="273" stop-index="273" value="1" />
-                                                                <literal-expression start-index="276" stop-index="276" value="2" />
-                                                                <parameter-marker-expression start-index="273" stop-index="273" value="0" />
-                                                                <parameter-marker-expression start-index="276" stop-index="276" value="1" />
-                                                            </in-right-value>
+                                                            <column-right-value start-index="203" stop-index="211" name="user_id">
+                                                                <owner start-index="203" stop-index="203" name="i" />
+                                                            </column-right-value>
                                                         </predicate>
-                                                        <predicate start-index="283" stop-index="314">
-                                                            <column-left-value start-index="283" stop-index="298" name="order_id">
-                                                                <owner start-index="283" stop-index="289" name="order0_" />
+                                                        <predicate start-index="217" stop-index="245">
+                                                            <column-left-value start-index="217" stop-index="232" name="order_id">
+                                                                <owner start-index="217" stop-index="223" name="order0_" />
                                                             </column-left-value>
-                                                            <between-right-value>
-                                                                <between-literal-expression start-index="308" stop-index="308" value="9" />
-                                                                <between-parameter-marker-expression start-index="308" stop-index="308" value="2" />
-                                                                <and-literal-expression start-index="314" stop-index="314" value="7" />
-                                                                <and-parameter-marker-expression start-index="314" stop-index="314" value="3" />
-                                                            </between-right-value>
+                                                            <column-right-value start-index="236" stop-index="245" name="order_id">
+                                                                <owner start-index="236" stop-index="236" name="i" />
+                                                            </column-right-value>
                                                         </predicate>
                                                     </and-predicate>
-                                                </where>
-                                                <order-by>
-                                                    <column-item start-index="325" stop-index="333" name="item_id" order-direction="DESC">
-                                                        <owner start-index="325" stop-index="325" name="i" />
-                                                    </column-item>
-                                                </order-by>
-                                            </select>
-                                        </subquery>
-                                    </subqueryTable>
-                                </table-factor>
-
-                            </table-reference>
-                            <where start-index="346" stop-index="362">
-                                <and-predicate>
-                                    <predicate start-index="352" stop-index="362">
-                                        <column-left-value start-index="352" stop-index="357" name="rownum" />
-                                        <operator type="&lt;=" />
-                                        <compare-right-value>
-                                            <literal-expression start-index="362" stop-index="362" value="5" />
-                                            <parameter-marker-expression start-index="362" stop-index="362" value="4" />
-                                        </compare-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
+                                                </joinSpecification>
+                                            </join-table>
+                                        </from>
+                                        <where start-index="247" stop-index="314">
+                                            <and-predicate>
+                                                <predicate start-index="253" stop-index="277">
+                                                    <column-left-value start-index="253" stop-index="267" name="user_id">
+                                                        <owner start-index="253" stop-index="259" name="order0_" />
+                                                    </column-left-value>
+                                                    <in-right-value>
+                                                        <literal-expression start-index="273" stop-index="273" value="1" />
+                                                        <literal-expression start-index="276" stop-index="276" value="2" />
+                                                        <parameter-marker-expression start-index="273" stop-index="273" value="0" />
+                                                        <parameter-marker-expression start-index="276" stop-index="276" value="1" />
+                                                    </in-right-value>
+                                                </predicate>
+                                                <predicate start-index="283" stop-index="314">
+                                                    <column-left-value start-index="283" stop-index="298" name="order_id">
+                                                        <owner start-index="283" stop-index="289" name="order0_" />
+                                                    </column-left-value>
+                                                    <between-right-value>
+                                                        <between-literal-expression start-index="308" stop-index="308" value="9" />
+                                                        <between-parameter-marker-expression start-index="308" stop-index="308" value="2" />
+                                                        <and-literal-expression start-index="314" stop-index="314" value="7" />
+                                                        <and-parameter-marker-expression start-index="314" stop-index="314" value="3" />
+                                                    </between-right-value>
+                                                </predicate>
+                                            </and-predicate>
+                                        </where>
+                                        <order-by>
+                                            <column-item start-index="325" stop-index="333" name="item_id" order-direction="DESC">
+                                                <owner start-index="325" stop-index="325" name="i" />
+                                            </column-item>
+                                        </order-by>
+                                    </select>
+                                </subquery>
+                            </subquery-table>
+                        </from>
+                        <where start-index="346" stop-index="362">
+                            <and-predicate>
+                                <predicate start-index="352" stop-index="362">
+                                    <column-left-value start-index="352" stop-index="357" name="rownum" />
+                                    <operator type="&lt;=" />
+                                    <compare-right-value>
+                                        <literal-expression start-index="362" stop-index="362" value="5" />
+                                        <parameter-marker-expression start-index="362" stop-index="362" value="4" />
+                                    </compare-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                    </select>
+                </subquery>
+            </subquery-table>
+        </from>
         <where start-index="367" stop-index="385">
             <and-predicate>
                 <predicate start-index="373" stop-index="386">
@@ -1427,11 +1400,9 @@
     </select>
 
     <select sql-case-id="select_pagination_with_row_number_not_at_end" parameters="20">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -1454,11 +1425,9 @@
     </select>
 
     <select sql-case-id="select_pagination_with_offset_fetch" parameters="20">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20"/>
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-sub-query.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-sub-query.xml
index 845cce0..9f5eae6 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-sub-query.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-sub-query.xml
@@ -18,11 +18,9 @@
 
 <sql-parser-test-cases>
     <select sql-case-id="select_sub_query_with_project">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="40" stop-index="46" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="40" stop-index="46" />
+        </from>
         <projections start-index="7" stop-index="33">
             <column-projection name="order_id" start-index="7" stop-index="14" />
             <subquery-projection start-index="17" stop-index="26" alias="num">
@@ -43,70 +41,39 @@
                 <owner start-index="7" stop-index="7" name="t"/>
             </shorthand-projection>
         </projections>
-        <table-reference>
-            <table-factor>
-                <subqueryTable alias="t">
-                    <subquery>
-                        <select>
-                            <projections start-index="24" stop-index="24">
-                                <shorthand-projection start-index="24" stop-index="24" />
-                            </projections>
-                            <table-reference>
-                                <table-factor>
-                                    <table start-index="31" stop-index="37" name="t_order"/>
-                                </table-factor>
-                            </table-reference>
-                            <where start-index="39" stop-index="62">
-                                <and-predicate>
-                                    <predicate start-index="45" stop-index="62">
-                                        <column-left-value start-index="45" stop-index="52" name="order_id" />
-                                        <in-right-value>
-                                            <literal-expression start-index="58" stop-index="58" value="3" />
-                                            <parameter-marker-expression start-index="58" stop-index="58" value="0" />
-                                            <literal-expression start-index="61" stop-index="61" value="4" />
-                                            <parameter-marker-expression start-index="61" stop-index="61" value="1"/>
-                                        </in-right-value>
-                                    </predicate>
-                                </and-predicate>
-                            </where>
-                        </select>
-                    </subquery>
-                </subqueryTable>
-            </table-factor>
-        </table-reference>
-        <tables>
-            <subquery-table start-index="17" stop-index="62" alias="t">
-                <select>
-                    <tables>
-                        <simple-table name="t_order" start-index="31" stop-index="37" />
-                    </tables>
-                    <projections start-index="24" stop-index="24">
-                        <shorthand-projection start-index="24" stop-index="24" />
-                    </projections>
-                    <where start-index="39" stop-index="62" literal-stop-index="62">
-                        <and-predicate>
-                            <predicate start-index="45" stop-index="62" literal-stop-index="62">
-                                <column-left-value name="order_id" start-index="45" stop-index="52" />
-                                <in-right-value>
-                                    <parameter-marker-expression value="1" />
-                                    <parameter-marker-expression value="2" />
-                                    <literal-expression value="3" />
-                                    <literal-expression value="4" />
-                                </in-right-value>
-                            </predicate>
-                        </and-predicate>
-                    </where>
-                </select>
+        <from>
+            <subquery-table alias="t">
+                <subquery>
+                    <select>
+                        <projections start-index="24" stop-index="24">
+                            <shorthand-projection start-index="24" stop-index="24" />
+                        </projections>
+                        <from>
+                            <simple-table start-index="31" stop-index="37" name="t_order"/>
+                        </from>
+                        <where start-index="39" stop-index="62">
+                            <and-predicate>
+                                <predicate start-index="45" stop-index="62">
+                                    <column-left-value start-index="45" stop-index="52" name="order_id" />
+                                    <in-right-value>
+                                        <literal-expression start-index="58" stop-index="58" value="3" />
+                                        <parameter-marker-expression start-index="58" stop-index="58" value="0" />
+                                        <literal-expression start-index="61" stop-index="61" value="4" />
+                                        <parameter-marker-expression start-index="61" stop-index="61" value="1"/>
+                                    </in-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </where>
+                    </select>
+                </subquery>
             </subquery-table>
-        </tables>
+        </from>
     </select>
 
     <select sql-case-id="select_with_equal_subquery">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -146,11 +113,9 @@
     </select>
 
     <select sql-case-id="select_with_in_subquery">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -161,11 +126,9 @@
                     <in-right-value>
                         <subquery-expression start-index="39" stop-index="93" literal-start-index="39" literal-stop-index="93">
                             <select>
-                                <table-reference>
-                                    <table-factor>
-                                        <table name="t_order_item" start-index="60" stop-index="71" />
-                                    </table-factor>
-                                </table-reference>
+                                <from>
+                                    <simple-table name="t_order_item" start-index="60" stop-index="71" />
+                                </from>
                                 <projections start-index="47" stop-index="53">
                                     <column-projection name="user_id" start-index="47" stop-index="53" />
                                 </projections>
@@ -189,11 +152,9 @@
     </select>
 
     <select sql-case-id="select_with_between_subquery" parameters="12">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -204,11 +165,9 @@
                     <between-right-value>
                         <between-subquery-expression start-index="44" stop-index="97" literal-start-index="44" literal-stop-index="97" >
                             <select>
-                                <table-reference>
-                                    <table-factor>
-                                        <table name="t_order_item" start-index="65" stop-index="76" />
-                                    </table-factor>
-                                </table-reference>
+                                <from>
+                                    <simple-table name="t_order_item" start-index="65" stop-index="76" />
+                                </from>
                                 <projections start-index="52" stop-index="58">
                                     <column-projection name="user_id" start-index="52" stop-index="58" />
                                 </projections>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select.xml
index e01ac58..d777eeb 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select.xml
@@ -30,11 +30,9 @@
     </select>
 
     <select sql-case-id="select_with_same_table_name_and_alias" parameters="1, 1">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="t_order" start-index="22" stop-index="36" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" alias="t_order" start-index="22" stop-index="36" />
+        </from>
         <projections start-index="7" stop-index="15">
             <shorthand-projection start-index="7" stop-index="15">
                 <owner name="t_order" start-index="7" stop-index="13" />
@@ -63,11 +61,9 @@
     </select>
 
     <select sql-case-id="select_with_same_table_name_and_alias_column_with_owner" parameters="1, 1">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="t_order" start-index="52" stop-index="66" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" alias="t_order" start-index="52" stop-index="66" />
+        </from>
         <projections start-index="7" stop-index="45">
             <column-projection name="order_id" start-index="7" stop-index="22">
                 <owner name="t_order" start-index="7" stop-index="13" />
@@ -102,11 +98,9 @@
     </select>
 
     <select sql-case-id="select_not_equal_with_single_table" parameters="1">
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" start-index="14" stop-index="25" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order_item" start-index="14" stop-index="25" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -128,11 +122,9 @@
     </select>
 
     <select sql-case-id="select_exclamation_equal_with_single_table" parameters="1">
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" start-index="14" stop-index="25" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order_item" start-index="14" stop-index="25" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -154,11 +146,9 @@
     </select>
 
     <select sql-case-id="select_not_in_with_single_table" parameters="100000, 100001">
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" start-index="14" stop-index="25" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order_item" start-index="14" stop-index="25" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -179,11 +169,9 @@
     </select>
 
     <select sql-case-id="select_not_between_with_single_table" parameters="100000, 100001">
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" start-index="14" stop-index="25" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order_item" start-index="14" stop-index="25" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -204,11 +192,9 @@
     </select>
 
     <select sql-case-id="select_equal_with_single_table" parameters="1, 1">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -235,11 +221,9 @@
     </select>
 
     <select sql-case-id="select_equal_with_same_sharding_column" parameters="1, 2">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -266,11 +250,9 @@
     </select>
 
     <select sql-case-id="select_between_with_single_table" parameters="1, 10, 2, 5">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -303,11 +285,9 @@
     </select>
 
     <select sql-case-id="select_comparison_symbol_with_single_table" parameters="1, 10, 2, 5">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -354,11 +334,9 @@
     </select>
 
     <select sql-case-id="select_in_with_single_table" parameters="1, 2, 3, 9, 10">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -393,11 +371,9 @@
     </select>
 
     <select sql-case-id="select_in_with_same_sharding_column" parameters="1000, 1001, 1001, 1002">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -429,6 +405,9 @@
     </select>
 
     <select sql-case-id="select_with_N_string_in_expression">
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7"/>
         </projections>
@@ -436,11 +415,9 @@
     </select>
 
     <select sql-case-id="select_count_like_concat" parameters="'init', 1, 2, 9, 10">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="37" stop-index="45" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" alias="o" start-index="37" stop-index="45" />
+        </from>
         <projections start-index="7" stop-index="30">
             <aggregation-projection type="COUNT" inner-expression="(0)" alias="orders_count" start-index="7" stop-index="14" />
         </projections>
@@ -479,6 +456,9 @@
     </select>
 
     <select sql-case-id="select_like_with_single_quotes" >
+        <from>
+            <simple-table name="admin" start-index="15" stop-index="19" />
+        </from>
         <projections start-index="7" stop-index="8">
             <column-projection name="id" start-index="7" stop-index="8"/>
         </projections>
@@ -486,11 +466,9 @@
     </select>
 
     <select sql-case-id="select_count_tilde_concat" parameters="'init', 1, 2, 9, 10">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="37" stop-index="45" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" alias="o" start-index="37" stop-index="45" />
+        </from>
         <projections start-index="7" stop-index="30">
             <aggregation-projection type="COUNT" inner-expression="(0)" alias="orders_count" start-index="7" stop-index="14" />
         </projections>
@@ -529,14 +507,14 @@
     </select>
 
     <select sql-case-id="select_sharding_route_with_binding_tables" parameters="1, 2, 9, 10">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="31" stop-index="44" />
-                </table-factor>
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="31" stop-index="44" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="49" stop-index="69">
@@ -558,7 +536,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
@@ -598,14 +576,14 @@
     </select>
 
     <select sql-case-id="select_full_route_with_binding_tables">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="31" stop-index="44" />
-                </table-factor>
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="31" stop-index="44" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="49" stop-index="69">
@@ -627,7 +605,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
@@ -641,39 +619,41 @@
     </select>
 
     <select sql-case-id="select_sharding_route_with_broadcast_table" parameters="1, 2, 9, 10, 'init'">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="31" stop-index="44" />
-                </table-factor>
-                <joinSpecification>
-                    <and-predicate>
-                        <predicate start-index="49" stop-index="69">
-                            <column-left-value name="user_id" start-index="49" stop-index="57">
-                                <owner name="o" start-index="49" stop-index="49" />
-                            </column-left-value>
-                            <column-right-value name="user_id" start-index="61" stop-index="69">
-                                <owner name="i" start-index="61" stop-index="61" />
-                            </column-right-value>
-                        </predicate>
-                        <predicate start-index="75" stop-index="97">
-                            <column-left-value name="order_id" start-index="75" stop-index="84">
-                                <owner name="o" start-index="75" stop-index="75" />
-                            </column-left-value>
-                            <column-right-value name="order_id" start-index="88" stop-index="97">
-                                <owner name="i" start-index="88" stop-index="88" />
-                            </column-right-value>
-                        </predicate>
-                    </and-predicate>
-                </joinSpecification>
-            </join-table>
-            <join-table>
-                <table-factor>
-                    <table name="t_broadcast_table" alias="c" start-index="104" stop-index="122" />
-                </table-factor>
+                <left>
+                    <join-table>
+                        <left>
+                            <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+                        </left>
+                        <right>
+                            <simple-table name="t_order_item" alias="i" start-index="31" stop-index="44" />
+                        </right>
+                        <joinSpecification>
+                            <and-predicate>
+                                <predicate start-index="49" stop-index="69">
+                                    <column-left-value name="user_id" start-index="49" stop-index="57">
+                                        <owner name="o" start-index="49" stop-index="49" />
+                                    </column-left-value>
+                                    <column-right-value name="user_id" start-index="61" stop-index="69">
+                                        <owner name="i" start-index="61" stop-index="61" />
+                                    </column-right-value>
+                                </predicate>
+                                <predicate start-index="75" stop-index="97">
+                                    <column-left-value name="order_id" start-index="75" stop-index="84">
+                                        <owner name="o" start-index="75" stop-index="75" />
+                                    </column-left-value>
+                                    <column-right-value name="order_id" start-index="88" stop-index="97">
+                                        <owner name="i" start-index="88" stop-index="88" />
+                                    </column-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </joinSpecification>
+                    </join-table>
+                </left>
+                <right>
+                    <simple-table name="t_broadcast_table" alias="c" start-index="104" stop-index="122" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="127" stop-index="145">
@@ -687,7 +667,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
@@ -737,39 +717,41 @@
     </select>
 
     <select sql-case-id="select_keyword_table_name_with_back_quotes" parameters="1, 2, 9, 10, 'init'">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
-            <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="31" stop-index="44" />
-                </table-factor>
-                <joinSpecification>
-                    <and-predicate>
-                        <predicate start-index="49" stop-index="69">
-                            <column-left-value name="user_id" start-index="49" stop-index="57">
-                                <owner name="o" start-index="49" stop-index="49" />
-                            </column-left-value>
-                            <column-right-value name="user_id" start-index="61" stop-index="69">
-                                <owner name="i" start-index="61" stop-index="61" />
-                            </column-right-value>
-                        </predicate>
-                        <predicate start-index="75" stop-index="97">
-                            <column-left-value name="order_id" start-index="75" stop-index="84">
-                                <owner name="o" start-index="75" stop-index="75" />
-                            </column-left-value>
-                            <column-right-value name="order_id" start-index="88" stop-index="97">
-                                <owner name="i" start-index="88" stop-index="88" />
-                            </column-right-value>
-                        </predicate>
-                    </and-predicate>
-                </joinSpecification>
-            </join-table>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="select" alias="c" start-delimiter="`" end-delimiter="`" start-index="104" stop-index="113" />
-                </table-factor>
+                <left>
+                    <join-table>
+                        <left>
+                            <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+                        </left>
+                        <right>
+                            <simple-table name="t_order_item" alias="i" start-index="31" stop-index="44" />
+                        </right>
+                        <joinSpecification>
+                            <and-predicate>
+                                <predicate start-index="49" stop-index="69">
+                                    <column-left-value name="user_id" start-index="49" stop-index="57">
+                                        <owner name="o" start-index="49" stop-index="49" />
+                                    </column-left-value>
+                                    <column-right-value name="user_id" start-index="61" stop-index="69">
+                                        <owner name="i" start-index="61" stop-index="61" />
+                                    </column-right-value>
+                                </predicate>
+                                <predicate start-index="75" stop-index="97">
+                                    <column-left-value name="order_id" start-index="75" stop-index="84">
+                                        <owner name="o" start-index="75" stop-index="75" />
+                                    </column-left-value>
+                                    <column-right-value name="order_id" start-index="88" stop-index="97">
+                                        <owner name="i" start-index="88" stop-index="88" />
+                                    </column-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </joinSpecification>
+                    </join-table>
+                </left>
+                <right>
+                    <simple-table name="select" alias="c" start-delimiter="`" end-delimiter="`" start-index="104" stop-index="113" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="118" stop-index="136">
@@ -783,7 +765,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
@@ -833,39 +815,41 @@
     </select>
 
     <select sql-case-id="select_keyword_table_name_with_double_quotes" parameters="1, 2, 9, 10, 'init'">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
-            <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="31" stop-index="44" />
-                </table-factor>
-                <joinSpecification>
-                    <and-predicate>
-                        <predicate start-index="49" stop-index="69">
-                            <column-left-value name="user_id" start-index="49" stop-index="57">
-                                <owner name="o" start-index="49" stop-index="49" />
-                            </column-left-value>
-                            <column-right-value name="user_id" start-index="61" stop-index="69">
-                                <owner name="i" start-index="61" stop-index="61" />
-                            </column-right-value>
-                        </predicate>
-                        <predicate start-index="75" stop-index="97">
-                            <column-left-value name="order_id" start-index="75" stop-index="84">
-                                <owner name="o" start-index="75" stop-index="75" />
-                            </column-left-value>
-                            <column-right-value name="order_id" start-index="88" stop-index="97">
-                                <owner name="i" start-index="88" stop-index="88" />
-                            </column-right-value>
-                        </predicate>
-                    </and-predicate>
-                </joinSpecification>
-            </join-table>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="select" alias="c" start-delimiter="&quot;" end-delimiter="&quot;" start-index="104" stop-index="113" />
-                </table-factor>
+                <left>
+                    <join-table>
+                        <left>
+                            <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+                        </left>
+                        <right>
+                            <simple-table name="t_order_item" alias="i" start-index="31" stop-index="44" />
+                        </right>
+                        <joinSpecification>
+                            <and-predicate>
+                                <predicate start-index="49" stop-index="69">
+                                    <column-left-value name="user_id" start-index="49" stop-index="57">
+                                        <owner name="o" start-index="49" stop-index="49" />
+                                    </column-left-value>
+                                    <column-right-value name="user_id" start-index="61" stop-index="69">
+                                        <owner name="i" start-index="61" stop-index="61" />
+                                    </column-right-value>
+                                </predicate>
+                                <predicate start-index="75" stop-index="97">
+                                    <column-left-value name="order_id" start-index="75" stop-index="84">
+                                        <owner name="o" start-index="75" stop-index="75" />
+                                    </column-left-value>
+                                    <column-right-value name="order_id" start-index="88" stop-index="97">
+                                        <owner name="i" start-index="88" stop-index="88" />
+                                    </column-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </joinSpecification>
+                    </join-table>
+                </left>
+                <right>
+                    <simple-table name="select" alias="c" start-delimiter="&quot;" end-delimiter="&quot;" start-index="104" stop-index="113" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="118" stop-index="136">
@@ -879,7 +863,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9" >
                 <owner name="i" start-index="7" stop-index="7" />
@@ -929,39 +913,41 @@
     </select>
 
     <select sql-case-id="select_keyword_table_name_with_square_brackets" parameters="1, 2, 9, 10, 'init'">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
-            <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="31" stop-index="44" />
-                </table-factor>
-                <joinSpecification>
-                    <and-predicate>
-                        <predicate start-index="49" stop-index="69">
-                            <column-left-value name="user_id" start-index="49" stop-index="57">
-                                <owner name="o" start-index="49" stop-index="49" />
-                            </column-left-value>
-                            <column-right-value name="user_id" start-index="61" stop-index="69">
-                                <owner name="i" start-index="61" stop-index="61" />
-                            </column-right-value>
-                        </predicate>
-                        <predicate start-index="75" stop-index="97">
-                            <column-left-value name="order_id" start-index="75" stop-index="84">
-                                <owner name="o" start-index="75" stop-index="75" />
-                            </column-left-value>
-                            <column-right-value name="order_id" start-index="88" stop-index="97">
-                                <owner name="i" start-index="88" stop-index="88" />
-                            </column-right-value>
-                        </predicate>
-                    </and-predicate>
-                </joinSpecification>
-            </join-table>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="select" alias="c" start-delimiter="[" end-delimiter="]" start-index="104" stop-index="113" />
-                </table-factor>
+                <left>
+                    <join-table>
+                        <left>
+                            <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+                        </left>
+                        <right>
+                            <simple-table name="t_order_item" alias="i" start-index="31" stop-index="44" />
+                        </right>
+                        <joinSpecification>
+                            <and-predicate>
+                                <predicate start-index="49" stop-index="69">
+                                    <column-left-value name="user_id" start-index="49" stop-index="57">
+                                        <owner name="o" start-index="49" stop-index="49" />
+                                    </column-left-value>
+                                    <column-right-value name="user_id" start-index="61" stop-index="69">
+                                        <owner name="i" start-index="61" stop-index="61" />
+                                    </column-right-value>
+                                </predicate>
+                                <predicate start-index="75" stop-index="97">
+                                    <column-left-value name="order_id" start-index="75" stop-index="84">
+                                        <owner name="o" start-index="75" stop-index="75" />
+                                    </column-left-value>
+                                    <column-right-value name="order_id" start-index="88" stop-index="97">
+                                        <owner name="i" start-index="88" stop-index="88" />
+                                    </column-right-value>
+                                </predicate>
+                            </and-predicate>
+                        </joinSpecification>
+                    </join-table>
+                </left>
+                <right>
+                    <simple-table name="select" alias="c" start-delimiter="[" end-delimiter="]" start-index="104" stop-index="113" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="118" stop-index="136">
@@ -975,7 +961,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
@@ -1025,11 +1011,9 @@
     </select>
 
     <select sql-case-id="select_alias_as_keyword" parameters="1">
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" alias="length" start-index="36" stop-index="54" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order_item" alias="length" start-index="36" stop-index="54" />
+        </from>
         <projections start-index="7" stop-index="29">
             <column-projection name="item_id" alias="password" start-index="7" stop-index="20">
                 <owner name="length" start-index="7" stop-index="12" />
@@ -1052,14 +1036,14 @@
     </select>
 
     <select sql-case-id="select_with_force_index_join" parameters="1000">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" alias="o" start-index="16" stop-index="24" />
-            </table-factor>
+        <from>
             <join-table>
-                <table-factor>
-                    <table name="t_order_item" alias="i" start-index="56" stop-index="69" />
-                </table-factor>
+                <left>
+                    <simple-table name="t_order" alias="o" start-index="16" stop-index="24" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" alias="i" start-index="56" stop-index="69" />
+                </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="74" stop-index="94">
@@ -1073,7 +1057,7 @@
                     </and-predicate>
                 </joinSpecification>
             </join-table>
-        </table-reference>
+        </from>
         <projections start-index="7" stop-index="9">
             <shorthand-projection start-index="7" stop-index="9">
                 <owner name="i" start-index="7" stop-index="7" />
@@ -1096,11 +1080,9 @@
     </select>
 
     <select sql-case-id="select_equal_with_geography" parameters="'{&quot;rule2&quot;:&quot;null2&quot;}', 100, 200, 1, 2">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -1145,11 +1127,9 @@
     </select>
 
     <select sql-case-id="select_in_with_geography" parameters="'{&quot;rule2&quot;:&quot;null2&quot;}', '{&quot;rule3&quot;:&quot;null3&quot;}', 100, 200, 1, 2">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -1193,11 +1173,9 @@
     </select>
 
     <select sql-case-id="select_between_with_geography" parameters="'{&quot;rule2&quot;:&quot;null2&quot;}', '{&quot;rule3&quot;:&quot;null3&quot;}', 100, 200, 1">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -1235,11 +1213,9 @@
     </select>
 
     <select sql-case-id="select_with_double_quotes" parameters="1">
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" start-delimiter="&quot;" end-delimiter="&quot;" start-index="14" stop-index="27" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order_item" start-delimiter="&quot;" end-delimiter="&quot;" start-index="14" stop-index="27" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -1261,22 +1237,18 @@
     </select>
 
     <select sql-case-id="select_distinct_with_single_column_without_order_by" >
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" start-index="29" stop-index="40" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order_item" start-index="29" stop-index="40" />
+        </from>
         <projections start-index="16" stop-index="22" distinct-row="true">
             <column-projection name="item_id" start-index="16" stop-index="22" />
         </projections>
     </select>
 
     <select sql-case-id="select_distinct_with_multi_column_without_order_by" >
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="47" stop-index="53" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="47" stop-index="53" />
+        </from>
         <projections start-index="16" stop-index="40" distinct-row="true">
             <column-projection name="order_id" start-index="16" stop-index="23" />
             <column-projection name="user_id" start-index="26" stop-index="32" />
@@ -1285,11 +1257,9 @@
     </select>
 
     <select sql-case-id="select_distinct_with_owner_column_without_order_by" >
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="38" stop-index="44" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="38" stop-index="44" />
+        </from>
         <projections start-index="16" stop-index="31" distinct-row="true">
             <column-projection name="order_id" start-index="16" stop-index="31" >
                 <owner name="t_order" start-index="16" stop-index="22" />
@@ -1303,16 +1273,16 @@
     </select>
 
     <select sql-case-id="select_distinct_with_owner_star_without_order_by" >
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="54" stop-index="60" />
-            </table-factor>
-        </table-reference>
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" start-index="63" stop-index="74" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <join-table>
+                <left>
+                    <simple-table name="t_order" start-index="54" stop-index="60" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" start-index="63" stop-index="74" />
+                </right>
+            </join-table>
+        </from>
         <projections start-index="16" stop-index="47" distinct-row="true">
             <shorthand-projection start-index="16" stop-index="24">
                 <owner name="t_order" start-index="16" stop-index="22"/>
@@ -1336,11 +1306,9 @@
     </select>
 
     <select sql-case-id="select_distinct_with_owner_column_with_group_by" >
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="38" stop-index="44" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="38" stop-index="44" />
+        </from>
         <projections start-index="16" stop-index="31" distinct-row="true">
             <column-projection name="order_id" start-index="16" stop-index="31" >
                 <owner name="t_order" start-index="16" stop-index="22" />
@@ -1354,11 +1322,9 @@
     </select>
 
     <select sql-case-id="select_distinct_with_single_column" >
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" start-index="29" stop-index="40" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order_item" start-index="29" stop-index="40" />
+        </from>
         <projections start-index="16" stop-index="22" distinct-row="true">
             <column-projection name="item_id" start-index="16" stop-index="22" />
         </projections>
@@ -1368,11 +1334,9 @@
     </select>
 
     <select sql-case-id="select_distinct_with_owner_column" >
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="38" stop-index="44" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="38" stop-index="44" />
+        </from>
         <projections start-index="16" stop-index="31" distinct-row="true">
             <column-projection name="order_id" start-index="16" stop-index="31">
                 <owner name="t_order" start-index="16" stop-index="22" />
@@ -1384,11 +1348,9 @@
     </select>
 
     <select sql-case-id="select_distinct_with_multi_column" >
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="47" stop-index="53" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="47" stop-index="53" />
+        </from>
         <projections start-index="16" stop-index="40" distinct-row="true">
             <column-projection name="order_id" start-index="16" stop-index="23" />
             <column-projection name="user_id" start-index="26" stop-index="32" />
@@ -1400,11 +1362,9 @@
     </select>
 
     <select sql-case-id="select_distinct_with_star" >
-        <table-reference>
-            <table-factor>
-                <table  name="t_order" start-index="23" stop-index="29" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table  name="t_order" start-index="23" stop-index="29" />
+        </from>
         <projections distinct-row="true" start-index="16" stop-index="16">
             <shorthand-projection start-index="16" stop-index="16" />
         </projections>
@@ -1425,16 +1385,16 @@
     </select>
 
     <select sql-case-id="select_distinct_with_owner_star">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="54" stop-index="60" />
-            </table-factor>
-        </table-reference>
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" start-index="63" stop-index="74" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <join-table>
+                <left>
+                    <simple-table name="t_order" start-index="54" stop-index="60" />
+                </left>
+                <right>
+                    <simple-table name="t_order_item" start-index="63" stop-index="74" />
+                </right>
+            </join-table>
+        </from>
         <projections distinct-row="true" start-index="16" stop-index="47">
             <shorthand-projection start-index="16" stop-index="24">
                 <owner name="t_order" start-index="16" stop-index="22" />
@@ -1463,11 +1423,9 @@
     </select>
 
     <select sql-case-id="select_distinct_with_sum" >
-        <table-reference>
-            <table-factor>
-                <table  name="t_order" start-index="37" stop-index="43" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table  name="t_order" start-index="37" stop-index="43" />
+        </from>
         <projections start-index="7" stop-index="30">
             <aggregation-distinct-projection type="SUM" inner-expression="(DISTINCT order_id)" distinct-expression="order_id" alias="s" start-index="7" stop-index="28" />
         </projections>
@@ -1485,11 +1443,9 @@
     </select>
 
     <select sql-case-id="select_distinct_with_count">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="39" stop-index="45" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="39" stop-index="45" />
+        </from>
         <projections start-index="7" stop-index="32">
             <aggregation-distinct-projection type="COUNT" inner-expression="(DISTINCT order_id)" distinct-expression="order_id" alias="c" start-index="7" stop-index="30" />
         </projections>
@@ -1507,11 +1463,9 @@
     </select>
 
     <select sql-case-id="select_distinct_with_avg">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="35" stop-index="41" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="35" stop-index="41" />
+        </from>
         <projections start-index="7" stop-index="28">
             <aggregation-distinct-projection type="AVG" inner-expression="(DISTINCT order_id)" distinct-expression="order_id" start-index="7" stop-index="28" />
         </projections>
@@ -1529,11 +1483,9 @@
     </select>
 
     <select sql-case-id="select_distinct_with_count_sum" >
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="61" stop-index="67" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="61" stop-index="67" />
+        </from>
         <projections start-index="7" stop-index="54">
             <aggregation-distinct-projection type="COUNT" inner-expression="(DISTINCT order_id)" distinct-expression="order_id" start-index="7" stop-index="30" />
             <aggregation-distinct-projection type="SUM" inner-expression="(DISTINCT order_id)" distinct-expression="order_id" start-index="33" stop-index="54" />
@@ -1552,11 +1504,9 @@
     </select>
 
     <select sql-case-id="select_distinct_with_single_count_group_by" >
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="49" stop-index="55" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="49" stop-index="55" />
+        </from>
         <projections start-index="7" stop-index="42">
             <column-projection name="order_id" start-index="7" stop-index="14" />
             <aggregation-distinct-projection type="COUNT" inner-expression="(DISTINCT order_id)" distinct-expression="order_id" alias="c" start-index="17" stop-index="40" />
@@ -1581,11 +1531,9 @@
     </select>
 
     <select sql-case-id="select_distinct_with_count_group_by" >
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="49" stop-index="55" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="49" stop-index="55" />
+        </from>
         <projections start-index="7" stop-index="42">
             <aggregation-distinct-projection type="COUNT" inner-expression="(DISTINCT order_id)" distinct-expression="order_id" alias="c" start-index="7" stop-index="30" />
             <column-projection name="order_id" start-index="35" stop-index="42" />
@@ -1599,11 +1547,9 @@
     </select>
 
     <select sql-case-id="select_distinct_function">
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" start-index="30" stop-index="41" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order_item" start-index="30" stop-index="41" />
+        </from>
         <projections distinct-row="true" start-index="15" stop-index="23">
             <column-projection start-index="16" stop-index="22" name="item_id"/>
         </projections>
@@ -1613,11 +1559,9 @@
     </select>
 
     <select sql-case-id="select_distinct_with_count_calculation" >
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="49" stop-index="55" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="49" stop-index="55" />
+        </from>
         <projections start-index="7" stop-index="42">
             <aggregation-distinct-projection type="COUNT" inner-expression="(DISTINCT user_id + order_id)" distinct-expression="user_id+order_id" alias="c" start-index="7" stop-index="40" />
         </projections>
@@ -1635,11 +1579,9 @@
     </select>
 
     <select sql-case-id="select_distinct_with_aggregation_functions" >
-        <table-reference>
-            <table-factor>
-                <table  name="t_order" start-index="77" stop-index="83" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table  name="t_order" start-index="77" stop-index="83" />
+        </from>
         <projections start-index="7" stop-index="69">
             <aggregation-distinct-projection type="SUM" inner-expression="(DISTINCT order_id)" distinct-expression="order_id" start-index="7" stop-index="28" />
             <aggregation-distinct-projection type="COUNT" inner-expression="(DISTINCT order_id)" distinct-expression="order_id" start-index="30" stop-index="53" />
@@ -1659,24 +1601,20 @@
     </select>
 
     <select sql-case-id="select_with_schema" >
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="24">
-                    <owner name="db1" start-index="14" stop-index="16" />
-                </table>
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="24">
+                <owner name="db1" start-index="14" stop-index="16" />
+            </simple-table>
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
     </select>
 
     <select sql-case-id="select_escape_with_single_quota" >
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -1694,11 +1632,9 @@
     </select>
 
     <select sql-case-id="select_escape_with_double_quota" >
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -1714,11 +1650,9 @@
     </select>
 
     <select sql-case-id="select_with_block_comment" >
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="83" stop-index="89" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="83" stop-index="89" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -1737,11 +1671,9 @@
     </select>
 
     <select sql-case-id="select_with_single_comment" >
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="78" stop-index="84" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="78" stop-index="84" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -1760,33 +1692,27 @@
     </select>
 
     <select sql-case-id="select_alias_as_single_quote_string">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="31" stop-index="37" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="31" stop-index="37" />
+        </from>
         <projections start-index="7" stop-index="24">
             <column-projection alias="status" name="status" start-index="7" stop-index="12" />
         </projections>
     </select>
 
     <select sql-case-id="select_alias_as_string_double_quote">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="31" stop-index="37" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="31" stop-index="37" />
+        </from>
         <projections start-index="7" stop-index="24">
             <column-projection name="status" alias="status" start-index="7" stop-index="12" />
         </projections>
     </select>
 
     <select sql-case-id="select_special_function_nested" parameters="12, 1000">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="48" stop-index="54" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="48" stop-index="54" />
+        </from>
         <projections start-index="7" stop-index="41">
             <aggregation-projection type="SUM" inner-expression="(if(status=0, 1, 0))" alias="func_status" start-index="7" stop-index="29" />
         </projections>
@@ -1813,11 +1739,9 @@
     </select>
 
     <select sql-case-id="select_with_interval_function" parameters="12, 1000">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="45" stop-index="51" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="45" stop-index="51" />
+        </from>
         <projections start-index="7" stop-index="38">
             <expression-projection alias="func_status" start-index="7" stop-index="38" />
         </projections>
@@ -1844,11 +1768,9 @@
     </select>
 
     <select sql-case-id="select_with_left_function">
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" start-index="44" stop-index="55" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order_item" start-index="44" stop-index="55" />
+        </from>
         <projections start-index="7" stop-index="37">
             <expression-projection start-index="7" stop-index="37" />
         </projections>
@@ -1866,11 +1788,9 @@
     </select>
 
     <select sql-case-id="select_for_update" parameters="10">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -1895,11 +1815,9 @@
     </select>
 
     <select sql-case-id="select_with_mod_function">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -1909,11 +1827,9 @@
     </select>
 
     <select sql-case-id="select_with_date_format_function">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -1926,11 +1842,9 @@
     </select>
 
     <select sql-case-id="select_with_spatial_function">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="14" stop-index="20" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
@@ -1948,14 +1862,12 @@
         </projections>
     </select>
     <select sql-case-id="select_with_match_against" parameters="hello, 10">
+        <from>
+            <simple-table name="t_order_item" start-index="14" stop-index="25" />
+        </from>
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <table name="t_order_item" start-index="14" stop-index="25" />
-            </table-factor>
-        </table-reference>
         <where start-index="27" stop-index="116" literal-stop-index="121">
             <and-predicate>
                 <predicate start-index="106" stop-index="116" literal-start-index="110" literal-stop-index="121">
@@ -1971,15 +1883,13 @@
     </select>
 
     <select sql-case-id="select_with_json_separator">
+        <from>
+            <simple-table name="tb_content_json" start-index="82" stop-index="98" alias="b" />
+        </from>
         <projections start-index="7" stop-index="75">
             <expression-projection start-index="7" stop-index="41" alias="nation" />
             <expression-projection start-index="43" stop-index="75" alias="title" />
         </projections>
-        <table-reference>
-            <table-factor>
-                <table name="tb_content_json" start-index="82" stop-index="98" alias="b" />
-            </table-factor>
-        </table-reference>
         <where start-index="100" stop-index="119" literal-stop-index="121">
             <and-predicate>
                 <predicate start-index="106" stop-index="119">
@@ -1996,11 +1906,9 @@
     </select>
 
     <select sql-case-id="select_with_convert_function">
-        <table-reference>
-            <table-factor>
-                <table name="t_order" start-index="70" stop-index="76" />
-            </table-factor>
-        </table-reference>
+        <from>
+            <simple-table name="t_order" start-index="70" stop-index="76" />
+        </from>
         <projections start-index="7" stop-index="63">
             <expression-projection alias="signed_content" start-index="7" stop-index="63" />
         </projections>