我在codewars上训练SQL。还有一个任务,需要使用join
答案之一是:
SELECT companies.*, products.*, companies.name AS company_name
FROM companies
inner join products ON companies.id=products.company_id;
我认为,我们采取公司,然后产品(他们的列),并获得数据库,但我尝试了这段代码:
SELECT products.*, companies.name AS company_name
from products
inner join companies on company_id=companies.id;
得到了同样的结果。JOIN
如何工作?在FROM
后面输入什么很重要吗?SELECT
中的顺序重要吗?
1条答案
按热度按时间qij5mzcb1#
内部连接操作是 * 可交换的 *,就像算术中的
+
或*
。连接像A JOIN B
这样的表会得到与B JOIN A
相同的结果。像PostgreSQL这样的数据库软件可能会选择以不同于您在查询中指定的顺序来连接表。PostgreSQL包含一个聪明的查询优化器,它解释您的SQL查询,并以它认为最有效的方式执行它。
SQL的优点之一在于它或多或少是声明性的,所以你可以将查询作为你想要的结果的抽象描述来编写,而不是它应该执行的方式。这也有例外没有一种编程语言是其背后理论的完美实现但这是一般原则。
有关PostgreSQL如何处理此问题的详细信息,请阅读https://www.postgresql.org/docs/current/explicit-joins.html