Object names may be unqualified or qualified. An unqualified name is permitted in contexts where interpretation of the name is unambiguous. A qualified name includes at least one qualifier to clarify the interpretive context by overriding a default context or providing missing context.
For example, this statement creates a table using the
unqualified name t1
:
CREATE TABLE t1 (i INT);
Because t1
includes no qualifier to specify a
database, the statement creates the table in the default
database. If there is no default database, an error occurs.
This statement creates a table using the qualified name
db1.t1
:
CREATE TABLE db1.t1 (i INT);
Because db1.t1
includes a database qualifier
db1
, the statement creates
t1
in the database named
db1
, regardless of the default database. The
qualifier must be specified if there is no
default database. The qualifier may be
specified if there is a default database, to specify a database
different from the default, or to make the database explicit if
the default is the same as the one specified.
Qualifiers have these characteristics:
An unqualified name consists of a single identifier. A qualified name consists of multiple identifiers.
The components of a multiple-part name must be separated by period (
.
) characters. The initial parts of a multiple-part name act as qualifiers that affect the context within which to interpret the final identifier.The qualifier character is a separate token and need not be contiguous with the associated identifiers. For example,
tbl_name.col_name
andtbl_name . col_name
are equivalent.If any components of a multiple-part name require quoting, quote them individually rather than quoting the name as a whole. For example, write
`my-table`.`my-column`
, not`my-table.my-column`
.A reserved word that follows a period in a qualified name must be an identifier, so in that context it need not be quoted.
The permitted qualifiers for object names depend on the object type:
A database name is fully qualified and takes no qualifier:
CREATE DATABASE db1;
A table, view, or stored program name may be given a database-name qualifier. Examples of unqualified and qualified names in
CREATE
statements:CREATE TABLE mytable ...; CREATE VIEW myview ...; CREATE PROCEDURE myproc ...; CREATE FUNCTION myfunc ...; CREATE EVENT myevent ...; CREATE TABLE mydb.mytable ...; CREATE VIEW mydb.myview ...; CREATE PROCEDURE mydb.myproc ...; CREATE FUNCTION mydb.myfunc ...; CREATE EVENT mydb.myevent ...;
A trigger is associated with a table, so any qualifier applies to the table name:
CREATE TRIGGER mytrigger ... ON mytable ...; CREATE TRIGGER mytrigger ... ON mydb.mytable ...;
A column name may be given multiple qualifiers to indicate context in statements that reference it, as shown in the following table.
Column Reference Meaning col_name
Column col_name
from whichever table used in the statement contains a column of that nametbl_name.col_name
Column col_name
from tabletbl_name
of the default databasedb_name.tbl_name.col_name
Column col_name
from tabletbl_name
of the databasedb_name
In other words, a column name may be given a table-name qualifier, which itself may be given a database-name qualifier. Examples of unqualified and qualified column references in
SELECT
statements:SELECT c1 FROM mytable WHERE c2 > 100; SELECT mytable.c1 FROM mytable WHERE mytable.c2 > 100; SELECT mydb.mytable.c1 FROM mydb.mytable WHERE mydb.mytable.c2 > 100;
You need not specify a qualifier for an object reference in a
statement unless the unqualified reference is ambiguous. Suppose
that column c1
occurs only in table
t1
, c2
only in
t2
, and c
in both
t1
and t2
. Any unqualified
reference to c
is ambiguous in a statement
that refers to both tables and must be qualified as
t1.c
or t2.c
to indicate
which table you mean:
SELECT c1, c2, t1.c FROM t1 INNER JOIN t2
WHERE t2.c > 100;
Similarly, to retrieve from a table t
in
database db1
and from a table
t
in database db2
in the
same statement, you must qualify the table references: For
references to columns in those tables, qualifiers are required
only for column names that appear in both tables. Suppose that
column c1
occurs only in table
db1.t
, c2
only in
db2.t
, and c
in both
db1.t
and db2.t
. In this
case, c
is ambiguous and must be qualified
but c1
and c2
need not be:
SELECT c1, c2, db1.t.c FROM db1.t INNER JOIN db2.t
WHERE db2.t.c > 100;
Table aliases enable qualified column references to be written more simply:
SELECT c1, c2, t1.c FROM db1.t AS t1 INNER JOIN db2.t AS t2
WHERE t2.c > 100;