从多个表访问数据 - SQL

时间:2016-04-10 00:00:25

标签: mysql sql

是否必须连接表以从中提取数据?

2 个答案:

答案 0 :(得分:0)

不一定,还有像Union这样的其他选项:

SELECT customerNumber id, contactLastname name
FROM customers
UNION
SELECT employeeNumber id,firstname name
FROM employees 

以上示例来自this. 还有一些时候,您可以运行多个查询等,以便在没有连接的情况下从多个源获取数据。这一切都取决于你想做什么。但是,加入是一种非常常见的 - 也许是最常见的 - 方法。

答案 1 :(得分:0)

我相信你的意思是在一个查询中。我可以想到两种方法在单个查询中为多个表提取数据而不“加入”它们:

拳头与联盟

SELECT A, B, C FROM Table1
UNION
SELECT X, Y, Z FROM Table2

你也可以做一个看起来不像连接的“交叉连接”(可能就是你想到的)

SELECT Table1.A, Table1.B, Table1.C, Table2.X, Table2,Y, Table2,Z
FROM Table1, Table2

从语法中可以看出,从一个表到另一个表没有关系。这意味着 table1中的每一行都将与table2中的每一行组合!

根据我的经验,这是SQL新手所做的最常见的错误。当他们表示连接时,他们进行交叉连接,然后他们进行GROUP BY或DISTINCT以获得他们想要的结果。这非常低效!

但是,交叉连接可能很好,尤其是当其中一个表只有一行时 - 然后您将这些值添加到其他表中的每一行。您基本上是为每一行的列选择一组值。

如果您希望每一行都有最大日期(这通常在报告中完成)

 SELECT * 
 FROM Table1, (SELECT MAX(updatedate) as Max_Update FROM Table1) AS MaxDate