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';
2nd query
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';
CodePudding user response:
You get different answers (more rows from the first query, which is very likely the wrong query) because in the first query you join the last table, employees
, to the first table, job_history
, on the department_id
column. (In the second query you join by employee_id
, which is probably the correct way.)
This way, for every row in job_history
that matches and employee in the employees
table on the department_id
column you will get a row in the join output - even if the employee doesn't match that job_history
row by employee id. All employees in the Executive
department will appear in the output.
Note that your where
clause is not the same (one period ends 3 August, the other 8 August), but that is not the reason for the different output. (It might be on different data though.)
Also, they should teach you not to use strings in date comparisons; but this is unrelated to your question.