为什么这 2 个查询 return 来自 Oracle hr 数据库的不同结果?

Why do these 2 queries return different results from the Oracle hr database?

select J.job_title,
       D.department_name,
       E.first_name || ' ' || E.last_name as "Employee Name",
       H.start_date
from   job_history H
       join jobs J
       on H.job_id = J.job_id
       join departments D
       on H.department_id = D.department_id
       join employees E
       on H.department_id = E.department_id
where  H.start_date between '01-Jan-93' and '03-Aug-97';

第二次查询

SELECT job_title,
       department_name,
       first_name || ' ' || last_name AS Employee_name,
       start_date 
FROM   job_history
       JOIN jobs USING (job_id) 
       JOIN departments USING (department_id) 
       JOIN  employees USING (employee_id) 
WHERE  start_date between '01-jan-93' AND '08-aug-97';

您会得到不同的答案(第一个查询中有更多行,这很可能是错误的查询)因为在第一个查询中您将最后一个 table、employees 加入到第一个 table、job_history,在 department_id 列。 (在第二个查询中,您通过 employee_id 加入,这可能是正确的方式。)

这样,对于 job_history 中匹配的每一行和 employees table department_id 列中的员工 您将在连接输出中获得一行 - 即使该员工与员工 ID 不匹配 job_history 行。 Executive 部门的所有 名员工将出现在输出中。

请注意,您的 where 条款不相同(一个期间在 8 月 3 日结束,另一个在 8 月 8 日结束),但不是不同的原因输出。 (虽然它可能在不同的数据上。)

另外,他们应该教你不要在日期比较中使用字符串;但这与你的问题无关。