SQL Object Name
Contents
SQL Object Name#
This article describes object names in OpenMLDB SQL statements.
Object names are used to name all objects in OpenMLDB, including databases, tables, columns, indexes, functions, deployments, etc. In SQL statements, these objects can be referenced by identifiers.
Identifier#
Identifiers can be enclosed in backticks, i.e. SELECT * FROM t
can also be written as SELECT * FROM
t`. But if there is at least one special symbol in the identifier, or it is a reserved keyword, it must be enclosed in backticks to refer to the schema object it represents.
CREATE TABLE `JOIN` (`select` INT);
Identifiers containing the ` character are not allowed.
CREATE TABLE a`b (a int);
Syntax error: Unclosed identifier literal [at 1:15]
CREATE TABLE a`b (a int);
Qualified Identifier#
Object names in OpenMLDB can be qualified or unqualified identifiers.
Qualified Object Name:#
Qualified object names contain at least one qualifier to describe a specific context.
Qualifiers and object names are separated by
.
. Such asdb_name.tbl_name
.When multiple qualifiers are included, the qualifiers are separated from the qualifiers by the
.
symbol. Such asdb_name.tbl_name.col_name
.Spaces can appear at the left and right ends of
.
, andtbl_name.col_name
is equal totbl_name .col_name
.
For example, it is known that there are two databases in the system, db0
and db1
. There is table t1 in db1
. When we use USE db0
to set the default database of the system to db0
. When using the qualified identifier db1.t1
to represent a table, the context in which the table t1
is located is the database db1
.
USE db0;
SELECT * FROM db1.t1;
Unqualified Object Name:#
Unqualified object names do not contain any qualifier modifications, only the object identifier itself
An unqualified use of an identifier, to represent an object, is acceptable if it is not confusing to use the identifier directly in that specific context. For example, we use USE db1
to set the system’s default database to db1
. In this case, the unqualified object name t1
can be used directly to represent the table t1
in the default database db0
USE db1;
SELECT * from t1;