SELECT *
FROM table1,
table2;
我想知道它会给出什么输出?它也被称为JOINS?
答案 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另一边没有任何匹配的行,也会返回连接的一边