Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要帮助理解SQL中的连接吗_Sql - Fatal编程技术网

需要帮助理解SQL中的连接吗

需要帮助理解SQL中的连接吗,sql,Sql,在一次采访中,我被问到以下问题。请解释它是如何工作的以及它是什么 Q:有两个表:表emp包含10行,表department包含12行 Select * from emp,department; 结果是什么?它是什么联接?您指定的联接是一个。它将为要联接的表中的每个记录组合生成一行 我会让你从那里算起。我相信这会做一个交叉连接,返回120行。两个表中每一行的每对组合对应一行 总而言之,大多数情况下连接都是毫无用处的。您将从两个表中获得所有行,每一行都连接在一起 这被称为笛卡尔连接,非常糟糕 您

在一次采访中,我被问到以下问题。请解释它是如何工作的以及它是什么

Q:有两个表:表emp包含10行,表department包含12行

 Select * from emp,department;

结果是什么?它是什么联接?

您指定的联接是一个。它将为要联接的表中的每个记录组合生成一行


我会让你从那里算起。

我相信这会做一个交叉连接,返回120行。两个表中每一行的每对组合对应一行


总而言之,大多数情况下连接都是毫无用处的。

您将从两个表中获得所有行,每一行都连接在一起

这被称为笛卡尔连接,非常糟糕


您将得到总共120行。

这也是旧的隐含语法(18年已过时),意外交叉连接是该语法的常见问题。一个人不应该使用它。Explict连接是更好的选择。我也会在采访中提到这一点,并解释原因。如果他们真的使用这种蹩脚的语法,我也不会接受这份工作,因为它非常有用,这表明数据库很可能设计得很糟糕

它将返回两个表的笛卡尔乘积,这意味着
emp
department
的每个组合都将包含在结果中

我相信下一个问题是: 大宗报价

您如何为每位员工展示正确的部门

也就是说,仅显示员工所属部门的
emp
department
组合

这可以通过以下方式实现:

SELECT * FROM emp LEFT JOIN department ON emp.department_id=department.id;
假设
emp
有一个名为
department\u id
的字段,并且
department
有一个匹配的
id
字段(这在此类问题中非常标准)

LEFT JOIN
意味着左侧的所有项目(
emp
)都将包括在内,每个员工都将与相应的部门匹配。如果未找到匹配的部门,则
部门
的结果字段将保持为空。请注意,将返回10行


要仅显示具有有效部门ID的员工,请使用
JOIN
而不是
LEFT JOIN
。此查询将返回0到10行,具体取决于匹配的部门ID的数量。

如果我们通过了面试,我们会得到这份工作吗?这是家庭作业还是面试后的问题?我希望我有更多像这样的面试问题!“那么,如果你有这两张表,你会如何按部门加入员工?”typety-click,click“嗯,我……嗯,呃,让我看看……[显然是读了一堆文字]