在sql中编写一个查询,以显示那些收入低于编号为182的员工的姓名和薪水。
表列:
EMPLOYEE_ID | FIRST_NAME | LAST_NAME | EMAIL | PHONE_NUMBER| HIRE_DATE | JOB_ID | SALARY
我的解决方案是:
SELECT first_name, last_name, salary
FROM employees
WHERE salary < (SELECT salary FROM employees WHERE employee_id = 182)
答案是:
SELECT E.first_name, E.last_name, E.salary
FROM employees E
JOIN employees S ON E.salary < S.salary AND S.employee_id = 182;
我不确定答案中的查询是如何工作的以及为什么工作的,因为有许多 S.salary
,我们如何指定 employee_id = 182
我们想找到的。还有,条件 S.employee_id = 182
不是告诉我们薪水,只是提供 employee_id
.
2条答案
按热度按时间snz8szmq1#
您的薪资比较是针对一个结果集进行的,您需要将其与一个数字(另一个薪资)进行比较。这就是为什么答案使用连接。联接将“添加”符合条件的s雇员的列
也就是说,1个id为182的员工s与所有薪资<182的员工e相比
然后带有e.x…的投影将只显示e列,而不是雇员的数据。
tgabmvqs2#
首先,您的解决方案很好,但您应该学会限定列引用:
至于你的问题,你明白这是在做什么吗?
子查询正在为选择所有列
S
--包括薪水。然后,外部查询有一个非equijoin条件来获取所有E
工资少的人。问题中的查询正在执行相同的操作,但没有子查询。所有列都可用,而不仅仅是用于筛选条件的列。