sql - 需要帮助理解 SQL 中的 JOINS

标签 sql

我在一次采访中被问到以下 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/

相关文章:

c# - 如何在 SQL Server 中包含一个可选的空参数

php - 如何从 MYSQL 中的 COUNT(*) ORDER BY 语句打印数组的内容

sql - 查询在SQL Server 2008中返回多个错误

PHP |如果存在任何具有相同ID的记录,Mysql如何停止插入

c# - 如何在 C# 中使用 MySqlDataAdapter 中的 SELECT 查询从表 A 中获取行并从表 B 中获取行数?数据网格WPF

sql - += 在 SELECT 子句中;常数与列

php - MySql 如何计算已经使用 SELECT 获取的结果?

sql - 从 PostgreSQL 中的两列中选择第一个非空单元格

sql - 删除具有自引用外键的行

sql - T-SQL-连接变量行数