MySql" FROM"子句使用多个表名?

时间:2014-10-20 12:10:25

标签: mysql lamp

以下两个查询之间有什么区别: -

  1. 查询1: SELECT ord。* FROM orders ord,order_hotels oh(return empty)
  2. 查询2: SELECT ord。* FROM orders ord(返回所有记录)
  3. 因此,通过在" FROM"中指定多个表名称子句(查询1)甚至,我不使用其他表会影响查询结果吗?怎么样?

    由于

1 个答案:

答案 0 :(得分:3)

使用空结果集的查询是这样的,为了便于阅读而详细说明

SELECT ord.* 
  FROM orders AS ord, order_hotels  AS oh

这是旧的以逗号分隔的表格列表,此查询的语法

     SELECT ord.* 
       FROM orders AS ord
 INNER JOIN order_hotels  AS oh   

此查询INNER JOIN没有任何ON子句,会为ordersorder_hotels中的每个可能的行配对返回一行。您已声明order_hotels不包含任何行。因此,此查询将尽职尽责地返回每个可能的配对,即没有行。

如果您在填充order_hotels表之前尝试使用这两个表做一些有趣的事情,您可以尝试这样的事情:

     SELECT ord.*, oh.hotel_name
       FROM orders AS ord
  LEFT JOIN order_hotels  AS oh  ON ord.hotel_id = oh.hotel_id

(我猜测列名,我可能猜错了。)这个LEFT JOIN返回一个结果集,显示ordersorder_hotels中匹配行的所有行。 ON子句指定行匹配的含义。