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

Mysql 在这个SQL语句中,“l”和“p”是什么意思?,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,下面的语句从多个表中过滤出一个结果。我不太理解表名后面的p和另一个表名后面的l。它们是通用的还是有目的的 从tablename p中选择id、title、l.id、username,在l.id=p.id上加入另一个tablename l,其中p.id='15'限制1这些称为别名 它只是一个缩写,而不是总是使用完整的表名 想象一下,如果您有两个名为Products\u Orders\u items和Customers\u Orders\u items的表(如果两者都有列id),那么在一个联接中,您

下面的语句从多个表中过滤出一个结果。我不太理解表名后面的p和另一个表名后面的l。它们是通用的还是有目的的

从tablename p中选择id、title、l.id、username,在l.id=p.id上加入另一个tablename l,其中p.id='15'限制1

这些称为别名

它只是一个缩写,而不是总是使用完整的表名

想象一下,如果您有两个名为Products\u Orders\u items和Customers\u Orders\u items的表(如果两者都有列id),那么在一个联接中,您将编写:

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';
使用alias,您可以更轻松地阅读:

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
如果您在此处不使用别名,查询将给您一个错误。

这些称为别名

它只是一个缩写,而不是总是使用完整的表名

想象一下,如果您有两个名为Products\u Orders\u items和Customers\u Orders\u items的表(如果两者都有列id),那么在一个联接中,您将编写:

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';
使用alias,您可以更轻松地阅读:

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
如果您在此处不使用别名,查询将给您一个错误。

此语法

FROM 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
)
上面的查询查找包含背包的所有订单。请注意,Item和OrderItem表需要分别包含两次,因此它们有多个别名

以下是具有自联接的查询示例:

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的歧义。

此语法

FROM 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
)
上面的查询查找包含背包的所有订单。请注意,Item和OrderItem表需要分别包含两次,因此它们有多个别名

以下是具有自联接的查询示例:

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的歧义。

我的投票应该将您的声誉提高到5位数。你欠我一杯啤酒。嗯。谢谢你的推送:谢谢!这两个都是很好的答案,但你是第一个来到这里的,很酷能把你推到5位数10000+分的位置。。。有人击败了我…我的投票应该会让你的声誉达到5位数。你欠我一杯啤酒。嗯。谢谢你的推送:谢谢!这两个都是很好的答案,但你是第一个来到这里的,很酷能把你推到5位数10000+分的位置。。。有人打败了我。。。