表1和表2的组合是什么

时间:2013-10-19 18:22:04

标签: sql join

SELECT *
FROM   table1,
       table2; 

我想知道它会给出什么输出?它也被称为JOINS?

2 个答案:

答案 0 :(得分:2)

这是一个CARTESIAN JOIN。它将table1中的每一行与table2中的每一行组合在一起。

这几乎总是写入查询时出错的结果。加入不相关的数据是极其罕见的操作。

答案 1 :(得分:2)

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

我们假设我们有一个department表和一个employees表,员工可以存储他们所属部门的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另一边没有任何匹配的行,也会返回连接的一边