SELECT *
FROM table1,
table2;
我想知道它会给出什么输出?也叫JOINS吗?
这称为笛卡尔连接。它将 table1 中的每一行与 table2 中的每一行结合起来。
它几乎总是由编写查询时出错造成的。加入不相关的数据是一种极其罕见的操作。
这将为您提供表 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 的另一侧没有任何匹配的行,也会返回连接的一侧