sql前向引用语法

时间:2014-04-11 15:56:42

标签: mysql sql sql-server syntax

我是SQL新手,所以我不知道术语,我正在说话,但我不知道在哪里寻找这种语法 -

select name = p.e_full_Name from db..port p, db..port_x il where p.port_id = il.port_id and p.port_id = "blah"

根据我的推断,name将成为p.e_full_name列的名称,pil是from语句中定义的变量({{1} }是p表,db..portil表)。它是否正确?这个语法叫什么,我在哪里可以读到它?

3 个答案:

答案 0 :(得分:1)

这是两个表之间JOIN操作的旧语法。

p和il是各个表的别名。

像你这样的查询的推荐语法是

选择col 从table1 t1开始 加入表t2 在t1.column = t2.column

对已完成连接的列使用索引以提高性能

答案 1 :(得分:1)

SELECT columns
FROM <table> <alias>
JOIN <anotherTable> <differentAlias>
ON alias.column = differentAlias.column
WHERE alias.column = 'Blah'

在您的示例中,p和il作为表的别名,以便再次保存键入表名。 p.port_id = il.port_id是一个连接条件(应该是ON子句的一部分)

select name = p.e_full_Name 
from db..port p, db..port_x il 
where p.port_id = il.port_id and p.port_id = "blah"

搜索JOIN,你会找到例子。将代码调整为第一个示例,您的示例是不再使用的旧样式JOIN

答案 2 :(得分:1)

问:这是正确的吗?

A:基本上,是的。

但是关于

中对 name 的引用
 SELECT name = expr ...

分配给表达式的别名。从查询返回的结果集将包含指定的别名作为列名。

该语法是SQL Server中的非标准扩展(Oracle或MySQL不支持)。它等同于ANSI标准:

SELECT expr AS name ...

对于查询中的 p il ,这些并非真正的变量。其中每个都是分配给表的* 别名 *,而不是在SELECT列表中表达。对查询中其他位置的表别名的引用是对表的引用。对于一个简单的表,不需要别名。在更一般的情况下,我们需要为某些行源(在查询中多次引用的表和内联视图)分配别名。因此,为简单表格分配别名是我们熟悉的,熟悉的,它的模式。

问:这个语法叫什么,我在哪里可以读到它?

表和列别名都是ANSI SQL标准的一部分。

http://en.wikipedia.org/wiki/Alias_(SQL)