0
SELECT *
FROM   table1,
       table2; 

我想知道它会给出什么输出?也叫JOINS吗?

4

2 回答 2

2

这称为笛卡尔连接。它将 table1 中的每一行与 table2 中的每一行结合起来。

它几乎总是由编写查询时出错造成的。加入不相关的数据是一种极其罕见的操作。

于 2013-10-19T18:30:36.370 回答
2

这将为您提供表 1 中一行的列和表 2 中的列的每种组合。

假设我们有一个部门表和一个员工表,员工可以存储他们所属部门的 ID。

EMPLOYEES
ID  FORENAME    SURNAME DEPARTMENT_ID
1   A           X       1
2   B           Y       1
3   C           Z       2

DEPARTMENTS
ID  NAME
1   Department 1
2   Department 2

如果我们运行您的查询,它会做一个笛卡尔:

ID  NAME         FORENAME   SURNAME DEPARTMENT_ID
1   Department 1 A          X       1
1   Department 1 B          Y       1
1   Department 1 C          Z       2
2   Department 2 A          X       1
2   Department 2 B          Y       1
2   Department 2 C          Z       2

对于每个部门行,我们都会与每个员工一起获得产品。我们得到 3x2 行。

如果我们将查询更改为根据条件“加入”表,在这种情况下,department_id 存储在员工身上:

SELECT *
FROM departments d
JOIN employees e ON d.id = e.department_id

ID  NAME         FORENAME   SURNAME DEPARTMENT_ID
1   Department 1 A          X       1
1   Department 1 B          Y       1
2   Department 2 C          Z       2

我们现在有 3 行,这可能是我们想要的。对于部门 1,我们得到部门 1 列和匹配/加入部门的 2 名员工的列。然后我们获取部门 2 的列和可以加入的员工行中的列。

如果一个部门没有匹配的员工,则该部门根本不会出现。这是使用 OUTER JOIN 的地方,即使在 JOIN 的另一侧没有任何匹配的行,也会返回连接的一侧

于 2013-10-20T16:56:53.090 回答