select * from table1 table2 where column_from_table1 = ?;
table2
作为 table1
的表别名使用,它根本没有被用作数据库中对象的名称。表名为 table2
的存在与此查询完全无关。通常你会看到类似这样的语句:
select t.id, t.name from table1 t where t.column_from_table1 = ?;
一些关系型数据库需要使用关键字as
,因此您也会看到这样的写法:
SELECT t.id, t.name FROM table1 AS t WHERE t.column_from_table1 = ?;
表别名对于编写涉及多个表的查询非常有用,特别是当它们具有需要限定的共享列名时。它们也对自连接至关重要,其中一个表连接到自身。
使用别名进行连接的示例:
SELECT t1.Id,
t1.Name as t1_Name
t2.Name as t2_Name
FROM table1 t1
JOIN table2 t2
ON t1.id = t2.id
WHERE t1.column_from_table1 = ?;
例如,为了查找重复的Name
值进行自连接:
SELECT t1.Name,
t1.Id
t2.Id as Dupe_Id
FROM table1 t1
JOIN table1 t2
ON t1.Name = t2.Name
WHERE t1.Id < t2.Id;
请注意,此查询两次引用了
table1
,并使用别名
t1
和
t2
来区分它所指的是哪个。
请注意,逗号连接(如
FROM table1, table2 WHERE table1.id = table2.id
)是非常老旧的语法,写查询时应明确避免使用。这种较老的语法难以阅读和维护,并且不支持外部连接,除非通过特定于供应商的扩展。新的语法使用
JOIN
关键字,在1992年的标准SQL中引入。没有理由仍然使用逗号连接。