SELECT查询的FROM子句中表名后的随机字符

Clo*_*ail 2 postgresql

我对 SQL 和数据库管理比较陌生。我正在维护/修改一个与 Postgresql 交互的 PHP 应用程序,并且遇到了以下语句:

SELECT * FROM client_messages c;
Run Code Online (Sandbox Code Playgroud)

我不明白最后一个“c”字符的含义。事实上,似乎可以在 SELECT 的 FROM 子句中的表名后添加随机字符,而不会影响查询结果。尝试使用“psql”实用程序,我发现这三个查询都产生相同的结果,没有任何错误:

SELECT * FROM cltk2980dat c LIMIT 5;
SELECT * FROM cltk2980dat LIMIT 5;
SELECT * FROM cltk2980dat kdopwijfdwlhoeufhnekfhyufhf LIMIT 5;
Run Code Online (Sandbox Code Playgroud)

然而,我正在维护的程序的作者似乎真的想要 SELECT 查询中的最后一个 'c' 字符。我在 SQL 语法手册中找不到对此的任何解释,尽管我可以找到对修改 SELECT 的 FROM 子句的许多其他方法的解释。

最后一个角色有什么意义吗?在某些情况下,FROM 表名之后的明显随机字符是否有任何意义?

Len*_*art 5

正如@dezso 指出的那样,它是一个表别名。您还可以使用aswhich 使其更易于理解:

SELECT * FROM client_messages as c
Run Code Online (Sandbox Code Playgroud)

为什么要使用别名?这样可以更容易地参考表格。假设以下查询:

SELECT * 
FROM client_messages
JOIN client_address
    ON client_messages.client_id = client_address.client_id
Run Code Online (Sandbox Code Playgroud)

使用表别名:

SELECT * 
FROM client_messages as cm
JOIN client_address as ca
    ON cm.client_id = ca.client_id
Run Code Online (Sandbox Code Playgroud)

所以它有点短,这很好。使用自联接时,必须使用别名:

SELECT * 
FROM client_messages as cm1
JOIN client_messages as cm2
    ON cm1.x = cm2.y
WHERE cm1.... = ...
Run Code Online (Sandbox Code Playgroud)

否则无法确定所指的两个表中的哪一个。

作为旁注,避免使用SELECT *非临时查询。