正确的表别名的SQL语法?

时间:2016-08-03 17:47:33

标签: mysql sql mariadb

这两个SQL语句是否相同?

Statement 1: SELECT * FROM table1 AS t1 WHERE 1  
Statement 2: SELECT * FROM table1 t1 WHERE 1

MySQL / MariaDB和SQL标准中的第二个语句是否正确?

3 个答案:

答案 0 :(得分:2)

这在SQL-99标准中有所介绍:https://mariadb.com/kb/en/sql-99/select-statement/

相关名称是人们通常称之为"表别名的正确术语。"

<Table reference> ::=
[ ONLY ]{<Table name> | <query name>} [ [ AS ] <Correlation name> [ (<derived Column list>) ] ] |
<Table subquery> [ AS ] <Correlation name> [ (<derived Column list>) ] |
<joined Table> |
LATERAL (<query expression>) [ AS ] <Correlation name> [ (<derived Column list>) ]

请注意,关键字AS在其自己的方括号内,表示它是可选的,即使您为表或子查询声明了相关名称。

这是SELECT的MySQL手册:

  

表格参考可以使用tbl_name AS alias_nametbl_name alias_name ...

进行别名

奇怪的琐事:由于某些原因我不知道Oracle不允许AS关键字用于相关名称。去图。

这也适用于用于列别名的AS

  

您可以使用可选的AS name子句为Column表达式指定名称;它将用于标识整个SELECT语句的结果。选择列表所需的语法如下。

好的,AS关键字是可选的并不完全清楚。但语法参考显示以下内容:

SELECT [ ALL | DISTINCT ] Column list

Column list ::=
   expression [ [ AS ] <Column name> ] [ , ... ] |
   *

再次,在SELECT的MySQL手册中:

  

使用标识符对AS进行别名化时,select_expr关键字是可选的。

还有一些其他情况,SQL关键字是可选的。例如,LEFT JOINLEFT OUTER JOIN是相同的操作。

这是你用委员会设计的语言得到的。

答案 1 :(得分:-1)

是的,第二个陈述是正确的! 我已经在我的测试中进行了测试。但是,你应该使用第一个声明!

答案 2 :(得分:-2)

是的,他们的意思相同。两者都是正确的。