我在一次采访中被问到以下 SQL 问题。请解释它是如何工作的以及它是什么。
问:有两个表:emp 表有 10 行,department 表有 12 行。
Select * from emp,department;
结果是什么,它是什么连接?
最佳答案
它将返回两个表的笛卡尔积,这意味着 emp
的每个组合和 department
将包含在结果中。
我相信下一个问题是:
块引用
How do you show the correct department for each employee?
即只显示emp
的组合和department
员工所在的部门。
这可以通过以下方式完成:SELECT * FROM emp LEFT JOIN department ON emp.department_id=department.id;
假设emp
有一个字段叫department_id
, 和department
有一个匹配的id
领域(这在这些类型的问题中是非常标准的)。LEFT JOIN
表示将包含左侧(emp
)的所有项目,并将每个员工与相应的部门进行匹配。如果未找到匹配的部门,则来自departments
的结果字段将保持为空。请注意 正好将返回 10 行。
要仅显示具有有效部门 ID 的员工,请使用JOIN
而不是LEFT JOIN
.此查询将返回 0 到 10 行,具体取决于匹配部门 ID 的数量。
关于sql - 需要帮助理解 SQL 中的 JOINS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3547809/