这个SQL语句中的“l”和“p”是什么意思?

3
我有以下语句,可以从多个表中过滤出一个结果。 我不太理解 tablename 后面的 panothertablename 后面的 l。 它们是通用还是有目的? SELECT id, title, l.id, username FROM tablename p JOIN anothertablename l ON (l.id = p.id) WHERE p.id='15' LIMIT 1 这句话是用来从多个表中筛选出结果的。其中 pl 只是为了给表起别名,使查询更容易阅读。
2个回答

9

这些被称为别名。

它们只是替代完整表名的缩写。

想象一下,如果你有两个表叫做Products_Orders_itemsCustomers_orders_items,并且两个表都有id列,在JOIN中你需要这样写:

SELECT * 
FROM Products_Orders_items
INNER JOIN Customers_orders_items 
    ON Customers_orders_items.id = Products_Orders_items.id
WHERE Customers_orders_items.otherField = 'bla';

通过使用别名,您可以使阅读更加简便:

SELECT * 
FROM Products_Orders_items a
INNER JOIN Customers_orders_items b ON a.id = b.id
WHERE b.otherField = 'bla';

有些情况下必须使用“like”,比如在使用派生表时,例如:

SELECT * 
FROM (
    SELECT * 
    FROM Products_Orders_items a
    INNER JOIN Customers_orders_items b ON a.id = b.id
    WHERE b.otherField = 'bla'
) a

如果你在这里不使用别名,查询将会给出错误。


1
我的投票应该让你的声望达到5位数。你欠我一瓶啤酒。 - Dan Bracuk
@DanBracuk。嘿嘿,感谢你的推动 :) - Filipe Silva
谢谢!两个回答都很棒,但是你先到了这里并且成为第一个突破1万点的人真的很酷。不过,有人比我更快地实现了这一目标... - codacopia

4

这种语法

FROM tablename p

或者

JOIN tablename p

为表名创建一个别名。在大多数情况下,这只是一种缩短语句的方式,因为您可以使用一个较短的名称代替完整的表名。

然而,在某些情况下,需要使用别名:当您需要在同一查询中多次引用同一张表时,必须创建一个别名以消除歧义。

需要使用别名的具体示例包括对同一张表的子查询和自连接。

以下是带有子查询的查询示例:

SELECT
FROM Orders o
JOIN OrderItem oi on o.ID=oi.OrderID
JOIN Item i on i.ID=oi.ItemID
WHERE EXISTS (
    SELECT *
    FROM OrderItem oi2
    JOIN Item i2 ON i2.ID=oi2.ItemId
    WHERE i2.Description='BACKPACK'
      AND oi2.OrderID=o.ID
)

以上查询找到了所有包含背包的订单。请注意,需要两次引用ItemOrderItem表,因此它们具有多个别名。

以下是自连接查询的示例:

SELECT
    e.Name as EmployeeName
,   m.Name as ManagerName
FROM EMPLOYEE e
OUTER JOIN EMPLOYEE m ON m.ID=e.ManagerID
ORDER BY m.Name, e.Name

上面的查询中,同一张表EMPLOYEE被引用了两次,因为它扮演了员工和经理两种不同角色。给这张表取两个别名可以让我们明确联接条件m.ID=e.ManagerID


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接