Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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,餐桌部 表雇员 有一个运营部门没有任何员工。因此,我相信查询也会检索到该行(图1): 部门ID=10,部门名称=Operations,员工=0 为什么没有发生 SELECT EMPLOYEE.Department_ID, DEPARTMENT.Department_Name, Count(*) AS Employees FROM EMPLOYEE right JOIN DEPARTMENT ON DEPARTMENT.Department_ID = EMPLOYEE.Department

餐桌部

表雇员

有一个运营部门没有任何员工。因此,我相信查询也会检索到该行(图1):

部门ID=10,部门名称=Operations,员工=0

为什么没有发生

 SELECT EMPLOYEE.Department_ID, DEPARTMENT.Department_Name, Count(*) AS Employees 
FROM EMPLOYEE right JOIN DEPARTMENT ON DEPARTMENT.Department_ID = EMPLOYEE.Department_ID
GROUP BY DEPARTMENT.Department_Name,.EMPLOYEE.Department_ID

默认的
联接
是一个
内部联接
,它只返回两边至少有一行的行。将
join
替换为
left join
,以检索没有员工的部门

示例代码:

SELECT  e.Department_ID
,       d.Department_Name
,       count(e.Employee_ID) AS Employees 
FROM    Department d
LEFT JOIN
        Employee e
ON      d.Department_ID = e.Department_ID
GROUP BY 
        d.Department_ID
,       d.Department_Name

默认的
联接
是一个
内部联接
,它只返回两边至少有一行的行。将
join
替换为
left join
,以检索没有员工的部门

示例代码:

SELECT  e.Department_ID
,       d.Department_Name
,       count(e.Employee_ID) AS Employees 
FROM    Department d
LEFT JOIN
        Employee e
ON      d.Department_ID = e.Department_ID
GROUP BY 
        d.Department_ID
,       d.Department_Name

由于您关心的查询的主要数据来自部门表,您可能需要考虑重写查询为:

SELECT DEPARTMENT.Department_ID, DEPARTMENT.Department_Name, Count(EMPLOYEE.Employee_ID) As Employees 
FROM DEPARTMENT 
LEFT JOIN EMPLOYEE ON EMPLOYEE.Department_ID = DEPARTMENT.Department_ID 
GROUP BY DEPARTMENT.Department_ID, DEPARTMENT.Department_Name

由于您关心的查询的主要数据来自部门表,您可能需要考虑重写查询为:

SELECT DEPARTMENT.Department_ID, DEPARTMENT.Department_Name, Count(EMPLOYEE.Employee_ID) As Employees 
FROM DEPARTMENT 
LEFT JOIN EMPLOYEE ON EMPLOYEE.Department_ID = DEPARTMENT.Department_ID 
GROUP BY DEPARTMENT.Department_ID, DEPARTMENT.Department_Name

这应该能奏效。如果您首先有
EMPLOYEE
表,您可以加入
右联接
,但这不好的原因是,很快您的查询将开始混合使用
左联接和
右联接,这变得很难阅读,即使是经验丰富的SQL专业人员。通过坚持使用
LEFT JOIN
,可以保持查询的可维护性和可理解性。(在非常罕见的情况下,
RIGHT JOIN
可能会简化具有复杂优先顺序的查询,但为了避免在连接组周围添加括号,我只做了两次)


此外,我建议您对表使用别名,而不是完整的表名。当一致使用别名时,查询变得更容易扫描和理解。拼写整个表名常常会掩盖查询的其他部分。

这应该可以解决问题。如果您首先有
EMPLOYEE
表,您可以加入
右联接
,但这不好的原因是,很快您的查询将开始混合使用
左联接和
右联接,这变得很难阅读,即使是经验丰富的SQL专业人员。通过坚持使用
LEFT JOIN
,可以保持查询的可维护性和可理解性。(在非常罕见的情况下,
RIGHT JOIN
可能会简化具有复杂优先顺序的查询,但为了避免在连接组周围添加括号,我只做了两次)


此外,我建议您对表使用别名,而不是完整的表名。当一致使用别名时,查询变得更容易扫描和理解。拼写整个表名常常会模糊查询的其他部分。

我替换了它,但得到了相同的输出。我看到
部门
是右边的表。尝试
右连接
而不是
左连接
?我尝试过,但结果是部门ID=null,部门名称=Operations,员工=1(这是不可能的),这是因为您从员工记录中检索部门ID。一个简单的解决方法是将
选择员工.department\u id,…
更改为
选择部门.department\u id,…
我替换了它,但得到了相同的输出,我看到
部门
是右边的表格。尝试
右连接
而不是
左连接
?我尝试过,但结果是部门ID=null,部门名称=Operations,员工=1(这是不可能的),这是因为您从员工记录中检索部门ID。一个简单的解决方法是将
选择employee.department\u id,…
更改为
选择department.department\u id,…
我尝试过,但结果是department\u id=null,department\u Name=Operations,employee=1(这是不可能发生的)对-这就是本例的结果。我重新编写了您的查询,以查找我认为您正在查找的内容。我尝试过,但结果是Department_ID=null,Department_Name=Operations,Employee=1(这不可能发生),对-这就是本例的结果。我重写了你的问题,我相信你在寻找什么。