sql查询的奇怪条件

njthzxwz  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(266)

在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 .

snz8szmq

snz8szmq1#

您的薪资比较是针对一个结果集进行的,您需要将其与一个数字(另一个薪资)进行比较。这就是为什么答案使用连接。联接将“添加”符合条件的s雇员的列

E.salary < S.salary AND S.employee_id = 182

也就是说,1个id为182的员工s与所有薪资<182的员工e相比
然后带有e.x…的投影将只显示e列,而不是雇员的数据。

tgabmvqs

tgabmvqs2#

首先,您的解决方案很好,但您应该学会限定列引用:

SELECT e.first_name, e.last_name, e.salary 
FROM employees e 
WHERE e.salary < (SELECT e182.salary FROM employees e182 WHERE e182. employee_id = 182);

至于你的问题,你明白这是在做什么吗?

SELECT E.first_name, E.last_name, E.salary 
FROM employees E JOIN
     (SELECT S.*
      FROM employees S
      WHERE S.employee_id = 182
     ) S
     ON E.salary < S.salary ;

子查询正在为选择所有列 S --包括薪水。然后,外部查询有一个非equijoin条件来获取所有 E 工资少的人。
问题中的查询正在执行相同的操作,但没有子查询。所有列都可用,而不仅仅是用于筛选条件的列。

相关问题